GNU/Linux >> Linux Esercitazione >  >> Linux

Modifica del layout/mappatura della tastiera sia sulla console (tty) che su X in modo indipendente da X/console?

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. Quindi dpkg-reconfigure keyboard-configuration eseguito da un emulatore di terminale GUI X11 influenzerà il layout della tastiera X11.
  • Il setupcon lo script prende queste impostazioni XKB, le passa attraverso il ckbcomp utility per generare una mappa della tastiera e carica quella mappa della tastiera nei terminali virtuali del kernel con loadkeys /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 con systemd-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 eseguendo loadkeys .

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
Correlati:lo script esegue il ciclo solo una volta?
Linux
  1. Come verificare la presenza di file di grandi dimensioni nella console

  2. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0?

  3. Cambiare il carattere della console in modalità testo?

  4. Modificare il layout della tastiera in Lightdm?

  5. Come modificare in modo permanente il tipo di carattere Tty della console in modo che rimanga dopo il riavvio?

Come modificare il tipo e la dimensione del carattere della console Linux

Qual è la differenza tra una console, un terminale e una shell?

Qual è il modo corretto per chiudere la mia applicazione PyQt quando viene uccisa dalla console (Ctrl-C)?

Voglio aspettare sia un descrittore di file che un mutex, qual è il modo consigliato per farlo?

Ottenere i caratteri  e â nella console Linux PuTTY

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0