Cet article fait suite à mon précédent sur la réalisation d’un cadre photo numérique avec un Raspberry. Aujourd’hui, je vais détailler comment contrôler le diaporama avec une télécommande infra-rouge.
Note : j’explique ici comment faire pour émuler des frappes au clavier dans une application graphique (feh) depuis des signaux IR. Libre à vous d’utiliser ma méthode pour toute autre application !
Table des matières
Objectif
Lors d’un diaporama avec feh, il est possible de contrôler l’affichage grâce à certaines touches du clavier (mettre en pause/reprendre le diaporama, tourner l’image de 90°, avancer à l’image suivante etc.). Sauf que sur notre cadre photo, on se passerait bien d’un clavier.
On va donc utiliser un récepteur Infra-Rouge (IR) branché sur les ports GPIO et une télécommande IR pour contrôler feh. La difficulté sera alors de traduire des signaux IR en frappes au clavier. Cette opération sera réalisée grâce à l’utilisation conjointe de irexec et de xdotool.
Prérequis
- Avoir réalisé le montage et la configuration du Raspberry, de l’écran et du NAS pour que le tout se comporte comme un cadre photo numérique connecté.
- Avoir câblé le récepteur IR au Rpi et enregistré les signaux de chaque touche de la commande avec
irrecord
Vérification des signaux
Avant toute chose, commencez par vérifier que les touches soient bien détectées et nommée dans lirc
. Pour ce faire, lancez irw
et essayez quelques touches. Vous devriez avoir des lignes qui ressemblent à ça :
00000000000efbd3 01 KEY_PLAY PhilipsDVD
Ici, « PhilipsDVD » correspond au nom de la télécommande (tel que défini juste après begin remote
dans /etclirc/lircd.conf
), tandis que « KEY_PLAY » est le nom de la touche (après begin codes
dans le même fichier).
Envoi des fausses frappes au clavier vers X
L’objectif est d’envoyer à feh des signaux qu’il interprétera comme des frappes de clavier. Comme exemple, on va lui faire croire que l’utilisateur appuie sur la touche
Une fausse bonne idée serait d’essayer d’envoyer « h » vers le stdin
de feh. En effet, stdin
n’existe que dans un shell, pas dans une application graphique.
La solution miracle s’appelle xdotool : elle permet d’envoyer en ligne de commande des fausses frappes de clavier vers le serveur X. On commence donc par installer xdotool :
sudo apt-get install xdotool |
Pour envoyer
xdotool key h |
Vous trouverez ici la liste complète des noms exacts des touches (et combinaisons de touches) que xdotool peut envoyer.
En SSH
Si vous êtes connecté en SSH à la framboise, vous risquez de vous faire jeter si vous tentez la commande précédente. En effet, xdotool va chercher à envoyer la frappe vers le serveur X sur lequel vous êtes (censé être) connecté. Or vous n’êtes pas connecté en graphique (à moins d’un ssh -X
…). Il faut donc au préalable penser à préciser sur quel display vous voulez envoyer la commande :
export DISPLAY=':0' export XAUTHORITY="/home/pi/.Xauthority" |
Exécution des commandes depuis les signaux IR
Reste donc à s’arranger pour que ma commande précédente soit réalisée quand le signal « KEY_PLAY » est reçu par lircd
. Pour ce faire, on va bien sûr utiliser irexec
.
On va donc créer un fichier de configuration dans le dossier utilisateur (/home/pi/
dans mon cas) :
nano .lircrc |
Avec pour contenu :
begin prog = irexec remote = PhilipsDVD button = KEY_PLAY config = xdotool key h end
Reste à lancer irexec
(attention : même remarque que précédemment quant à l’export du display) pour vérifier que tout fonctionne.
Mon fichier .lircrc
complet ressemble donc à ça :
begin prog = irexec remote = PhilipsDVD button = KEY_HELP config = xdotool key d end begin prog = irexec remote = PhilipsDVD button = KEY_PLAY config = xdotool key h end begin prog = irexec remote = PhilipsDVD button = KEY_STOP config = xdotool key q end begin prog = irexec remote = PhilipsDVD button = KEY_LEFT config = xdotool key less end begin prog = irexec remote = PhilipsDVD button = KEY_RIGHT config = xdotool key greater end begin prog = irexec remote = PhilipsDVD button = KEY_PREVIOUS config = xdotool key Left end begin prog = irexec remote = PhilipsDVD button = KEY_NEXT config = xdotool key Right end
Lancement automatique de lirc et irexec
Commencez par vous assurer que lirc
soit lancé au démarrage de la framboise (voir ici, ou ici si ça ne fonctionne pas).
Il faut que irexec
soit lancé quand l’utilisateur « pi » ouvre une session graphique. Il faut donc ajouter au fichier .config/lxsession/LXDE-pi/autostart
la ligne suivante (avant la ligne « @xscreensaver
») :
@/usr/bin/irexec /home/pi/.lircrc |
Vous pouvez maintenant rebooter la framboise, et normalement vous pouvez contrôler feh depuis la télécommande !