このところ Jumper 製の格安 PC、Ezpad 6 Pro のタッチスクリーンを Linux 上で使えるようにするため、あれこれと試行錯誤を続けています。インターネット上で情報検索を続けたところ、xinput_calibrator に代わる xcalibrate という Python のソフトウェアを見つけました。
このソフトウェアでタッチパネルをキャリブレーションしたところ、うまい具合に動作するようになったので、その顛末を纏めました。
使用した OS は下記の通りです。
Fedora 33 (Workstation Edition) | x86_64 |
この手の調査は、あれこれ /usr 以下を管理者権限でいじりまわしたり、本当に必要かどうか判っていないパッケージをむやみにインストールしてしまうことがあります。そのため、結果をまとめるときには、一旦 OS(今回は Fedora)をクリーンインストールしてから、再現性を確認するようにしています。
Fedora インストール後
Fedora をインストールして最初の再起動でアカウントを設定した後、パッケージを更新します。
[bitwalk@localhost ~]$ sudo rpm --rebuilddb [sudo] bitwalk のパスワード: [bitwalk@localhost ~]$ sudo dnf -y update : : 完了しました! [bitwalk@localhost ~]$
再起動する前に、タッチスクリーンのファームウェアをインストールしておきます。
[bitwalk@localhost ~]$ wget https://osdn.net/downloads/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm : : : HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 22953 (22K) `mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm' に保存中 mssl1680-firmware-jumper-ezpad 100%[===================================================>] 22.42K --.-KB/s 時間 0.02s 2021-01-14 21:22:38 (1.01 MB/s) - `mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm' へ保存完了 [22953/22953] [bitwalk@localhost ~]$ sudo dnf install mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm [sudo] bitwalk のパスワード: Fedora 33 openh264 (From Cisco) - x86_64 1.1 kB/s | 989 B 00:00 Fedora 33 - x86_64 - Updates 12 kB/s | 5.7 kB 00:00 Fedora 33 - x86_64 14 kB/s | 6.8 kB 00:00 依存関係が解決しました。 =========================================================================================================================== パッケージ Arch バージョン リポジトリー サイズ =========================================================================================================================== インストール: mssl1680-firmware-jumper-ezpad6pro noarch 1.0.git20201209.e247c34-2.fc33 @commandline 22 k トランザクションの概要 =========================================================================================================================== インストール 1 パッケージ 合計サイズ: 22 k インストール後のサイズ: 40 k これでよろしいですか? [y/N]: y パッケージのダウンロード: : : : インストール済み: mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch 完了しました! [bitwalk@localhost ~]$ sudo reboot
wget でパッケージを取得できない場合は、パッケージを更新して、古いのを削除した可能性が高いので、下記のサイトにアクセスして該当パッケージをダウンロードしてください。
再起動後、タッチスクリーンのデバイスでエラーが出ていないかを確認します。(※ ホスト名を変えました。)
[bitwalk@ezpad6 ~]$ dmesg | grep silead_ts [ 19.074747] silead_ts i2c-MSSL1680:00: supply vddio not found, using dummy regulator [ 19.074986] silead_ts i2c-MSSL1680:00: supply avdd not found, using dummy regulator [ 19.079476] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000 [ 20.494647] input: silead_ts as /devices/pci0000:00/0000:00:16.3/i2c_designware.3/i2c-3/i2c-MSSL1680:00/input/input25 [bitwalk@ezpad6 ~]$
xcalibrate
いろいろなサイトを検索するうち、xcalibrate - X.org touchscreen calibrator というサイトを見つけました。
xcalibrate の github のサイト [3] では、これは xinput_calibrator の代替品 (alternative) と説明されています。さらに xinput_calibrator には、プリキャリブレーション、タイムアウト、誤クリック検出、フェイクドライバテスト、サイズ変更可能なウィンドウなどの機能がありますが、xcalibrate にはこれらの機能を備えていないとあります。
機能が充実していなくとも、キャリブレーションに成功すれば良いのです。大袈裟ですが、藁をも掴む思いで試してみました。
GNOME on Xorg でログイン
Wayland では、そもそもキャリブレーションができなかったので、前回と同じく、ログイン時にディスプレイサーバを X.Org (GNOME on Xorg) に切り替えて作業をしています。
必要な Python モジュールをインストール
xcalibrate の実行に必要な Python モジュールをインストールします。
[bitwalk@ezpad6 ~]$ sudo dnf install python3-numpy python3-tkinter [sudo] bitwalk のパスワード: メタデータの期限切れの最終確認: ... 依存関係が解決しました。 ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== インストール: python3-numpy x86_64 1:1.19.4-1.fc33 updates 4.4 M python3-tkinter x86_64 3.9.1-1.fc33 updates 310 k 依存関係のインストール: tk x86_64 1:8.6.10-5.fc33 fedora 1.6 M トランザクションの概要 ======================================================================================================================== インストール 3 パッケージ ダウンロードサイズの合計: 6.3 M インストール後のサイズ: 27 M これでよろしいですか? [y/N]: y パッケージのダウンロード: : : : 完了しました! [bitwalk@ezpad6 ~]$
xcalibrate のダウンロードと実行
git コマンドで xcalibrate を clone します。
[bitwalk@ezpad6 ~]$ git clone https://github.com/reinderien/xcalibrate.git
Cloning into 'xcalibrate'...
remote: Enumerating objects: 71, done.
remote: Total 71 (delta 0), reused 0 (delta 0), pack-reused 71
Receiving objects: 100% (71/71), 15.24 KiB | 300.00 KiB/s, done.
Resolving deltas: 100% (31/31), done.
[bitwalk@ezpad6 ~]$
作業ディレクトリを xcalibrate 内に移して実行します。タッチスクリーン (silead_ts) の ID 番号をしている箇所以外はデフォルトのまま Enter で大丈夫です。
[bitwalk@ezpad6 ~]$ cd xcalibrate [bitwalk@ezpad6 xcalibrate]$ ls license readme.md xcalibrate [bitwalk@ezpad6 xcalibrate]$ ./xcalibrate Pointer devices: ID Name 4 Virtual core XTEST pointer 8 Logitech M280/320/275 11 SIPODEV USB Composite Device Mouse 15 silead_ts Device to calibrate [4]: 15Enter Old calibration: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] Calibrate? [y]: Enter Point count (min 3) [4]: Enter Disable rotation? [y]: Enter
キャリブレーション用の画面が表示されます。
キャリブレーションが終わると、Test? でもう一度キャリブレーション画面が表示されます。何をテストするのかよく判っていません。😓
/home/bitwalk/xcalibrate/./xcalibrate:206: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions. To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`. m_transform, residuals, rank, singular = np.linalg.lstsq(m_mouse, m_screen) New calibration: [[ 2.08259508 0. -0.00519201] [ 0. -2.69994727 1.00499014] [ 0. 0. 1. ]] Quality (should be at least 3): 4.4 Test? [y]: Enter Point count (min 3) [4]: Enter Use calibration? [y]: Enter
キャリブレーションが終わると、結果が出力されます。出力は CalibrationMatrix の形式です。
Create a file (for example 99-libinput-ts-calib.conf) in /usr/share/X11/xorg.conf.d/ and put in the following Section "InputClass" Identifier "calibration" MatchProduct "silead_ts" Option "CalibrationMatrix" "2.0825950811376504 0.0 -0.005192009916594044 0.0 -2.699947266654949 1.004990136911389 0.0 0.0 1.0" EndSection [bitwalk@ezpad6 xcalibrate]$
上記、黄色にマーキングした箇所をコピーして、99-libinput-ts-calib.conf というファイルを作成し、/etc/X11/xorg.conf.d/ へ移します。
[bitwalk@ezpad6 xcalibrate]$ vi 99-libinput-ts-calib.conf [bitwalk@ezpad6 xcalibrate]$ sudo mv 99-libinput-ts-calib.conf /etc/X11/xorg.conf.d/ [sudo] bitwalk のパスワード: [bitwalk@ezpad6 xcalibrate]$ sudo reboot
念のため再起動して、ログイン後にタッチスクリーンが期待通りに反応することを確認できました。😃
残る問題
xcalibrate を使って、確かにタッチスクリーンのキャリブレーションができました。しかし、これでメデタシとはいきませんでした。
GDM のログイン画面では、タッチスクリーンに反応するもののキャリブレーションした結果が反映されていないのか、On-Screen Keyboard を表示して入力するところまでたどり着けませんでした。
さらに、On-Screen Keyboard が必要になった時に自動的に画面に表示されるのは良いのですが、なんと入力が反映されません。😭
画面上のキーには反応しているようなのですが、入力結果に反映されません。入力を必要とするアプリでは致命的な問題です。
なにかの設定が不足しているのか…、皆目判りません。一歩も二歩も前進した気分ですが、現実はまだまだです。試行錯誤は続きます。
参考サイト
- bitWalk's: Linux のタッチスクリーンの設定に苦しむ [2021-01-10]
- bitWalk's: Linux のタッチスクリーンの設定に苦しむ (2) [2021-01-14]
- reinderien/xcalibrate: X.org touchscreen calibrator
0 件のコメント:
コメントを投稿