Digitando usando le combinazioni di tasti?


12

Sono un utente di Ubuntu 10.04 che sta cercando un modo, ad esempio, per fare in modo che il mio computer digiti un carattere "+" quando tengo premuto il Windowstasto (penso che sia chiamato Supernel mondo Linux) e premo il Ktasto. Ho bisogno di questo per funzionare in tutte le applicazioni. (Sono una persona con disabilità nella scrittura e devo adattare Ubuntu alle mie esigenze.) Grazie!

Risposte:


15

Dato che vuoi rimappare le chiavi per tutte le applicazioni, l'opzione migliore è usare xmodmap. È flessibile e molto potente ma comporta la digitazione di alcuni comandi in un terminale.

Step 0 - L'approccio

L'X-server gestisce la tastiera e tutti gli eventi chiave e li traduce in codici chiave per tutte le applicazioni.

L'approccio sarebbe quello di mappare un tasto modificatore (come il tasto Super o Alt destro) come il tasto "interruttore modalità" e dire all'X-server di generare codici diversi a seconda che un tasto sia premuto tenendo premuto il tasto Mode.

Per impostazione predefinita, non è definito alcun tasto selettore di modalità e inoltre tutti i tasti sono configurati per generare lo stesso codice quando vengono premuti con o senza selettore di modalità. Ciò è positivo poiché ciò significa che, ad eccezione delle chiavi che sostituisci esplicitamente, nessun'altra chiave si comporterà diversamente o necessiterà di una configurazione aggiuntiva.

Tuttavia, vorrei che tu prendessi in considerazione l'uso del tasto Alt destro come selettore di modalità, specialmente se stai usando anche compiz poiché alcuni plugin compiz mappano le scorciatoie da tastiera dei tasti super (ad esempio, selettore di finestre, selettore di spostamento ecc.). Se non sei interessato a controllare Compiz tramite la tastiera, allora Super va bene.

In xmodmap, le super chiavi sono identificate come Super_L o Super_R. Devi sceglierne uno da utilizzare come tasto di commutazione modalità. In alternativa, il tasto alt destro è Alt_R. Puoi confermarli eseguendo xev e premendo i tasti necessari sulla tastiera. Vedi questo post per i passaggi.

Passaggio 1: impostazione della mappa dei modificatori

  1. Apri un terminale ( Applications -> Accesories -> Terminal) ed esegui il comando seguente per creare un file con le associazioni dei tasti correnti . Useremo questo come punto di partenza.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Apri questo nel tuo editor di testo preferito. gedit curkeys.map &lo apre in gedit. Verso la fine del file, vedrai alcune righe come questa:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. Elimina la riga che inizia con "xmodmap: fino a 4 ..."

  4. Modifica la mappa del modificatore in modo che appaia così. Inserisci la parola "aggiungi" all'inizio di ogni riga e inserisci "=" dopo il nome del modificatore. Quindi rimuovere i codici tra parentesi e virgole. Nota anche che mi sono spostato Mode_switchda una mod5riga all'altra mod3poiché era vuoto. La tabella modificata dovrebbe apparire così: i contenuti effettivi variano leggermente nel tuo caso da quelli sotto (dipende dal layout della tastiera).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Rimappare la chiave di commutazione della modalità fisica. Aggiungi una riga come questa alla fine (sostituisci Super_L con Super_R o Alt_R se necessario).

    keysym Super_L = Mode_switch
    
  6. Rimuovi il nome chiave (Super_L) da qualsiasi definizione di modificatore. Per Super_L questo significa rimuoverlo dalla linea mod4.

    add mod4    =    Super_R Hyper_L 
    

    Ora il tasto "Super" destro agirà comunque come un normale tasto super mentre il tasto sinistro avrà proprietà speciali.

  7. Ora dobbiamo rimappare i tasti per produrre codici diversi indipendentemente dal fatto che vengano premuti tenendo premuto Super_L o meno. Ogni riga nel nostro file che inizia con keycodespecifica 4 palestra per ogni tasto da generare in base alla pressione di Mod1 (tasti maiuscole) e selettori di modalità. ( Collegamento )

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Se vogliamo che il tasto Super_L + k generi un tasto "+", dobbiamo modificarlo per leggerlo

    keycode  45 = k K plus plus
    

    Il plus finale mappa anche Shift + Super_L + k su plus, ma questo può essere mappato su qualcos'altro. Per ogni tasto c'è esattamente 1 riga da modificare. Modifica più righe per rimappare più chiavi: lascia intatte le prime 2 voci per mantenere il normale comportamento di pressione dei tasti.

  8. Salvare il file ed uscire dall'editor.

  9. Installa la mappa dei tasti eseguendo i seguenti comandi in un terminale. Il primo lo imposta per questa sessione, il secondo lo rende permanente per le sessioni future.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Puoi provarlo immediatamente premendo i tasti modificati (ad esempio Super_L + k).

Passaggio 3: aggiunta / revisione della mappa

Una volta installata la mappa modificata, è facile aggiungere nuove chiavi.

  1. Usa xev per trovare i codici chiave e le keyestre

  2. testarlo eseguendo questo comando per mappare la chiave:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Sostituisci gli elementi tra parentesi angolari (come <code> <base>ecc.) Con i valori appropriati.

  3. Eseguire il backup del curkeys.mapfile.

  4. Aprire curkeys.mape modificare la riga per il codice chiave corrispondente.
  5. Riapplicare con i comandi seguenti (il primo non è necessario se si è eseguito il passaggio 2)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Nota: 1 : le modifiche apportate nelle scorciatoie da tastiera (tramite ad esempio, System -> Preferences -> Keyboard Shortcuts) influiscono sulla mappa del modificatore e andranno generalmente perse al prossimo accesso. Quindi, per favore, evitatelo.

Nota: 2 : a volte ricevo messaggi di errore come questo mentre utilizzo questo metodo. Non so cosa significhi, tuttavia, questi sono generalmente innocui.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

La guida dettagliata per xmodmap è disponibile qui .


qualche fortuna con questo? Se questo non aiuta o in qualche modo commenta in modo poco chiaro, lo rivedrò e lo renderò più utile.
Koushik,

1
Si prega di notare che in Linux Mint 17 Xfce (o almeno ci), deve essere ~/.Xmodmap, ~/.xmodmapviene ignorato.
zbr,

2
Non dimenticare clearle chiavi che vengono ripristinate come da unix.stackexchange.com/a/4526/2512
Andy,
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.