Come rimappare determinati tasti o dispositivi?


236

Sto cercando un modo per rimappare alcune chiavi in ​​Ubuntu.

vale a dire

Vorrei cambiare PgUpin Homeo PgDownin End.

Esiste un comando o uno strumento integrato per riassegnare le chiavi in ​​Ubuntu / GNOME?


controlla la mia risposta qui . Non vale la pena copiare e incollare la stessa risposta. Forse ti sarebbe di aiuto.
Rahul Virpara,

1
Qualche associazione simile a Emacs qui per CTRL-P / N per passi unitari?
Léo Léopold Hertz

Da qualche tempo xmodmapè deprecato! per ottenere un'impostazione a livello di sistema è necessario utilizzare xkb. Quindi modifica il file della lingua /usr/share/X11/xkb/symbols/per aggiungere lì le tue modifiche. Vedi askubuntu.com/a/898462/34298
rubo77

Risposte:


249

Avviso: A partire dal 2013, Ubuntu e derivati ​​non usano più xmodmap, ma invece usano xkb. Per maggiori informazioni vedi questa risposta . La risposta di seguito non è più rilevante per le versioni correnti.


Per rimappare alcune chiavi sono necessari due strumenti. Primo xev (strumento da riga di comando) e secondo xmodmap (anche strumento da riga di comando). Entrambi dovrebbero essere disponibili in Ubuntu senza installarli ulteriormente.

  1. Avvia la finestra del terminale ed esegui xev. Ora è attivo e attende che tu prema un tasto. Quindi premere il tasto di cui si desidera modificare il comportamento. vale a dire PgUp.

  2. xevprodurrà alcune informazioni sul tasto premuto. La terza linea è importante. Dovrebbe apparire simile a:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    in questo esempio Priorè il nome del comportamento a cui è assegnata la chiave al momento, il codice chiave numerico è l'id interno per riconoscere la chiave. Ora fallo con un altro tasto, cioè dai PgDownquesto output

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Anche in questo caso la parte interessante per noi è keycode 115e Next- il nome del comportamento.

  3. ora quando si desidera scambiare i due tasti utilizzare xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Questo cambia la chiave con keycode 110 sulla tastiera per l'azione Next. È abbastanza semplice

    Nota che se il tasto che stai mappando dovrebbe avere un significato diverso quando usato con il Shifttasto (ad esempio per i layout di tastiera britannici, Shift+ 2indica le virgolette), puoi semplicemente elencare il comando secondario dopo il primo. Ad esempio, se si desidera che la chiave con il codice 53 esegua il mapping di una barra rovesciata normalmente, ma al simbolo della barra quando utilizzato con shift, è possibile:

     xmodmap -e "keycode 53 = backslash bar"
    

Ulteriori informazioni: La sequenza di queste mappature è Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Per saltare una colonna usare NoSymbol. Inoltre, ecco un elenco completo di tutte le palestre.

Nota: queste modifiche sono solo per la sessione X attiva e andranno perse dopo il riavvio. Quando vuoi salvare le modifiche in modo permanente devi eseguire i seguenti comandi dopo quelli sopra:

xmodmap -pke >~/.Xmodmap

(crea un file chiamato .Xmodmapnella tua home directory ( ~))

Quindi devi creare un file chiamato .xinitrcnella tua home directory in cui hai inserito il comando xmodmap .Xmodmap.

Ora puoi modificare .Xmodmaped eseguire xmodmap .Xmodmapdalla console per vedere immediatamente le modifiche. Le modifiche .Xmodmapcontinueranno.

fonte: Ubuntu Foruns

Bonus:

Se il tasto che stai rimappando ha un comportamento diverso a seconda di uno stato (come il modo in cui i tasti della tastiera numerica dipendono da NumLock) devi semplicemente fare xmodmap -pmun elenco di modificatori e poi fare:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Supponiamo, ad esempio, di voler ottenere un punto anziché una virgola sulla tastiera numerica (utile per la maggior parte dei programmatori), ma che si desidera mantenere il comportamento di "eliminazione" quando NumLock è disattivato.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, perché xmodmap -pmci dice che mod2è Num_Lock, gli altri nomi si ottengono premendo i tasti xev.


3
xevnon è in grado di rilevare la Fnpressione dei tasti
om-nom-nom,

3
La risposta selezionata non ha funzionato per rimappare il tasto BLOC MAIUSC per me su Ubuntu 12.10. Sono stato in grado di farlo andando su Impostazioni di sistema -> Tastiera -> Impostazioni layout -> Opzioni, che ha un elenco di tasti e comportamenti alternativi. Ha funzionato perfettamente in Unity e nel terminale.
Allyl Isocyanate,

1
Se hai più tastiere collegate, questi strumenti vedranno una differenza tra lo stesso tasto su un'altra tastiera?
Stommestack,

1
Strano, ho fatto tutto, ma i miei keymappings si resettavano ancora dopo il riavvio.
Costa,

1
Non credo di avere una -eventbandiera in Ubuntu 12.04. Genera un errore e non menziona "evento" in man xev.
isomorfismi,

20

Se stai provando a spostare un tasto Maiusc, ci sono alcuni passaggi aggiuntivi:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

+1 La risposta più unix-y di tutte quelle per un modificatore (avevo già fatto così, molto tempo fa con il mio iBook 2, quando volevo che il tasto Invio avesse la funzione di Control_R, ma avevo dimenticato i dettagli).
rbrito,

2
Una risposta importante per gli utenti che utilizzano le tastiere sui laptop Lenovo
Einar Ólafsson,

16

Ho appena avuto un ripensamento .. Penso che potresti significare qualcosa di completamente diverso da "rimappare" .. ma lascerò la mia risposta così com'è ... (Non so come riassegnare una chiave a comportarsi come un altro)

AGGIORNAMENTO : il mio "ripensamento" è stato confermato; (Ho risposto alla domanda sbagliata:) ... per favore vedi la risposta del Wiki della Community di NES (accettata sopra).

Esistono due modi generali per rimappare una chiave.

  • localmente a un determinato programma
    (una chiave può essere utilizzata per cose diverse in diverse app / finestre)
  • globalmente per un utente specifico
    (un tasto ha la stessa funzione in tutte le finestre)

Per i metodi "da locale a un programma", a volte esiste un modo per cambiare le combinazioni di tasti offerte dall'app stessa ... ad es.

Firefoxha un addon chiamato keyconfig ... per alcune informazioni vedi questo post di MozillZine

La maggior parte dei programmi Ubuntu sono basati su Gnome e c'è un'utilità specifica per modificare la combinazione di tasti per qualsiasi voce di menu di queste app Gnome ... Si chiama Editable Menu Accelerator... È uno strumento molto 'permaloso', ma abbastanza potente .. Puoi abilitare eseguendolo gconf-editor(tramite Terminale o Alt + F2) ... vai a desktop- gnome- interfacee seleziona can_change_accels.... Puoi quindi cambiare le voci di menu in virtuale qualsiasi cosa ti piaccia (per programma / finestra) ... Ti suggerisco di disabilitare appena hai fatto quello che ti serve ..

Altrimenti è possibile impostare tasti di scelta rapida globali. Uso un programma chiamato xbindkeys Installa xbindkeys e nel menu principale è disponibile anche un'opzione - Preferenze, chiamataKeyboard Shortcuts

Se usi xbindkeys, dovrai aggiungerlo alle tue "Applicazioni di avvio" (Menu principale - Preferenze) ... Inoltre (come suggerito da Stefano Palazzo) Ho precedentemente scritto una descrizione più dettagliata di xbindkeys in una risposta su questo pagina askubuntu


+1, molto carino! Un suggerimento: dovresti integrare la tua grande risposta da un'altra domanda in questa, forse anche spiegare un po 'il formato di configurazione di xbindkeys.
Stefano Palazzo

1
Il bit sull'assegnazione di altre chiavi potrebbe essere gestito da xdotool, controlla la pagina man, l'ho usato per risolvere questo problema .
Stefano Palazzo

di recente ho trovato un altro approccio con uno strumento chiamato xmodmap in combinazione con uno strumento chiamato xev. non so quali siano le differenze tra xmodmap e xbindkeys, ma per me funziona piuttosto bene. qualche consiglio con lo strumento da preferire dei due nominati? Ecco una guida passo passo molto utile che descrive xmodmap e xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

@NES .. Sembra che abbia affrontato il punto sbagliato .. Sembra che tu voglia veramente rimappare il modo in cui un determinato tasto viene interpretato dal sistema operativo, cioè un'interpretazione non standard della tastiera, mentre mi riferivo a un interpretazione da tastiera standard e sovraccarico delle assegnazioni di tasti predefinite. (Penso che quello che stai cercando sia simile allo scambio dei pulsanti sinistro e destro del mouse) .. Beh, sembra che la mia risposta sia buona per la cosa sbagliata :)
Peter.O,

si, ma nessun problema. anche la risposta è interessante. la guida passo passo che ho pubblicato il link sopra era il modo giusto. quindi posterò una breve risposta con la soluzione che gli altri utenti hanno una buona guida. grazie fred
NES

9

Ecco come ho provato a cambiare la mappatura della ENTERchiave sulla SHIFTchiave (e viceversa):

$ uname -a

RAPPORTI:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

RAPPORTI:

/usr/bin/xmodmap

$ which xev

RAPPORTI:

/usr/bin/xev

$ xev

(ignora le prossime cinquanta righe o giù di lì)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

L'importante è la terza riga di ciascun tasto:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

INVERTI IL MAPPATURA:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

SALVA I RISULTATI:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

INSERISCI

 xmodmap ~/.Xmodmap

$ sudo reboot

Il problema principale era che l'inversione NON funzionava. La ENTERchiave è stata mappata sulla SHIFT_Rchiave; ma la SHIFT_Rchiave non è stato mappato alla ENTERchiave. Vai a capire.


7

Per eseguire rimappature globali indipendentemente da X, puoi invece utilizzare console-setup (5) .

Nel mio caso volevo rimappare la Caps Lockchiave in D, poiché il mio D-key è rotto :)

Per prima cosa ho usato dumpkeys (1) per ottenere un modello per una mappatura, nel caso del D-key, il bit interessante è la mappatura per keycode 32 (sulla mia tastiera); Nota che ci sono due spazi nel modello grep!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Per cambiare invece la mappa da applicare a Caps Lock(keycode 58 sulla mia tastiera)

sed 's/32/58/' -i tempfile

Adesso legge

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Per aggiungere questo rimappa alla mappa predefinita, deve semplicemente essere aggiunto al file include rimappa per l' installazione della console

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

e la configurazione della console deve essere riconfigurata (saltando le domande a bassa priorità con -phigh)

sudo dpkg-reconfigure console-setup -phigh

Ora il rimappamento dovrebbe essere completato ed essere caricato automaticamente all'avvio.


3

Ho trascorso un giorno intero nel tentativo di creare una scorciatoia per Ctrl+Pageup.

Prima ho provato, xmodmapma questo non può generare eventi modificatori. Quindi è impossibile creare un collegamento che generi ad esempio l' Controlevento.

Ho quindi provato xbindkeyscon xmacro. Questo tipo di funzionamento funziona, ma xbindkeysnon è in grado di acquisire alcune combinazioni di tasti sul mio sistema, ad esempio Alt + ___.

Quindi ho finalmente usato le scorciatoie da tastiera di Unity -> Scorciatoie personalizzate per impostare la mia scorciatoia.

E invece di xmacroora ho usato il xvkbdprogramma per generare gli eventi della tastiera, ma questa è solo una preferenza personale. Entrambi xmacroe xvkbdfunzionano quasi allo stesso modo. Un ulteriore suggerimento è aggiungere un parametro di ritardo xmacroo xvkbdassicurarsi che gli eventi non vadano persi.


2

Per me AutoKey di Software Center ha funzionato al meglio. Ha una GUI intuitiva, per aggiungere una nuova associazione fare clic su Nuovo -> Frase e

  1. Aggiungi nome, fai clic su OK
  2. Nella sezione "Impostazioni frase" assicurati che l'opzione incolla usando sia impostata su tastiera
  3. Aggiungi il tasto di scelta rapida che desideri utilizzare
  4. Aggiungi il comando nel campo di testo, ad es. Per emulare il tasto freccia sinistra - sarebbe <left>(l'elenco dei tasti speciali è qui ).

Questo ha funzionato perfettamente per l'installazione Super+Ce Super+Vper Ctrl+Ce Ctrl+V. Solo la soluzione perfetta quando si utilizza Ubuntu tramite VirtualBox su un Mac
Ben

Tuttavia, ciò non disabilita altri comandi che ascoltano queste scorciatoie. Per disabilitare Super+V"mostra l'elenco delle notifiche" vai su Impostazioni -> Dispositivi -> Tastiera e disabilitalo lì
Ben

@Ben yup, sarebbe bello se mostrasse i collegamenti di altre app, ma è piuttosto la ciliegina sulla torta. Il mio problema è che non è possibile rimappare il tasto "Fn". Ho deciso di provare la tastiera: quella cosa programmabile indipendentemente dal sistema operativo, vedrà come va.
ego,

0

Se hai bisogno di rimappare una chiave solo per un programma specifico, ho appena aggiunto questa funzione a hax11.

Vorrei cambiare PgUpin Homeo PgDownin End.

Per fare questo con hax11, apri il file di configurazione del profilo del programma in ~/.config/hax11/profiles(ad es. ~/.config/hax11/profiles/usr\lib\firefox\firefox) E aggiungi:

Enable=1
MapK112=K110
MapK117=K115
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.