내 컴퓨터에는 두 개의 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/Keebie동일한 작업을 수행하는 고급 IMO입니다. 하나 이상의 매크로 키보드를 사용하고 지원하기가 조금 더 쉽습니다.
여기에서 내 구성을 보면 아이디어를 얻을 수 있습니다.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