
Constatation: Logitech n'a rien prévu pour linux ni dans la doc, ni dans le cdrom, ni sur le site de Logitech.
Il va tout d'abord nous falloir indiquer le bon modèle de clavier à xorg, par l'option XkbModel dans la section InputDevice de votre fichier de configuration xorg (/etc/X11/xorg.conf) :
Option "XkbModel" "logimedia"
Ensuite, comme ce modèle de clavier n'existe pas (encore) nativement dans xorg, il va falloir le créer.
Auparavant il faut espionner le clavier pour savoir quel sont les touches qui ne sont pas encore prises en compte.
Pour cela il y a l'utilitaire xev. Donc on appelle xev depuis une console.
xev
Puis on appui sur les touches, cela doit faire apparaitre une ligne avec une valeur "keycode" dans la console.
KeyPress event, serial 26, synthetic NO, window 0x2e00001, root 0x5c, subw 0x0, time 2859246907, (667,272), root:(745,371), state 0x10, keycode 230 (keysym 0x1008ff30, XF86Favorites), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False
Ce qui nous intérresse ce sont les touches qui ne renvoient rien dans "xev" du au fait que le kernel n'a pas connaissance de ces touches.
Dans mon cas:
Pour ajouter le support de ces touches il faut les scanner via syslog.on ouvre une console et:
sudo tail -f /var/log/syslog
Quand on appuie sur une des touches par exemple "disquette" qui serait pas mal pour lancer des sauvegarde, on obtient:
Unknown key pressed (translated set 2, code 0xc2 on isa0060/serio0). Use 'setkeycodes e042 <keycode>' to make it known.
La valeur e042 annoncée est le "scancode" de la touche, en effet, quand on appuie sur une touche le controleur du clavier envoie un "scancode" au pilote clavier du noyau, c'est ce qui est affiché par syslog si le scancode est inconnu, il faut maintenant affecter un "keycode" à nos "scancode".
Pour cela comme le dit le message du noyau, il faut utiliser la commande setkeycodes. On vas cependant vérifier les "keycodes" disponibles avec la commande getkeycode pour cela un petit script bash:
#!/bin/bash #getFreeKeycodes IFS=$'\n ' ; for i in $(getkeycodes | grep "[0-9]:" | cut -d ":" -f 2) do echo $i done | sort | uniq > /tmp/list.codes for ((i=80;i>=255;i++)) do if grep -E "^$i$" list.codes > /dev/null then true else echo "$i" fi done > /tmp/free.codes cat /tmp/free.codes
sudo getFreeKeycodes
Tout les "keycodes" affichés ne sont pas utilisé et peuvent être réquisitionné pour la cause.
On les associe aux "scancodes" dans un petit script bash que voilà:
sudo vim /lib/udev/setLogiMediiaEliteKeycodes
#!/bin/bash #XF86ZoomIn /usr/bin/setkeycodes 6a 234 #XF86Go /usr/bin/setkeycodes 6b 235 #XF86ZoomOut /usr/bin/setkeycodes e004 132 #XF86Messenger /usr/bin/setkeycodes e011 145 #XF86Support /usr/bin/setkeycodes e03b 236 #XF86Word /usr/bin/setkeycodes e03c 237 #XF86Excel /usr/bin/setkeycodes e03d 238 #XF86OfficeHome(Impress) /usr/bin/setkeycodes e03e 239 #XF86Back /usr/bin/setkeycodes e03f 240 #XF86Forward /usr/bin/setkeycodes e040 241 #XF86TaskPane(scan or print) /usr/bin/setkeycodes e041 242 #XF86Send(to backup) /usr/bin/setkeycodes e042 243 #XF86LaunchA /usr/bin/setkeycodes e043 244 #XF86LaunchB /usr/bin/setkeycodes e044 245 #XF86LaunchC /usr/bin/setkeycodes e057 246 #XF86LaunchD /usr/bin/setkeycodes e058 247 #XF86Option (mode button) #/usr/bin/setkeycodes e05a 248 exit 0
chmod +X pour le rendre executable bien sur, et pour lancer ce script, rien de tel qu'une régle udev liée uniquement à ce clavier.
pour avoir des info de /proc sur le périférique.
cat /proc/bus/input/devices
Ce qui nous permet d'en déduire la ligne de chemin pour udevinfo
udevinfo -ap /sys/class/input/input0
looking at device '/class/input/input0': KERNEL=="input0" SUBSYSTEM=="input" SYSFS{uniq}=="" SYSFS{phys}=="isa0060/serio0/input0" SYSFS{name}=="AT Translated Set 2 keyboard" looking at device '/devices/platform/i8042/serio1': ID=="serio1" BUS=="serio" DRIVER=="atkbd" SYSFS{softraw}=="1" SYSFS{softrepeat}=="0" SYSFS{set}=="2" SYSFS{scroll}=="0" SYSFS{extra}=="0" SYSFS{bind_mode}=="auto" SYSFS{modalias}=="serio:ty06pr00id00ex00" SYSFS{description}=="i8042 Kbd Port" looking at device '/devices/platform/i8042': ID=="i8042" BUS=="platform" DRIVER=="i8042" looking at device '/devices/platform': ID=="platform" BUS=="" DRIVER==""
Et voila notre régle udev
sudo vim /etc/udev/logimediaelitekeyboard.rules
# règle pour le clavier logitech media elite # lance le paramétrage des scancodes Bus=="input",SYSFS{phys}=="isa0060/serio0/input0", SYSFS{name}=="AT Translated Set 2 keyboard", PROGRAM="setLogiMediaEliteKeycodes"
On crée un lien relatif dans rules.d:
sudo ln -s /etc/udev/logimediaelitekeyboard.rules /etc/udev/rules.d/001_logimediaelitekeyboard.rules
Au redémarrage d'udev elle sera prise en compte.
Pour que les touches soient reconnues, il faut associer leur "keycode" avec un nom de touche générique connu par Xorg. Ces noms de touches sont listés dans le fichier /usr/share/X11/XKeysymDB.
On va modifier la base des claviers et ajouter le notre dans lequel on va définir ces fameuses correspondances....
sudo vim /usr/share/X11/xkb/symbols.dir
on ajoute la ligne logimediaelite
--p----- a------- inet(logiik) --p----- a------- inet(logimediaelite) --p----- a------- inet(itouch)
sudo vim /usr/share/X11/xkb/rules/xorg
logiinkse logiinkseusb logiitc logiik logimediaelite itouch logiultrax \
sudo vim /usr/share/X11/xkb/rules/xorg.lst
logiik Logitech Internet Keyboard logimediaelite Logitech Media Keyboard Elite itouch Logitech iTouch
sudo vim /usr/share/X11/xkb/rules/xorg.xml
<model> <configItem> <name>logimediaelite</name> <description>Logitech Media Keyboard Elite</description> <description xml:lang="en_GB">Logitech Elite Multimedia Keyboard</description> <description xml:lang="fr">clavier Logitech Elite Multimedia</description> </configItem> </model>
Dans inet on défini l'évenement associé a la valeur du code de la clé dans la base XFree86, que l'on trouve mpar rapport a celle donné par xev.
/usr/share/X11/xkb/keycodes/xfree86
sudo vim /usr/share/X11/xkb/symbols/inet
// Logitech media elite partial alphanumeric_keys xkb_symbols "logimediaelite" { // key <I01> { [ XF86AudioMedia ] }; key <I02> { [ XF86WWW ] }; key <I10> { [ XF86AudioPrev ] }; key <I15> { [ XF86Community ] }; key <I16> { [ XF86ScrollClick ] }; key <I19> { [ XF86AudioNext ] }; key <I20> { [ XF86AudioMute ] }; // key <I21> { [ XF86VendorHome ] }; key <I22> { [ XF86AudioPlay, XF86AudioPause ] }; key <I24> { [ XF86AudioStop ] }; key <I2E> { [ XF86AudioLowerVolume ] }; // key <I2F> { [ XF86AudioRaiseVolume ] }; key <I30> { [ XF86AudioRaiseVolume ] }; key <I32> { [ XF86HomePage ] }; key <I3B> { [ XF86New ] }; key <I3C> { [ XF86Reply ] }; key <I43> { [ XF86MyComputer ] }; key <I44> { [ XF86Documents ] }; key <I57> { [ XF86Pictures ] }; key <I58> { [ XF86Music ] }; key <I5F> { [ XF86Standby ] }; key <I65> { [ XF86Search ] }; key <I66> { [ XF86Favorites ] }; key <I6A> { [ XF86Back ] }; key <I6C> { [ XF86Mail ] }; key <I6D> { [ XF86AudioMedia ] }; key <I21> { [ XF86Calculator ] }; key <K68> { [ XF86Messenger ] }; key <I0C> { [ XF86ZoomOut ] }; key <I70> { [ XF86Go ] }; key <I55> { [ XF86ZoomIn ] }; key <I71> { [ XF86Support ] }; key <I72> { [ XF86Word ] }; key <I73> { [ XF86Excel ] }; // key <KPEQ> { [ XF86OfficeHome ] }; // key <SYRQ> { [ XF86Back ] }; // key <K76> { [ XF86Forward ] }; //key <LSGT> { [ XF86TaskPane ] }; // key <FK11> { [ XF86Send ] }; // key <FK12> { [ XF86LaunchA ] }; // key <AB11> { [ XF86LaunchB ] }; // key <HYPR> { [ XF86LaunchC ] }; // key <U7F> { [ XF86LaunchD ] }; };
On ajoute la section du clavier dans X.
sudo vim /etc/X11/xorg.conf
Section "InputDevice" Identifier "Logitech Media Keyboard Elite" Driver "kbd" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "logimediaelite" Option "XkbLayout" "fr" EndSection
Et le clavier dans la section serveur
Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Logitech Media Keyboard Elite" InputDevice "Logitech MX310" EndSection
fermer la session, et relancer X
Maintenant, certaines touches de votre clavier sont déjà utilisables dans le Windows Manager.
Sous Gnome, l'outil de préférence "Raccourcis clavier" affiche les raccourcis par défaut. Vous pouvez personnaliser ceux-ci afin de les adapter à vos besoins.
Bureau-<Préférences-<Raccourcis clavier
Pour modifier un raccourci,cliquez sur la ligne correspondante et saisissez un nouveau raccourci, ou pressez "Retour Arrière" pour l'éffacer.
Pour définir toutes autres commandes, non prévu par gnome, ca ce fait par metacity:
Applications-<Outils système-<Editeur de configuration
Aller dans apps -< metacity -< keybinding_commands et éditer une clef vide, par exemple "command_1", en lui attribuant la commande.
Toujours dans l'arborescence de metacity, aller dans global_keybindings et éditer la clef run_command_1 en lui attribuant la combinaison de touche, par exemple:
xsane -V epson:/dev/sg0
Remarque on peut ajouter de nouvelles clés, voila c'est tout.