xmodmap für Tastenkombination - wie kann man das Fn-Verhalten umschalten?

9

Bei der Logitech K290-Tastatur über USB sind die F.-Tasten standardmäßig nicht verfügbar, und ich muss sie Fnvor der Verwendung drücken , was nicht wirklich verwendbar ist.

Der FnSchlüssel allein löst kein Ereignis in aus xev.

Wenn Sie F1ohne Drücken Fnzwei Tastenereignisse auslösen, den Schlüsselcode 50 ( Shift_L) und den Schlüsselcode 133 ( Super_L), wird auf meinem Kubuntu die Meldung "Touchpad deaktiviert" angezeigt (dieselbe Meldung für alle Tasten F1durch F4).

Obwohl die meisten Medientasten funktionieren, hätte ich lieber direkten Zugriff auf F.-Tasten. Kennen Sie eine Möglichkeit, das FnVerhalten umzuschalten ?

Hier ist die Ausgabe, wenn ich F1ohne drücke 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

Und für F2(immer noch nein 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

F1mit Fngibt erwartetes Ergebnis:

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
user55574
quelle
2
Normalerweise funktioniert <kbd> Fn </ kbd> auf der Hardwareebene der Tastatur. Hoffentlich keycodes , wie zu Keysyms Gegensatz von F-Tasten noch unterscheiden , wenn sie nicht gedrückt wird . Können Sie bitte noch xeveinmal ausführen und die Ausgabe für zwei verschiedene F-Tasten einfügen?
9000
Ich bin auf das gleiche Problem gestoßen :(. Diese Antwort ( askubuntu.com/a/285604/121193 ) mag nützlich sein, aber es wäre schön für etwas ... Einfacheres.
Ash
1
Leider funktioniert Solaar nur für drahtlose Sender, nicht für drahtgebundene :(
user55574
Ich würde zunächst in den BIOS-Einstellungen nachsehen. Einige erlauben das Vertauschen der Fn-Taste, z. B. standardmäßig F-Tasten.
Jonas Berlin
wirklich böse, dass F1 den Schlüsselcode 50 wiederverwendet, also kann man auch nicht einfach ändern, was 50 macht ..: P
Jonas Berlin

Antworten:

1

Ich habe das gleiche Ergebnis erzielt, indem ich die Schlüsselcodes zwischen Fn+Fxund Fxwo x ist getauscht habe 1,2,...12.

  1. Verwenden Sie xmodmap -pkediese Option, um eine Liste der aktuellen Schlüsselcodes und Schlüsselsymbole abzurufen.
  2. Dann laufen xevund drücken F1durch F12Kenntnis ihrer keycode zu halten.
  3. Dann machen Sie den Swap in Ihrer ~/.XmodmapDatei.

Zum Beispiel in meinem System das Ergebnis von (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
..

Dann habe ich es eingetauscht ~/.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
...

Dann zum Affektlauf nehmen xmodmap ~/.Xmodmap.

Rajames
quelle
0

xevEreignisse, die von der Desktop-Umgebung erfasst werden, können nicht angezeigt werden. Eine bessere Möglichkeit zum Testen von Schlüsseln ist die Verwendung eines showkeyBefehls (an der Linux-Konsole, nicht in X11). Ich vermute, dass das Betriebssystem tatsächlich eine Shift + Super + -Kombination mit einigen Tasten erhält.

Obwohl Sie diese Kombination möglicherweise nur einer F-Taste zuordnen könnten, wäre dies wahrscheinlich problematisch: Sie müssten die Umschalttaste "loslassen" (da die Tastatur das Drücken simuliert), und die Umschalttaste + F1-Funktion wäre noch komplizierter , da es eine Verfolgung erfordern würde, wenn die Umschalttaste zuvor gedrückt gehalten wurde.

Dieses Problem tritt häufig bei Laptops auf, die häufig entweder eine Tastenkombination zum Umschalten von Multimedia-Hotkeys oder eine Option in ihrem BIOS / ihrer Firmware haben. Aber wie Sie erwähnt haben, dass es sich um ein bestimmtes Modell einer externen Tastatur handelt, habe ich online gesucht: Ich habe dieses Projekt gefunden:

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

In der Projektbeschreibung heißt es, dass "die Funktionsweise der Funktionstasten auf Logitech K290-Tastaturen neu konfiguriert wird", sodass es sich möglicherweise lohnt, einen Versuch zu unternehmen.

Vladimir Panteleev
quelle