xmodmap pour la combinaison de touches - comment basculer le comportement Fn?

9

Avec le clavier Logitech K290 via USB, les touches F. ne sont pas accessibles par défaut, et je dois appuyer Fnavant de les utiliser, ce qui n'est pas vraiment utilisable.

La Fnclé seule ne déclenche aucun événement xev.

Une pression F1sans Fnfeux de deux événements clés, keycode 50 ( Shift_L) et keycode 133 ( Super_L) et affiche un message « Touchpad désactivé » sur mon Kubuntu (le même message pour chaque clés F1par le biais F4)

Bien que la plupart des clés multimédias fonctionnent, je préfère avoir un accès direct aux touches F. Connaissez-vous un moyen de changer de Fncomportement?

Voici la sortie pour quand j'appuie F1sans 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

Et pour F2(toujours non 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

F1avec Fndonne le résultat attendu:

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
la source
2
En général, <kbd> Fn </kbd> fonctionne au niveau matériel du clavier. Espérons que les codes de touche , par opposition aux noms de clés, des touches F diffèrent toujours lorsqu'ils ne sont pas enfoncés. Pouvez-vous exécuter à xevnouveau et coller la sortie pour deux touches F différentes?
9000
J'ai rencontré le même problème :(. Cette réponse ( askubuntu.com/a/285604/121193 ) pourrait être utile, mais ce serait bien pour quelque chose ... de plus simple.
Ash
1
Malheureusement, Solaar ne fonctionne que pour les émetteurs sans fil, pas les câblés :(
user55574
Je commencerais par regarder dans les paramètres du BIOS. Certains permettent d'échanger la touche Fn, par exemple les touches F par défaut ..
Jonas Berlin
vraiment méchant que F1 réutilise le keycode 50, donc vous ne pouvez pas simplement changer ce que 50 fait non plus ..: P
Jonas Berlin

Réponses:

1

J'ai obtenu le même résultat en échangeant les codes clés entre Fn+Fxet Fxoù x est 1,2,...12.

  1. Utilisez xmodmap -pkepour obtenir une liste des codes clés et symboles clés actuels.
  2. Ensuite, exécutez xevet appuyez F1sur en F12prenant note de son code.
  3. Faites ensuite l'échange dans votre ~/.Xmodmapfichier.

Par exemple, dans mon système, le résultat de (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
..

Ensuite, je l'ai échangé ~/.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
...

Ensuite, pour prendre la course d'affect xmodmap ~/.Xmodmap.

rajames
la source
0

xevne peut pas afficher les événements capturés par l'environnement de bureau. Une meilleure façon de tester les clés est d'utiliser la showkeycommande (sur la console Linux, pas à l'intérieur de X11). Je suppose que le système d'exploitation reçoit en fait une combinaison Maj + Super + certaines touches.

Bien qu'il soit concevable de remapper ladite combinaison à une seule touche F, cela serait probablement gênant: il faudrait "relâcher" la touche Shift (car le clavier simule une pression), et faire fonctionner Shift + F1 serait encore plus compliqué. , car cela nécessiterait un suivi si la touche Maj était maintenue enfoncée précédemment.

Ce problème est très courant sur les ordinateurs portables, qui ont souvent soit une combinaison de touches pour basculer entre les raccourcis clavier multimédias, soit une option dans leur BIOS / firmware. Mais comme vous l'avez mentionné, il s'agit d'un modèle spécifique de clavier externe, en cherchant en ligne j'ai trouvé ce projet:

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

La description du projet indique qu'il "reconfigure le fonctionnement des touches de fonction sur les claviers Logitech K290", donc cela peut valoir la peine d'essayer.

Vladimir Panteleev
la source