2021-01-14

Linux のタッチスクリーンの設定に苦しむ (2)

格安価格に釣られて、正月早々衝動的に買ってしまったタブレット PC、Jumper EZpad Mini 8 ですが、Linux のライブメディアを試した限りでは、肝心のタッチスクリーンを利用できませんでした。タッチスクリーンを利用できなければタブレット PC の利用価値が無いので、無理に Linux をインストールせずに Windows のまま使い続けています。

一方、格安 PC に Linux をインストールするのを趣味としている私は、同じ Jumper 製の格安 PC、Ezpad 6 Pro も持っています。

これは 2-in-1 タイプの 11.6 インチタッチスクリーンタブレットノートパソコンです [1]。Linux の起動ログから、どちらも同じメーカーのタッチスクリーンデバイス (Silead touchscreen controller) が用いられていることが判ったので、まずはこちら (Jumper Ezpad 6 Pro) のタッチスクリーンを使えるようにすることにしました。

前回のブログ記事で [2]、gsl-firmware で公開されているファームウェアのイメージ [3] を利用して、タッチスクリーンが反応するところまで漕ぎ着けました。

ただ、タッチ位置がとんでもなくズレています。しかし、たとえズレていてもキャリブレーションさえできればめでたくタッチスクリーンを使えるようになると思ったのですが、残念ながらキャリブレーションの結果を反映できていません。

うまくいっていない事例を紹介することは心苦しいのですが、情報を整理するため、顛末をまとめました。

使用した OS は下記の通りです。

Fedora 33 (Workstation Edition) x86_64

インストールの詳細は割愛しますが、Fedora (Fedora-Workstation-Live-x86_64-33-1.2.iso) を Jumper Ezpad 6 Pro にクリーンインストールして動作確認をしています。ちなみに、Fedora 33 をインストールした Jumper Ezpad Pro 6 のデバイスの動作状況は下記のようになっています。

WiFi  
オーディオ  
Bluetooth  
カメラ  
タッチスクリーン ×  
画面自動回転 ×  

以前、Fedora 31 beta で試したときは WiFi が安定していませんでしたが [1]、Fedora 33 では問題なさそうです。つまり、タッチスクリーン関係以外は動作しています。

Fedora インストール後

Fedora をインストールして最初の再起動でアカウントを設定した後、パッケージを更新します。

[bitwalk@localhost ~]$ sudo dnf -y update

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] bitwalk のパスワード:
  :
  :
トランザクションの確認を実行中
エラー: トランザクションの確認 vs depsolve:
glibc = 2.32-1.fc33 は (インストール済み)glibc-langpack-ja-2.32-1.fc33.x86_64 に必要とされています
glibc-common = 2.32-1.fc33 は (インストール済み)glibc-langpack-ja-2.32-1.fc33.x86_64 に必要とされています
libreoffice-core(x86-64) = 1:7.0.1.2-5.fc33 は (インストール済み)libreoffice-help-ja-1:7.0.1.2-5.fc33.x86_64 に必要とされています
libreoffice-core(x86-64) = 1:7.0.1.2-5.fc33 は (インストール済み)libreoffice-langpack-ja-1:7.0.1.2-5.fc33.x86_64 に必要とされています
問題を診断するには実行してみてください: 'rpm -Va --nofiles --nodigest'.
RPMDB を破損させたかもしれませんが、'rpm --rebuilddb' を実行することでこの問題を解決できる可能性があります。
ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
[bitwalk@localhost ~]$ 

Fedora 33 は rpm のデータベースを Berkeley DB から SQLIte へ移行する過渡期であるためか、最初の更新でかならずエラーになってしまいます。rpm のデータベースを初期化して、再びパッケージを更新します。

[bitwalk@localhost ~]$ sudo rpm --rebuilddb
[sudo] bitwalk のパスワード:
[bitwalk@localhost ~]$ sudo dnf -y update
  :
  :
完了しました!
[bitwalk@localhost ~]$ 

再起動する前に、タッチスクリーンのファームウェア [2] をインストールしておきます。

[bitwalk@localhost ~]$ wget https://osdn.net/downloads/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
--2021-01-14 20:19:34--  https://osdn.net/downloads/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
osdn.net (osdn.net) をDNSに問いあわせています... 202.221.179.17
osdn.net (osdn.net)|202.221.179.17|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://osdn.net/frs/chamber_redir.php?m=osdn&f=%2Fusers%2F27%2F27216%2Fmssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm [続く]
--2021-01-14 20:19:37--  https://osdn.net/frs/chamber_redir.php?m=osdn&f=%2Fusers%2F27%2F27216%2Fmssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
osdn.net:443 への接続を再利用します。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://osdn.dl.osdn.net/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm [続く]
--2021-01-14 20:19:37--  https://osdn.dl.osdn.net/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
osdn.dl.osdn.net (osdn.dl.osdn.net) をDNSに問いあわせています... 202.221.179.23
osdn.dl.osdn.net (osdn.dl.osdn.net)|202.221.179.23|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 22953 (22K) [application/x-redhat-package-manager]
`mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm' に保存中

mssl1680-firmware-jumper-ezpad6 100%[======================================================>]  22.42K  84.4KB/s 時間 0.3s

2021-01-14 20:19:37 (84.4 KB/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
Fedora 33 openh264 (From Cisco) - x86_64        1.2 kB/s | 989  B     00:00    
Fedora 33 - x86_64 - Updates                     13 kB/s | 7.6 kB     00:00    
Fedora 33 - x86_64 - Updates                    364 kB/s | 445 kB     00:01    
Fedora 33 - x86_64                               11 kB/s | 6.8 kB     00:00    
依存関係が解決しました。
================================================================================
 パッケージ            Arch   バージョン                     リポジトリー サイズ
================================================================================
インストール:
 mssl1680-firmware-jumper-ezpad6pro
                       noarch 1.0.git20201209.e247c34-2.fc33 @commandline  22 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

合計サイズ: 23 k
インストール後のサイズ: 39 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  インストール中   : mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e   1/1 
  scriptletの実行中: mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e   1/1 
  検証             : mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e   1/1 

インストール済み:
  mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch      

完了しました!
[bitwalk@localhost ~]$ reboot

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

[bitwalk@ezpad6 ~]$ dmesg | grep silead_ts
[    8.819065] silead_ts i2c-MSSL1680:00: supply vddio not found, using dummy regulator
[    8.819137] silead_ts i2c-MSSL1680:00: supply avdd not found, using dummy regulator
[    8.823782] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000
[   10.330015] input: silead_ts as /devices/pci0000:00/0000:00:16.3/i2c_designware.3/i2c-3/i2c-MSSL1680:00/input/input32
[bitwalk@ezpad6 ~]$

xinput_calibrator

xinput_calibrator は X.Org 用の汎用タッチスクリーンキャリブレーションプログラムです。

GNOME on Xorg でログイン

xinput_calibrator の Github のプロジェクトサイト [4] の最終更新は控えめに見て 6 年前、多くのソースの最終更新日は 7 - 8 年前です。

今や、Fedora のディスプレイサーバは X.Org から Wayland へ移行しています。ディスプレイ以外の部分がどうなっているのか、正直判らないので、念のため、ログイン時にディスプレイサーバを X.Org (GNOME on Xorg) に切り替えて作業をすることにしました。

GNOME on Xorg でログイン

xinput コマンドで入力デバイスを確認すると、以下のようになっています。

[bitwalk@ezpad6 ~]$ xinput --list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Logitech M280/320/275                   	id=8	[slave  pointer  (2)]
⎜   ↳ SIPODEV USB Composite Device Mouse      	id=11	[slave  pointer  (2)]
⎜   ↳ silead_ts                               	id=15	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Video Bus                               	id=6	[slave  keyboard (3)]
    ↳ Power Button                            	id=7	[slave  keyboard (3)]
    ↳ USB 2.0 Camera: USB 2.0 Camera          	id=9	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device            	id=10	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device Wireless Radio Control	id=12	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device System Control	id=13	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device Consumer Control	id=14	[slave  keyboard (3)]
    ↳ Intel HID events                        	id=16	[slave  keyboard (3)]
    ↳ Intel HID 5 button array                	id=17	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=18	[slave  keyboard (3)]
    ↳ Logitech M280/320/275                   	id=19	[slave  keyboard (3)]
[bitwalk@ezpad6 ~]$ 

コンパイル環境の準備

まずコンパイル環境を整えます。

C コンパイラ (gcc) と関係ツール、ライブラリをインストールします。

[bitwalk@ezpad6 ~]$ sudo dnf group install "C 開発ツールとライブラリー"
[sudo] bitwalk のパスワード:
メタデータの期限切れの最終確認: ...
依存関係が解決しました。
========================================================================================================================
 パッケージ                   Arch            バージョン                                         リポジトリー     サイズ
========================================================================================================================
group/moduleパッケージをインストール:
 autoconf                     noarch          2.69-34.fc33                                       fedora           666 k
 automake                     noarch          1.16.2-2.fc33                                      fedora           664 k
 bison                        x86_64          3.6.4-3.fc33                                       fedora           860 k
 byacc                        x86_64          1.9.20200330-3.fc33                                fedora            87 k
 ccache                       x86_64          3.7.11-1.fc33                                      fedora           233 k
 cscope                       x86_64          15.9-8.fc33                                        fedora           221 k
 flex                         x86_64          2.6.4-5.fc33                                       fedora           311 k
 gcc-c++                      x86_64          10.2.1-9.fc33                                      updates           11 M
 indent                       x86_64          2.2.12-6.fc33                                      fedora           181 k
 libtool                      x86_64          2.4.6-36.fc33                                      fedora           578 k
 ltrace                       x86_64          0.7.91-39.fc33                                     fedora           140 k
 perf                         x86_64          5.9.9-200.fc33                                     updates          2.3 M
 strace                       x86_64          5.10-1.fc33                                        updates          1.2 M
 valgrind                     x86_64          1:3.16.1-11.fc33                                   updates          4.7 M
依存関係のインストール:
 ed                           x86_64          1.14.2-9.fc33                                      fedora            75 k
 info                         x86_64          6.7-8.fc33                                         fedora           228 k
 libstdc++-devel              x86_64          10.2.1-9.fc33                                      updates          2.0 M
 m4                           x86_64          1.4.18-15.fc33                                     fedora           211 k
 opencsd                      x86_64          0.14.1-2.fc33                                      fedora           266 k
 perl-File-Compare            noarch          1.100.600-465.fc33                                 updates           25 k
 perl-File-Copy               noarch          2.34-465.fc33                                      updates           32 k
 perl-Thread-Queue            noarch          3.14-457.fc33                                      fedora            21 k
 perl-threads                 x86_64          1:2.25-457.fc33                                    fedora            58 k
 perl-threads-shared          x86_64          1.61-457.fc33                                      fedora            44 k
 slang                        x86_64          2.3.2-8.fc33                                       fedora           380 k
 xemacs-filesystem            noarch          21.5.34-38.20200331hge2ac728aa576.fc33             fedora           9.3 k
グループのインストール中:
 C Development Tools and Libraries


トランザクションの概要
========================================================================================================================
インストール  26 パッケージ

ダウンロードサイズの合計: 27 M
インストール後のサイズ: 98 M
これでよろしいですか? [y/N]: y
  :
  :
  :
完了しました!
[bitwalk@ezpad6 ~]$

X.Org 関係の開発用パッケージをインストールします。

[bitwalk@ezpad6 ~]$ sudo dnf install libX11-devel libXext-devel libXi-devel xorg-x11-drv-evdev-devel xorg-x11-drv-libinput-devel
メタデータの期限切れの最終確認: ...
依存関係が解決しました。
========================================================================================================================
 パッケージ                                アーキテクチャー     バージョン                  リポジトリー          サイズ
========================================================================================================================
インストール:
 libX11-devel                              x86_64               1.6.12-3.fc33               updates               941 k
 libXext-devel                             x86_64               1.3.4-4.fc33                fedora                 73 k
 libXi-devel                               x86_64               1.7.10-4.fc33               fedora                100 k
 xorg-x11-drv-evdev-devel                  x86_64               2.10.6-7.fc33               fedora                 10 k
 xorg-x11-drv-libinput-devel               x86_64               0.30.0-3.fc33               fedora                 11 k
依存関係のインストール:
 libXau-devel                              x86_64               1.0.9-4.fc33                fedora                 13 k
 libXfixes-devel                           x86_64               5.0.3-12.fc33               fedora                 12 k
 libxcb-devel                              x86_64               1.13.1-5.fc33               fedora                1.0 M
 xorg-x11-proto-devel                      noarch               2019.1-4.fc33               fedora                261 k

トランザクションの概要
========================================================================================================================
インストール  9 パッケージ

ダウンロードサイズの合計: 2.4 M
インストール後のサイズ: 5.6 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
  :
  :
  :
完了しました!
[bitwalk@ezpad6 ~]$

xinput_calibrator のコンパイル

git コマンドで xinput_calibrator を clone します。

[bitwalk@ezpad6 ~]$ git clone https://github.com/tias/xinput_calibrator.git
Cloning into 'xinput_calibrator'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1369 (delta 0), reused 0 (delta 0), pack-reused 1368
Receiving objects: 100% (1369/1369), 410.16 KiB | 626.00 KiB/s, done.
Resolving deltas: 100% (808/808), done.
[bitwalk@ezpad6 ~]$

clone した xinput_calibrator 内に作業ディレクトリを移し、以下のようにコンパイルします。

[bitwalk@ezpad6 ~]$ cd xinput_calibrator
[bitwalk@ezpad6 xinput_calibrator]$ ./autogen.sh
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
  ;
  ;
config.status: executing libtool commands
[bitwalk@ezpad6 xinput_calibrator]$ make
Making all in src
make[1]: ディレクトリ '/home/bitwalk/xinput_calibrator/src' に入ります
Making all in calibrator
  :
  :
  :
make[1]: 'all-am' に対して行うべき事はありません.
make[1]: ディレクトリ '/home/bitwalk/xinput_calibrator' から出ます
[[bitwalk@ezpad6 xinput_calibrator]$

xinput_calibrator の実行

コンパイルが終わったら、ソースのあるディレクトリ src へ移り、xinput_calibrator を起動します。

[bitwalk@ezpad6 xinput_calibrator]$ cd src
[bitwalk@ezpad6 src]$ ls
Makefile        gui              tester-EvdevTester.o  xinput_calibrator-Evdev.o           xinput_calibrator-main_x11.o
Makefile.am     main_common.cpp  tester-Tester.o       xinput_calibrator-Usbtouchscreen.o  xinput_calibrator-x11.o
Makefile.in     main_gtkmm.cpp   tester-calibrator.o   xinput_calibrator-XorgPrint.o
calibrator      main_x11.cpp     tester-tester.o       xinput_calibrator-calibrator.o
calibrator.cpp  tester           tester.cpp            xinput_calibrator-gui_common.o
calibrator.hh   tester-Evdev.o   xinput_calibrator     xinput_calibrator-main_common.o
[bitwalk@ezpad6 src]$ ./xinput_calibrator

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

xinput_calibrator の実行画面

左上の赤十字の真ん中をタッチすると、右上、左下、右下と次々赤十字が表示されますので、表示に従って赤十字の真ん中をタッチしていきます。タッチ箇所がズレているとキャリブレーションは左上からやり直しになります。

キャリブレーションが終わると、結果が出力されます。

Calibrating standard Xorg driver "silead_ts"
	current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
	If these values are estimated wrong, either supply it manually with the --precalib option, or run the 'get_precalib.sh' script to automatically get it (through HAL).
INFO: width=1920, height=1080
	--> Making the calibration permanent <--
  copy the policy below into '/etc/hal/fdi/policy/touchscreen.fdi'
<match key="info.product" contains="silead_ts">
  <merge key="input.x11_options.minx" type="string">16341</merge>
  <merge key="input.x11_options.maxx" type="string">28697</merge>
  <merge key="input.x11_options.miny" type="string">420</merge>
  <merge key="input.x11_options.maxy" type="string">24490</merge>
  <merge key="input.x11_options.swapxy" type="string">0</merge>
  <merge key="input.x11_options.invertx" type="string">0</merge>
  <merge key="input.x11_options.inverty" type="string">0</merge>
</match>
[bitwalk@ezpad6 src]$ 

さて、この出力はなんでしょう?

HAL について

HAL は デーモン型の Hardware Abstract Layer の一種で、デスクトップアプリケーションがハードウェア情報に容易にアクセスできるようにすることで、バスやデバイスの種類に寄らずに各種デバイスを利用できるようにするオープンソースプロジェクトです。これにより、GUI が一貫した形式で全てのリソースをユーザーに提示できます。

HAL はすでに旧態化しており、現在は単にメンテナンスのみが行われている。HALの機能は DeviceKit や udev 等に移行しています。

Wikipedia より引用、編集

調べてみると、Fedora ではずいぶん前に HAL は使われなくなっています [5]

参考サイト [6] で、出力形式のオプションを調べて、次のようにして再び xinput_calibrator を実行しました。

[bitwalk@ezpad6 src]$ ./xinput_calibrator --output-type xorg.conf.d
Calibrating standard Xorg driver "silead_ts"
	current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
	If these values are estimated wrong, either supply it manually with the --precalib option, or run the 'get_precalib.sh' script to automatically get it (through HAL).
INFO: width=1920, height=1080
	--> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
	Identifier	"calibration"
	MatchProduct	"silead_ts"
	Option	"MinX"	"11912"
	Option	"MaxX"	"26931"
	Option	"MinY"	"91"
	Option	"MaxY"	"24121"
	Option	"SwapXY"	"0" # unless it was already set to 1
	Option	"InvertX"	"0"  # unless it was already set
	Option	"InvertY"	"0"  # unless it was already set
EndSection
[bitwalk@ezpad6 src]$ 

上記、黄色にマーキングした箇所をコピーして、99-calibration.conf というファイルを作成し、/etc/X11/xorg.conf.d/ へコピーします。

[bitwalk@ezpad6 src]$ vi 99-calibration.conf
[bitwalk@ezpad6 src]$ sudo mv 99-calibration.conf /etc/X11/xorg.conf.d/
[sudo] bitwalk のパスワード:
[bitwalk@ezpad6 src]$ ls /etc/X11/xorg.conf.d/
00-keyboard.conf  99-calibration.conf
[bitwalk@ezpad6 src]$ sudo reboot

再起動後、タッチスクリーンを確認しましたが、依然、あらぬ方向にポップアップメニューが出ます。😭

タッチスクリーンは応答するものの…

試行錯誤はまだまだつづく

xinput_calibrator を使ったキャリブレーションは、残念ながらうまくいっていません。しかし、キャリブレーション中に、タッチした情報を取得しているはずですので、補正が可能であるならば、まだなにか方法があるはずです。インターネット上で探せるタッチスクリーンのキャリブレーションに関する情報はそれほど多くはありませんが、まだ試す余地がありそうですので、うまくいったら「成功編」としてまとめます。

参考サイト

  1. bitWalk's: Jumper EZpad 6 Pro と Fedora 31 beta [2019-10-20]
  2. bitWalk's: Linux のタッチスクリーンの設定に苦しむ [2021-01-10]
  3. onitake/gsl-firmware: Firmware repository for Silead touchscreen controllers
  4. tias/xinput_calibrator: A generic touchscreen calibration program for X.Org
  5. Features/HalRemoval - Fedora Project Wiki
  6. xinput_calibrator(1) - Linux man page

 

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

0 件のコメント: