키보드의 일부 키를 다시 매핑하고 싶습니다. 특히 기능 키를 누른 상태에서 F1 키를 누른 다음 스크립트를 실행하고 싶습니다. 나는 이것이 xev
키 누르기와 관련된 키코드를 찾는 데 유용하다는 것을 알고 있습니다. 예를 들어, 키를 누르면 다음과 같은 결과 x
가 나타납니다.
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1597243, (-190,43), root:(910,336),
state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
XLookupString gives 1 bytes: (78) "x"
XmbLookupString gives 1 bytes: (78) "x"
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1597363, (-190,43), root:(910,336),
state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
XLookupString gives 1 bytes: (78) "x"
XFilterEvent returns: False
이것은 나에게 의미가 있습니다.
그러나 Function-F1을 누르면 어떻게 되는지 모르겠습니다.Function-F1을 누르면 Windows 버튼을 누른 채 문자를 입력하는 것처럼 보이는 이유는 무엇입니까 l
?
xev
Function-F1을 누르면 출력은 다음과 같습니다.
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735349, (-157,221), root:(943,514),
state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735350, (-157,221), root:(943,514),
state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
XLookupString gives 1 bytes: (6c) "l"
XmbLookupString gives 1 bytes: (6c) "l"
XFilterEvent returns: False
MappingNotify event, serial 41, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735356, (-157,221), root:(943,514),
state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735357, (-157,221), root:(943,514),
state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
MappingNotify event, serial 42, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeyRelease event, serial 42, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735463, (-157,221), root:(943,514),
state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
XLookupString gives 1 bytes: (6c) "l"
XFilterEvent returns: False
KeyRelease event, serial 43, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735470, (-157,221), root:(943,514),
state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
텍스트 창에 초점을 맞춘 상태에서 Function-F1을 누르면 문자가 입력됩니다 l
.
배경 정보: Toshiba r835에서 Lubuntu 11.10 실행. 유용할 수 있는 추가 세부정보를 제공해 드리겠습니다.
편집하다:
비교를 위해 Function-F12를 입력하면 다음과 같은 결과가 나타납니다.
KeyPress event, serial 41, synthetic NO, window 0x2200001,
root 0xae, subw 0x0, time 8369184, (-620,473), root:(480,766),
state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2200001,
root 0xae, subw 0x0, time 8369344, (-620,473), root:(480,766),
state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
F1~F12 키에 특별한 것이 있는지 확인하고 싶었는데, 적어도 일부는 예상대로 작동하는 것 같습니다.
답변1
"Function-F1"이라고 말하면 Fn노트북 모서리에 있는 재미있는 작은 키를 누른 다음 F1키보드 왼쪽 상단에 있는 키를 누르라는 뜻이라고 가정합니다. 그리고 일부 노트북 키보드에 있는 추가 키(예: "절전") 중 하나를 매핑하려고 합니다.
이 키는 실제로 여러 키를 누르는 것 같습니다. 먼저 Win+를 L조합으로 취급합니다. Windows에서 이 바로가기는 화면을 잠그지만 화면 보호기를 시작하지는 않습니다.
다음으로 XF86ScreenSaver에 대한 매핑이 보입니다. 이는 아마도 X가 일종의 절전 키 코드를 보고 있음을 의미할 것입니다. 나는 노트북 키보드의 키가 Windows 사용자가 화면을 빠르게 잠그고 화면 보호기를 활성화하는 것을 더 쉽게 만들기 위해 실제로 Win+ L+ 세 개의 키 코드를 보내는 것이라고 추측합니다.Sleep
이를 필터링할 수 있는 좋은 방법이 있는지 잘 모르겠습니다. Linux Fn커널은 일반적으로 키보드의 키 입력을 인식하지 못하고 대신 키보드가 커널에 알려주는 코드를 변경합니다. USB RF 파워포인트 리모컨을 사용하려고 하면개발사무실Linux에서는 데모를 시작/중지하는 버튼이 대체 코드 F5와 Esc키 코드를 보내는 형편없는 컨트롤에 불과하다는 사실을 발견했습니다. b화면을 공백 으로 보내는 것과 같은 다른 버튼도 똑같이 절름발이입니다 .
답변2
나는 사용했다xbindkeys이 목적을 위해. 그냥 실행 xbindkeys -k
하고 원하는 버튼을 누르세요.
다음과 같이 출력되어야 합니다.
"(Scheme function)"
m:0x0 + c:244
XF86Battery
.xbindkeysrc
홈 디렉터리의 파일 에 붙여넣습니다 . 이제 해당 부분을 스크립트 실행 (Scheme Function)
과 같이 실행하려는 명령으로 바꾸고 싶습니다 .perl /home/my_script.pl
이렇게 하면 키를 다시 매핑하는 작업이 훨씬 쉬워집니다.