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 :
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.
/usr/X11R6/lib/X11/xkb/keycodes/xfree86
que vous avez ceci :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
- 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 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 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.
/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/
.
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.
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).
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 :
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: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.
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 :
# 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.
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.
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.
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.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 :
"~/.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
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.
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 :
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
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 ;)
Appuyez sur la touche [MyHome] pour avoir un message "rapide" qui n'a de rapide que le nom...
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/ |