На моем компьютере подключены две 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
При нажатии клавиши, указанной в файле конфигурации, будет запущена команда из последнего столбца файла конфигурации.
Я думаю, что есть способ отключить отправку ключей в приложения, но я не смог его найти - проверьтеФайл README.
Вместо того, чтобы пытаться отключить его с помощью, 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
извините, что поднимаю эту тему, но просто чтобы вы знали, что есть альтернатива actkbd, написанная на pythonhttps://github.com/robinuniverse/Keebieкоторые делают то же самое, на мой взгляд, более продвинуты. Немного проще в использовании и поддерживают более одной макроклавиатуры.
Вы можете увидеть мою конфигурацию здесь, чтобы получить представление: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