Utiliser un clavier multimédia sous linux
Las du clavier 102 (ou 105) touches de base, vous le changez pour un superbe clavier multimédia, avec plein de touches de partout pour lancer des outils de décideur. Sous windows, on branche le clavier, on installe le driver, on reboote, et ça marche. Enfin, ça marche, il faut le dire vite, j'ai été déçu par les possibilités de paramétrage du mien (Logitech Internet Keyboard). Certains boutons refusant de marcher (ils ont l'air de réclamer un IE qui marche), d'autres ne pouvant pas changer de fonction (les boutons multimédia en haut par exemple, j'aurais bien mis le bouton média sur la lecture DVD, mais il ne trouve pas le soft qui fait ça chez moi, à savoir PC-DVD de creative, puisque j'ai une DXR2). Ah oui, j'oubliais, certaines fonctions se connectent au site de logitech d'où on est redirigé ensuite suivant leur bon vouloir (ou le montant du chèque). Sympa, merci.
Maintenant, occupons nous de son cas sous linux. Le but n'est pas simplement de faire marcher trois touches en plus pour lancer Mozilla, c'est aussi avoir une configuration clavier adaptée à linux, qui prenne en compte les particularités de l'interface, et notamment l'existance d'un shell.

Pour mes explications, je vais me baser sur mon clavier à moi que j'ai (Logitech Internet Keyboard), mais le principe est le même pour tous les claviers. Néanmoins, ce clavier à tout ce que l'on peut trouver sur un clavier aujourd'hui, cela permettra d'expliquer un peu tous les cas. On y trouve notamment :


Je vais éviter de parler des deux derniers points, parcequ'ils ne sont là que pour complêter la description par rapport à la photo.
Donner des nom à ces touches
Pour utiliser ces touches de manière efficace, la première chose à faire est de leur donner des noms dans XFree. Depuis, XFree4, Il y a des noms réservés pour ces touches. Allez les voir dans le fichier /usr/X11R6/lib/X11/XKeysymDB, ce sont par exemple XF86HomePage, XF86Calculator ou XF86Favorites. Il y en a une bonne cinquantaine.
Avant, une petite explication (simplifié, je n'ai pas l'intention de blablater sur la contruction interne de X). Lorsque l'on appuie sur une touche, un événement est envoyé à X, avec comme paramètre un keycode (par exemple, le keycode de la touche 'e' est 26). Ce keycode est converti en un identifiant de touche utilisable par les applications. C'est aaussi ce système qui permet la différenciation entre un clavier qwerty et un azerty.
Donc, pour utiliser les touches supplémentaires, il va falloir affecter à chaque keycode un nom. Il existe un programme pour faire cela : xmodmap (X Modify Mapping).
Maintenant, passons à la pratique. La première chose est d'identifier le keycode de chaque touche. C'est visible par la commande xev (X Event View).
Pour chaque appui sur une touche, xev affiche les paramètres de l'événement clavier correspondant. Voici par exemple ce qui s'affiche lorsque j'appuie sur la touche "Achats" du clavier :
KeyPress event, serial 23, synthetic NO, window 0x2800001, root 0x58, subw 0x0, time 4054243969, (100,61), root:(650,302), state 0x0, keycode 145 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 characters: "" KeyRelease event, serial 23, synthetic NO, window 0x2800001, root 0x58, subw 0x0, time 4054244070, (100,61), root:(650,302), state 0x0, keycode 145 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 characters: ""
Donc l'utilisation de la touche "Achats" correspond au keycode 145. Maintenant, trouvons lui un code de touche dans le fichier XKeysymDB. Je propose XF86VendorHome, c'est foireux, mais c'est le seul nom qui correspond a peu près à la touche.
Ensuite, occupons nous de l'affectation grace à xmodmap. Il suffit de créer un fichier .xmodmaprc dans la $HOME de l'utilisateur, ou de modifier /etc/X11/Xmodmap et de rajouter une ligne :
keycode 145 = XF86VendorHome
Une fois le fichier créé, vous pouvez l'utiliser par un xmodmap .xmodmaprc, commande à mettre dans votre .xsession. La touche est maintenant gérée.
Pour informations, je vous met ici mon xmodmaprc, destiné à mon logitech :
! monter le son keycode 176 = XF86AudioRaiseVolume ! Baisser le son keycode 174 = XF86AudioLowerVolume ! media keycode 237 = XF86AudioMedia ! mute keycode 160 = XF86AudioMute ! audio stop keycode 164 = XF86AudioStop ! audio prev keycode 144 = XF86AudioPrev ! audio next keycode 153 = XF86AudioNext ! itouch keycode 146 = XF86MyComputer ! go keycode 151 = XF86OpenURL ! back keycode 152 = XF86Back ! finances keycode 147 = XF86Calculator ! mes sites keycode 148 = XF86VendorHome ! Communaute keycode 149 = XF86VendorHome ! Favoris keycode 230 = XF86Favorites
Lancer un programme lors de l'appui d'une touche
Première utilisation du clavier : utiliser certainestouches pour lancer des programmes. Cette configuration se passe au niveau du window manager, qui permettent d'affecter une combinaison de touches au lancement d'un programme.
Personnellement, j'utilise Window Maker. Dans son cas, c'est le gestionnaire de menu qui s'occupe de cela. Une entrée de menu peut se voir affecter un raccourci qui lui permet d'être lancé au clavier On a même pas à taper de nom de la touche, grâce au bouton "capture" :

A noter que cela permet d'accrocher une exécution de commande, mais également un appel de fonction interne au window manager, comme quitter ou changer de bureau virtuel.
Pour sawfish, gestionnaire par défaut de GNOME, cela se passe dans la configuration des racourcis. On associe une touche clavier au lancement d'une application. Voir l'image ci-dessous pour un exemple. (cliquez sur l'image pour l'agrandir).
Pour KDE, je ne suis pas amateur de cet environnement. Ainsi, je vous conseil de vous reporter au site de Shift qui explique l'affectation des touches à des fonctions.
Faire d'autres bétises avec son clavier
Lancer des programmes est déja sympa, mais on peut faire d'autres âneries avec son clavier, qui ne sont pas forcément liés au lancement d'une application.
Exemple simple, j'ai une roulette sur mon clavier, et j'aimerais l'affecter à l'historique du shell. Il s'agit d'un remapping de touche. A savoir, faire en sorte que la roulette vers le haut soit équivalent à un appui sur la touche haut. Ils s'agit donc de remaper les clavier pour que l'utilisation de la roulette produise le même événement qu'un appuie sur la touche haut.
Et bien au lieu d'affecter un code comme XF86HomePage, on lui affecte le code de la touche UP, on se retrouve avec ce style de ligne dans .xmodmaprc :
keycode 9 = Up
En plus ...
Un article sur le même sujet sur warpedsystems (en anglais)
lineak : Un soft pour configurer tout ça graphiquement, pour de nombreux claviers.
Le duo xbinkeys et xbindkeys_config. Un autre soft de gestion des touches.
Le site de shift. Pour configurer le clavier sous KDE.
Une news sur linuxfr.org sur le sujet Allez voir les commentaires, il y a plein de remarques interressantes.
Pour plus d'informations, je ne peux que vous conseiller de lire les pages man de xev et de xmodmap.
Pour me contacter : kadreg@free.fr