Sono stato in grado di modificare il layout/la mappatura della tastiera quando il sistema X Window è in esecuzione utilizzando ~/.Xmodmap
(e suppongo che potresti anche farlo direttamente tramite il protocollo X, ad esempio usando libxcb come wrapper per le chiamate del protocollo X).
Sono stato in grado di fare lo stesso (in qualche modo) sulla console/tty (cioè quando X non è in esecuzione) usando loadkeys
.
C'è un modo per personalizzare il layout della tastiera in modo simile, ma da una unica fonte , in modo tale da influenzare sia X che la console, ad es. in un modo che sia "X-and-console agnostic"?
(L'unico modo che mi viene in mente è scrivere un "driver della tastiera" che parli con l'interfaccia di input del kernel, evdev
e invia l'input desiderato (tramite uinput
?), o qualcosa del genere, ma non so se questo abbia senso o se esiste un modo più semplice.)
Risposta accettata:
Sì, c'è un modo, ed è proprio così che lo fa il pacchetto di configurazione della console di Debian.
- I layout della tastiera sono specificati in termini XKB (modello, layout, variante e opzioni) dall'amministratore in un file denominato
keyboard
, di solito/etc/default/keyboard
. Questa è l'unica fonte. Può essere modificato con un editor di testo. - Il
setxkbmap
al programma vengono fornite queste stesse impostazioni XKB e configura un server X11 di conseguenza.- Lo script di manutenzione post-installazione del pacchetto di configurazione della tastiera esegue
setxkbmap
direttamente, con il/etc/default/keyboard
impostazioni, se si trova con un display X11. Quindidpkg-reconfigure keyboard-configuration
eseguito da un emulatore di terminale GUI X11 influenzerà il layout della tastiera X11.
- Lo script di manutenzione post-installazione del pacchetto di configurazione della tastiera esegue
- Il
setupcon
lo script prende queste impostazioni XKB, le passa attraverso ilckbcomp
utility per generare una mappa della tastiera e carica quella mappa della tastiera nei terminali virtuali del kernel conloadkeys
/kbdcontrol
.- Questo script viene eseguito al bootstrap di sistema da un servizio.
- Può anche essere eseguito manualmente altrimenti.
Altri sistemi operativi di sistema funzionano in modo diverso ma hanno anche un'unica fonte.
- Il layout, la variante e le opzioni di XKB sono archiviati in
/etc/X11/xorg.conf.d/00-keyboard.conf
. Questa è l'unica fonte.- Questo file viene letto direttamente dal server X11 all'avvio e imposta direttamente la mappa della tastiera X11.
- Questo file viene analizzato da
systemd-localed
all'avvio. Il file non può essere modificato in modo utile con un editor di testo mentre èsystemd-localed
è in esecuzione, perché il servizio lo sovrascriverà allegramente con le proprie informazioni in memoria. - Per modificare le informazioni XKB, si esegue
localectl
, che comunica con un altro server che a sua volta comunica consystemd-localed
.
systemd-localed
converte le impostazioni XKB in un nome di mappa della tastiera di un terminale virtuale usando le mappature in/usr/share/systemd/kbd-model-map
, che poi scrive in/etc/vconsole.conf
. A differenza del sistema Debian, non genera mappe al volo dalle informazioni XKB, ma seleziona solo mappe statiche pre-fornite elencate nel file della mappa.systemd-vconsole-setup
viene eseguito al bootstrap, legge/etc/vconsole.conf
e carica la mappa della tastiera nei terminali virtuali del kernel eseguendoloadkeys
.
Ulteriori letture
keyboard
. Manuale dell'utente per la configurazione della console . Debian.ckbcomp
. Manuale dell'utente per la configurazione della console . Debian.- Andrew T. Young (2011). Configurazione tastiera .
- Dove trova Xkb la sua configurazione?
- https://unix.stackexchange.com/a/326804/5132