Configurer les touches de son clavier multimédia

De Lea Linux
Aller à la navigation Aller à la recherche

Configurer les touches de son clavier multimédia

Configurer les touches de son clavier multimédia

Comme moi, vous vous êtes peut-être acheté un clavier confortable, plus adapté aux longues heures de coding ou d'irc que votre vieux tromblon 105 touches que vous avez eu avec votre premier 386. Et, oh comble du luxe, il y a sur ce clavier plein de petits boutons rigolos pour contrôler le volume, changer de chanson, mettre la machine en veille ainsi que plein d'autres choses du genre, parfaitement inutiles donc totalement indispensables...

Les drivers pour votre manchot favori ne vous seront sans-doute pas fournis avec la bête, nous allons donc voir ensemble comment associer à chacune de ces touches l'exécution d'une commande.

Préliminaires

Espionnage des touches incriminées

Tout d'abord, il va nous falloir espionner le clavier pour savoir ce qu'il renvoie quand vous appuyez sur les touches bonus.

Pour cela, il faut utiliser le programme xev, qui se trouve sur mandrake dans le paquet X11R6-contrib. Si vous avez correctement configuré les sources urpmi, il vous suffit de taper ceci en tant que root : urpmi X11R6-contrib.

Lorsque tout est installé, lancez le programme xev. En appuyant sur les touches, vous devriez obtenir quelque chose ressemblant à ceci :

[root@mastonsbox maston28]# xev
KeyRelease event, serial 27, synthetic NO, window 0x3400001,
root 0x48, subw 0x0, time 7029077, (249,-81), root:(252,517),
state 0x0, keycode 233 (keysym 0x1008ff27, XF86Forward), same_screen YES,
XLookupString gives 0 bytes: ""

Le champ qui nous intéresse ici est le champ keycode. Par exemple, la touche que j'ai ici espionnée renvoie la valeur keycode 233.

Répétez cette opération pour chacune des touches spéciales, et notez quelque part la valeur de chacune de ces touches.

Si certaines touches ne semblent rien renvoyer, vérifiez dans le fichier /usr/X11R6/lib/X11/xkb/keycodes/xfree86 que vous avez ceci :
xkb_keycodes "basic" {

minimum= 8;
maximum= 255;

En effet, il arrive parfois que les valeurs soient plus petites, et donc que le programme ne scanne pas sur toute la plage possible.

xev ne réagit pas à vos touches

Il arrive fréquemment que xev ne réagisse pas à l'appuie sur certaines touches des claviers multimédia. C'est, la plupart du temps, du au fait que le kernel n'a pas connaissance de ces touches. Mais il existe une solution !

vérifier que le kernel est capable de gérer une touche

Dans un terminal tapez : tail -f /var/log/messages Puis appuyez sur la touche qu'xev ne reconnaît pas, vous devriez voir apparaître quelque chose du genre : Feb 7 16:13:08 localhost atkbd.c: Use 'setkeycodes e012 <keycode>' to make it known. Ce qui nous intéresse, c'est la valeur annoncée : e012. C'est le scancode de la touche en question. Tant que vous y êtes appuyez sur la plupart de touches de votre clavier pour voir s'il n'y a pas d'autre touche inconnue du noyau. Vérifiez aussi les touches aprés le vérouillage de la touche <key>Verr. F</key> (enfin c'est son nom sur mon clavier) : elle donne accès à une douzaines de touches parallélement aux touches de fonction.

Il faut maintenant affecter un keycode à ce scancode. C'est ce que dit le message d'erreur renvoyé par le noyau.

vérifier les keycodes disponibles

Un outils liste les keycodes utilisé : getkeycodes. Il renvoie une table qui liste les touches par scancode affiche leur keycodes associé.

Pour afficher uniquement les keycodes libres, on peut utiliser la commande : root@localhost # IFS=$'\n ' ; for i in $(getkeycodes | grep "[0-9]:" | cut -d ":" -f 2) ; do echo $i ; done | sort | uniq > list.codes root@localhost # for ((i=80;i<=255;i++)) ; do if grep -E "^$i\$" list.codes > /dev/null ; then true ; else echo "$i" ; fi ; done > free.codes root@localhost # cat free.codes

affectation d'un keycode par scancode

Pour chaque scancode trouvé aux étapes précédantes, vous devez affecter un keycode libre (trouvé à l'étape précédante).

Par exemple, pour affecter le keycode : 200 à la touche dont le scancode est e012, il suffit de taper : setkeycodes e012 200 On peut affecter plusieurs touches en même temps, par exemple : setkeycodes e012 200 e013 201 e017 215 Un fois ceci fait, vous pourrez espionner vos touches avec xev comme préconisé ci-dessus.

PS: Pensez à ajouter à l'un de vos scripts de démarrage l'affectation des keycodes Sur ma gentoo, j'ai créé le script /etc/init.d/keycodes : #!/sbin/runscript

  1. Distributed under the terms of the GNU General Public License v2 (and no other version)
  2. NB: Config is in /etc/conf.d/keycodes

depend() {

       need localmount

}

checkconfig() {

       if [ -z "$KEYCODES" ] ; then
               eerror "You need to setup KEYCODES in /etc/conf.d/keycodes first"
               return 1
       fi

}

start() {

       checkconfig || return 1
       ebegin "Setting specific keycodes"
               setkeycodes $KEYCODES
       eend ${?}

}

stop() {

       ewarn "nothing to stop"

} Je n'ai pas oublié de rendre se script exécutable : root@localhost # chmod +x /etc/init.d/keycodes Et j'ai créé le fichier de configuration /etc/conf.d/keycodes : KEYCODES="e011 227 e012 228 e013 229 e014 230 e03b 190 e03c 191 e03d 192 e03e 193 e03f 194 e040 195 e041 196 e042 197 e043 198 e044 199 e057 201 e058 202" Ensuite j'ai demandé à ma gentoo de démarrer automatiquement ce fichier : root@localhost # rc-update add keycodes default

Nommer les touches

Pour que les touches soient reconnues, il faut associer leur keycode avec un nom de touche g énérique connu par Xfree. Ces noms de touches sont listés dans le fichier /usr/X11R6/lib/X11/XKeysymDB et commencent par XF86. Il faut ensuite créer le fichier ~/.xmodmaprc dans lequel on va définir ces fameuses correspondances...Comme un exemple vaut mieux qu'un long discours, voici le contenu de mon ~/.xmodmaprc :

keycode 234 = XF86Back
keycode 233 = XF86Forward
keycode 232 = XF86Stop
keycode 231 = XF86Refresh
keycode 229 = XF86Search
keycode 230 = XF86Favorites
keycode 178 = XF86VendorHome
keycode 236 = XF86Mail
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 237 = XF86Video
keycode 235 = XF86OfficeHome
keycode 161 = XF86Calculator
keycode 222 = XF86PowerOff
keycode 223 = XF86Sleep
keycode 227 = XF86WakeUp

En fonction des keycode que vous avez trouvé et des noms que vous souhaitez donner à vos touches, remplissez ce fichier avec cette syntaxe très simple.

L'attribution de ces noms est totalement arbitraire du moment qu'ils sont dans le fichier /usr/X11R6/lib/X11/XKeysymDB. Le choix de ces noms n'influera en rien sur les actions associées aux touches dans le futur. Une bonne chose est de choisir les noms qui se rapprochent le plus du dessin associé à la touche sur le clavier pour s'y retrouver...

Une fois cela fait, il faut taper la commande xmodmap ~/.xmodmaprc pour activer le nouveau mapping.

Charger les attributions automatiquement sous KDE

Pour que cela prenne effet à chaque démarrage de KDE, placez le fichier suivant dans le répertoire ~/.kde/Autostart/.

#!/bin/sh
xmodmap ~/.xmodmaprc

Rendez ensuite ce script exécutable : chmod +x ~/.kde/Autostart/clavier (si vous avez appelé le fichier clavier bien entendu...)

KDE est installé sur ma machine

Attribuer des commandes aux touches

Une méthode simple pour attribuer des touches à des commandes est de créer un menu caché.

Pour cela, lancez kmenuedit ou menudrake (sous mandrake), ou encore sous mandriva 10.1 Kcontrol->Système->Touches spéciales du clavier. Créez un menu caché en mettant un point au début du nom de menu, par exemple : .clavier sera un menu caché.

Vous pouvez maintenant créer des entrées de menu avec un nom et une commande associée, chacune de ces commandes pourra ensuite être attribuée à une touche ou à une combinaison de touches.

Vous trouverez à la fin de cet article quelques commandes utiles de gestion de son par exemple, ou de certains logiciels.

Maintenant que vous avez créé les entrées, allez voir : "centre de controle kde -> regionalisation & accessibilité -> raccourcis claviers -> raccourcis de commandes". Tout dépend de votre version de KDE, mais cela n'a pas beaucoup changé, vous devriez trouver cela en quelques secondes à peine. Vous avez maintenant tous vos menus, y compris votre menu caché. Pour chacune de entrées de menu, vous pouvez créer un raccourci personnalisé, et utiliser vos touches fraichement nommées ! Ça marche ! Qui a dit que les claviers multimédias ne sont pas compatibles avec linux ?

Liste de commandes utilisables

Action Commande
Lecture-pause xmms --play-pause
STOP xmms --stop
Chanson précédente xmms --rew
Chanson suivante xmms --fwd
Baisser le son aumix -v-15 ici de 15%.
Monter le son aumix -v+15 ici de 15%.
Couper le son aumix -vn
Lancer kmail kmail
Relever les mails dans kMail dcop kmail KMailIface checkMail
Vérouiller l'écran dcop kdesktop KScreensaverIface lock
Ejecter cdrom eject /dev/cdrom
Avaler cdrom eject -t /dev/cdrom
Calculatrice kcalc
Chercher un fichier kfind
Konqueror comme gestionnaire de fichiers kfmclient openProfile filemanagement
Konqueror comme navigateur kfmclient openProfile webbrowsing
Éxécuter une commande dcop kdesktop KDesktopIface popupExecuteCommand

KDE n'est pas installé sur ma machine

Configurer son clavier sous X

Nous allons commencer par configurer notre clavier sous X : c'est-à-dire que nous allons faire en sorte que X sache quel modèle de clavier nous possédons. Pour cela, nous avons besoin de deux informations :

  • Quel clavier nous possédons
  • A quel modèle X associe t-il notre clavier

Pour la première, retournez votre clavier et lisez l'étiquette ;)
Pour la deuxième, éditez le fichier /usr/X11R6/lib/X11/xkb/rules/xfree86.lst. S'il ne se trouve pas là, faites locate *xkb*/xfree86.lst dans un shell).

Au dos de mon clavier il est écrit : Logitech Internet Naviguator Keyboard. Le modèle de X est donc logiink.

Maintenant on va insérer tous ces paramètres dans le fichier de configuration de X, pour ce faire : éditez en root le fichier /etc/X11/XF86Config-4 (ou XF86Config selon votre version de X). Cherchez la section du clavier : Driver "keyboard" et insérez les paramètres :

Section "InputDevice"
  Identifier "Generic Keyboard"
  Driver "keyboard"
  Option "CoreKeyboard"
  Option "XkbRules" "xfree86"
  Option "XkbModel" "logiink"
  Option "XkbLayout" "be"
EndSection

Enregistrez, relancez vos sessions si vous voulez que les changements soit appliqués immédiatement. La configuration de X est terminée.

Récupérer les KeyCodes de toutes les touches

Les KeyCodes sont les numéros des touches qui définissent les touches de votre clavier, parfois c'est sous forme de chaîne de caractères comme ici. C'est très utile parce que grâce à ça on ne doit pas deviner à quel numéro est associée telle touche. Éditez le fichier /etc/X11/xkb/symbols/inet (si le fichier ne se trouve pas là, essayez locate *xkb*/inet), et recherchez le modèle de votre clavier. Vous trouverez ainsi tous les KeyCodes des touches supplémentaires de votre clavier étendu.

Vous pouvez utiliser les touches pour des actions sous KDE, Gnome, Fluxbox, WindowMaker, etc...

Association des touches supplémentaires à une commande

Installation de KeyLaunch

Associer une touche à une commande est chose facile si l'on utilise Lineak ou KHotKeys, je vous propose ici encore une autre méthode un peu moins évidente mais beaucoup plus légère que les autres. Vous aurez seulement besoin de KeyLaunch (68K). Sur Debian c'est le paquet keylaunch, pour Mandrake et RedHat : je n'ai pas trouvé le paquet (désolé) et pour ceux qui veulent compiler c'est par ici. (11k)

Configurer KeyLaunch

La configuration est très simple et très pratique : tout se fait dans .keylaunchrc que vous devez créer dans votre dossier home. Il y a un exemple du fichier dans /usr/share/doc/keylaunch/examples (si vous avez installé le paquet Debian sinon c'est dans le dossier debian là où vous avez décompressé KeyLaunch).

Voici, en français, comment personnaliser ce fichier :
Une seule association par ligne, chaque association commence par : key= faites suivre ensuite par l'état des modificateurs. Insérez trois points si une simple pression sur la touche vous suffit. key=.... (Le premier point est le modificateur [Shift], activez-le en remplaçant le point par une astérisque (*). Le second point est le modificateur [Ctrl] et enfin le dernier est le modificateur [Alt].) Et terminez enfin la ligne par la commande à exécuter précédée de ':'.

Et comme un bon exemple vaut mieux qu'un long discours :

key=...XF86AudioMedia:xmms
key=.*.XF86AudioMedia:gmplayer

Cet exemple-ci fait en sorte que lorsque vous appuyez sur la touche [Media] du clavier : il ouvre XMMS. Cependant, si vous appuyez simultanément sur [Alt] et [Media], KeyLaunch lancera GMPlayer.

Cette exemple est destiné à un clavier Logitech Internet Navigator, adaptez le fichier à vos besoins grâce à la liste des touches à laquelle j'ai fait référence ci-dessus, dans la section KeyCodes.

Aide pour les commandes

Voici une petite aide pour savoir quels sont les commandes qu'il faut mettre pour réaliser telle ou telle action. Demandez sur le forum si cette aide est insuffisante.

XMMS

Démarrer XMMS xmms
Démarrer la musique xmms --play
Mettre en pause xmms --pause
Basculement lecture/pause xmms --play-pause
Arrêter xmms --stop
Piste suivante xmms --fwd
Piste précédente xmms --rew

Pour le reste, entrez dans une console et tapez xmms --help.

Autre programme

Couper le son mute
Noatun noatun
La calculatride de KDE kcalc
Mozilla mozilla
Mozilla Mail mozilla -mail
KMail kmail --check
Rechercher kfind
Augmenter le volume de 10% aumix -v+10
Diminuer le volume de 10% aumix -v-10

Vous pouvez également créer ce script que vous pouvez associer à la touche [Go], présente sur certains claviers Logitech. Il affiche simplement une boite de dialogue KDE, pour vous permettre d'entrez l'URL que Mozilla doit vous afficher :

#!/bin/bash
# kwebgo
file=$(kdialog --inputbox "Site Web :" "$@")
if [ -n "$file" ]; then
  mozilla "$file"
fi

kwebgo http://www.mozdex.com ouvrira la boite de dialogue avec pour valeur par défaut : http://www.mozdex.com.

Changez mozilla "$file" en konqueror "$file", et vous utiliserez ainsi Konqueror au lieu de Mozilla.

Comment associer une touche à une combinaison de touches ?

Voici comment associer un clic ou une pression sur une touche à une combinaison de touches et d'actions à la souris grâce à xbindkeys et xmacroplay.

XBindKeys

XBindKeys est un programme qui permet d'associer une commande à une combinaison de touches ou de clics. Vous devez pour cela installer XBindKeys (xbindkeys sur Debian (152K)).

XMacro

XMacro est un programme capable d'enregistrer vos actions de souris et de clavier, pour ensuite les reproduire. Remarquez que l'on ne fera que produire des actions. Cliquez ici pour le télécharger (paquet xmacro sur Debian (112K)).

L'exemple sur Diablo II

Le mieux c'est de montrer en pratique ce que l'on peut faire avec tout ça avec Diablo II.

Je n'aborderai pas l'émulation ici. Merci de ne pas m'écrire à propos de ce jeu.

Configurer X pour Diablo II

Le XBindKeys ne fonctionne que si le programme n'applique pas un "grab" sur les périphériques (i.e les capturer pour lui tout seul). Il faut donc lancer Diablo II en fenêtré tout en restant en plein-écran. Explication : une application lancée en fenêtrée, sans bordure, sans fenêtre et avec une résolution d'écran correspondant à la taille de la fenêtre, ça revient finalement à un plein écran sans capture des périphériques d'entrée.

Nous allons créer un script qui va lancer Diablo II sur la seconde session graphique, en fenêtré, et en 800x600 (de manière à ce que la fenêtre prenne tout l'écran). Pour cela il faut d'abord configurer X pour qu'il travail toujours en 800x600 lorsqu'il est en 16 bits de couleurs. (En supposant ici que vous travaillez habituellement en 24 bits de couleurs. Si vous travaillez en 16 bits, modifiez le 24 bits). Éditez le fichier /etc/X11/XF86Config-4 (ou XF86Config selon votre version de X) ; cherchez la section Screen et trouvez ensuite la sous-section Display dont la Depth (profondeur des couleurs) est égale à 16. Modifiez les modes pour n'avoir au maximum qu'une résolution de 800x600. La première étant celle utilisée par défaut.

SubSection "Display"
  Depth 16
  Modes "800x600" "640x480"
EndSubSection

De cette façon, X activera toujours la 800x600 lorsqu'il sera en 16 bits de couleurs.

Configurer une commande Diablo II

Nous allons maintenant faire le petit script qui lancera Diablo II sur une nouvelle session.

#!/bin/bash

mv $HOME/.xinitrc $HOME/.xinitrc-diablo2-old

echo "xsetroot -solid black -cursor_name left_ptr
#xset m 50/10 6 # accélération souris xset m <accel> <seuil>
numlockx on # vérouillage pavé num
setxkbmap -layout us
cd /usr/local/games/Diablo\ II
xbindkeys -f $HOME/.diablo2/xbindkeys.config -X :1
wine Game.exe -- $@ "> /tmp/diablo2.logs
killall -9 xbindkeys wine wineserver" > $HOME/.xinitrc

xinit -- :1 -depth 16

rm -f $HOME/.xinitrc
mv $HOME/.xinitrc-diablo2-old $HOME/.xinitrc
setxkbmap -layout us nous sert à faire passer le clavier en QWERTY original. Ce n'est pas indispensable mais préférable pour Diablo II qui ne comprend absolument rien aux touches numériques situées au dessus de la zone des lettres.
Dans ce script, le NumLock est activé par numlockx : vérifiez que vous l'avez installé !

Comme vous voyez, la commande de XBindKeys est déjà insérée, les explications arrivent...

XBindKeys et Diablo II

Nous allons aborder ici l'utilisation de XBindKeys dans Diablo II. Comme vous le savez déjà, la roulette de la souris dans Diablo II sert à faire défiler les aptitudes. On va améliorer ça : la roulette vers le haut enclenchera une aptitude et remetra directement celle par défaut, celle du bas une autre aptitude et le clic au milieu encore une autre. Très pratique ;)

On va tout d'abord positionner tous les fichiers nécessaires à notre opération dans un dossier .diablo2 dans le répertoire home. Créez donc le dossier $HOME/.diablo2 et mettez-y ce fichier de configuration XBindKeys :

# Aptitude 1
"~/.diablo2/aptitude.sh 6"
 b:4

# Aptitude 1-Copy
"~/.diablo2/aptitude.sh 6"
 control + b:4

# Aptitude 2
"~/.diablo2/aptitude.sh 7"
 b:5

# Aptitude 2-Copy
"~/.diablo2/aptitude.sh 7"
 control + b:5

# Aptitude 3
"~/.diablo2/aptitude.sh 8 0,09"
 b:2

# Aptitude 3-Copy
"~/.diablo2/aptitude.sh 8 0,09"
 control + b:2

# Extended keyboard
"~/.diablo2/message.sh '***à bout de souffle*** on pourrait pas... faire un petit saut... en ville ? :) Je vous paye le TP :D'"
 XF86HomePage

"aumix -v+10"
 XF86AudioRaiseVolume

"aumix -v-10"
 XF86AudioLowerVolume

"mute"
 XF86AudioMute
Faites attention au deuxième argument donné à aptitude.sh, ce sont des nombres décimaux et le séparateur est une virgule. Ça ne fonctionnera pas si vous mettez un point ! (dû à la commande sleep)
Comme vous le voyez, j'ai remis les mêmes associations deux fois. Une fois avec le [Ctrl] enfoncé, et une fois sans. Étant donné qu'il faut appuyer sur la touche [Ctrl] pour courir.

Mais quel est cet étrange script aptitude.sh ? Et message.sh ? La suite, par ici...

XMacroPlay et Diablo II

On va maintenant faire deux petits scripts, l'un permet d'envoyer des messages rapidement l'autre permet d'appuyer sur une touche, faire un clic droit, temporiser et appuyer sur une autre touche du clavier.

#!/bin/bash
echo "KeyStr Return
string $@
KeyStr Return" > /tmp/message.$USER
xmacroplay :1 < /tmp/message.$USER

Ce script va donc appuyer sur [Enter], taper tout le message contenu en paramètres et réappuyer sur [Enter].

Maintenant voyons voir l'autre script :

#!/bin/bash
echo "KeyStr $1" > /tmp/macrokeys
xmacroplay :1 < /tmp/macrokeys
test -z "$2" || sleep $2
echo "ButtonPress 3
ButtonRelease 3
KeyStr 5" > /tmp/macrokeys
xmacroplay :1 < /tmp/macrokeys
Changez le ButtonPress 3 et ButtonRelease 3 en ButtonPress 1 et ButtonRelease 1 si vous désirez que le script fasse un clic gauche au lieu d'un clic droite.

5... 6... Vous comprenez maintenant pourquoi c'est plus difficile en clavier français ou belge.

Ce script-ci va donc appuyer sur la touche du premier paramètre, appuyer sur le bouton du milieu de la souris, attendre la durée précisée au deuxième paramètre et, finalement, va appuyer immédiatement sur la touche 5.

Non ça ne marche pas encore, mais il ne reste qu'à configurer le jeu... ;)

Configuration de Diablo II

Entrez dans le jeu, appuyez sur [Esc], rendez-vous ensuite dans le menu de configuration des touches. Associez les touches [5], [6], [7] et [8] à des aptitudes différentes. Sortez des menus et mettez votre aptitude principale en [5], et des aptitudes utilisées moins fréquemment en [6], [7] et [8]. Tout ça à une même main (coté gauche ou droit des aptitudes).

Bon amusement ;)

Si vous avez bien tout suivi : quand vous ferez défiler la roulette vers le haut, votre aptitude en [5] va commuter vers la [7] et l'actionner, et reviendra immédiatement après en [5].
Appuyez sur la touche [MyHome] pour avoir un message "rapide" qui n'a de rapide que le nom...
Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Thomas MUYL --maston28 le 19/02/2004.

Copyright

Copyright © 19/02/2004, Jean-Thomas MUYL --maston28

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/