En fait je pense qu'il faut clarifier les choses ;)
Le noyau lis sur le port ps/2 ou usb sur lequel le clavier envoie ses codes keymap
(en fait sur un portable c'est la même chose, c'est juste que la prise est shuntée)
Donc ton driver noyau atkbd va lire les code numérique sur le port en question.
Donc tu a peu de solutions :
- le noyau reçois un code inconnu, il ne sait rien en faire il t'avertis:
dmesg | grep atkbd.c dois te donner ce genre de chose :
atkbd.c: Use 'setkeycodes e057 ' to make it known.
atkbd.c: Unknown key pressed (translated set 2, code 0xd7 on isa0060/serio0).
- le noyau connais la touche il affiche rien du tout, mais la touche n'est pas mappée, a ce moment là en lançant xev tu va voir que la touche n'est pas mappée a une fonction :
KeyRelease event, serial 32, synthetic NO, window 0x800001,
root 0x169, subw 0x800002, time 1968542459, (43,28), root:(46,754),
state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
- le noyau connais la touche, tu a assigné la touche a coup de xmodmap ou xkb, tu auras alors ça :
KeyRelease event, serial 28, synthetic NO, window 0x800001,
root 0x169, subw 0x800002, time 1968632457, (29,24), root:(32,750),
state 0x10, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Bon j'ai pas utilisé la même touche a chaque fois !
Pour générer ton fichier de conf xkb tu peux faire ceci :
// keymap perso
xkb_keymap {
xkb_keycodes { include "xfree86+aliases(azerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols {
include "pc(pc105)+fr+compose(rwin)"
// add insert when pressing Alt Gr+Suppr
key {
[ Delete, Delete, Insert ]
};
// add left Win key
key {
[ F13, Super_L ]
};
};
xkb_geometry { include "pc(pc105)" };
};
Le plus simple est de copier ce genre de chose dans ton ~/.xkbmap.xkb, puis d'ajouter ce script dans /etc/X11/xinit.d/90fixkeyboard
#! /bin/sh
# Compile la map si on a un fichier dispo
if [ -f $HOME/.xkbmap.xkb ]; then
# do not take care of unset keys
xkbcomp $HOME/.xkbmap.xkb $HOME/.xkbmap.xkm 2>/dev/null;
fi
# Affecte la map compilée au display courrant
if [ -f $HOME/.xkbmap.xkm ]; then
xkbcomp $HOME/.xkbmap.xkm $DISPLAY;
fi
Sinon avec un ~/.xmodmap :
keycode 22 = BackSpace
keycode 115 = F13
keycode 117 = Menu
Et un script identique, mais qui fait :
if [ -f $HOME/.xmodmap ]; then
xmodmap $HOME/.xmodmap;
fi
ps : ta distribution a peut-être déjà le script qui va bien pour xmodmap, mais il y a peu de chance que ça marche pour xkb (tout nouveau système pour xorg 7.x)
ps2 : xmodmap et xkb sont légèrement incompatible entre eux (en gros ça va chier si tu met les deux ;), et xkb a nettement plus d'option que xmodmap
(tu peux régler tous les modificateurs pour une touche Maj, Alt, Alt Gr, Maj+Alt, etc...
Pour un article assez complet sur la chose vois ce journal (mais il manque encore des truc dedans, mais je me suis basé dessus : http://linuxfr.org/~mildred/22731.html
[^] # Re: fnfx
Posté par Raphaël G. (site web personnel) . En réponse au message a quel code corresponds la combinaison Fn+Fx(1-12) ?. Évalué à 4.
Le noyau lis sur le port ps/2 ou usb sur lequel le clavier envoie ses codes keymap
(en fait sur un portable c'est la même chose, c'est juste que la prise est shuntée)
Donc ton driver noyau atkbd va lire les code numérique sur le port en question.
Donc tu a peu de solutions :
- le noyau reçois un code inconnu, il ne sait rien en faire il t'avertis:
dmesg | grep atkbd.c dois te donner ce genre de chose :
atkbd.c: Use 'setkeycodes e057 ' to make it known.
atkbd.c: Unknown key pressed (translated set 2, code 0xd7 on isa0060/serio0).
- le noyau connais la touche il affiche rien du tout, mais la touche n'est pas mappée, a ce moment là en lançant xev tu va voir que la touche n'est pas mappée a une fonction :
KeyRelease event, serial 32, synthetic NO, window 0x800001,
root 0x169, subw 0x800002, time 1968542459, (43,28), root:(46,754),
state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
- le noyau connais la touche, tu a assigné la touche a coup de xmodmap ou xkb, tu auras alors ça :
KeyRelease event, serial 28, synthetic NO, window 0x800001,
root 0x169, subw 0x800002, time 1968632457, (29,24), root:(32,750),
state 0x10, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Bon j'ai pas utilisé la même touche a chaque fois !
Pour générer ton fichier de conf xkb tu peux faire ceci :
// keymap perso
xkb_keymap {
xkb_keycodes { include "xfree86+aliases(azerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols {
include "pc(pc105)+fr+compose(rwin)"
// add insert when pressing Alt Gr+Suppr
key {
[ Delete, Delete, Insert ]
};
// add left Win key
key {
[ F13, Super_L ]
};
};
xkb_geometry { include "pc(pc105)" };
};
Le plus simple est de copier ce genre de chose dans ton ~/.xkbmap.xkb, puis d'ajouter ce script dans /etc/X11/xinit.d/90fixkeyboard
#! /bin/sh
# Compile la map si on a un fichier dispo
if [ -f $HOME/.xkbmap.xkb ]; then
# do not take care of unset keys
xkbcomp $HOME/.xkbmap.xkb $HOME/.xkbmap.xkm 2>/dev/null;
fi
# Affecte la map compilée au display courrant
if [ -f $HOME/.xkbmap.xkm ]; then
xkbcomp $HOME/.xkbmap.xkm $DISPLAY;
fi
Sinon avec un ~/.xmodmap :
keycode 22 = BackSpace
keycode 115 = F13
keycode 117 = Menu
Et un script identique, mais qui fait :
if [ -f $HOME/.xmodmap ]; then
xmodmap $HOME/.xmodmap;
fi
ps : ta distribution a peut-être déjà le script qui va bien pour xmodmap, mais il y a peu de chance que ça marche pour xkb (tout nouveau système pour xorg 7.x)
ps2 : xmodmap et xkb sont légèrement incompatible entre eux (en gros ça va chier si tu met les deux ;), et xkb a nettement plus d'option que xmodmap
(tu peux régler tous les modificateurs pour une touche Maj, Alt, Alt Gr, Maj+Alt, etc...
Pour un article assez complet sur la chose vois ce journal (mais il manque encore des truc dedans, mais je me suis basé dessus :
http://linuxfr.org/~mildred/22731.html