Controle su computadora portátil con un teléfono Android usando Python, Twisted y Django
Publicado: 2022-03-11Introducción
Siempre es divertido mostrar tus habilidades de programación de Android o Python. Hace un tiempo, pensé que sería genial intentar controlar mi computadora portátil a través de mi dispositivo móvil Android. Piénselo: acceso remoto a la computadora portátil, incluida la posibilidad de reproducir y pausar música, iniciar y detener trabajos de programación o descargas, etc., todo mediante el envío de mensajes desde su teléfono. Listo, ¿eh?
Antes de seguir leyendo, tenga en cuenta que este es un proyecto favorito, aún en sus primeras etapas, pero la plataforma básica está ahí. Al unir algunas herramientas convencionales, pude configurar mi teléfono Android para controlar mi computadora portátil a través de un intérprete de Python.
Por cierto: el proyecto es de código abierto. Puede consultar el código del cliente aquí y el código del servidor aquí.
El cinturón de herramientas de acceso remoto a portátiles: Python, Twisted, Django y Amarok
Este proyecto involucra las siguientes tecnologías, algunas de las cuales puede que esté familiarizado, algunas de las cuales son bastante específicas para la tarea en cuestión:
- Pitón 2.7+
- Twisted: un excelente marco basado en eventos especialmente diseñado para piratas informáticos de la red.
- Django: Usé v1.4, por lo que tendrá que ajustar la ubicación de algunos archivos si desea ejecutar una versión inferior.
- Amarok: un reproductor multimedia manejable D-BUS (más sobre esto a continuación). Esto podría sustituirse por otros reproductores multimedia (Clementine, VLC o cualquier otro que admita MPRIS) si conoce sus estructuras de mensajería. Elegí Amarok porque viene con mi distribución KDE por defecto. Además, es rápido y fácil de configurar.
- Un teléfono Android con Python para Android instalado (más sobre esto a continuación). El proceso es bastante sencillo, ¡incluso para Py3k!
- Amarok Remoto y Web Amarok Remoto.
A un nivel alto
En un nivel alto, consideramos que nuestro teléfono Android es el cliente y nuestra computadora portátil, el servidor. Revisaré esta arquitectura de acceso remoto en profundidad a continuación, pero el flujo básico del proyecto es el siguiente:
- El usuario escribe algún comando en el intérprete de Python.
- El comando se envía a la instancia de Django.
- Django luego pasa el comando a Twisted.
- Twisted luego analiza el comando y envía un nuevo comando a través de D-Bus a Amarok.
- Amarok interactúa con la computadora portátil real, controlando la reproducción/pausa de la música.
Ahora, profundicemos.
Pitón en Android
Entonces, un buen día, comencé a buscar intérpretes de Python que pudiera ejecutar en mi teléfono Android (Droid 2, en ese entonces). Poco después, descubrí el excelente paquete SL4A que dio vida a Python para Android. Es un paquete realmente ingenioso: haces clic en un par de botones y de repente tienes un entorno Python casi completamente funcional en tu dispositivo móvil o tableta que puede ejecutar tu buen código Python y acceder a la API de Android (digo casi porque algunas cosas probablemente falta y la API de Android no es 100% accesible, pero para la mayoría de los casos de uso, es suficiente).
Si lo prefiere, también puede crear su propia distribución de Python para ejecutarla en su dispositivo Android, lo que tiene la ventaja de que luego puede ejecutar cualquier versión del intérprete que desee. El proceso implica la compilación cruzada de Python para que se ejecute en ARM (la arquitectura utilizada en dispositivos Android y otras tabletas). No es fácil, pero ciertamente es factible. Si estás preparado para el desafío, consulta aquí o aquí.
Una vez que haya configurado su intérprete, puede hacer básicamente lo que quiera combinando Python con la API de Android, incluido el control remoto de su computadora portátil. Por ejemplo, puedes:
- Enviar y leer SMS.
- Interactúe con API de terceros en Internet a través de urllib y otras bibliotecas.
- Muestre avisos nativos de apariencia, cuadros de diálogo giratorios y similares.
- Cambia tu tono de llamada.
- Reproducir música o videos.
- Interactuar con Bluetooth: este en particular allana el camino para muchas oportunidades. Por ejemplo, una vez jugué con el uso de mi teléfono como una aplicación de desbloqueo de casilleros para mi computadora portátil (por ejemplo, desbloquear mi computadora portátil a través de Bluetooth cuando mi teléfono estaba cerca).
Cómo funciona el uso de su teléfono para controlar su computadora portátil
La arquitectura
La composición de nuestro proyecto es la siguiente:
Una aplicación del lado del cliente basada en Twisted si desea probar el código del servidor (a continuación) sin tener que ejecutar la aplicación Django.
Una aplicación Django del lado del servidor, que lee los comandos del dispositivo Android y los pasa a Twisted. Tal como está, Amarok es la única aplicación para computadora portátil con la que el servidor puede interactuar (es decir, para controlar la música), pero esa es una prueba de concepto suficiente, ya que la plataforma es fácilmente extensible.
Una 'instancia' Twisted del lado del servidor que se comunica con el reproductor multimedia de la computadora portátil a través de D-Bus, enviando comandos a medida que llegan de Django (actualmente, admito 'siguiente', 'anterior', 'reproducir', 'pausa', 'detener' y 'silenciar'). ¿Por qué no simplemente pasar los comandos directamente de Django a Amarok? Los atributos de no bloqueo basados en eventos de Twisted eliminan todo el arduo trabajo de enhebrar (más información a continuación). Si está interesado en casarse con los dos, consulte aquí.
- El código de Android del lado del cliente, cargado en su dispositivo con una URL personalizada para llegar a su aplicación Django. Vale la pena mencionar que este código en particular se ejecuta en Python 2.7+, incluido Py3k.
¿Qué es D-Bus?
He mencionado D-Bus varias veces, por lo que probablemente valga la pena analizarlo con más detalle. En términos generales, D-Bus es un sistema de bus de mensajería para la comunicación entre aplicaciones (por ejemplo, en una computadora portátil y un teléfono Android) fácilmente a través de mensajes especialmente diseñados.
Se compone principalmente de dos buses: el bus del sistema, para cosas de todo el sistema; y el bus de sesión, para cosas de usuario. Los mensajes típicos al bus del sistema serían "Oye, he agregado una nueva impresora, notifica a mis aplicaciones habilitadas para D-Bus que hay una nueva impresora en línea", mientras que la comunicación entre procesos (IPC) típica entre las aplicaciones iría a la sesión. autobús.
Usamos el bus de sesión para comunicarnos con Amarok. Es muy probable que la mayoría de las aplicaciones modernas (al menos en entornos Linux) admitan este tipo de mensajería y, en general, todos los comandos/funciones que pueden procesar están bien documentados. Como cualquier aplicación compatible con D-Bus puede controlarse bajo esta arquitectura, las posibilidades son casi infinitas.
Aquí se puede encontrar más información.
Entre bastidores:
Una vez que haya configurado toda la infraestructura, puede iniciar la aplicación de Android y entrará en un ciclo infinito para leer los mensajes entrantes, procesarlos con algunos controles de cordura y, si es válido, enviarlos a una URL predefinida (es decir, la URL de su aplicación Django), que a su vez procesará la entrada y actuará en consecuencia. Luego, el cliente de Android marca el mensaje como leído y el bucle continúa hasta que se procesa un mensaje con el contenido exacto "exitclient" (inteligente, ¿no?), en cuyo caso el cliente se cerrará.
En el servidor, la aplicación Django selecciona un comando para ser procesado y verifica si comienza con una instrucción válida. Si es así, se conecta al servidor Twisted (usando Telnetlib para conectarse a través de telnet) y envía el comando. Finalmente, Twisted analiza la entrada, la transforma en algo adecuado para Amarok y deja que Amarok haga su magia. Finalmente, su computadora portátil responde reproduciendo canciones, pausando, saltando, etc.
¿Qué más puedo hacer con esto?
Todo parece muy simple hasta ahora, ¿eh? Puede que se esté preguntando: "¿Se puede ampliar esto para admitir la función ingeniosa [X]?" La respuesta es: ¡Sí (probablemente)! Dado que sabe cómo interactuar con su computadora usando su teléfono correctamente, puede complementar el código del lado del servidor para hacer lo que quiera. Antes de que te des cuenta, estarás disparando procesos largos en tu computadora de forma remota. O, si puede hacer frente a la electrónica, podría construir una interfaz entre su computadora y su electrodoméstico favorito, controlándola a través de instrucciones por SMS ("¡Prepárame café!" viene a la mente).
Que sigue
Seguiré jugando con el juguete de control de mi computadora portátil Android por un tiempo, mejorando sus características, corrigiendo errores, etc. Pero si estás interesado, ¡me encantaría verte ayudar! Simplemente bifurque el repositorio y envíe cualquier solicitud de extracción.
Si tiene alguna pregunta, envíeme un correo electrónico a [email protected] y estaré encantado de ayudarle.