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キーにマッピングしました。

関連情報