내 컴퓨터에는 두 개의 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