我的笔记本电脑的键盘不再工作了。因此,我编写了一个脚本,可以使用 禁用板载键盘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
[...]
雷柏E6100是工作键盘,AT 翻译套装 2 键盘是板载键盘损坏了。
我读到,为了忽略某个设备,可以从中删除该设备的功能(https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html#udev_device_type)。如何使用libinput实现这一点?
或者是否有可能直接忽略第 9 组?
答案1
禁用键盘的一个快速而肮脏的方法可能是evtest
使用抓住然后事件被传递到测试程序,而不再传递到图形服务器。
$ 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"
...
因此,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
。