Sostituisci alcuni codici chiave con XKB


10

Voglio mescolare alcune chiavi con XKB. (Perché? Su un laptop in cui alcuni tasti sono posizionati in modo scomodo.) Attualmente uso xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

Invece, voglio usare XKB e assegnare nomi simbolici diversi per determinati tasti fisici, piuttosto che assegnare diversi centri di allenamento a determinati codici chiave. ( Questo è il motivo.) Voglio inviare il codice chiave 110 PGUPanziché il HOMEcodice 115 da inviare DELEinvece di END, ecc. Il resto della configurazione non deve essere influenzato (quindi PGUPè necessario continuare a inviare il keyym Prior, ecc., E tutti gli altri tasti rimangono come sono).

Come posso modificare l'assegnazione di questi codici chiave specifici? Carico un file con xkbcomp somefile.xkb $DISPLAY, cosa devo inserire somefile.xkb?

Risposte:


14

Crea un file contenente le modifiche al tuo codice chiave e salvalo come (ad esempio) ~/.xkb/keycodes/local. (La keycodesdirectory è hard-coded; la directory di base può essere qualcos'altro e anche il nome del file.) Conterrà nel tuo caso

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Per caricare questo, eseguire

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Ciò genera le impostazioni correnti, aggiunge +locall' xkb_keycodes includeistruzione e la carica nel compilatore XKB, aggiungendo ~/.xkbal percorso di inclusione. (Se hai chiamato il tuo file in modo diverso ~/.xkb/keycodes/local, ovviamente dovrai cambiare +locale -I${HOME}/.xkb}.) In questo modo tutte le altre impostazioni verranno conservate.


1
Quindi questo è il percorso e il modo previsti per passarlo allo -Iswitch! Grazie, non sono riuscito a capirlo dalla manpage.
L. Levrel,

ha funzionato come un fascino! ha funzionato se si desidera aggiornare xkb_symbols, basta sostituire xkb_keycodes con esso, ha funzionato
zw963,

5

Puoi iniziare setxkbmap -print > somefile.xkbper ottenere la keymap che stai utilizzando come base, quindi ridefinire i nomi delle chiavi che desideri nella xkb_keycodessezione in questo modo:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Questo genera avvisi che assegnano più volte alcuni nomi di chiave, ma funziona perché conta solo l'ultimo (quindi è importante inserire le impostazioni personalizzate dopo l'inclusione). E il file ha il vantaggio di essere leggibile.

Un altro modo è scaricare la keymap che usi in un file: xkbcomp $DISPLAY somefile.xkbe modificare le stesse righe (è la stessa keymap con le inclusioni valutate). In questo modo non ci sono avvisi per più definizioni, ma è meno leggibile.


1
Da dove vengono tutti questi nomi ( evdev+aliases(azerty), ecc.)? Voglio esplicitamente eseguire una modifica relativa, non una riconfigurazione completa. Le chiavi diverse dalle 6 elencate nelle domande non devono essere interessate, devono rimanere nello stato in cui si trovavano quando ho emesso il comando.
Gilles 'SO-smetti di essere malvagio' il

1
Vengono da setxkbmap -print, sono file da /usr/share/X11/xkb/. Penso che tu debba dare un'intera mappa di chiavi xkbcompma potrei sbagliarmi ...
Leiaz
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.