키 조합을위한 xmodmap-Fn 동작을 토글하는 방법?


9

USB를 통한 Logitech K290 키보드를 사용하면 기본적으로 F. 키에 액세스 할 수 없으므로 Fn사용하기 전에 키를 눌러야하므로 실제로는 사용할 수 없습니다.

Fn키 혼자 어떤 이벤트가 발생하지 않습니다 xev.

누르면 F1없이 Fn두 가지 주요 이벤트, 키 코드 50 (화재 Shift_L)와 키 코드 (133 Super_L) 및 디스플레이 메시지 내 쿠분투의 "터치 패드 비활성화"(모든 키에 대한 동일한 메시지 F1를 통해 F4)

대부분의 미디어 키가 작동하므로 직접 F 키를 액세스해야합니다. Fn행동 을 토글하는 방법을 알고 있습니까?

내가 F1없이 누를 때의 출력은 다음과 같습니다 Fn.

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638420, (-352,274), root:(1462,621),
    state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638420, (-352,274), root:(1462,621),
    state 0x11, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  4294967238 0   0   0   0   0   4   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638436, (-352,274), root:(1462,621),
    state 0x51, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638436, (-352,274), root:(1462,621),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 40, synthetic NO, window 0x0,
    request MappingPointer, first_keycode 0, count 0

그리고 F2(여전히 Fn) :

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782724, (-202,438), root:(1491,799),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782724, (-202,438), root:(1491,799),
    state 0x18, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  4294967238 0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782780, (-202,438), root:(1491,799),
    state 0x58, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782780, (-202,438), root:(1491,799),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

F1Fn예상 결과 를 제공합니다.

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64820204, (-856,-213), root:(1097,247),
    state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64820284, (-856,-213), root:(1097,247),
    state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

2
일반적으로 <kbd> Fn </ kbd>은 키보드의 하드웨어 수준에서 작동합니다. 희망의 키 코드는 F-키는 여전히 차이의, keysyms 반대로, 그것은 누르지 않은 경우. xev한 번 더 실행 하여 두 개의 다른 F 키에 대한 출력을 붙여 넣을 수 있습니까 ?
9000

. 나는이 답변 (같은 문제 :( 건너 한 askubuntu.com/a/285604/121193는 ) 유용 할 수 있지만, 간단하게 뭔가 좋은 ... 될 것입니다.

1
슬프게도 Solaar는 유선이 아닌 무선 이미 터에만 작동합니다. (
user55574

BIOS 설정을 살펴 보는 것으로 시작하겠습니다. 일부는 Fn 키를 바꾸는 것을 허용합니다 (예 : 기본적으로 F 키).
Jonas Berlin

F1이 키 코드 50을 재사용한다는 것은 정말 불쾌한 일이므로, 50도 바꾸는 것은 불가능합니다. : :
Jonas Berlin

답변:


1

x Fn+Fx와 사이에서 키 코드를 교환하여 동일한 결과를 얻었습니다 .Fx1,2,...12

  1. xmodmap -pke현재 키 코드 및 키심볼 목록을 얻는 데 사용 합니다.
  2. 그런 다음 실행 xev을 누릅니다 F1통해 F12그 키 코드의 메모를 유지.
  3. 그런 다음 ~/.Xmodmap파일을 교환 하십시오.

예를 들어 내 시스템에서 (1)의 결과는 다음과 같습니다.

keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode 69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode 70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
...

keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
..

그런 다음에 교체했습니다 ~/.Xmodmap.

keycode 121 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 122 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode 123 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode 198 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
...


keycode 67 = XF86AudioMute NoSymbol XF86AudioMute
keycode 68 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 69 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 70 = XF86AudioMicMute NoSymbol XF86AudioMicMute
...

그런 다음 실행에 영향을 미칩니다 xmodmap ~/.Xmodmap.


0

xev데스크톱 환경에서 캡처 한 이벤트를 표시 할 수 없습니다. 키를 테스트하는 더 좋은 방법은 showkey명령을 사용하는 것입니다 (X11이 아닌 Linux 콘솔에서). OS가 실제로 Shift + Super + 일부 키 조합을 수신하고 있다고 생각합니다.

위에서 언급 한 조합을 F 키로 만 다시 매핑 할 수는 있지만 문제가 될 수 있습니다. Shift 키를 "해제"해야합니다 (키보드가 키를 누르는 것을 시뮬레이션하기 때문에). 이전에 Shift 키를 누른 경우 추적이 필요하므로

이 문제는 랩탑에서 매우 일반적이며, 멀티미디어 핫키를 토글하기위한 키 조합 또는 BIOS / 펌웨어 옵션이 있습니다. 그러나 이것이 외부 키보드의 특정 모델에 관한 것이라고 언급했듯이 온라인 에서이 프로젝트를 발견했습니다.

https://github.com/milgner/k290-fnkeyctl

프로젝트 설명에 따르면 "Logitech K290 키보드의 기능 키 작동 방식을 재구성합니다"라고 말하면 시도해 볼 가치가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.