Contrôlez votre ordinateur portable avec un téléphone Android en utilisant Python, Twisted et Django

Publié: 2022-03-11

introduction

C'est toujours amusant de montrer vos compétences en programmation Android ou Python. Il y a quelque temps, j'ai pensé que ce serait cool d'essayer de contrôler mon ordinateur portable via mon appareil mobile Android. Pensez-y : accès à distance à un ordinateur portable, y compris la possibilité de lire et de mettre en pause de la musique, de démarrer et d'arrêter des travaux de programmation ou des téléchargements, etc., le tout en envoyant des messages depuis votre téléphone. Propre, hein ?

Avant de continuer à lire, veuillez garder à l'esprit qu'il s'agit d'un projet favori, encore à ses débuts, mais la plate-forme de base est là. En regroupant des outils grand public, j'ai pu configurer mon téléphone Android pour contrôler mon ordinateur portable via un interpréteur Python.

Au fait : le projet est open source. Vous pouvez consulter le code client ici et le code serveur ici.

La ceinture d'outils d'accès à distance aux ordinateurs portables : Python, Twisted, Django et Amarok

Ce projet implique les technologies suivantes, dont certaines vous sont peut-être familières, dont certaines sont assez spécifiques à la tâche à accomplir :

  • Python 2.7+
  • Twisted : un excellent framework piloté par les événements spécialement conçu pour les pirates de réseau.
  • Django : J'ai utilisé la v1.4, vous devrez donc ajuster l'emplacement de certains fichiers si vous souhaitez exécuter une version inférieure.
  • Amarok : un lecteur multimédia gérable D-BUS (plus d'informations ci-dessous). Cela pourrait être remplacé par d'autres lecteurs multimédias de ce type (Clementine, VLC ou tout ce qui prend en charge MPRIS) si vous connaissez leurs structures de messagerie. J'ai choisi Amarok car il est fourni par défaut avec ma distribution KDE. De plus, il est rapide et facilement configurable.
  • Un téléphone Android avec Python pour Android installé (plus d'informations à ce sujet ci-dessous). Le processus est assez simple, même pour Py3k !
  • Amarok à distance et Amarok Web à distance.

À haut niveau

À un niveau élevé, nous considérons que notre téléphone Android est le client et notre ordinateur portable, le serveur. Je vais détailler cette architecture d'accès à distance ci-dessous, mais le flux de base du projet est le suivant :

  1. L'utilisateur tape une commande dans l'interpréteur Python.
  2. La commande est envoyée à l'instance de Django.
  3. Django passe ensuite la commande à Twisted.
  4. Twisted analyse ensuite la commande et envoie une nouvelle commande via D-Bus à Amarok.
  5. Amarok interagit avec l'ordinateur portable réel, contrôlant la lecture/pause de la musique.

À l'aide de cette ceinture à outils, apprenez à contrôler un ordinateur portable avec Python, Twisted et Django.

Maintenant, creusons.

Python sur Androïd

Alors un bon jour, j'ai commencé à chercher des interpréteurs Python que je pouvais exécuter sur mon téléphone Android (Droid 2, à l'époque). Peu de temps après, j'ai découvert l'excellent package SL4A qui a donné vie à Python pour Android. C'est un package vraiment astucieux : vous cliquez sur quelques boutons et soudain, vous avez un environnement Python presque entièrement fonctionnel sur votre appareil mobile ou votre tablette qui peut à la fois exécuter votre bon vieux code Python et accéder à l'API Android (je dis presque parce que certaines choses sont probablement est manquant et l'API Android n'est pas accessible à 100 %, mais pour la plupart des cas d'utilisation, c'est suffisant).

Si vous préférez, vous pouvez également créer votre propre distribution Python à exécuter sur votre appareil Android, ce qui a l'avantage de pouvoir ensuite exécuter n'importe quelle version de l'interpréteur que vous désirez. Le processus implique la compilation croisée de Python à exécuter sur ARM (l'architecture utilisée sur les appareils Android et autres tablettes). Ce n'est pas facile, mais c'est certainement faisable. Si vous êtes prêt à relever le défi, vérifiez ici ou ici.

Une fois que vous avez configuré votre interpréteur, vous pouvez faire ce que vous voulez en combinant Python avec l'API Android, y compris contrôler votre ordinateur portable à distance. Par exemple, vous pouvez :

  • Envoyer et lire des SMS.
  • Interagissez avec des API tierces sur Internet via urllib et d'autres bibliothèques.
  • Affichez des invites d'aspect et de convivialité natives, des boîtes de dialogue tournantes, etc.
  • Changez votre sonnerie.
  • Lire de la musique ou des vidéos.
  • Interagissez avec Bluetooth - celui-ci en particulier ouvre la voie à de nombreuses opportunités. Par exemple, j'ai déjà joué avec mon téléphone comme application de déverrouillage de casier pour mon ordinateur portable (par exemple, déverrouiller mon ordinateur portable via Bluetooth lorsque mon téléphone était à proximité).

Comment fonctionne l'utilisation de votre téléphone pour contrôler votre ordinateur portable

L'architecture

La composition de notre projet est la suivante :

  • Une application côté client construite sur Twisted si vous souhaitez tester le code du serveur (ci-dessous) sans avoir à exécuter l'application Django du tout.

  • Une application Django côté serveur, qui lit les commandes de l'appareil Android et les transmet à Twisted. Dans l'état actuel des choses, Amarok est la seule application pour ordinateur portable avec laquelle le serveur peut interagir (c'est-à-dire contrôler la musique), mais c'est une preuve de concept suffisante, car la plate-forme est facilement extensible.

  • Une « instance » Twisted côté serveur qui communique avec le lecteur multimédia de l'ordinateur portable via D-Bus, en envoyant des commandes au fur et à mesure qu'elles arrivent de Django (actuellement, je prends en charge « suivant », « précédent », « jouer », « pause », 'stop' et 'muet'). Pourquoi ne pas simplement passer les commandes directement de Django à Amarok ? Les attributs événementiels et non bloquants de Twisted éliminent tout le travail acharné du threading (voir ci-dessous). Si vous êtes intéressé à épouser les deux, voir ici.

Twisted est excellent, axé sur les événements et polyvalent. Il fonctionne à l'aide d'un système de rappel, d'objets différés et d'autres techniques. Je vous recommande vivement de l'essayer : la quantité de travail que vous évitez en utilisant Twisted est vraiment impressionnante. Par exemple, il sert du code passe-partout pour de nombreux protocoles, y compris IRC, HTTP, SSH, etc. sans avoir à gérer des mécanismes non bloquants (threads, select, etc.).
  • Le code Android côté client, téléchargé sur votre appareil avec une URL personnalisée pour accéder à votre application Django. Il convient de mentionner que ce morceau de code particulier fonctionne sur Python 2.7+, y compris Py3k.

Qu'est-ce que D-Bus ?

J'ai mentionné D-Bus à plusieurs reprises, il vaut donc probablement la peine d'en discuter plus en détail. D'une manière générale, D-Bus est un système de bus de messagerie permettant de communiquer facilement entre les applications (par exemple, sur un ordinateur portable et un téléphone Android) via des messages spécialement conçus.

Il est principalement composé de deux bus : le bus système, pour les éléments à l'échelle du système ; et le bus de session, pour les trucs utilisateur. Les messages typiques au bus système seraient "Hé, j'ai ajouté une nouvelle imprimante, informez mes applications compatibles D-Bus qu'une nouvelle imprimante est en ligne", tandis que la communication inter-processus (IPC) typique entre les applications irait à la session autobus.

Nous utilisons le bus de session pour communiquer avec Amarok. Il est très probable que la plupart des applications modernes (sous les environnements Linux, au moins) prendront en charge ce type de messagerie et généralement toutes les commandes/fonctions qu'elles peuvent traiter sont bien documentées. Comme toute application prenant en charge D-Bus peut être contrôlée sous cette architecture, les possibilités sont presque infinies.

Plus d'informations peuvent être trouvées ici.

Dans les coulisses:

Après avoir configuré toute l'infrastructure, vous pouvez lancer l'application Android et elle entrera dans une boucle infinie pour lire les messages entrants, les traiter avec quelques vérifications d'intégrité et, si elles sont valides, les envoyer à une URL prédéfinie (c'est-à-dire l'URL de votre application Django), qui traitera à son tour l'entrée et agira en conséquence. Le client Android marque alors le message comme lu et la boucle continue jusqu'à ce qu'un message avec le contenu exact "exitclient" (intelligent, hein ?) soit traité, auquel cas le client quittera.

Sur le serveur, l'application Django récupère une commande à traiter et vérifie si elle commence par une instruction valide. Si tel est le cas, il se connecte au serveur Twisted (en utilisant Telnetlib pour se connecter via telnet) et envoie la commande. Enfin, Twisted analyse l'entrée, la transforme en quelque chose d'approprié pour Amarok, et laisse Amarok faire sa magie ! Enfin, votre ordinateur portable répond en jouant des chansons, en faisant une pause, en sautant, etc.

Concernant « l'URL prédéfinie » : si vous souhaitez contrôler votre ordinateur à distance, il faudra que celle-ci soit une URL publique (accessible par Internet). Sachez qu'actuellement, le code n'implémente aucune couche de sécurité (SSL, etc.) - de telles améliorations sont des exercices pour le lecteur, pour le moment.

Que puis-je faire d'autre avec ça ?

Tout a l'air très simple jusqu'à présent, hein ? Vous vous demandez peut-être : "Cela peut-il être étendu pour prendre en charge la fonctionnalité astucieuse [X] ?" La réponse est : Oui (probablement) ! Étant donné que vous savez comment interagir correctement avec votre ordinateur à l'aide de votre téléphone, vous pouvez compléter le code côté serveur pour faire ce que vous voulez. Avant de vous en rendre compte, vous exécuterez à distance de longs processus sur votre ordinateur. Ou, si vous pouvez vous débrouiller avec l'électronique, vous pouvez créer une interface entre votre ordinateur et votre appareil préféré, en contrôlant cela via des instructions SMS ("Make me coffee!" vient à l'esprit).

Et après

Je continuerai à jouer avec mon jouet de contrôle d'ordinateur portable Android pendant un certain temps, en améliorant ses fonctionnalités, en corrigeant des bugs, etc. Mais si cela vous intéresse, j'aimerais vous voir m'aider ! Il suffit de bifurquer le référentiel et d'envoyer toutes les demandes d'extraction.

Si vous avez des questions, envoyez-moi un e-mail à [email protected] et je serai heureux de vous aider.