我有一个通过 USB 连接的数字键盘,我的目标是能够重新映射该数字键盘上的按键,以便它们可以运行自定义命令或映射到其他按键组合。
我的文件中有这个.xbindkeysrc
:
~ $ cat .xbindkeysrc
"xte 'keydown Super_L' 'key Left' 'keyup Super_L'"
m:0x10 + c:79 + Release
Mod2 + KP_Home
这会将 NUM 7 键(通常打印 7)重新映射到Super_L + Left Arrow
。这很棒并且有效,但适用于所有键盘,而我的目标是使其仅适用于数字键盘。
一直在寻找如何做到这一点,但我得到的最接近的是使用xinput set-button-map
.不幸的是,这似乎只适用于鼠标等设备。我喜欢尝试获取数字键盘的按钮映射,xinput get-button-map [device id]
但它只打印从 1 到 7 的数字,而且我的键盘上肯定有更多按钮,所以它不一定有意义。
有什么建议吗?
答案1
考虑使用https://github.com/rvaiya/keyd。它是为此目的而编写的,并且适用于整个系统。
答案2
首先找到设备ID,使用xinput list
$ xinput list
⎣ Virtual core keyboard
...
↳ USB Keyboard id=19 [slave keyboard (3)]
每个设备/键盘的键映射
(这只会映射键。有关将脚本映射到键的信息,请参阅下文)
setxkbmap
可以选择针对特定设备(键盘)。
然后查询setxkbmap
配置以查看您的设备设置(我将使用“19”):
$ setxkbmap -device 19 -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(euro)+us(intl):2+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
这symbols
就是我们正在寻找的;这些可以在 中找到ls /usr/share/X11/xkb/symbols
。参数引用文件中的一个小节,例如xkb_symbols "intl" {
要添加任何可用的例如,rupesign 等选项,您可以这样做
setxkbmap -device 19 -option rupeesign:4
要重置选项,请使用
setxkbmap -device 19 -option
而不带进一步参数。
但是,您需要一些自定义配置,这有点棘手,因为简单地在该文件夹中添加自定义文件并使用它是行不通的。
因此,创建一些文件夹并使用当前配置创建一个临时文件。
mkdir -p ~/.config/xkb/symbols
cd ~/.config/xkb
setxkbmap -device 19 -print > tempfile.txt
touch symbols/mysymbol
编辑tempfile.txt
使其包含mysymbol(mymapping)
...
xkb_symbols { include "pc+us(euro)+us(intl):2+inet(evdev)+mysymbol(mymapping)"
以您想要的任何方式进行编辑symbol/mysymbol
,请参阅/usr/share/X11/xkb/symbols
示例。这个在num 7
key 上添加了一个比特币符号。
partial
xkb_symbols "mymapping" {
key <AE07> { [ 7, &, U20BF ] };
};
现在,最后,要激活此映射,请使用xkbcomp
(注意-i 19
设置设备)
xkbcomp -i 19 -I$HOME/.config/xkb tempfile.txt $DISPLAY
(这可能会显示一些warning
消息,但它仍然有效)
映射键以启动脚本
有一个用于将密钥映射到脚本的工具:actkbd
安装:
$ git clone https://github.com/thkala/actkbd
$ cd actkb
$ make
$ sudo make install
然后找到你的键盘的设备名称/dev/input/
,在我的情况下是/dev/input/by-id/usb-_USB_Keyboard-event-kbd
您现在应该有一个包含一些示例的配置文件/etc/actkbd.conf
,可以全部删除。这里有一些更实际的例子
# 'a' starts gedit
30:::gedit
# 'shift+7' starts a custom script. (keynumber 8 for some reason)
42+8:::/home/me/myscript.py
要查找键号(或组合键),请使用 's' 选项:
$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd -s
在 /etc/actkbd.conf 中配置后,启动程序(用于-D
后台模式)
$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd