Contrôler le diaporama avec une télécommande IR

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 !

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

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 h , qui permet de mettre en pause et de reprendre un diaporama.

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 h , il suffit alors exécuter la commande suivante :

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 !