首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libinput而不是xinput?

如何使用libinput而不是xinput?
EN

Ask Ubuntu用户
提问于 2018-02-18 12:44:21
回答 1查看 3.7K关注 0票数 3

我笔记本电脑的键盘坏了。因此,我编写了一个脚本,它将禁用带有xinput float ID的车载键盘.在Ubuntu (17.10)的新版本上,由于wayland的更新,这已经不能工作了。

当我用sudo libinput list-devices安装我的设备时,我得到:

代码语言:javascript
复制
[...]
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实现这一点呢?

还是有可能简单地忽略第九组?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2018-02-19 18:33:40

禁用键盘的一个快速而肮脏的方法可能是使用evtest来抓取它。然后将事件传递到测试程序,而不再传递到图形服务器。

代码语言:javascript
复制
$ sudo evtest --grab /dev/input/event4 >/dev/null

你必须让这个程序一直运行。

禁用设备的一个更困难的方法是为它添加一个udev规则,将ID_INPUT设置为空,这样libinput就会忽略它。我还没有尝试过以下几种方法,所以请使用它作为探索的指南,而不是最终的解决方案。

首先,列出作为键盘的事件设备的udev信息,例如:

代码语言:javascript
复制
$ 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"

然而,对于您的笔记本电脑,您可能需要找到其他匹配的东西。您可以在设备树的上层搜索,以找到具有更易于匹配的属性的父级:

代码语言:javascript
复制
$ 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值重置为空。严格执行此文件的格式。注意,除了最后一个条件是带有单个==的赋值外,所有条件都是如何与=进行比较的。

代码语言:javascript
复制
ACTION=="add|change", ENV{ID_SERIAL}=="05f3_0007", ENV{ID_INPUT}=""

或者更有可能是你:

代码语言:javascript
复制
ACTION=="add|change", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{ID_INPUT}=""

通常,udev应该自动注意到对文件的更改,但是如果不这样做的话,应该是sudo udevadm control --reload。然后,您可以尝试触发设备的更改:

代码语言:javascript
复制
$ sudo udevadm trigger --action=change /dev/input/event4

我不知道固定设备是如何工作的,就像通常对usb设备一样,您可以简单地拔掉它并重新插入它,所以您可能需要重新启动。

您可以监视udev使用udevadm monitor所做的事情。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1007374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档