2021-01-15

Linux のタッチスクリーンの設定に苦しむ (3) ~ 一応の成功編 ~

このところ 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 でパッケージを取得できない場合は、パッケージを更新して、古いのを削除した可能性が高いので、下記のサイトにアクセスして該当パッケージをダウンロードしてください。

mssl1680-firmware-jumper-ezpad6pro パッケージの公開場所

再起動後、タッチスクリーンのデバイスでエラーが出ていないかを確認します。(※ ホスト名を変えました。)

[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) に切り替えて作業をしています。

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

キャリブレーション用の画面が表示されます。

xcalibrate の実行画面

キャリブレーションが終わると、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 が必要になった時に自動的に画面に表示されるのは良いのですが、なんと入力が反映されません。😭

GNOME の On-Screen Keyboard

画面上のキーには反応しているようなのですが、入力結果に反映されません。入力を必要とするアプリでは致命的な問題です。

なにかの設定が不足しているのか…、皆目判りません。一歩も二歩も前進した気分ですが、現実はまだまだです。試行錯誤は続きます。

参考サイト

  1. bitWalk's: Linux のタッチスクリーンの設定に苦しむ [2021-01-10]
  2. bitWalk's: Linux のタッチスクリーンの設定に苦しむ (2) [2021-01-14]
  3. reinderien/xcalibrate: X.org touchscreen calibrator

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村

0 件のコメント: