👆
Linux でタッチスクリーンを無効にする方法
環境
Manjaro Linux / GNOME / Wayland
方法
デバイスを特定してドライバからアンバインドする。 [1]
入力デバイスを特定する手順
-
以下のコマンドで入力デバイスの一覧を取得する
$ cat /proc/bus/input/devices
-
名前からそれらしいデバイスを見繕い、イベントと I: Bus, Vendor, Product の値をメモする
- イベント:
H: handlers=
の eventX の値が何になっているか
- イベント:
-
以下いずれかのコマンドで実際の入力に対して反応があるかテストする
# event9 をテストする場合 $ evtest /dev/input/event9 # or $ cat /dev/input/event9 | od -x
- ( evtest は入力イベントの詳細をヒューマンリーダブルに出力してくれますが、デフォルトでインストールされていない場合があります。反応があるかないかだけであれば od でも十分確認できます。
-
デバイスが特定できたら、そのデバイスの識別名 [2] を確認する。
- hid (human interface device) では、識別名は
{bus_type}:{Vender}:{Product}.{連番}
の形式になる(らしい) [3] - 最初にメモした値が
Bus=0018, Vendor=XXXX, Product=YYYY
の場合、0018:XXXX:YYYY.0001
などの値になる
- hid (human interface device) では、識別名は
-
以下コマンドでそのデバイスがドライバにバインドされていることを確認する
- ( bind されてる場合、識別名で Sysfs のデバイスに対してシンボリックリンクが貼られている
$ ls -l /sys/bus/hid/drivers/hid-multitouch # 例 0018:xxxx:yyyy.0001 -> ../../../../devices/platform/xxxxxx/0018:xxxx:yyyy.0001
一時対応
以下コマンドで unbind する
$ echo -n "0018:xxxx:yyyy.0001" > /sys/bus/hid/drivers/hid-multitouch/unbind
恒久対応
udev にルールを追加する
- 識別名の連番部分が起動ごと?に変わったりするので以下の様に書く
# /etc/udev/rules.d/80-touchscreen.rules
KERNEL=="0018:xxxx:yyyy.*"\
PROGRAM="/bin/sh -c 'echo -n %k > /sys/bus/hid/drivers/hid-multitouch/unbind'"
経緯
コンパーチブルタイプの 2 in 1 ノートPC を使って開発していたのですが、購入から2年で開閉時にモニタのヒンジ周辺部分が浮き上がってくるようになり、気を使ってモニタを押さえながら開けていたら逆に変な圧がかかって割れてしまいました。割れた結果タッチスクリーンの変な入力がされるようになってしまったので今回無効にするに至りました。
値段の割にスペックが良かったので購入したけど耐久面で避けた方が良かったかもしれません?
参考
- Manual driver binding and unbinding [LWN.net]
- gnome - How can I disable touchscreen while using Wayland? - Ask Ubuntu
- epics/powermate-event – Epics Users JP
- linux - How to explain path under /sys/bus/hid/devices - Stack Overflow
Discussion