Как использовать libinput вместо xinput?

Клавиатура моего ноутбука больше не работает. Поэтому я написал скрипт, который отключил бы встроенную клавиатуру xinput float ID, В новой версии Ubuntu (17.10) это больше не работает из-за обновления Wayland.

Когда я Iist мои устройства с 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 - сломанная встроенная клавиатура.

Я читал, что для того, чтобы игнорировать устройство, его возможности могут быть удалены ( https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html). Как этого можно достичь с помощью libinput?

Или есть возможность просто игнорировать группу 9?

1 ответ

Решение

Быстрый и грязный способ отключения клавиатуры может заключаться в использовании evtest схватить это. Затем события доставляются в тестовую программу и больше не проходят через графический сервер.

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

Вы должны оставить эту программу запущенной все время.


Более сложный способ отключить устройство - добавить для него правило udev, которое устанавливает ID_INPUT опустошить, чтобы 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_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"
  ...

Таким образом, вместо правила udev, совпадающего с ID_SERIAL, вы можете сопоставить с ATTRS{name}=="HID 05f3:0007" вместо. В вашем случае я бы ожидал что-то вроде ATTRS{name}=="AT Translated Set 2 keyboard",

Как только вы нашли подходящее соответствие, создайте свой собственный файл /etc/udev/rules.d/99-my.rules (начните с 99, чтобы сделать ваше правило последним) с вашим основным правилом для сброса ID_INPUT значение пусто. Будьте строги с форматом этого файла. Обратите внимание, как все условия сравниваются с == кроме последнего, который является назначением с одним =,

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-устройств вы можете просто отключить его и подключить снова, поэтому вам может потребоваться перезагрузка.

Вы можете следить за тем, что делает Udev udevadm monitor,

Другие вопросы по тегам