👆

Linux でタッチスクリーンを無効にする方法

2023/11/16に公開

環境

Manjaro Linux / GNOME / Wayland

方法

デバイスを特定してドライバからアンバインドする。 [1]

入力デバイスを特定する手順

  1. 以下のコマンドで入力デバイスの一覧を取得する

    $ cat /proc/bus/input/devices
    
  2. 名前からそれらしいデバイスを見繕い、イベントと I: Bus, Vendor, Product の値をメモする

    • イベント: H: handlers= の eventX の値が何になっているか
  3. 以下いずれかのコマンドで実際の入力に対して反応があるかテストする

    # event9 をテストする場合
    $ evtest /dev/input/event9
    # or
    $ cat /dev/input/event9 | od -x
    
    • ( evtest は入力イベントの詳細をヒューマンリーダブルに出力してくれますが、デフォルトでインストールされていない場合があります。反応があるかないかだけであれば od でも十分確認できます。
  4. デバイスが特定できたら、そのデバイスの識別名 [2] を確認する。

    • hid (human interface device) では、識別名は {bus_type}:{Vender}:{Product}.{連番} の形式になる(らしい) [3]
    • 最初にメモした値が Bus=0018, Vendor=XXXX, Product=YYYY の場合、 0018:XXXX:YYYY.0001 などの値になる
  5. 以下コマンドでそのデバイスがドライバにバインドされていることを確認する

    • ( 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年で開閉時にモニタのヒンジ周辺部分が浮き上がってくるようになり、気を使ってモニタを押さえながら開けていたら逆に変な圧がかかって割れてしまいました。割れた結果タッチスクリーンの変な入力がされるようになってしまったので今回無効にするに至りました。

値段の割にスペックが良かったので購入したけど耐久面で避けた方が良かったかもしれません?

参考

脚注
  1. X Window System の場合 xinput を使えばいいらしいが Wayland ではだめだった ↩︎

  2. 便宜上ここでは識別名と書きます。、ソースコード上だと単に device name だったりしていますが /proc/bus/input/devices で表示される N: Name= もあり紛らわしいため。(他にカーネルデバイス名とも呼ばれる?) ↩︎

  3. ソースコード上の話なのでそういう仕様なのかは不明です。 ↩︎

Discussion