キーの組み合わせのxmodmap-Fnの動作を切り替える方法は?


9

USB経由のLogitech K290キーボードでは、FキーはデフォルトではアクセスできFnません。使用する前に押す必要があるため、実際には使用できません。

Fnキーだけですべてのイベントを発生しませんxev

押すF1ことなく、Fn二つの重要なイベント、キーコード50(火Shift_L)とキーコード133( Super_L)とメッセージを表示私のKubuntuの「タッチパッド無効化」(すべてのキーに同じメッセージ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もう一度実行して、2つの異なるFキーの出力を貼り付けてください。
9000

私は同じ問題に遭遇しました:(この回答(。askubuntu.com/a/285604/121193は)役に立つかもしれないが、それは何か...単純ためにいいだろう。
アッシュ

1
悲しいことに、Solaarはワイヤレスエミッターでのみ機能し、有線エミッターでは機能しません:(
user55574

まず、BIOS設定を確認します。Fnキーの交換を許可するものもあります。例:F-keys-by-default ..
ジョナスベルリン

あなただけの50のいずれかに何をするか変更することはできませんので、F1は、キーコード50を再利用することは本当に嫌な..:P
ジョナスベルリン

回答:


1

xがFn+Fxとの間でキーコードを交換しても同じ結果が得られます。Fx1,2,...12

  1. xmodmap -pke現在のキーコードとキーシンボルのリストを取得するために使用します。
  2. 次に、キーコードをメモしておいて実行しxev、押します。F1F12
  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+ F1を機能させるのはさらに複雑です。 、Shiftキーが以前に押されていた場合は追跡が必要になるため。

この問題はラップトップで非常によく見られます。ラップトップでは、マルチメディアホットキーを切り替えるキーの組み合わせ、またはBIOS /ファームウェアにオプションが設定されていることがよくあります。しかし、これは外部キーボードの特定のモデルに関するものであると述べたように、オンラインでこのプロジェクトを見つけました。

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

プロジェクトの説明には、「Logicool K290キーボードのファンクションキーの動作を再構成する」と記載されているので、試してみる価値はあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.