Controlați-vă laptopul cu un telefon Android folosind Python, Twisted și Django
Publicat: 2022-03-11Introducere
Este întotdeauna distractiv să vă expuneți abilitățile de programare Android sau Python. Cu ceva timp în urmă, m-am gândit că ar fi grozav să încerc să-mi controlez laptopul prin intermediul dispozitivului meu mobil Android. Gândiți-vă la asta: acces de la distanță la laptop, inclusiv posibilitatea de a reda și întrerupe muzică, de a porni și de a opri programarea lucrărilor sau a descărcărilor etc., toate prin trimiterea de mesaje de pe telefon. Îngrijit, nu?
Înainte de a continua să citiți, vă rugăm să rețineți că acesta este un proiect pentru animale de companie, încă în stadii incipiente, dar platforma de bază există. Lipind unele instrumente principale, am reușit să-mi configurez telefonul Android pentru a-mi controla laptopul printr-un interpret Python.
Apropo: proiectul este open source. Puteți verifica codul client aici și codul serverului aici.
Centura de instrumente de acces la distanță pentru laptop: Python, Twisted, Django și Amarok
Acest proiect implică următoarele tehnologii, dintre care unele s-ar putea să le cunoașteți, unele fiind destul de specifice sarcinii în cauză:
- Python 2.7+
- Twisted: un cadru excelent bazat pe evenimente, special creat pentru hackeri de rețea.
- Django: Am folosit v1.4, așa că va trebui să ajustați locația unor fișiere dacă doriți să rulați o versiune inferioară.
- Amarok: un player media D-BUS (mai multe despre asta mai jos). Acest lucru ar putea fi înlocuit pentru alte astfel de playere media (Clementine, VLC sau orice altceva care acceptă MPRIS) dacă cunoașteți structurile lor de mesagerie. Am ales Amarok pentru că vine implicit cu distribuția mea KDE. În plus, este rapid și ușor de configurat.
- Un telefon Android cu Python pentru Android instalat (mai multe despre asta mai jos). Procesul este destul de simplu, chiar și pentru Py3k!
- Remote Amarok și Remote Amarok Web.
La Nivel Înalt
La un nivel înalt, considerăm că telefonul nostru Android este clientul și laptopul nostru, serverul. Voi trece prin această arhitectură de acces la distanță în detaliu mai jos, dar fluxul de bază al proiectului este următorul:
- Utilizatorul introduce o comandă în interpretul Python.
- Comanda este trimisă la instanța Django.
- Django îi transmite apoi comanda lui Twisted.
- Twisted apoi analizează comanda trimite o nouă comandă prin D-Bus către Amarok.
- Amarok interacționează cu laptopul propriu-zis, controlând redarea/pauza muzicii.
Acum, să sapă.
Python pe Android
Așa că într-o zi bună, am început să mă uit la interpreții Python pe care îi puteam rula pe telefonul meu Android (Droid 2, pe atunci). Curând după aceea, am descoperit excelentul pachet SL4A care a adus la viață Python pentru Android. Este un pachet cu adevărat ingenios: dai clic pe câteva butoane și dintr-o dată ai un mediu Python aproape complet funcțional pe dispozitivul tău mobil sau tabletă, care poate rula codul tău Python vechi și poate accesa API-ul Android (spun aproape pentru că, probabil, unele lucruri lipsește și API-ul Android nu este 100% accesibil, dar pentru majoritatea cazurilor de utilizare, este suficient).
Dacă preferați, puteți, de asemenea, să vă creați propria distribuție Python pentru a rula pe dispozitivul dvs. Android, ceea ce are avantajul că apoi puteți rula orice versiune a interpretului dorită. Procesul implică compilarea încrucișată a Python pentru a fi rulat pe ARM (arhitectura utilizată pe dispozitivele Android și alte tablete). Nu este ușor, dar cu siguranță este realizabil. Dacă ești pregătit pentru provocare, verifică aici sau aici.
Odată ce ați configurat interpretul, puteți face practic orice doriți combinând Python cu API-ul Android, inclusiv controlând laptopul de la distanță. De exemplu, puteți:
- Trimiteți și citiți SMS-uri.
- Interacționați cu API-uri terță parte pe internet prin urllib și alte biblioteci.
- Afișați instrucțiuni native de aspect și senzație, dialoguri rotative și altele asemenea.
- Schimbați-vă tonul de apel.
- Redați muzică sau videoclipuri.
- Interacționați cu Bluetooth - acesta în special deschide calea pentru o mulțime de oportunități. De exemplu, o dată m-am jucat folosind telefonul ca aplicație de deblocare a dulapurilor pentru laptop (de exemplu, deblocați laptopul prin Bluetooth când telefonul era în apropiere).
Cum funcționează utilizarea telefonului pentru a-ți controla laptopul
Arhitectura
Compoziția proiectului nostru este următoarea:
O aplicație pe partea clientului construită pe Twisted dacă doriți să testați codul serverului (mai jos) fără a fi nevoie să rulați deloc aplicația Django.
O aplicație Django pe server, care citește comenzile de pe dispozitivul Android și le transmite lui Twisted. În prezent, Amarok este singura aplicație pentru laptop cu care serverul poate interacționa (adică pentru a controla muzica), dar aceasta este o dovadă de concept suficientă, deoarece platforma este ușor extensibilă.
O „instanță” răsucită pe partea serverului care comunică cu playerul media al laptopului prin D-Bus, trimițând comenzi pe măsură ce vin de la Django (în prezent, accept „următorul”, „anterior”, „redare”, „pauză”, „stop” și „mute”). De ce nu transmiteți comenzile direct de la Django la Amarok? Atributele neblocante ale lui Twisted, bazate pe evenimente, îndepărtează toată munca grea de threading (mai multe mai jos). Dacă sunteți interesat să vă căsătoriți cu cei doi, vedeți aici.
- Codul Android la nivelul clientului, încărcat pe dispozitivul dvs. cu o adresă URL personalizată pentru a ajunge la aplicația dvs. Django. Merită menționat faptul că această bucată de cod rulează pe Python 2.7+, inclusiv Py3k.
Ce este D-Bus?
Am menționat de mai multe ori D-Bus, așa că probabil merită să discutăm mai detaliat. În linii mari, D-Bus este un sistem de magistrală de mesagerie pentru comunicarea între aplicații (de exemplu, pe un computer laptop și telefon Android) cu ușurință prin mesaje special concepute.
Este compus în principal din două magistrale: magistrala de sistem, pentru chestii la nivelul întregului sistem; și magistrala de sesiune, pentru chestii userland. Mesajele tipice către magistrala de sistem ar fi „Hei, am adăugat o nouă imprimantă, notifică aplicațiile mele compatibile cu D-Bus că o nouă imprimantă este online”, în timp ce o comunicare inter-proces (IPC) tipică dintre aplicații ar merge la sesiune. autobuz.
Folosim autobuzul de sesiune pentru a comunica cu Amarok. Este foarte probabil ca majoritatea aplicațiilor moderne (în medii Linux, cel puțin) să suporte acest tip de mesagerie și, în general, toate comenzile/funcțiile pe care le pot procesa sunt bine documentate. Deoarece orice aplicație cu suport D-Bus poate fi controlată sub această arhitectură, posibilitățile sunt aproape nesfârșite.
Mai multe informații pot fi găsite aici.
În spatele scenelor:
După ce ai configurat toată infrastructura, poți declanșa aplicația Android și aceasta va intra într-o buclă infinită pentru a citi mesajele primite, a le procesa cu niște verificări de sănătate și, dacă este valid, le va trimite la o adresă URL predefinită (adică, adresa URL). al aplicației dvs. Django), care va procesa la rândul său intrarea și va acționa în consecință. Clientul Android marchează apoi mesajul ca citit și bucla continuă până când este procesat un mesaj cu conținutul exact „exitclient” (inteligent, nu?), caz în care clientul va ieși.
Pe server, aplicația Django preia o comandă care urmează să fie procesată și verifică dacă începe cu o instrucțiune validă. Dacă da, se conectează la serverul Twisted (folosind Telnetlib pentru a se conecta prin telnet) și trimite comanda. În cele din urmă, Twisted analizează intrarea, o transformă în ceva potrivit pentru Amarok și îl lasă pe Amarok să facă magia! În cele din urmă, laptopul tău răspunde prin redarea melodiilor, întreruperea, ochirea etc.
Ce altceva pot face cu asta?
Totul pare foarte simplu până acum, nu? S-ar putea să vă întrebați: „Poate fi extins acest lucru pentru a accepta funcția ingenioasă [X]?” Răspunsul este: Da (probabil)! Având în vedere că știți cum să interacționați cu computerul folosind telefonul în mod corespunzător, puteți completa codul de pe partea serverului pentru a face orice doriți. Înainte să vă dați seama, veți efectua procese îndelungate pe computerul dvs. de la distanță. Sau, dacă poți face față electronicelor, ai putea construi o interfață între computerul tău și aparatul tău preferat, controlând asta prin instrucțiuni SMS („Fă-mi cafea!” vine în minte).
Ce urmeaza
Voi continua să mă joc cu jucăria de control a laptopului meu Android pentru o vreme, îmbunătățind funcțiile sale, reparând erori etc. Dar dacă sunteți interesat, mi-ar plăcea să vă văd că ajut! Doar bifurcați depozitul și trimiteți toate cererile de extragere.
Dacă aveți întrebări, trimiteți-mi un e-mail la [email protected] și voi fi bucuros să vă ajut.