Domanda Come rimappare determinati tasti o dispositivi?


Sto cercando un modo per rimappare certi tasti in Ubuntu.

cioè

Mi piacerebbe cambiare PgUp a Casa o PgDown a Fine.

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


214
2018-02-05 13:20


origine


verifica la mia risposta Qui. Non vale la pena copiare e incollare la stessa risposta. Forse ti aiuterebbe. - Rahul Virpara
Tutti i collegamenti simili a Emacs qui per CTRL-P / N per gli step di unità? - Léo Léopold Hertz 준영
Da qualche tempo xmodmap è privato! per ottenere un'impostazione di sistema che devi usare xkb. Quindi modifica il file della lingua in /usr/share/X11/xkb/symbols/ per aggiungere le tue modifiche lì. Vedere askubuntu.com/a/898462/34298 - rubo77


risposte:


Avviso: A partire dal 2013, Ubuntu e derivati ​​non vengono più utilizzati xmodmap, ma invece usare xkb. Per ulteriori informazioni, vedere questa risposta. La risposta sotto non è più rilevante per le versioni correnti.


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

  2. xev fornirà alcune informazioni sul tasto premuto. La terza riga è importante. Dovrebbe assomigliare a:

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

    in questo esempio Prior è il nome del comportamento al quale è assegnata la chiave al momento, il codice chiave del numero è l'ID interno per il riconoscimento della chiave. Ora fallo con un'altra chiave, ad es. PgDown dare questo risultato

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

    Qui di nuovo 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"
    

    Questo 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 se utilizzata con Cambio chiave (ad esempio per i layout di tastiera britannici, Cambio+2 fornisce virgolette), quindi è sufficiente 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 è Chiave, SHIFT +, mode_switch + chiave, mode_switch + SHIFT +, AltGr + chiave, AltGr + SHIFT +. 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 directory home (~))

Quindi devi creare un file chiamato .xinitrc nella tua home directory in cui metti il ​​comando xmodmap .Xmodmap in.

Ora puoi modificare .Xmodmap e corri xmodmap .Xmodmap dalla console per vedere immediatamente le modifiche. I cambiamenti in .Xmodmap persisterà.

fonte: Ubuntu Foruns

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 farlo xmodmap -pmper 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 ce lo dice mod2 è Num_Lock, gli altri nomi si ottengono premendo i tasti in xev.


233
2017-12-17 18:46



xev non è in grado di prendere Fn pressioni chiave - om-nom-nom
Mi è piaciuto come hai spiegato tutto invece di sfocare la sintassi con i posti da sostituire - Programming Noob
La risposta selezionata non ha funzionato per rimappare il tasto Caps-lock per me su Ubuntu 12.10. Sono stato in grado di farlo andando su Impostazioni di sistema -> Tastiera -> Impostazioni di layout -> Opzioni, che ha un elenco di chiavi e comportamenti alternativi. Funzionato perfettamente in Unity e terminal. - Allyl Isocyanate
Strano, ho fatto tutto, ma il mio keymappings ancora resettato dopo il riavvio. - Costa
Non penso di avere un -event flag in Ubuntu 12.04. Genera un errore e non menziona "evento" in man xev. - isomorphismes


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

18
2018-02-05 14:04



+1 La risposta più unix-y di tutti quelli per un modificatore (l'avevo già fatto in questo modo, 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
Una risposta importante per gli utenti che usano le tastiere sui laptop Lenovo - Einar Ólafsson


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 a comportarsi come un altro)

AGGIORNARE: il mio 'ripensamento' è 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 remap rebinda una chiave.

  • localmente ad un particolare programma
    (una chiave può essere utilizzata 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 (via Terminale o Alt + F2) ... vai a desktop-gnome-interface e selezionare can_change_accels .... Puoi quindi cambiare 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. Io uso un programma chiamato xbindkeys  Install xbindkeyse c'è anche un'opzione disponibile tramite il menu principale - Preferenze, chiamato Keyboard Shortcuts 

Se usi xbindkeys, dovrai aggiungerlo alle tue "Startup Applications" (Main Menu - Preferences) ... Inoltre (come suggerito da Stefano Palazzo) ho già scritto una descrizione più dettagliata di xbindkeys in una risposta su questo pagina di askubuntu


16
2018-01-27 03:04



+1, molto bello! Un suggerimento: dovresti integrare il tuo ottima risposta da un'altra domanda in questo, forse anche spiegare un po 'il formato di configurazione di xbindkeys. - Stefano Palazzo♦
Il bit sull'assegnazione di altre chiavi potrebbe essere gestito da xdotool, controlla la pagina man, l'ho usata 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 questo funziona abbastanza bene per me. qualche consiglio con lo strumento per preferire il nome due? Ecco una guida passo passo molto utile che descrive xmodmap e xev ubuntuforums.org/showpost.php?p=7675138&postcount=2 - NES
@NES .. Sembra che mi sia indirizzato il punto sbagliato .. Sembra che tu voglia veramente rimappare il modo in cui un particolare tasto è interpretato dal sistema operativo, cioè un'interpretazione da tastiera non standard, mentre mi riferisco ad un interpretazione standard da tastiera, e semplicemente sovraccarico delle assegnazioni chiave predefinite. (Penso che quello che cerchi sia simile allo scambio dei pulsanti sinistro e destro del mouse). Beh, sembra che la mia risposta sia stata buona per la cosa sbagliata :) - Peter.O
si, ma nessun problema la risposta è anche interessante. la guida passo passo ho pubblicato il link sopra era la strada giusta. quindi pubblicherò una risposta breve con la soluzione che altri utenti hanno una buona guida. grazie fred - NES


Ecco come ho provato a cambiare la mappatura del ACCEDERE chiave per il CAMBIO chiave (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

INSERISCI

 xmodmap ~/.Xmodmap

$ sudo reboot

Il problema principale era che l'inversione non funzionava. Il ACCEDERE la chiave è stata mappata al SHIFT_R chiave; ma il SHIFT_R la chiave non è stata mappata al ACCEDERE chiave. Vai a capire.


8
2018-01-20 05:30





Per fare rimappature globali indipendentemente da X, puoi farne uso console-setup (5) anziché.

Nel mio caso volevo rimappare Blocco maiuscole chiave per D, dal mio D-key è rotto :)

Prima 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 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 Blocco maiuscole (keycode 58 sulla mia tastiera) invece

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

Adesso legge

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

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

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

e console-setup deve essere riconfigurato (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.


6
2017-07-28 12:15





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

Ho provato per la prima volta xmodmap ma questo non può generare eventi modificatori. Quindi è impossibile creare una scorciatoia che genera ad esempio il Control evento.

Allora ho provato xbindkeys con xmacro. Questo tipo di opere, ma xbindkeys non è in grado di acquisire alcune combinazioni di tasti sul mio sistema, come ad esempio Alt + ___.

Così finalmente ho usato le scorciatoie da tastiera di Unity -> Collegamenti personalizzati per configurare il mio collegamento.

E invece di xmacro, Ora ho usato xvkbd programma per generare gli eventi della tastiera, ma questa è solo una preferenza personale. Entrambi xmacro e xvkbd lavorare quasi allo stesso modo. Un altro consiglio è di aggiungere un parametro di ritardo in xmacro o xvkbd per garantire che gli eventi non si perdano.


3





Per me AutoKey di Software Center ha funzionato al meglio. Ha una GUI intuitiva, per aggiungere nuovi binding clicca New -> Phrase 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 il comando nel campo di testo, ad esempio per emulare il tasto freccia a sinistra - lo sarebbe <left> (la lista delle chiavi speciali è Qui).

0