我有一个小数字键盘,我想用它来启动宏和快捷方式,以及我的常规键盘。我可以将宏和快捷方式附加到这些键(即,小键盘 1 最小化活动窗口),但我的主键盘小键盘也激活了快捷方式。
我想要一种方法让辅助键盘完全独立运行,然后为其附加快捷方式。
这是我从中得到的输出xinput
。
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ LVT Recon gaming mouse id=10 [slave pointer (2)]
⎜ ↳ LVT Recon gaming mouse id=11 [slave pointer (2)]
⎜ ↳ Corsair Corsair K30A Gaming Keyboard id=13 [slave pointer (2)]
⎜ ↳ SIGMACHIP USB Keyboard id=18 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=12 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=14 [slave keyboard (3)]
↳ LVT Recon gaming mouse id=15 [slave keyboard (3)]
↳ Corsair Corsair K30A Gaming Keyboard id=16 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=17 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=19 [slave keyboard (3)]
虽然我的其他答案可能适用于大多数 Linux,即使它们已有多年历史,但 SystemD 和 udev 实际上使事情变得更容易:
用于
lsusb
查找附加键盘的供应商和产品代码。(在我的例子中,它是供应商 145F,产品 0177。确保字母为大写。)创建一个文件
/etc/udev/hwdb.d/90-extra-keyboard.hwdb
,内容与此类似:第一行标识设备:v 后面的四个字母是供应商代码,p 后面是产品代码,来自上一步。每一行都将扫描码映射到符号名称。要获取扫描码,请运行
evtest
:要找出符号名称的用途,请查看以下行
#define KEY_…
列表/usr/include/linux/input-event-codes.h
:通过运行重新构建和加载内部数据库
systemd-hwdb update; udevadm trigger
evtest
通过再次运行或在设置中分配快捷方式来验证新设置是否有效。在应用程序中尝试此操作时,请记住,如果您的桌面环境已经使用该快捷方式,则应用程序甚至不会看到按键。
原则上,是的。当我最后一次在 2012 年这样做时,要走的路是尝试告诉 Linux,第二个键盘非常奇怪,实际上意味着XF86VolumeUp它发送按键时Num 1,或者其他什么。幸运的是,您可以通过这种方式使用标准键盘上不存在的很多键码。
让我们为一个键运行这个:
xev | grep -i key
查找额外键盘上按键的键码。例如,我将keypap 9使用键码 81 进行操作。(注意:我的额外键盘有一个标记为“00”的键,但它发送了两次“0”,我不知道如何处理。)setxkbmap -query
您的(主)键盘的规则。我们将尝试将您的额外键盘变成该布局上的十几个媒体键。对我来说是/usr/share/X11/xkb/symbols/inet
。右侧是应用程序将看到的内容,可能带有 shift 键修饰符等,左侧是扫描码。我会选择这个,因为我的键盘没有“计算器”键:/usr/share/X11/xkb/keycodes/
将扫描码映射到键码的文件(从第一步开始)。是的,这似乎倒退了。我的文件名为 trustkeypad,如下所示:编译这个文件
xkbcomp -xkb trustkeypad
试试看
setxkbmap -v -v -device 17 -keycodes (filename)
。( 17 是您的 idxinput
。)我的结果如下所示:这看起来不错,尤其是 keycodes 行。如果您
xev
现在运行,您应该会看到正在生成的新符号。唉,我现在只获得了一半的胜利:但是在我意外地使 X 崩溃了几次之后(不要认为将 keycodes 文件中的最小值设置得更高会有所帮助),这种情况就消失了。也许一个简单的重启可以在这一点上提供帮助。成功后,你应该只得到类似的东西
您可以在您的用户设置中验证您现在可以为该键分配一个快捷方式,它会说它已分配给计算器键。
这里仍然缺少:弄清楚如何使其成为标准设置,也包括重新启动。这可能涉及查看 udev,并且https://help.ubuntu.com/community/Custom%20keyboard%20layout%20definitions可能很有用,即使它有一个可追溯到 2014 年的“过时”标签。
所描述的
hwdb
修改方法不适用于连接的多个 USB 键盘,因为不同 USB 键盘上相同按钮的扫描码相同,您将重新映射所有连接的 USB 键盘上的按钮。扫描码仅在内置笔记本电脑的键盘和 USB 键盘之间有所不同。
我会尝试这种 python 方法(在https://www.youtube.com/watch?v=Arn8ExQ2Gjg的评论中找到它)
安装 Python 及其
evdev
模块(稍后您将需要它)cd
到 /dev/input/by-id/在没有插入键盘的情况下,
ls
.插入键盘,然后
ls
。将有两个新的符号链接。记下它在文件系统中的绝对位置(例如 /dev/input/by-id/usb-0c45_USB_WIRED_KEYBOARD_event-kbd )退出终端。创建一个python文件并将其放入其中:
现在,如果您按下第二个键盘上的退出键,它将打印“Hello, world!”