Как использовать libinput вместо xinput? - proUbuntu
Винтажный Клуб для гитаристов
2 голосов
/

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

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

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

1 Ответ

0 голосов
/

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

Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...