Télécommande ATI SAPPHIRE REMOTE WONDER Version 1
Le module pour utiliser cette télécommande est déjà présent dans le noyaux mais nécessite quelques modifications, mais le plus simple est l'utilisation de lirc. Cette méthode fonctionne aussi pour la ATI remote wonder (ID: B4SUR84A)
Configuration et modification du pilote
gedit linux-source-2.6.35/drivers/input/misc/ati_remote.c
voici la partie intéressante du code dans le ficher ati_remote.c les keycodes sont placés dans l'avant dernière colonne
/* Directional control pad axes */ {KIND_ACCEL, 0x35, 0x70, EV_REL, REL_X, -1}, /* left */ {KIND_ACCEL, 0x36, 0x71, EV_REL, REL_X, 1}, /* right */ {KIND_ACCEL, 0x37, 0x72, EV_REL, REL_Y, -1}, /* up */ {KIND_ACCEL, 0x38, 0x73, EV_REL, REL_Y, 1}, /* down */ /* Directional control pad diagonals */ {KIND_LU, 0x39, 0x74, EV_REL, 0, 0}, /* left up */ {KIND_RU, 0x3a, 0x75, EV_REL, 0, 0}, /* right up */ {KIND_LD, 0x3c, 0x77, EV_REL, 0, 0}, /* left down */ {KIND_RD, 0x3b, 0x76, EV_REL, 0, 0}, /* right down */ /* "Mouse button" buttons */ {KIND_LITERAL, 0x3d, 0x78, EV_KEY, BTN_LEFT, 1}, /* left btn down */ {KIND_LITERAL, 0x3e, 0x79, EV_KEY, BTN_LEFT, 0}, /* left btn up */ {KIND_LITERAL, 0x41, 0x7c, EV_KEY, BTN_RIGHT, 1},/* right btn down */ {KIND_LITERAL, 0x42, 0x7d, EV_KEY, BTN_RIGHT, 0},/* right btn up */ /* Artificial "doubleclick" events are generated by the hardware. * They are mapped to the "side" and "extra" mouse buttons here. */ {KIND_FILTERED, 0x3f, 0x7a, EV_KEY, BTN_SIDE, 1}, /* left dblclick */ {KIND_FILTERED, 0x43, 0x7e, EV_KEY, BTN_EXTRA, 1},/* right dblclick */ /* keyboard. */ {KIND_FILTERED, 0xd2, 0x0d, EV_KEY, KEY_KP1, 1}, {KIND_FILTERED, 0xd3, 0x0e, EV_KEY, KEY_KP2, 1}, {KIND_FILTERED, 0xd4, 0x0f, EV_KEY, KEY_KP3, 1}, {KIND_FILTERED, 0xd5, 0x10, EV_KEY, KEY_KP4, 1}, {KIND_FILTERED, 0xd6, 0x11, EV_KEY, KEY_KP5, 1}, {KIND_FILTERED, 0xd7, 0x12, EV_KEY, KEY_KP6, 1}, {KIND_FILTERED, 0xd8, 0x13, EV_KEY, KEY_KP7, 1}, {KIND_FILTERED, 0xd9, 0x14, EV_KEY, KEY_KP8, 1}, {KIND_FILTERED, 0xda, 0x15, EV_KEY, KEY_KP9, 1}, {KIND_FILTERED, 0xdc, 0x17, EV_KEY, KEY_KP0, 1}, {KIND_FILTERED, 0xc5, 0x00, EV_KEY, KEY_Q, 1}, {KIND_FILTERED, 0xc6, 0x01, EV_KEY, KEY_B, 1}, {KIND_FILTERED, 0xde, 0x19, EV_KEY, KEY_C, 1}, {KIND_FILTERED, 0xe0, 0x1b, EV_KEY, KEY_D, 1}, {KIND_FILTERED, 0xe6, 0x21, EV_KEY, KEY_E, 1}, {KIND_FILTERED, 0xe8, 0x23, EV_KEY, KEY_F, 1}, /* "special" keys */ {KIND_FILTERED, 0xdd, 0x18, EV_KEY, KEY_KPENTER, 1}, /* "check" */ {KIND_FILTERED, 0xdb, 0x16, EV_KEY, KEY_MENU, 1}, /* "menu" */ {KIND_FILTERED, 0xc7, 0x02, EV_KEY, KEY_POWER, 1}, /* Power */ {KIND_FILTERED, 0xc8, 0x03, EV_KEY, KEY_TV, 1}, /* TV */ {KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_DVD, 1}, /* DVD */ {KIND_FILTERED, 0xca, 0x05, EV_KEY, KEY_WWW, 1}, /* WEB */ {KIND_FILTERED, 0xcb, 0x06, EV_KEY, KEY_BOOKMARKS, 1}, /* "book" */ {KIND_FILTERED, 0xcc, 0x07, EV_KEY, KEY_EDIT, 1}, /* "hand" */ {KIND_FILTERED, 0xe1, 0x1c, EV_KEY, KEY_COFFEE, 1}, /* "timer" */ {KIND_FILTERED, 0xe5, 0x20, EV_KEY, KEY_FRONT, 1}, /* "max" */ {KIND_FILTERED, 0xe2, 0x1d, EV_KEY, KEY_LEFT, 1}, /* left */ {KIND_FILTERED, 0xe4, 0x1f, EV_KEY, KEY_RIGHT, 1}, /* right */ {KIND_FILTERED, 0xe7, 0x22, EV_KEY, KEY_DOWN, 1}, /* down */ {KIND_FILTERED, 0xdf, 0x1a, EV_KEY, KEY_UP, 1}, /* up */ {KIND_FILTERED, 0xe3, 0x1e, EV_KEY, KEY_OK, 1}, /* "OK" */ {KIND_FILTERED, 0xce, 0x09, EV_KEY, KEY_VOLUMEDOWN, 1}, /* VOL + */ {KIND_FILTERED, 0xcd, 0x08, EV_KEY, KEY_VOLUMEUP, 1}, /* VOL - */ {KIND_FILTERED, 0xcf, 0x0a, EV_KEY, KEY_MUTE, 1}, /* MUTE */ {KIND_FILTERED, 0xd0, 0x0b, EV_KEY, KEY_CHANNELUP, 1}, /* CH + */ {KIND_FILTERED, 0xd1, 0x0c, EV_KEY, KEY_CHANNELDOWN, 1},/* CH - */ {KIND_FILTERED, 0xec, 0x27, EV_KEY, KEY_RECORD, 1}, /* ( o) red */ {KIND_FILTERED, 0xea, 0x25, EV_KEY, KEY_PLAY, 1}, /* ( >) */ {KIND_FILTERED, 0xe9, 0x24, EV_KEY, KEY_REWIND, 1}, /* (<<) */ {KIND_FILTERED, 0xeb, 0x26, EV_KEY, KEY_FORWARD, 1}, /* (>>) */ {KIND_FILTERED, 0xed, 0x28, EV_KEY, KEY_STOP, 1}, /* ([]) */ {KIND_FILTERED, 0xee, 0x29, EV_KEY, KEY_PAUSE, 1}, /* ('') */ {KIND_FILTERED, 0xf0, 0x2b, EV_KEY, KEY_PREVIOUS, 1}, /* (<-) */ {KIND_FILTERED, 0xef, 0x2a, EV_KEY, KEY_NEXT, 1}, /* (>+) */ {KIND_FILTERED, 0xf2, 0x2D, EV_KEY, KEY_INFO, 1}, /* PLAYING */ {KIND_FILTERED, 0xf3, 0x2E, EV_KEY, KEY_HOME, 1}, /* TOP */ {KIND_FILTERED, 0xf4, 0x2F, EV_KEY, KEY_END, 1}, /* END */ {KIND_FILTERED, 0xf5, 0x30, EV_KEY, KEY_SELECT, 1}, /* SELECT */ {KIND_END, 0x00, 0x00, EV_MAX + 1, 0, 0}
Pour ma part j'ai changé les touches 0 à 9 par les touches du pavé numérique et la touche A par la touche Q ex KEY_1 par KEY_KP1
pour obtenir les codes attribués à chaque touche
gedit /usr/src/linux-headers-`uname -r`/include/linux/input.h
mais pour aller plus loin et configurer les touches TV; DVD; stop ; enregistrement etc … j'utilise xev et Préférences/raccourcis claviers.
Or les keycodes du input.h du noyau et ceux indiqués par xev, ne sont pas forcément les mêmes:
pour le noyau 2.6.35-22 :
- pour la touche 1 du clavier numérique le input.h donne 79 comme keycode et xev donne 87!
- de même pour la touche "windows" ou "super_L" le input.h donne 125(KEY_LEFTMETA) et xev donne 133
Il y a donc un décalage dans le cas de ce noyau de 8 codes!
gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Super_L"
rétablis la touche windows.
Donc pour attribuer les bons codes aux touches:
- Votre clavier multimédia a des touches multimédia non configurées
Exemple:
xev renvoie pour la touche FN + F5:
" state 0x2010, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES "
donc le keycode associé dans le fichier input.h est 156-8=148 donc KEY_PROG1 pour le noyau 2.6.35-22
Il suffit alors de remplacer dans ati_remote.c :
{KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_DVD, 1}, /* DVD */
par
{KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_PROG1, 1}, /* DVD */
Enfin , nous voulons utiliser notre lecteur multimédia préféré:( vlc dans mon cas) pour la touche DVD de la télécommande
Il suffit d'aller dans Préférences/raccourcis claviers et ajouter le lancement de vlc avec comme touche de raccourcis le keysym XF86Launch1 et le tour est joué !
- Votre clavier multimédia est parfaitement configuré:
Il faut donc chercher donc connaitre le keycode de la touche et keysim associé.
La commande :
$ xmodmap -pke
vous donne la relation keycode-keysim; sinon xev fait normalement bien le travail On cherche alors la correspondance du keycode dans le fichier input.h (en retirant 8 dans le cas du noyau 2.6.35-22)
Voir l'exemple prédent pour la fin de la modification du ficher ati_remote.c
une fois le fichier modifié, il n'y a plus qu'à compiler le pilote
gedit linux-source-2.6.17/drivers/usb/input/Makefile
version intrepid et suivante:
gedit linux-source-2.6.35/drivers/input/misc/Makefile
voici le Makefile :
VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 35 EXTRAVERSION = .13-ubuntu1 NAME=Crazed Snow-Weasel ifneq ($(KERNELRELEASE),) # # Make rules for use from within 2.6 kbuild system # obj-m += ati_remote.o else # We were called from command line KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KDIR) M=$(PWD) modules install: all $(MAKE) -C $(KDIR) M=$(PWD) modules_install clean: rm -f *.mod.c *.ko *.o *~ core *.i endif
cd linux-source-2.6.17/drivers/usb/input/ make
version intrepid et suivantes:
cd linux-source-2.6.35/drivers/input/misc make
le pilote compilé est le fichier ati_remote.ko
Pour le tester dans un premier temps: - enlever le pilote actuel déjà chargé
sudo rmmod ati_remote
la télécommande ne répond plus à présent.
Installation du nouveau module
sudo insmod ati_remote.ko
la commande se fait toujours dans le répertoire ou se situe le fichier ati_remote.ko normalement la télécommande réagit avec les nouvelles touches assignées
Maintenant pour l'installer définitivement
sudo cp ati_remote.ko /lib/modules/`uname -r`/kernel/drivers/usb/input/ati_remote.ko
version intrepid et suivantes:
sudo cp ati_remote.ko /lib/modules/`uname -r`/kernel/drivers/input/misc/ati_remote.ko
Cette méthode n'est pas très élégante puisqu'elle écrase le module actuel Mais elle évite tout conflit avec l'ancien pilote puisqu'il n'existe plus de plus le pilote est chargé directement au démarrage Si écraser le fichier vous fait hérisser les poils, il est possible de faire un backup du fichier avant de l'écraser.
Changer le canal de communication
Si votre voisin a eu la bonne idée d'acheter la même télécommande que vous, il se peux qu'il arrive à prendre le contrôle de votre ordinateur (et vous le contrôle du sien). Pour remédier à ce problème assez embêtant, il faut changer le canal de communication de la télécommande pour se distinguer de celle du voisin.
Configuration de la télécommande
Pour cela, on appuie quelques secondes sur le bouton "main" de la télécommande jusqu'à ce que la LED de contrôle se mette à clignoter. Elle clignote autant de fois que le numéro du canal sur lequel est configuré la télécommande. Une fois que la LED cesse de clignoter, on rentre un nouveau canal (différent du voisin bien sûr) à l'aide des touches numériques (les canaux vont de 1 à 16, ne pas oublier de mettre le 0 si on choisi un canal de 1 à 9, ex : 07). On confirme le numéro en ré-appuyant sur le bouton "main". La LED clignote le nombre de fois correspondant au canal sélectionné pour confirmer.
Configuration du module
Il faut ensuite procéder à la configuration du module. A partir de là, 2 choix s'offre a nous : soit on masque le canal du voisin, soit on autorise que le nôtre, tout dépend si on connaît le canal du voisin :p
Masquer un seul canal
Le calcul du masque est assez simple : 2^canal_voisin Retenez ensuite la valeur, on va en avoir besoin pour la configuration
Autoriser un seul canal
Là aussi le calcul n'est pas beaucoup plus compliqué : 65535-(2^canal)
Tests et enregistrement du masque
Une fois le masque trouvé, on va le tester avant de l'enregistrer. Pour cela, commencez par décharger le module à l'aide de la commande
sudo rmmod ati_remote
Puis rechargez le en passant en paramètre le masque calculé via la commande
sudo modprobe ati_remote channel_mask=masque
Remplacez masque par le masque calculé juste au dessus.
Il vous reste à tester maintenant si l'ordinateur répond toujours aux commandes de la télécommande :)
Si tout est ok, il ne reste plus qu'à enregistrer le masque pour que le module soit chargé avec celui-ci au démarrage. Pour cela, éditer le fichier /etc/modprobe.d/options
Sur ubuntu :
gksudo gedit /etc/modprobe.d/options
Sur kubuntu :
kdesu kate /etc/modprobe.d/options
A la fin du fichier, rajouter ceci
# Set channel for ATI Remote Wonder options ati_remote channel_mask=masque
En remplaçant toujours masque par le masque calculé
Et si ça ne marche pas ?
Il est possible d'activer un mode debug pour voir les signaux capturés et ceux masqués à l'aide de la commande
sudo modprobe channel_mask=masque debug=1
Tout sera alors loggué dans le fichier /var/log/syslog, pour l'afficher en temps réel, exécutez
tail -f /var/log/syslog
Utiliser sa télécommande avec le programme LIRC
Lirc est un programme permettant de contrôler à l'aide d'une télécommande votre ordinateur.
L'avantage de ce programme est qu'il peut s'adapter à presque toute vos envies. Son principal défaut est une installation complexe, voici la méthode la plus simple pour installer et configurer Lirc sur votre ordinateur.
Vous trouverez sur le wiki d'autres pages traitant de la configuration de lirc et notamment une page présentant les fichiers lircrc permettant de personnaliser l'utilisation de votre télécommande.
Remarque d'un lecteur : Vous trouverez ici une page de blog qui m'a été très utile, testé avec succès sous festy.
Prérequis
On installe LIRC et ce qu'il faut pour compiler le module de notre télécommande :
sudo apt-get install lirc lirc-modules-source module-assistant
Ou par le protocole apt
- lirc
- lirc-modules-source
- module-assistant
Configuration à partir des sources
puis on reconfigure à partir des sources :
sudo dpkg-reconfigure lirc-modules-source
Sur l'écran qui apparaît, cliquez sur Ok
Dans l'ecran proposant de choisir le module lirc choisir : atiusb puis Ok
Répondre No sur l'écran suivant puis Install the package maintener version et Ok
gksudo gedit /etc/lirc/hardware.conf
Rajoutez :
MODULES="lirc_atiusb"
Finalisation
Puis copier les lignes suivantes dans un terminal :
sudo m-a update,prepare sudo rm /usr/src/lirc*deb sudo m-a clean lirc sudo m-a a-i lirc sudo depmod -a
Suppression du module ati_remote
On empêche le chargement du module (pilote) ati_remote :
gksudo gedit /etc/modprobe.d/blacklist
On rajoute ceci à la fin :
# Télécommande ATI blacklist ati_remote
Configurer sa télécommande
gksudo gedit /etc/lirc/lircd.conf
LE contenu du fichier doit reprendre le fichier de configuration de votre télécommande. Voir http://lirc.sourceforge.net/remotes/atiusb/lircd.conf.atiusb
Pour lancer lirc au démarrage de Gnome :
Système » Préférences » Sessions » Programmes au démarrage
et ajouter irexec
Ensuite reste le plus "facile" configurer les programmes pour utiliser notre télécommande.
gedit ~/.lircrc
Vous trouverez des exemples de fichiers de configuration pour Lirc sur le wiki : Création de fichiers lircrc.
Pour finaliser l'installation redémarrez votre ordinateur.
Si vous avez des doutes sur la réussite de votre installation, lancez un Terminal et tapez le commande :
irw
Lors de l'appui sur une des touche de votre télécommande le Terminal doit vous signaler un evenement.
Bon courage !!