Fedora에서 여러 스캔 코드에 대한 매핑 키 생성

Fedora에서 여러 스캔 코드에 대한 매핑 키 생성

저는 MSI 노트북을 소유하고 있으며 F 키에는 몇 가지 특별한 기능이 있습니다. 예를 들어 F4 키는 터치패드를 전환합니다.

Windows에서는 이 키가 예상대로 작동합니다. 즉, 터치패드를 활성화/비활성화합니다. 하지만 Linux(Fedora)에서는 작동하지 않습니다.

showkey -s이 키를 누르면 다음과 같은 결과가 나타납니다.

0x1d 0xe0 0x5b 0x76 0x9d 0xe0 0xdb 0xf6

showkey어떤 매개변수도 이 결과를 생성하지 않습니다.

keycode  28 release
keycode  29 press
keycode 125 press
keycode  85 press
keycode  29 release
keycode 125 release
keycode  85 release

내가 얻는 것과 거의 동일합니다 xev.

KeyPress event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277257, (692,1239), root:(692,1314),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277259, (692,1239), root:(692,1314),
    state 0x4, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277261, (692,1239), root:(692,1314),
    state 0x44, keycode 93 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277262, (692,1239), root:(692,1314),
    state 0x44, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277265, (692,1239), root:(692,1314),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x6200001,
    root 0x7e7, subw 0x0, time 1277266, (692,1239), root:(692,1314),
    state 0x0, keycode 93 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

총 3개의 KeyPress 이벤트와 3개의 KeyRelease 이벤트가 있습니다.

xbindkeys --multikeyF4 키를 누르면 다음 정보가 제공됩니다.

"(Scheme function)"
    m:0x44 + c:37
    Control+Mod4 + Control_L
"(Scheme function)"
    m:0x40 + c:133
    Mod4 + Super_L
"(Scheme function)"
    m:0x0 + c:93
    NoSymbol

xbindkeys첫 번째 부분을 사용하여 키를 내가 좋아하는 .xbindkeysrc 파일로 다시 매핑해 보았습니다 .

"xdotool key --clearmodifiers XF86TouchpadToggle"
    m:0x44 + c:37 + Release

그러나 그것은 작동하지 않았습니다.

Fedora에서 이를 달성하는 방법에 대한 올바른 방향/도구를 알려주세요. 내 첫 번째 후보는 xchainkeys신뢰할 수 있는/퓨전 저장소에서 사용할 수 없습니다. 긴 시퀀스 스캔 코드를 통해 키를 다시 매핑하는 다른 방법이 있습니까?

답변1

~에서Fn 키와 관련된 키보드 단축키 정의이 질문에 답할 수 있는 몇 가지 통찰력이 있습니다.

Fn대부분의 시스템에서는 키 자체를 감지하는 것이 불가능 하지만 다음을 사용해 볼 수 있습니다.

$ xev | grep --line-buffered keysym

어떤 키를 찾아 Fn-Left보내세요 Fn-Right. (이렇게 grep하면 소음이 줄어듭니다.)

운이 좋다면 중요하지 않은 키 입력을 컴퓨터로 보내어 다시 매핑할 수 있습니다.

예를 들어, 내 시스템에서는 키 누르기가 실제로 이벤트를 보내는 xev것으로 나타납니다 .Fn-LeftXF86AudioPrev

state 0x0, keycode 173 (keysym 0x1008ff16, XF86AudioPrev), same_screen YES,

이를 Home주요 이벤트로 쉽게 다시 매핑할 수 있습니다.

$ xmodmap -e 'keysym XF86AudioPrev = Home'

End, PageUp 및 PageDown에 대해서도 동일한 작업을 수행할 수 있기를 바랍니다.

불행하게도 xev를 누를 때 고유한 정보가 수신되지 않으면 Fn-Left운이 없는 것입니다.

Fn키 입력이 다른 수정자 키처럼 직접 전송되지 않는다는 점은 아쉽습니다 . 만약 그렇다면 우리는 소프트웨어를 통해 그 의미를 구성할 수 있는 능력이 더 많아졌을 것입니다.

답변2

msi p15(a10sc) 노트북에서도 똑같은 문제가 발생합니다.

toggleTouchpad.sh나는 "동일한 키 조합에 매핑"이라는 스크립트를 만들었습니다.

xbindkeys --key

F4그 키를 누르고 LeftCtrl로 바꾸면 그 순서( + + ) RightCtrl가 더 자연스러워서요.CtrlMod4RightCtrl

  • 스크립트:
    #!/usr/bin/bash                                                                                                                                                                            
    touchpadId=$(xinput list | grep -o 'Touchpad.*id=[0-9]*' | awk 'NF{print $NF}' | sed 's/id=//')                                                                                            
    propId=$(xinput list-props $touchpadId | awk '/Device Enabled \([0-9]+\)/{print $3}' | sed 's/[():]//g')                                                                                   
    propVal=$(xinput list-props $touchpadId | awk '/Device Enabled \([0-9]+\)/{print $4}')                                                                                                     
    
    if [ "$propVal" -eq "1" ]; then                                                                                                                                                            
        xinput set-prop $touchpadId $propId 0                                                                                                                                                  
    else                                                                                                                                                                                       
        xinput set-prop $touchpadId $propId 1                                                                                                                                                  
    fi
    
  • 내 거.xbindkeysrc
    "toggleTouchpad.sh"                                                                                                                                                                                 
        Control+Mod4 + Control_R 
    

스크립트를 사용하는 경우 터치패드 ID를 올바르게 가져왔는지 확인하세요(저는 bash 전문가가 아닙니다).아치스 위키가세요.

분명히 스크립트를 다른 키 조합에 바인딩할 수 있습니다.

노트

  • 이는 중요한 문제를 해결하지는 못하지만 F4해결책을 찾을 때 유용할 수 있습니다.
  • Mod4Windows열쇠 이다

답변3

마침내 이 문제를 해결했습니다. 솔루션의 주요 단계는 Arch wiki에서 찾을 수 있습니다.여기. 제가 소유한 MSI 노트북과 정확히 똑같지는 않지만 여전히 제게는 작동합니다.

내가 해야 할 일은 원래 기능에 키코드 93을 할당하는 것뿐이었습니다.

~/.Xmodmap

keycode  93 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

그런 다음 단축키 설정에서 KDE를 사용하고 있으므로 터치패드 토글 동작을 필수 F4 키에 매핑했습니다.

관련 정보