멀티미디어 키를 Bluetooth 키보드의 기능 키로 다시 매핑하는 방법은 무엇입니까?

멀티미디어 키를 Bluetooth 키보드의 기능 키로 다시 매핑하는 방법은 무엇입니까?

Logitech Bluetooth 다중 장치 키보드 K480이 있습니다. 설치 후 Bluetooth 페어링을 따르기만 하면 되며 기본 설정에서는 기능 키를 멀티미디어 키에 매핑하므로 , 등에 fn액세스 하려면 길게 눌러야 합니다 F1.F2F3

이것은 나에게 매우 반직관적이며 기능에 직접 액세스하고 멀티미디어 키를 사용할 수 있도록 다시 매핑하고 싶습니다.fn

로지텍 Bluetooth 다중 장치 키보드 K480

누른 상태 fn에서 계속 누르고 있지 않은 상태에서 F1을 수행하는 것입니다.

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445847, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445922, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446510, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446597, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

답변1

Logitech은 문서화되지 않은 마법 명령을 키보드에 보내 이러한 교체를 수행하는 Linux 이외의 다양한 운영 체제에 특수 드라이버를 제공하는 것으로 보입니다.

어떤 사람들은 다른 유사한 Logitech 키보드로 전송된 코드를 찾기 위해 통신을 모니터링했습니다. 760화 그리고 810. 그 중 하나를 시도해 볼 수 있습니다.

실패하면 xmodmap스왑 키 할당을 사용할 수 있습니다. Fn을 눌렀는지 여부에 따라 키보드가 2개의 다른 키코드를 보내는 것을 볼 수 있습니다. xmodmap -pke파일의 모든 키맵을 나열한 다음 필요한 키코드를 참조하는 키맵만 유지하는 데 사용됩니다 . 예를 들어 당신은

keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 180 = XF86HomePage NoSymbol XF86HomePage

등. 간단히 숫자를 반대로 바꾸세요.

keycode 180 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  67 = XF86HomePage NoSymbol XF86HomePage

그런 다음 이 파일 이름이 매개변수로 전달되어 xmodmap지도를 업데이트합니다.

답변2

이 코드를 "/home/youruser/k480"이라는 스크립트에 넣고 실행할 수 있습니다. Logitech 키가 다시 매핑됩니다.

xmodmap -e "keycode 180 = F1 F1 F1 F1 F1 F1"
xmodmap -e "keycode  23 = F2 F2 F2 F2 F2 F2"
xmodmap -e "keycode 135 = F3 F3 F3 F3 F3 F3"
xmodmap -e "keycode 166 = F4 F4 F4 F4 F4 F4"
xmodmap -e "keycode 225 = F5 F5 F5 F5 F5 F5"
xmodmap -e "keycode 173 = F6 F6 F6 F6 F6 F6"
xmodmap -e "keycode 172 = F7 F7 F7 F7 F7 F7"
xmodmap -e "keycode 171 = F8 F8 F8 F8 F8 F8"
xmodmap -e "keycode 121 = F9 F9 F9 F9 F9 F9"
xmodmap -e "keycode 122 = F10 F10 F10 F10 F10 F10"
xmodmap -e "keycode 123 = F11 F11 F11 F11 F11 F11"
xmodmap -e "keycode 118 = F12 F12 F12 F12 F12 F12"

답변3

이 블로그를 발견했는데,Ubuntu의 Logitech K480 및 "fn 버튼" 기본 동작, 이는 귀하가 설명하는 것과 동일한 문제를 해결하는 것 같습니다.

기본적으로 이 키보드(및 내가 아는 한 Logitech의 유사한 키보드)에는 기본적으로 "미디어 버튼"이 활성화되어 있습니다. 즉, f1-f12는 미디어 버튼 역할을 하며 기능 버튼은 fn 버튼 + f1-을 눌러 액세스할 수 있습니다. f12. 이것은 업무상 실제로 용납되지 않습니다. K810에 대한 Mario Scholz의 작업을 기반으로 Logitech K480에 대한 수정 사항을 만들었습니다. 소스 코드는 여기에 있습니다:

github의 K480 수정

내가 한 일은 그의 행적을 추적하는 것뿐이었고, win7을 실행하는 가상 머신에서 Logitech의 SetPoint 소프트웨어를 설치하고 Bluetooth 장치의 출력을 디버깅했습니다. K480의 경우 다음을 얻습니다.

on (bingo!)
> to keyboard
ffff8801d2173000 2960870190 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c000000
< from keyboard ffff8801ed13b000
1204929370 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b000100 00000000 00000000 00000000 00

off
> to keyboard
ffff88062b7db0c0 3001832891 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c010000
< from keyboard ffff8801ed368b40
1227979618 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b010100 00000000 00000000 00000000 00 

키보드로 보내는 메시지는 16진수 "a2"로 시작하고 키보드로 보내는 메시지는 "a1" 바이트로 시작합니다. 대체로 잘 작동합니다. 장치 ID도 0xb330으로 업데이트했고 K810은 0x319입니다. 개인적으로 저는 이 키보드를 좋아합니다. 키가 멋지게 "드롭"되고 간격이 딱 맞습니다. 코드를 빠르게 작성하는 데 적합합니다 :).

관련 정보