用于将点映射到 ctrl-enter 的 udev 规则

用于将点映射到 ctrl-enter 的 udev 规则

我需要使用扫描码 070037 将按键重新映射到左 ctrl + Enter。到目前为止,我通过创建包含以下内容的文件 90-custom-presenter.hwdb 成功地将其重新映射为输入。

# Logitech Presenter
keyboard:usb:b0003v046DpC515*
 KEYBOARD_KEY_070037=enter

我认为这是正确的,因为 lsusb 给了我

Bus 003 Device 018: ID 046d:c515 Logitech, Inc. Cordless 2.4 GHz Presenter Presentation remote control

evtest 确认我正在寻找的扫描码是 70037

Event: time 1521756520.173637, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70037
Event: time 1521756520.173637, type 1 (EV_KEY), code 52 (KEY_DOT), value 1
Event: time 1521756520.173637, -------------- SYN_REPORT ------------
Event: time 1521756520.277633, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70037
Event: time 1521756520.277633, type 1 (EV_KEY), code 52 (KEY_DOT), value 0
Event: time 1521756520.277633, -------------- SYN_REPORT ------------

以 root 身份运行后,udevadm hwdb --update我本以为这会映射以前的“点”键来输入,但事实并非如此。这提出了两个问题:

  1. 为什么这没有按预期映射?
  2. 一旦它按预期工作,我如何将其映射到 ctrl-enter?

我正在运行 Ubuntu 14.04 LTS。

答案1

您没有识别您的 Linux 发行版,它可能使用或不使用与我的 Debian 9 相同版本的 udev,因此这可能适用于您的系统,也可能不适用于您的系统。

在我的系统上,/lib/udev/hwdb.d/60-keyboard.hwdb有一些信息丰富的注释:

# Note: The format of the "evdev:" prefix match key is a
# contract between the rules file and the hardware data, it might
# change in later revisions to support more or better matches, it
# is not necessarily expected to be a stable ABI.
#
# Supported hardware matches are:
#  - Generic input devices match:
#      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
...

keyboard:usb列表中没有提及硬件匹配。

因此,除非您有特定于您的 Linux 发行版和版本的文档来告诉您,或者您的实际系统默认.hwdb文件使用该keyboard:usb语法,否则请尝试将其替换keyboard:usb:b0003v046DpC515*为:

evdev:input:b0003v046DpC515*

将演示者的“点”键设置为 Control+Enter 的问题是 .hwdb 文件只能将扫描码映射到(单个)键码。它无法插入按键代码序列。要在此阶段将键映射到 Control+Enter,除了修改实际的按键事件之外,还必须插入一个额外的事件,并对相应的按键释放事件执行相同的操作。

您的桌面环境可能包括更通用的键盘映射/快捷键功能,这可能会更好地满足您的需求。您可能必须首先使用 hwdb 规则将演示者的按键映射到某些未使用的按键代码,然后使用桌面环境的功能将该按键代码映射到 Control+Enter。

相关内容