格安価格に釣られて、正月早々衝動的に買ってしまったタブレット 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 等に移行しています。
調べてみると、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 を使ったキャリブレーションは、残念ながらうまくいっていません。しかし、キャリブレーション中に、タッチした情報を取得しているはずですので、補正が可能であるならば、まだなにか方法があるはずです。インターネット上で探せるタッチスクリーンのキャリブレーションに関する情報はそれほど多くはありませんが、まだ試す余地がありそうですので、うまくいったら「成功編」としてまとめます。
参考サイト
- bitWalk's: Jumper EZpad 6 Pro と Fedora 31 beta [2019-10-20]
- bitWalk's: Linux のタッチスクリーンの設定に苦しむ [2021-01-10]
- onitake/gsl-firmware: Firmware repository for Silead touchscreen controllers
- tias/xinput_calibrator: A generic touchscreen calibration program for X.Org
- Features/HalRemoval - Fedora Project Wiki
- xinput_calibrator(1) - Linux man page