GNU/Linux >> Linux Esercitazione >  >> Linux

Relazione tra layout della tastiera e Xmodmap?

Sto usando Xubuntu. Prima del login posso scegliere un layout di tastiera. Sto usando xmodmap per rimappare alcune chiavi.

Mi interessano due cose:

  1. Come cambia lo stato della mappatura della tastiera (a) quando accendo il laptop, (b) durante il processo di avvio e (c) accedo al sistema (in queste tre fasi) e quando lavoro con il sistema (acceso ).
  2. Cosa causa quali simboli verranno visualizzati sullo schermo (e tasti di comando inviati) durante le singole fasi. Quando premo un tasto, viene inviato un segnale al driver della tastiera (?) e quindi deve esserci un processo decisionale (applicazioni e file di configurazione) che determina quali simboli verranno visualizzati. La risposta a questa domanda dovrebbe essere l'elenco di applicazioni e percorsi per quei file di configurazione (sono particolarmente interessato a Ubuntu (sistema basato su Debian), ma puoi descrivere qualche altro sistema, ma Ubuntu è preferito).

Risposta accettata:

Ci sono due livelli qui, da KEYCODE a KEYSYM e da KEYSYM a testo. Ci sono più livelli se si conta il kernel, che deve mappare i codici di scansione della tastiera AT su un KEYCODE in stile XT o un codice HID della tastiera USB su un KEYCODE. Un KEYCODE è semplicemente un intero senza segno di 8 bit che il kernel di un sistema operativo passa al server X11. Può variare tra sistemi operativi come Linux e Solaris. Su Linux, questi KEYCODE sono in genere lo stesso numero utilizzato sulle vecchie tastiere per PC XT. I computer più recenti con tastiere AT, PS/2 o USB in genere mappano semplicemente quelle tastiere sul vecchio codice XT affinché la chiave semplifichi la vita.

I codici grezzi della tastiera, siano essi XT, AT, PS/2 o USB, rappresentano una posizione fisica su una tastiera. La tastiera XT invia un solo numero a 8 bit alla pressione o al rilascio di un tasto. Il tasto q su una tastiera XT statunitense/britannica invia il numero 16. Su una tastiera francese lo stesso tasto fisico è etichettato a, ma invia comunque 16. Sono i livelli più alti del sistema operativo che gli assegnano un significato reale. Quando viene rilasciato un tasto su una tastiera XT, viene inviato lo stesso keycode più 128. Per questo esempio, premendo q viene inviato un 16, ma al rilascio viene inviato il numero 142 (16+128). Le tastiere AT utilizzano codici di scansione che sono una serie di numeri e possono diventare piuttosto lunghi. I rilasci chiave aggiungono codici aggiuntivi. Ad esempio, lo scancode per Pausa è E1, 1D, 45, E1, 9D, C5. La maggior parte dei sistemi operativi, inclusi DOS, Windows, Linux, FreeBSD e BIOS, mappano tutti gli scancode in scancode in stile XT molto più semplici. Inoltre, semplifica il supporto delle tastiere più recenti che utilizzano codici diversi come le tastiere USB che inviano codici HID. Tutti i codici vengono mappati allo stesso insieme coerente di codici dal sistema operativo prima che X11 o l'applicazione li veda.

Correlati:come grep per questa o quella (2 cose) in un file?

X11 ignora questa parte del processo, ottiene semplicemente il KEYCODE dal kernel e applica la propria mappatura per convertire quel KEYCODE in un KEYSYM. Xmodmap è lo strumento standard per controllare quella mappatura. Gran parte del comportamento della mappatura della tastiera è configurabile, ma ci sono diversi casi speciali come Num Lock, Mode Switch e Caps Lock/Shift Lock che sono hardcoded in X11. Altri aspetti come Shift sono effettivamente configurabili. Qualsiasi tasto può essere mappato per agire come Maiusc, a differenza di Mode Switch o Num Lock.

I KEYCODE rappresentano le chiavi fisiche inviate dal kernel del sistema operativo. Ogni KEYCODE può mappare a 8 possibili KEYSYM. Vengono utilizzati solo 4 e talvolta sono chiamati livelli 1-4. Il livello 1 specifica il KEYSYM che viene stampato quando nessun modificatore è attivo. Queste sono spesso lettere minuscole e cifre. I modificatori sono KEYCODE che modificano il KEYSYM generato da altri KEYCODE quando il modificatore è attivo (premuto o attivato). Anche i codici chiave del modificatore sono controllati tramite Xmodmap. Il livello 2 specifica un KEYSYM da inviare quando si preme il modificatore di spostamento. Il livello 3 viene attivato ogni volta che viene premuto il selettore di modalità KEYSYM. Il livello 4 viene attivato quando sono attivi sia un tasto Maiusc che un interruttore di modalità.

Una volta che un KEYSYM è stato generato, questo può essere interpretato direttamente, ma il più delle volte sarà convertito in testo. Non tutti i KEYSYM si trasformano in testo o possono interessare solo un futuro KEYSYM. Un esempio è Shift_L, ovviamente, che non ha una rappresentazione testuale, ma ci sono anche un certo numero di KEYSYM che vengono usati per comporre un altro carattere. Un elenco di questi sul mio sistema è in /usr/share/X11/locale/en_US.UTF-8/Compose . Uno di questi esempi è il dead_acute KEYSYM che, se premuto, tenterà di convertire il successivo KEYSYM in una lettera accentata acuta. Esiste una mappatura standard per trasformare KEYSYM in Unicode.

Ora che tutto questo è stato detto, nota che Xmodmap è obsoleto e sostituito da XKB che è molto più sofisticato. Ciò influenza il modo in cui i KEYSYM vengono mappati sui KEYSYM, ma non il modo in cui il kernel genera i KEYCODE né il modo in cui i KEYSYM vengono convertiti in testo o composti che è sempre lo stesso. XKB può essere disabilitato ripristinando il comportamento di Xmodmap. Ha anche un livello di compatibilità per supportare Xmodmap, ma può avere problemi in quanto non è completamente compatibile. Le regole XKB sono sotto /usr/share/X11/xkb/ e sono molto più sofisticati. C'è della buona documentazione altrove su come genera layout di tastiera per mappare KEYCODE su KEYSYM.

Per quanto riguarda la console Linux, ha i suoi layout di tastiera che sono memorizzati in /usr/share/keymaps e caricato con i loadkeys comando. Nelle fasi del BIOS e del caricatore di avvio precedenti, incluso GRUB2, la mappatura della tastiera è qualunque sia il numero su cui il BIOS decide di mappare la chiave.

Correlati:Debian – Openssl aggiornato tramite apt-get, `openssl version` mostra la versione precedente?
Linux
  1. Modifica del layout/mappatura della tastiera sia sulla console (tty) che su X in modo indipendente da X/console?

  2. Mappatura della combinazione di tasti con Xmodmap?

  3. Forzare lo schermo in bianco e ignorare l'input?

  4. Linux:cambia il layout della tastiera al volo

  5. Layout della tastiera Xephyr

Come aggiungere e cambiare il layout della tastiera su Ubuntu 22.04 Desktop

Albert:un lanciatore di tastiera veloce e flessibile

Correggi il layout della tastiera errato in Ubuntu

Segreti del plasma:lingue aggiuntive e layout della tastiera

Come nascondere l'indicatore del layout della tastiera in Ubuntu 17.10 e versioni successive con Gnome 3?

Cambia il layout della tastiera di GRUB nella fase 1