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 trouvait sur d'anciennes versions de Mandriva dans le paquet X11R6-contrib et s'installe maintenant à partir d'un paquetage spécifique xev. Dans la 2007, si vous avez correctement configuré les sources urpmi, il vous suffit de taper ceci en tant que root :
Lorsque tout est installé, lancez le programme xev. En appuyant sur les touches, vous devriez obtenir quelque chose ressemblant à ceci :
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.
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 (attention, il faut utiliser un vrai terminal, pas un terminal dans X), 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 <keyb>' 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 verrouillage 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 outil liste les keycodes utilisés : 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
Note : il semblerait que les versions récentes de setkeycodes ou du kernel ne permettent plus d'attribuer les keycodes supérieurs à 127, ce qui est plus que pénible.
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
- Distributed under the terms of the GNU General Public License v2 (and no other version)
- 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 ce 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 (ou /usr/share/X11/XKeysymDB pour Debian) 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 (ou /usr/share/X11/XKeysymDB pour Debian). 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 Mandriva 2006 ou 2007), 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 -> Régionalisation & 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 ?
Une autre méthode utilisant KDE pour lancer une commande avec un raccourci clavier consiste à utiliser la fonction d'"Actions d'entrées" disponible sous le versions les plus récentes de KDE. Pour ce faire allez dans :
Centre de configuration de KDE (kcontrol) > Régionalisation & accessibilité > Actions d'entrées.
Ensuite, cliquez sur le bouton "Nouveau groupe" et nommez-le "Clavier", par exemple.
Cliquez sur le nom du goupe dans la liste de droite puis cliquez sur "Nouvelle action". Nommez-la comme vous le désirez et choisissez "Raccourci clavier -> Commande / URL (simple)" dans la liste déroulante "Type d'action : ". Vous pouvez dès à présent paramétrer le raccourci que vous voulez utliser et la commande à lancer dans les onglets "Raccourci clavier" et "Paramètres de la commande / URL". Il convient de répéter cette dernière procédure pour chaque commande à lancer.
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
Verrouiller 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
Exé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.
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/.xinitrcsetxkbmap -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"
XF86AudioMuteFaites 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/macrokeysChangez 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...
@ Retour à la rubrique Matériel
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
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/