Linux에서 특정 키보드의 키만 다시 매핑하는 방법은 무엇입니까?

Linux에서 특정 키보드의 키만 다시 매핑하는 방법은 무엇입니까?

USB를 통해 연결된 숫자 키패드가 있고 내 목표는 해당 숫자 키패드의 키를 다시 매핑하여 사용자 정의 명령을 실행하거나 다른 키 조합에 매핑할 수 있도록 하는 것입니다.

내 파일에 다음이 있습니다 .xbindkeysrc.

~ $ cat .xbindkeysrc
"xte 'keydown Super_L' 'key Left' 'keyup Super_L'"
  m:0x10 + c:79 + Release
  Mod2 + KP_Home

그러면 NUM 7 키(보통 7이 인쇄됨)가 에 다시 매핑됩니다 Super_L + Left Arrow. 이것은 훌륭하고 작동하지만 모든 키보드에서 작동하지만 내 목표는 숫자 키보드에서만 작동하도록 만드는 것입니다.

이 작업을 수행하는 방법을 찾고 있었지만 가장 가까운 방법은 을 사용하는 것입니다 xinput set-button-map. 불행하게도 이것은 마우스와 같은 장치에서만 작동하는 것 같습니다. 나는 숫자 키패드에 대한 버튼 매핑을 얻으려고 노력하는 것을 좋아 xinput get-button-map [device id]하지만 1에서 7까지의 숫자만 인쇄하고 키보드에 더 많은 버튼이 있으므로 반드시 의미가 있는 것은 아닙니다.

어떤 제안이 있으십니까?

답변1

사용을 고려해보세요https://github.com/rvaiya/keyd. 이 목적을 위해 작성되었으며 전체 시스템에서 작동합니다.

답변2

먼저 장치 ID를 찾아 사용하십시오.xinput list

$ xinput list

⎣ Virtual core keyboard
...
↳   USB Keyboard     id=19  [slave  keyboard (3)]

장치/키보드별 키 매핑

(이것은 키만 매핑합니다. 스크립트를 키에 매핑하는 방법에 대한 자세한 내용은 아래를 참조하세요.)

setxkbmap특정 장치(키보드)를 대상으로 하는 옵션이 있습니다.

그런 다음 구성을 쿼리하여 setxkbmap장치 설정을 확인합니다("19"를 사용하겠습니다).

$ setxkbmap -device 19 -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us(euro)+us(intl):2+inet(evdev)"    };
    xkb_geometry  { include "pc(pc105)" };
};

이것이 symbols우리가 찾고 있는 것입니다 ls /usr/share/X11/xkb/symbols. 매개변수는 파일의 섹션을 참조합니다.xkb_symbols "intl" {

추가하려면쓸 수 있는예를 들어 rupesign과 같은 옵션을 사용하면 다음을 수행할 수 있습니다.setxkbmap -device 19 -option rupeesign:4

옵션을 재설정하려면 setxkbmap -device 19 -option추가 인수 없이 사용하세요.

그러나 일부 사용자 정의 구성이 필요합니다. 이는 해당 폴더에 사용자 정의 파일을 추가하고 사용하는 것만으로는 작동하지 않기 때문에 약간 까다롭습니다.

따라서 일부 폴더를 만들고 현재 구성으로 임시 파일을 만듭니다.

mkdir -p ~/.config/xkb/symbols
cd ~/.config/xkb 
setxkbmap -device 19 -print > tempfile.txt
touch symbols/mysymbol

tempfile.txt포함하도록 수정mysymbol(mymapping)

...
xkb_symbols   { include "pc+us(euro)+us(intl):2+inet(evdev)+mysymbol(mymapping)"   

원하는 대로 편집하세요 . 예제를 symbol/mysymbol참조하세요 . /usr/share/X11/xkb/symbols그러면 num 7키에 비트코인 ​​기호가 추가됩니다.

partial
xkb_symbols "mymapping" {
    key <AE07> { [  7,   &,   U20BF ]  };

};

이제 마지막으로 이 매핑을 활성화하려면 다음을 사용하세요 xkbcomp( -i 19장치 설정 참고).

xkbcomp -i 19 -I$HOME/.config/xkb tempfile.txt $DISPLAY

(일부 warning메시지가 표시될 수 있지만 여전히 작동합니다.)

스크립트를 실행하기 위한 키 매핑

키를 스크립트에 매핑하는 도구가 있습니다.actkbd

설치하다:

$ git clone https://github.com/thkala/actkbd 
$ cd actkb
$ make 
$ sudo make install

그런 다음 키보드의 장치 이름을 찾으십시오 /dev/input/. 제 경우에는/dev/input/by-id/usb-_USB_Keyboard-event-kbd

이제 몇 가지 예제가 포함된 구성 파일이 생겼 /etc/actkbd.conf으며 모두 삭제할 수 있습니다. 다음은 좀 더 실용적인 예입니다.

# 'a' starts gedit
30:::gedit
# 'shift+7' starts a custom script. (keynumber 8 for some reason)
42+8:::/home/me/myscript.py

키 번호(또는 키 조합)를 찾으려면 's' 옵션을 사용하십시오.

$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd -s

/etc/actkbd.conf에서 구성한 후 프로그램을 시작합니다( -D백그라운드 모드용).

$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd

관련 정보