在我的计算机上,我插入了两个 USB 键盘。是否可以将第二个键盘设置为运行命令而不是键入字母,而不是只键入相同的键?如果这不可能,是否可以设置至少输入另一种语言,例如俄语?
答案1
这是我可以推荐的第三个答案actkbd
......:)
因此,如果您想将第二个键盘的所有键配置为运行命令而不输入字母,您可以使用actkbd
...:)
安装后,actkbd
我们需要找到用于从键盘接收事件的设备文件:
pbm@tauri ~ $ cat /proc/bus/input/devices
[cut]
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:1a.0-1.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input7
U: Uniq=
H: Handlers=sysrq kbd event5
B: PROP=0
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=1f
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:1a.0-1.1/input1
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.1/input/input8
U: Uniq=
H: Handlers=kbd event6
B: PROP=0
B: EV=1b
B: KEY=2010000 397ad801d001 1e000000000000 0
B: ABS=100000000
B: MSC=10
[cut]
在此列表中,您应该找到您的键盘,并检查它的处理程序。用于sudo actkbd -s -d /dev/input/HANDLER_NAME
检查该处理程序是否发送事件。如果运行此命令并按键盘上的键(检查要绑定到命令的键),您应该得到类似的结果:
pbm@tauri ~ $ sudo actkbd -s -d /dev/input/event5
Keys: 57
Keys: 35
如果您有密钥代码,我们可以创建actkbd
配置文件:
pbm@tauri ~ $ sudo nano /etc/actkbd.conf
30:::sudo -u pbm DISPLAY=:0 amarok
//30 is keycode for letter a
当您保存该文件时,我们应该测试配置是否有效:
pbm@tauri ~ $ sudo actkbd -d /dev/input/event5 -D
当您按下配置文件中的键时,将启动配置文件最后一列中的命令。
我认为有一种方法可以禁用向应用程序发送密钥,但我无法找到它 - 请查看自述文件。
actkbd
您可以在 X 中关闭键盘,而不是尝试使用它来禁用它。
pbm@tauri ~ $ xinput list
[cut]
↳ Logitech USB Keyboard id=12 [slave keyboard (3)]
↳ Logitech USB Keyboard id=11 [slave keyboard (3)]
pbm@tauri ~ $ xinput set-prop 11 "Device Enabled" 0
pbm@tauri ~ $ xinput set-prop 12 "Device Enabled" 0
它应该可以完成工作...:) 有关actkbd
结账的更多信息这个答案。
使用actkbd
(可能还有一些脚本)您还可以配置键盘以将模式从命令模式更改为带有俄语字母的输入模式。为此请阅读Ulrich Schwarz's
答案。
答案2
抱歉重新启动这个线程,但只是让你知道有一个用 python 编写的 actkbd 的替代方案https://github.com/robinuniverse/KeebieIMO 做同样的事情,更先进。使用起来更容易一点,并且支持多个宏键盘。
你可以在这里看到我的配置,给你一个想法:https://github.com/mirsella/dotfiles/tree/master/.config/keebie keebiecloseprocess 不包含在该项目中,是我编写的。
答案3
我用 C 语言编写了一个小程序,可以做到这一点。我是“即时”编写的,所以它不是很好,但它有效。你可以得到它这里。
答案4
这对我有用:
#!/bin/bash
# 15 is the id of the floating (ie disabled) usb keyboard
# xinput --float 15
xinput --test 15 \
| grep --line-buffered "key press"| while read line; do
echo "$line"
if [ "$line" = "key press 38" ]; then
echo "yay"
# do something when 'a' is pressed
fi