Controlla il tuo laptop con un telefono Android usando Python, Twisted e Django
Pubblicato: 2022-03-11introduzione
È sempre divertente mettere in mostra le tue capacità di programmazione Android o Python. Qualche tempo fa, ho pensato che sarebbe stato bello provare a controllare il mio laptop tramite il mio dispositivo mobile Android. Pensaci: accesso remoto al laptop, inclusa la possibilità di riprodurre e mettere in pausa la musica, avviare e interrompere lavori di programmazione o download, ecc., Il tutto inviando messaggi dal tuo telefono. Pulito, eh?
Prima di continuare a leggere, tieni presente che questo è un progetto preferito, ancora nelle sue fasi iniziali, ma la piattaforma di base è lì. Incollando insieme alcuni strumenti tradizionali, sono stato in grado di configurare il mio telefono Android per controllare il mio laptop tramite un interprete Python.
A proposito: il progetto è open source. Puoi controllare il codice client qui e il codice server qui.
La cintura degli strumenti di accesso remoto per laptop: Python, Twisted, Django e Amarok
Questo progetto coinvolge le seguenti tecnologie, alcune delle quali potresti avere familiarità, alcune delle quali sono piuttosto specifiche per il compito da svolgere:
- Python 2.7+
- Twisted: un eccellente framework basato su eventi creato appositamente per gli hacker di rete.
- Django: Ho usato la v1.4, quindi dovrai modificare la posizione di alcuni file se vuoi eseguire una versione inferiore.
- Amarok: un lettore multimediale gestibile D-BUS (più su questo sotto). Questo potrebbe essere sostituito per altri lettori multimediali di questo tipo (Clementine, VLC o qualsiasi cosa che supporti MPRIS) se conosci le loro strutture di messaggistica. Ho scelto Amarok perché viene fornito con la mia distribuzione KDE per impostazione predefinita. Inoltre, è veloce e facilmente configurabile.
- Un telefono Android con Python per Android installato (più su questo sotto). Il processo è piuttosto semplice, anche per Py3k!
- Amarok remoto e Web Amarok remoto.
Ad alto livello
Ad alto livello, consideriamo il nostro telefono Android il client e il nostro laptop il server. Di seguito esaminerò questa architettura di accesso remoto in modo approfondito, ma il flusso di base del progetto è il seguente:
- L'utente digita un comando nell'interprete Python.
- Il comando viene inviato all'istanza di Django.
- Django passa quindi il comando a Twisted.
- Twisted quindi analizza il comando invia un nuovo comando tramite D-Bus ad Amarok.
- Amarok interagisce con il laptop reale, controllando la riproduzione/pausa della musica.
Ora, scaviamo.
Python su Android
Quindi un buon giorno, ho iniziato a guardare gli interpreti Python che potevo eseguire sul mio telefono Android (Droid 2, allora). Subito dopo, ho scoperto l'eccellente pacchetto SL4A che ha dato vita a Python per Android. È un pacchetto davvero ingegnoso: fai clic su un paio di pulsanti e all'improvviso hai un ambiente Python quasi completamente funzionante sul tuo dispositivo mobile o tablet che può eseguire il tuo buon vecchio codice Python e accedere all'API Android (dico quasi perché probabilmente alcune cose manca e l'API Android non è accessibile al 100%, ma per la maggior parte dei casi d'uso è sufficiente).
Se preferisci, puoi anche creare la tua distribuzione Python da eseguire sul tuo dispositivo Android, il che ha il vantaggio di poter eseguire qualsiasi versione dell'interprete che desideri. Il processo prevede la cross-compilazione di Python da eseguire su ARM (l'architettura utilizzata su dispositivi Android e altri tablet). Non è facile, ma è certamente fattibile. Se sei pronto per la sfida, controlla qui o qui.
Una volta che hai configurato il tuo interprete, puoi fare praticamente tutto ciò che vuoi combinando Python con l'API Android, incluso il controllo del tuo laptop da remoto. Ad esempio, puoi:
- Invia e leggi SMS.
- Interagisci con API di terze parti su Internet tramite urllib e altre librerie.
- Visualizza prompt di aspetto nativo, finestre di dialogo rotanti e simili.
- Cambia la suoneria.
- Riproduci musica o video.
- Interagisci con Bluetooth: questo in particolare apre la strada a molte opportunità. Ad esempio, una volta ho giocato con l'utilizzo del telefono come applicazione per sbloccare l'armadietto per il mio laptop (ad esempio, sbloccare il mio laptop tramite Bluetooth quando il mio telefono era nelle vicinanze).
Come funziona l'utilizzo del telefono per controllare il laptop
L'architettura
La nostra composizione del progetto è la seguente:
Un'applicazione lato client basata su Twisted se si desidera testare il codice del server (sotto) senza dover eseguire affatto l'applicazione Django.
Un'applicazione Django lato server, che legge i comandi dal dispositivo Android e li passa a Twisted. Allo stato attuale, Amarok è l'unica applicazione per laptop con cui il server può interagire (ad esempio, per controllare la musica), ma questa è una prova di concetto sufficiente, poiché la piattaforma è facilmente estensibile.

Un'"istanza" Twisted lato server che comunica con il lettore multimediale del laptop tramite D-Bus, inviando i comandi mentre arrivano da Django (attualmente supporto "successivo", "precedente", "riproduzione", "pausa", 'stop' e 'muto'). Perché non passare i comandi direttamente da Django ad Amarok? Gli attributi non bloccanti basati sugli eventi di Twisted eliminano tutto il duro lavoro del threading (più sotto). Se sei interessato a sposare i due, guarda qui.
- Il codice Android lato client, caricato sul tuo dispositivo con un URL personalizzato per raggiungere la tua applicazione Django. Vale la pena ricordare che questo particolare pezzo di codice funziona su Python 2.7+, incluso Py3k.
Cos'è il D-Bus?
Ho menzionato D-Bus diverse volte, quindi probabilmente vale la pena discuterne in modo più dettagliato. In generale, D-Bus è un sistema di bus di messaggistica per comunicare facilmente tra le applicazioni (ad esempio, su un computer portatile e un telefono Android) tramite messaggi appositamente predisposti.
È composto principalmente da due bus: il bus di sistema, per le cose a livello di sistema; e il bus di sessione, per roba userland. I messaggi tipici al bus di sistema sarebbero "Ehi, ho aggiunto una nuova stampante, notifica alle mie applicazioni abilitate D-Bus che una nuova stampante è online", mentre la tipica comunicazione interprocesso (IPC) tra le applicazioni andrebbe alla sessione autobus.
Usiamo il bus di sessione per comunicare con Amarok. È molto probabile che la maggior parte delle applicazioni moderne (almeno in ambienti Linux) supporterà questo tipo di messaggistica e generalmente tutti i comandi/funzioni che possono elaborare sono ben documentati. Poiché qualsiasi applicazione con supporto D-Bus può essere controllata in questa architettura, le possibilità sono quasi infinite.
Maggiori informazioni possono essere trovate qui.
Dietro le quinte:
Dopo aver configurato tutta l'infrastruttura, puoi attivare l'applicazione Android e questa entrerà in un ciclo infinito per leggere i messaggi in arrivo, elaborarli con alcuni controlli di integrità e, se validi, inviarli a un URL predefinito (cioè l'URL della tua app Django), che a sua volta elaborerà l'input e agirà di conseguenza. Il client Android quindi contrassegna il messaggio come letto e il ciclo continua fino a quando non viene elaborato un messaggio con il contenuto esatto "exitclient" (intelligente, eh?), nel qual caso il client uscirà.
Sul server, l'applicazione Django preleva un comando da elaborare e controlla se inizia con un'istruzione valida. In tal caso, si connette al server Twisted (usando Telnetlib per connettersi tramite telnet) e invia il comando insieme. Infine, Twisted analizza l'input, lo trasforma in qualcosa di adatto ad Amarok e lascia che Amarok faccia la sua magia! Infine, il tuo laptop risponde riproducendo brani, mettendo in pausa, saltando, ecc.
Cos'altro posso fare con questo?
Tutto sembra davvero semplice finora, eh? Potresti chiederti: "Può essere esteso per supportare l'elegante funzionalità [X]?" La risposta è: Sì (probabilmente)! Dato che sai come interagire con il tuo computer usando il telefono correttamente, puoi integrare il codice lato server per fare quello che vuoi. Prima che tu te ne accorga, eseguirai lunghi processi sul tuo computer in remoto. Oppure, se riesci a far fronte all'elettronica, potresti costruire un'interfaccia tra il tuo computer e il tuo elettrodomestico preferito , controllandolo tramite istruzioni SMS ("Fammi un caffè!" mi viene in mente).
Qual è il prossimo
Continuerò a giocare con il mio giocattolo di controllo per laptop Android per un po', migliorando le sue funzionalità, risolvendo bug, ecc. Ma se sei interessato, mi piacerebbe vederti aiutare! Basta eseguire il fork del repository e inviare eventuali richieste pull.
In caso di domande, inviami un'e-mail a [email protected] e sarò felice di aiutarti.
