PDA

View Full Version : [Linux] keymap


guldo76
18-02-2004, 14:38
Ciao.
Mi piacerebbe che mi spiegaste una cosetta...
Vorrei cercare di far funzionare i tasti "multimediali" della mia tastiera,
e ho trovato questo (http://rick.vanrein.org/linux/funkey/); peccato che non ci capisca proprio una mazza qui:
The kernel patch is made for Linux 2.2.14, and it installs on top of the BadRAM patch; otherwise there will probably be a single harmless rejection on the CREDITS file. When configuring the kernel, open the character devices dialog, and mark Support for console on virtual terminal for inclusion.

Make sure that when booting your system, some scripts calls setkeycodes and loadkeys as suggested under Implementation.

After booting the newly built kernel, use setkeycodes to assign keycodes to incoming scancodes. Available scancodes can be found with

dumpkeys | grep ^keycode | grep =$

For the generated keycodes, you may now enter a FunKey code to submit to the FunKey character device, and add 0xfe00 to it to incur sending through /dev/funkey.

On my RedHat system, I added a few lines

setkeycodes e020 89 e02e 90 e030 91 e022 92 \
e024 93 e010 94 e019 95 e05f 120 \
e06c 121 e065 122 e066 123 e032 124

to /etc/rc.d/init.d/keytable.

Now use the standard utilities loadkeys and dumpkeys can be used to install any translation to FunKey codes in the kernel key maps. For my Logitech Internet Keyboard, I used the following to instruct the kernel to pass a set of keys to /dev/funkey (I simply selected the keycodes as FunKey codes, for no reason at all):

keycode 89 = U+fe59
keycode 90 = U+fe5a
keycode 91 = U+fe5b
keycode 92 = U+fe5c
keycode 93 = U+fe5d
keycode 94 = U+fe5e
keycode 95 = U+fe5f
shift keycode 120 = U+fe78
keycode 121 = U+fe79
keycode 122 = U+fe7a
keycode 123 = U+fe7b
keycode 124 = U+fe7c

where the U+ signifies a Unicode keycode.
Per la precisione non capisco da dove arrivino tutti 'sti numeri, quelli di setkeycodes e quelli unicode...
Ne sapete mica qualcosa?

Guldo

p.s.: a proposito... come si mette una patch al kernel?
So che e` una domanda che non dovrei fare, ma sono giorni e giorni che il
kernel howto e` in "manutenzione"... :muro:

Mason
18-02-2004, 17:21
allora la magica formulazione di un carattere sullo schermo fnge cosi, sempre non sbagli:

per ogni tasto premuto viene generato uno scancode, a questo va associato un keycode, e quest'ultimo e interpretato secondo una tabella che puo essere qualcosa tipo ascii iso 646 ,iso 10646 ecc

se dai solo dumpkeys vedrai la tabella scancode <-> keycode attualmente caricata in memoria, e dovrebbe avere dei "buchi", ovvero dei keycode non asegnati.

ora ,quando uil kernel non trova un keycode per uno scancode te lo segnala tramite il syslog, e tu poi segnare il numero della sua segnalazione per associzre uno scancode ad un keycode.

usando setkeycode associ questo tasto

esempio:

setkeycodes e020 89 (mai usati sulla stessa linea ma se lui dice il contrario no dubito non funga, cmq prova e fai prima :))

associa al tasto che genera lo scancode e020 il keycode 89

ora con dumpkeys >tmp ottieni una tabella di caratteri temporanea

vai alla riga col tasto 89 e ci assegni il "carattere" da metterci, che puo essere 1 , 2 o + byte, a secondo della sua rappresentazione.

immagino che quei U+fe59 sia un metodo per asssociare un carattere unicode con 2 byte, insomma per ritrovarlo nella sua tabella, U+ penso indichi in che tabella cercare(unicode) e fe59 sono i 2 byte per l'indirizzamento all'interno della tabella unicode(di codifiche unicode ne esistono di vari tipi)
a questo punto nella tabella del font viene preso l'indirizzo corrispondente a "fe59" o ad una sua mappatura univoca e se esiste un glifo viene stampato sul display(console o X sono "intermediari").

la tabella unicode e la tabella che dovrebbe racchiudere tutti le lingue scritte odieren e perse piu simboli tecnici piu altre alemnita', quindi un unica tabella di caratteri universale (uni penso stia per universale ma qui la sparo)

cmq keyboard e howto sono le tue keyword, +o- *o/

se ho detto castronate correggetemi

cdere
18-02-2004, 17:31
se posso essere esplicito...
non ti fare troppe ed eccessive pippe mentali.. il comodissimo programmino hotkeys supporta TUTTE le tastiere multimediali.. funge meglio dei driver windows e devi solo editare /etc/hotkeys.conf per impostare i comandi associati ai tasti...

buona fortuna :)

guldo76
18-02-2004, 17:53
x Mason: grazie mille, ma non capisco come faccio a sapere a quale scancode e` associato un determinato tasto.
x cdere: grazie, l'avevo scartato perche' la mia tastiera non e` tra quelle ufficialmente supportate; cmq ora provo.

Grazie,

Guldo

Mason
18-02-2004, 18:08
e una cosa a livello kernel

ogni tasto genera uno scancode il che di fatto e inutillizzabile se non associato ad un keycode in quando il kernel non lo fa passare, quindi

se hai gia un keycode associzto e vuoi sapere quale e allora showkey (o xev sotto X), se non hai keycode associati trovi un messaggio del tipo in un file sotto /var/log/qualcosalog (dipende da come e configurato il tuo syslog)



Feb 18 20:08:24 aries kernel: atkbd.c: Unknown key pressed (translated set 2, code 0x9e on isa0060/serio0).
Feb 18 20:08:24 aries kernel: atkbd.c: Use 'setkeycodes e01e <keycode>' to make it known.
Feb 18 20:08:24 aries kernel: atkbd.c: Unknown key released (translated set 2, code 0x9e on isa0060/serio0).
Feb 18 20:08:24 aries kernel: atkbd.c: Use 'setkeycodes e01e <keycode>' to make it known.



per il 2.6

con setkeycode gli associ un keycode e a quel punto e utilizzabile.
per risalire a tutti gli scancode penso devi cercare nei sorci del kernel o giu di li, almeno penso.

ps tieni conto che X usa una tabella di mappatura diversa da quella della console, ovvero per ogni keycode associa un glifo o una funzione differente

guldo76
18-02-2004, 18:15
Perdonami, Mason, ma come lo trovo il file di log giusto?!?
Ne ho "greppati" un po' (kernel, user, messages, ...), senza successo...

Grazie mille,

Guldo

Mason
18-02-2004, 18:31
perdonarti di cosa? se non hai capito vuol dire che ho sbagliato io :)

io lo trovo sotto /var/log/syslog ma ti ripeto che io per generare quelle 4 linee devo agire sulla manetta del volume della mia "fantastica tastiera multimediale con 324 tasti aggiunti" , oppure su un tastino con un cuore sopra oppure ad uno con sopra il simbolo del mute eccetera.
se non lo trovi vuol dire che tutti i tuoi tasti son gia mappati, quindi han gia un keycode.

cmq prova sotto console con showkey, se ti da un keycode usa quello per riferirti a quel tasto, senno se non ti da nulla showkey allora troverai qualcosa sotto /var/log/* come i messaggi messi sopra

a me capita che alcui tasti non siano mappati ma penso sia un problem meccanico della ttsiera in quanto tengo legati i 2 gusci in plasticotta con 2 molle delle mollette, se si sgnciano mi legono un tatso si ed uno no, ma cmq potrebbe essere un problema di "linux" ma dubito :)

guldo76
18-02-2004, 19:04
Nel syslog non trovo nulla. Al massimo vedo un
Feb 18 19:04:19 debian kernel: Error: Illegal request -- (Sense key=0x05)
ma dalle 19:04 ad ora ne ho premuti un bel po' di quei pulsanti...
Ho provato con showkeys; ad esempio, premendo il tasto stop ottengo:
codice tasto 0 premi
codice tasto 1 rilascia
codice tasto 38 rilascia
codice tasto 0 rilascia
codice tasto 1 rilascia
codice tasto 38 rilascia
o con un altro tasto:
codice tasto 29 premi
codice tasto 56 premi
codice tasto 18 premi
codice tasto 29 rilascia
codice tasto 56 rilascia
codice tasto 18 rilascia
:boh:

Grazie,

Guldo