xmodmap per la combinazione di tasti: come attivare il comportamento Fn?


9

Con la tastiera Logitech K290 tramite USB, i tasti F. non sono accessibili per impostazione predefinita e devo premere Fnprima di usarli, il che non è realmente utilizzabile.

La Fnchiave da sola non genera alcun evento xev.

Premendo F1senza Fnfuochi due eventi chiave, keycode 50 ( Shift_L) e keycode 133 ( Super_L) e visualizza un messaggio "Touchpad disabile" sulla mia Kubuntu (lo stesso messaggio per ogni chiavi F1attraverso F4)

Anche se la maggior parte delle chiavi multimediali funziona, preferirei avere accesso diretto alle chiavi F. Conosci un modo per attivare / disattivare il Fncomportamento?

Ecco l'output per quando premo F1senza 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

E per F2(ancora no 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

F1con Fndà il risultato atteso:

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
Di solito <kbd> Fn </kbd> funziona a livello hardware della tastiera. Si spera che i codici chiave , a differenza delle palestre, dei tasti F differiscano ancora quando non vengono premuti. Puoi per favore eseguire xevancora una volta e incollare l'output per due diversi tasti F?
9000,

Mi sono imbattuto nello stesso problema :(. Questa risposta ( askubuntu.com/a/285604/121193 ) potrebbe essere utile, ma sarebbe bello per qualcosa di più semplice.
Ash,

1
Sfortunatamente, Solaar funziona solo per emettitori wireless, non cablati :(
user55574,

Vorrei iniziare guardando nelle impostazioni del BIOS. Alcuni consentono di scambiare il tasto Fn, ad esempio i tasti F di default.
Jonas Berlin

davvero brutto che la F1 riutilizzi il keycode 50, quindi non puoi semplicemente cambiare ciò che 50 fa ..: P
Jonas Berlin

Risposte:


1

Ho ottenuto lo stesso risultato scambiando i codici chiave tra Fn+Fxe Fxdove x è 1,2,...12.

  1. Utilizzare xmodmap -pkeper ottenere un elenco dei codici chiave e dei simboli chiave correnti.
  2. Quindi eseguire xeve premere F1attraverso F12mantenendo nota del suo codice.
  3. Quindi effettua lo scambio nel tuo ~/.Xmodmapfile.

Ad esempio nel mio sistema il risultato di (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
..

Quindi l'ho scambiato in ~/.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
...

Quindi eseguire la corsa degli affetti xmodmap ~/.Xmodmap.


0

xevnon è possibile mostrare eventi acquisiti dall'ambiente desktop. Un modo migliore per testare le chiavi è usare il showkeycomando (dalla console Linux, non all'interno di X11). Immagino che il sistema operativo stia effettivamente ricevendo una combinazione di alcuni tasti Maiusc + Super +.

Sebbene si possa concepibilmente rimappare tale combinazione con un solo tasto F, sarebbe probabilmente problematico: dovresti "rilasciare" il tasto Maiusc (perché la tastiera simula di premerlo) e far funzionare Shift + F1 sarebbe ancora più complicato , poiché richiederebbe il tracciamento se il tasto Maiusc fosse tenuto premuto in precedenza.

Questo problema è molto comune sui laptop, che spesso hanno una combinazione di tasti per attivare / disattivare i tasti di scelta rapida multimediali o un'opzione nel loro BIOS / firmware. Ma come hai detto che si tratta di un modello specifico di tastiera esterna, guardando online ho trovato questo progetto:

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

La descrizione del progetto afferma che "riconfigura il modo in cui funzionano i tasti funzione sulle tastiere Logitech K290", quindi potrebbe valere la pena provare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.