Simon Vieille : Remote i3-wm WS : ma télécommande pour bureau Debian GNU/Linux
mardi 6 février 2018 à 14:30Il m'arrive d'avoir besoin de prendre le contrôle de ma machine via mon Android (bouger la souris, scroller et taper du texte).
J'ai quasiment toujours utilisé l'application Pointer Host. elle s'appuie sur un serveur Java lancé sur ma machine. Pour bouger la souris et générer des cliques, elle est très efficace. Cependant, l'écriture de caractères a toujours posé problème (chiffres et lettres accentuées erronés).
Depuis quelques semaines, j'ai envie de jouer avec les websockets et réécrire une appli du genre m'a semblé être un bon exercice.
Ce que je vais vous présenter est une POC. Cette application n'est pas sécurisée et est orientée pour mes besoins. Il est cependant très simple de la faire évoluer.
Voici mon cahier des charges :
- aucune application ne doit être installée sur mon téléphone
- utilisation du navigateur web pour le pilotage
- pouvoir bouger la souris
- pouvoir générer des cliques
- pouvoir scroller
- pouvoir taper des mots
- pouvoir lancer des raccouris claviers
- pouvoir gérer le volume du son
- pour Spotify : lancer et mettre en pause la musique, avancer et reculer dans la playlist en cours de lecture
- pouvoir changer de workspace dans mon gestionnaire de fenêtres i3-wm
Les outils pour scripter tout ça sont connus :
xdotool
pour simuler un clavier et une souris (3, 4, 5, 6, 7) :xdotool type "ceci va être tapé"
xdotool key Enter
(toucheEntrée
)xdotool click 1
(clique gauche)
amixer
pour gérer le volume (8) :amixer set Master 50%
(volume à 50%)
dbus-send
pour piloter Spotify (9) :dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
(titre suivant)
i3-msg
pour piloter i3-wm (10) :i3-msg 'workspace "Foo"'
(affichage du workspaceFoo
)
Websocket est un protocole réseau issu du web qui permet de créer un canal full-duplex entre un client et un serveur. Ils peuvent donc communiquer en temps réel dans une connexion TCP.
Comme à mon habitude et par esprit de contradiction (pas de NodeJS), j'ai décidé d'écrire la partie serveur en PHP 7. La partie cliente est en HTML 5 avec un peu de javascript.
Entre le serveur et le client, ce sont des messages textes qui sont échangés. J'ai décidé de les formater en JSON et seul le client va en envoyer. Ils sont toujours sous cette forme : {"type":"un type de message", [données complémentaires]}
. Voici quelques exemples :
{"type":"workspace","value":"1. IRC"}
{"type":"pointer","click":"left"}
{"type":"media","value":"next"}
{"type":"volume","value":"down"}
{"type":"scroll","value":"up"}
{"type":"pointer","x":"-2","y":"3"}
{"type":"text","value":"Un texte"}
Ces messages sont générés par le client et sont interprétés par des messageHandler
une fois transmis au serveur. En voici un exemple :
Le code source de l'application est disponible sur deblan/remote-i3wm-ws et la procédure d'installation est simple :
Pour lancer le serveur websocket, il faut exécuter server/server
. Le serveur va écouter sur le port 14598
.
Concernant la partie cliente, vous pouvez créer un vhost Apache/Nginx qui pointera sur client/
ou lancer le serveur web built-in de PHP via php -S 0.0.0.0:15000 -t client/
. Il faudra à présent vous connecter au serveur web depuis un navigateur.
Quelques captures de la partie cliente :
Je vais essayer de faire une vidéo de démonstration. Depuis mon Samsung S8, ça fonctionne du feu de dieu et sur un petit Iphone 4S, c'est tout aussi fonctionnel (à part l'interface web un peu étriquée).
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.
Articles similaires
- crowd42 : Installer le bureau de Linux Deepin sur votre Ubuntu ou Debian GNU/Linux (12/07/2013)
- Yannic Arnoux : Haute Disponibilité avec Redis (15/04/2014)
- DigitalSpirit : Astuce Nokia N900 : Enlever les ombres des icones sur le bureau (15/02/2010)
- Ubuntu les jours : Gnome 3.0, le bureau du futur? (28/05/2009)
- Emmanuel Kasper : Tirer profit des options d'accessibilité du bureau gnome quand on utilise son portable en extérieur (03/08/2011)