Come rimappare determinati tasti o dispositivi?

220

Sto cercando un modo per rimappare certi tasti in ubuntu.

vale a dire.

Mi piacerebbe cambiare PgUp in Home o PgDown in Fine .

Esiste un comando o uno strumento incorporato che riassegna le chiavi in Ubuntu / GNOME?

    
posta NES 05.02.2011 - 14:20

7 risposte

239

Avviso: dal 2013, Ubuntu e derivati non usano più xmodmap , ma usano xkb . Per ulteriori informazioni, consulta questa risposta . La risposta sotto non è più rilevante per le versioni correnti.

Per rimappare determinati tasti hai bisogno di due strumenti. Prima 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 aspetta che tu prema un tasto. Quindi premere il tasto di cui si desidera modificare il comportamento. Ad esempio PgUp .

  2. xev produrrà alcune informazioni sul tasto premuto. La terza riga è 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 del numero è l'ID interno per il riconoscimento della chiave. Ora fai questo con un'altra chiave, cioè PgDown dai questo output

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

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

  3. ora quando vuoi scambiare i due tasti usa xmodmap .

     xmodmap -e "keycode 110 = Next"
    

    Cambia la chiave con keycode 110 sulla tastiera per l'azione Next . È piuttosto semplice.

    Si noti che se la chiave che si sta mappando dovrebbe avere un significato diverso quando viene utilizzata con il tasto Maiusc (ad esempio per i layout di tastiera britannici, Maiusc + 2 fornisce le virgolette), quindi puoi semplicemente elencare il comando secondario dopo il primo. Ad esempio se si desidera che la chiave con il codice 53 si associ normalmente al backslash, ma al simbolo della barra quando viene utilizzata con shift, si potrebbe fare:

     xmodmap -e "keycode 53 = backslash bar"
    

Informazioni aggiuntive: la sequenza di questi mapping è Key , Shift + Key , mode_switch + Key , mode_switch + Shift + Key , AltGr + Key , AltGr + Shift + Key . Per saltare una colonna usa NoSymbol . Inoltre, qui è un elenco completo di tutte le chiavi.

Nota: queste modifiche riguardano solo 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 .Xmodmap nella tua home directory ( ~ ))

Quindi devi creare un file denominato .xinitrc nella tua home directory in cui inserisci il comando xmodmap .Xmodmap in.

Ora puoi modificare .Xmodmap ed eseguire xmodmap .Xmodmap dalla console per vedere immediatamente le modifiche. Le modifiche in .Xmodmap permarranno.

fonte: Ubuntu Foruns

Contenuti bonus:

Se la chiave 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 -pm per ottenere una lista 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 si desidera mantenere il comportamento di "eliminazione" quando NumLock è disattivato.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2 , perché xmodmap -pm ci dice che mod2 è Num_Lock , gli altri nomi sono ottenuti premendo le chiavi in xev .

    
risposta data NES 08.02.2015 - 11:17
20

Se stai cercando di spostare un tasto Shift, 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
    
risposta data cmcginty 17.12.2012 - 19:46
16

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

UPDATE : il mio 'afterthought' è stato confermato; (Ho risposto alla domanda sbagliata:) ... per favore vedi la risposta della Community Wiki di NES (accettata sopra).

Ci sono due modi generali per rimappare riassociare una chiave.

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

Per i metodi 'local to a program', a volte c'è un modo per cambiare i keybinding offerti dall'app stessa ... ad es.

Firefox ha 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 il keybinding per qualsiasi voce di menu di queste app Gnome ... Si chiama Editable Menu Accelerator ... È uno strumento molto "permaloso", ma piuttosto potente .. Puoi abilitarlo eseguendo gconf-editor (tramite Terminale o Alt + F2) ... vai a desktop - gnome - interface e seleziona can_change_accels .... Puoi quindi cambia le voci del menu in virtuale tutto ciò che ti piace (per programma / finestra) ... Ti suggerisco di disabilitarlo non appena hai fatto ciò di cui hai bisogno ..

Altrimenti puoi configurare i tasti di scelta rapida globali. Uso un programma chiamato xbindkeys ,ec'èancheun'opzionedisponibiletramiteilmenuprincipale-Preferenze,chiamatoKeyboardShortcuts

Seusixbindkeys,dovraiaggiungerloalletue"Startup Applications" (Main Menu - Preferences) ... Inoltre (come suggerito da Stefano Palazzo) ho scritto in precedenza una descrizione più dettagliata di xbindkeys in un rispondi a questa pagina askubuntu

    
risposta data Peter.O 05.02.2011 - 15:04
8

Ecco come ho provato a cambiare la mappatura della chiave ENTER al tasto SHIFT (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 così)

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

Ciò che è importante è la terza riga di ogni pressione di un 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".

INVERSA IL MAPPING:

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

SALVA I RISULTATI:

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

ADD

 xmodmap ~/.Xmodmap

$ sudo reboot

Il problema principale era che l'inversione NON funzionava. La chiave ENTER è stata mappata alla chiave SHIFT_R ; ma la chiave SHIFT_R non è stata mappata sulla chiave ENTER . Vai a capire.

    
risposta data Bill Davis 27.01.2012 - 04:04
7

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

Nel mio caso ho voluto rimappare la chiave Caps Lock in D , dato che il mio D -key è rotto:)

Prima ho usato dumpkeys (1) per ottenere un template per una mappatura, nel caso della chiave D , il bit interessante è la mappatura per keycode 32 (sulla mia tastiera); Nota che ci sono due spazi nel modello di 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 la mappa da applicare a Caps Lock (keycode 58 sulla mia tastiera) invece

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

Ora legge

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

Per aggiungere questa rimappatura alla mappa predefinita, è sufficiente aggiungerla al file di inclusione della rimappatura per setup della console

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

e setup della console devono essere riconfigurati (ignorando le domande a bassa priorità con -phigh )

sudo dpkg-reconfigure console-setup -phigh

Ora la rimappatura dovrebbe essere completata e caricata automaticamente all'avvio.

    
risposta data arand 09.01.2014 - 13:09
3

Ho trascorso un'intera giornata a provare a creare una scorciatoia per Ctrl+Pageup .

Ho provato per la prima volta xmodmap ma non è possibile generare eventi modificatori. Quindi è impossibile creare una scorciatoia che genera ad esempio l'evento Control .

Ho quindi provato xbindkeys con xmacro . Questo tipo di lavoro funziona, ma xbindkeys non è in grado di acquisire alcune combinazioni di tasti sul mio sistema, come Alt + ___ .

Quindi ho finalmente utilizzato le scorciatoie da tastiera di Unity - & gt; Scorciatoie personalizzate per configurare il mio collegamento.

E invece di xmacro , ora ho usato xvkbd program per generare gli eventi della tastiera, ma questa è solo una preferenza personale. Sia xmacro che xvkbd funzionano quasi allo stesso modo. Un altro consiglio è di aggiungere un parametro di ritardo in xmacro o xvkbd per garantire che gli eventi non vadano persi.

    
risposta data HRJ 20.01.2014 - 06:30
0

Per me AutoKey di Software Center ha funzionato al meglio. Ha una GUI intuitiva, per aggiungere un nuovo binding clicca New - & gt; Frase e

  1. Aggiungi nome, fai clic su OK
  2. Nella sezione "Impostazioni della frase" assicurati che l'incolla che usa sia impostata sulla tastiera
  3. Aggiungi hotkey che vuoi usare
  4. Aggiungi comando nel campo di testo, ad esempio per emulare il tasto freccia sinistra - sarebbe <left> (l'elenco delle chiavi speciali è qui ).
risposta data bruddha 28.07.2018 - 14:15

Leggi altre domande sui tag