web-dev-qa-db-ja.com

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

USB経由のLogitechK290キーボードでは、デフォルトでF.キーにアクセスできないため、を押す必要があります。 Fn それらを使用する前に、それは実際には使用できません。

ザ・ Fn キーだけでは、xevでイベントは発生しません。

押す F1 なし Fn 2つのキーイベント、キーコード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

F1 と Fn 期待される結果が得られます:

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
9
user55574

キーコードをFn+FxFxの間で交換しても同じ結果が得られました。ここで、xは1,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を実行します。

1
rajames

xevは、デスクトップ環境によってキャプチャされたイベントを表示できません。キーをテストするためのより良い方法は、showkeyコマンドを使用することです(X11内ではなくLinuxコンソールで)。 OSは実際にShift + Super +いくつかのキーの組み合わせを受け取っていると思います。

上記の組み合わせをFキーだけに再マッピングすることもできますが、面倒な場合があります。Shiftキーを「離す」必要があり(キーボードはそれを押すことをシミュレートするため)、Shift + F1を機能させるのはさらに複雑になります。 、Shiftキーが前に押されていた場合は追跡が必要になるため。

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

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

プロジェクトの説明には、「Logitech K290キーボードのファンクションキーの動作方法を再構成する」と記載されているため、試してみる価値があるかもしれません。

0