我笔记本电脑的键盘坏了。因此,我编写了一个脚本,它将禁用带有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翻译2键盘是断板键盘.
我读到,为了让设备被忽略,可以从其中删除功能(https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html#udev_设备_类型)。怎样才能用libinput实现这一点呢?
还是有可能简单地忽略第九组?
发布于 2018-02-19 18:33:40
禁用键盘的一个快速而肮脏的方法可能是使用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 (如上面的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 (从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所做的事情。
https://askubuntu.com/questions/1007374
复制相似问题