Ic3M4n Advocate
Joined: 02 Nov 2004 Posts: 3489 Location: Bergamo.
|
Posted: Wed Sep 30, 2009 3:20 pm Post subject: Tastiera portatile e framebuffer |
|
|
L'ultimo portatile che ho acquistato non ha una tastiera "standard": alcuni dei tasti che solitamente compaiono sulle normali tastiere, come PagUp e PagDown, non sono presenti. Questo è dovuto dal fatto che questa tastiera ha il tastierino numerico, solitamente presente sui desktop.
Fin qui poco male, in X questi tasti vengono riconosciuti correttamente e, a parte il fatto di trovarsi in una posizione inusuale, svolgono il loro compito in maniera egregia.
Il problema, invece, sorge nel momento in cui si vuole utilizzare il framebuffer: la mappatura della tastiera viene caricata all'interno del kernel, ed è lui stesso a gestire gli eventi e la mappatura italiana, presente nel pacchetto sys-apps/kbd, che utilizza i tasti PagUp e PagDown standard per effettuare lo scroll del framebuffer. I tasti del tastierino numerico PagUp(9) e PagDown(3) consentono la corretta ricerca nella history (funzione gestita da bash e non a livello del kernel e configurabile, comunque tramite il file /etc/inputrc), ma non lo scroll.
Sorge quindi il problema di modificare tale mappatura di default. Vediamo come
Prendiamo la mappatura della tastiera che più si avvicina ad una mappatura corretta per il nostro computer. Nel mio caso la mappatura di default ( it ) è quasi perfetta.
il file che contiene la configurazione è /usr/share/keymaps/i386/qwerty/it.map.gz
il suo contenuto non è di facile intuizione, almeno non inizialmente.
Code: | keymaps 0-2,4,6,8-9,12
include "linux-with-alt-and-altgr"
strings as usual
keycode 1 = Escape Escape
alt keycode 1 = Meta_Escape
keycode 2 = one exclam
alt keycode 2 = Meta_one
shift alt keycode 2 = Meta_exclam
keycode 3 = two quotedbl
control keycode 3 = nul
alt keycode 3 = Meta_two
control alt keycode 3 = Meta_nul
... continua, ma il senso è questo.
|
Si capisce che ogni keycode ha delle funzioni associate e che viene incluso un file chiamato "linux-with-alt-and-altgr"
tale file si trova in /usr/share/keymaps/i386/include/linux-with-alt-and-altgr.inc
il contenuto:
Code: | include "linux-keys-bare"
keycode 100 = AltGr
alt keycode 100 = Compose
altgr keycode 70 = Show_Registers
alt keycode 70 = Scroll_Lock
control altgr keycode 83 = Boot
control altgr keycode 111 = Boot
# Hex keypad keys (for giving a Unicode value in 4 hex digits)
# Follow lt.map and assign Hex_A .. Hex_F to keypad border.
altgr keycode 55 = Hex_C
altgr keycode 69 = Hex_A
...
|
che a sua volta ne include un altro: "linux-keys-bare".
A questo punto possiamo intuire che "linux-keys-bare.inc" è il file di default, alcune aggiunte vengono fatte tramite il file "linux-with-alt-and-altgr.inc" e viene completata la configurazione tramite il file /usr/share/keymaps/i386/qwerty/it.map.gz ora non resta che capire cosa modificare.
utilizzando il comando /usr/bin/showkey (pacchetto sys-apps/kbd) su un computer "sano" (nel senso che non ha subito l'amputazione dei tasti PagUp e PagDown) ho scoperto che i keycode dei due tasti sono 104 e 109
nel file /usr/share/keymaps/i386/include/linux-keys-bare.inc ci sono due simpatiche righe:
Code: | shift keycode 104 = Scroll_Backward
shift keycode 109 = Scroll_Forward
|
che sembrano fare al caso nostro.
andiamo quindi a scoprire (sempre con showkey) quali sono i keycode dei tasti del tastierino numerico.
nel mio caso: 73 9(PageUp) e 79 3(PageDown)
andiamo ad aggiungerli al file it.map.gz
Code: | zcat /usr/share/keymaps/i386/qwerty/it.map.gz > ~/keymap
nano ~/keymap
#aggiungiamo in fondo al file le righe:
shift keycode 73 = Scroll_Backward
shift keycode 79 = Scroll_Forward
|
a questo punto ricreiamo il file compresso, lo copiamo e carichiamo la nuova mappatura.
Code: | cat ~/keymap | gzip -f > it-laptop.map.gz
cp it-laptop.map.gz /usr/share/keymaps/i386/qwerty/
loadkeys it-laptop |
se tutto funziona, abbiamo finito.
Grazie a MajinJoko per avermi supportato durante la risoluzione di questo piccolissimo problema che mi aveva fatto diventare un grande fan di less. |
|