在我的電腦上,我插入了兩個 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