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