web-dev-qa-db-ja.com

xinputの代わりにlibinputを使用するには?

私のラップトップのキーボードはもう機能していません。したがって、xinput float IDでオンボードキーボードを無効にするスクリプトを作成しました。 Ubuntuの新しいバージョン(17.10)では、waylandへの更新により、これはもう機能しません。

Sudo libinput list-devicesでデバイスを起動すると、次の結果が得られます。

[...]
Device:           Rapoo E6100
Kernel:           /dev/input/event13
Group:            6
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a
[...]
Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event4
Group:            9
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a
[...]

Rapoo E6100は動作中のキーボードであり、AT Translated Set 2 keyboardは動作中のキーボードです壊れたオンボードキーボード。

デバイスを無視するために、そのデバイスから機能を削除できることを読みました( https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html#udev_device_type )。 libinputでこれをどのように実現できますか?

または、グループ9を単に無視する可能性はありますか?

2
user796678

キーボードを無効にする手っ取り早い方法は、evtestを使用してgrab itにすることです。その後、イベントはテストプログラムに配信され、グラフィックサーバーに渡されなくなります。

$ Sudo evtest --grab /dev/input/event4 >/dev/null

このプログラムは常に実行したままにする必要があります。


デバイスを無効にするより難しい方法は、ID_INPUTを空に設定するudevルールを追加して、libinputがそれを無視するようにすることです。私は以下を試していないので、決定的な解決策ではなく探索するためのガイドとして使用してください。

最初に、キーボードであるイベントデバイスのudev情報をリストします。例:

$ udevadm info /dev/input/event4
...
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_SERIAL=05f3_0007

ここで、デバイスを一意に識別するものを見つける必要があります。通常、これはusbベンダーと製品IDです(上記のID_SERIALのように)。 E:プレフィックスは、この変数がudev環境で設定されることを意味するため、udevルールでは、ENV{ID_SERIAL}=="05f3_0007"に一致させたいと言う必要があります。

ただし、ラップトップの場合は、おそらく他に一致するものを見つける必要があります。デバイスのツリーの上位を検索して、より一致しやすい属性を持つ親を見つけることができます。

$ udevadm info -a /dev/input/event4
...
looking at parent device '/devices/pci0000:00/.../input/input4':
  KERNELS=="input4"
  SUBSYSTEMS=="input"
  ATTRS{name}=="HID 05f3:0007"
  ...

そのため、ID_SERIALでのudevルールのマッチングではなく、ATTRS{name}=="HID 05f3:0007"でのマッチングが可能です。あなたの場合、ATTRS{name}=="AT Translated Set 2 keyboard"のようなものを期待します。

適切な一致が見つかったら、/etc/udev/rules.d/99-my.rules値を空にリセットするオーバーライドルールを使用して、独自のファイルID_INPUT(99から開始してルールを最後に作成)を作成します。このファイルの形式を厳守してください。すべての条件が==との比較であることに注意してください。ただし、最後の例外は単一の=の割り当てです。

ACTION=="add|change", ENV{ID_SERIAL}=="05f3_0007", ENV{ID_INPUT}=""

またはおそらくあなたのために:

ACTION=="add|change", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{ID_INPUT}=""

通常、ファイルへの変更はudevによって自動的に通知されますが、そうでない場合はSudo udevadm control --reloadです。その後、デバイスの変更をトリガーすることができます。

$ Sudo udevadm trigger --action=change /dev/input/event4

これが固定デバイスでどのように機能するかはわかりません。通常、USBデバイスの場合は、単にプラグを抜き、再度差し込むだけなので、再起動が必要になる場合があります。

udevadm monitorを使用して、udevの動作を監視できます。

0
meuh