Kontroluj swój laptop za pomocą telefonu z Androidem za pomocą Pythona, Twisted i Django

Opublikowany: 2022-03-11

Wstęp

Zawsze fajnie jest pokazać swoje umiejętności programowania w Androidzie lub Pythonie. Jakiś czas temu pomyślałem, że fajnie byłoby spróbować sterować laptopem za pomocą urządzenia mobilnego z Androidem. Pomyśl o tym: zdalny dostęp do laptopa, w tym możliwość odtwarzania i wstrzymywania muzyki, rozpoczynania i zatrzymywania zadań programowania lub pobierania itp., a wszystko to poprzez wysyłanie wiadomości z telefonu. Schludny, co?

Zanim przejdziesz dalej, pamiętaj, że jest to projekt dla zwierząt, wciąż w początkowej fazie, ale podstawowa platforma już istnieje. Łącząc ze sobą kilka popularnych narzędzi, udało mi się skonfigurować mój telefon z Androidem, aby sterował moim laptopem za pomocą interpretera Pythona.

Przy okazji: projekt jest open source. Możesz sprawdzić kod klienta tutaj, a kod serwera tutaj.

Pasek narzędzi zdalnego dostępu do laptopa: Python, Twisted, Django i Amarok

Ten projekt obejmuje następujące technologie, niektóre z nich możesz znać, a niektóre są dość specyficzne dla danego zadania:

  • Python 2.7+
  • Twisted: doskonała platforma oparta na zdarzeniach, stworzona specjalnie dla hakerów sieciowych.
  • Django: Użyłem wersji 1.4, więc będziesz musiał dostosować lokalizację niektórych plików, jeśli chcesz uruchomić niższą wersję.
  • Amarok: zarządzalny odtwarzacz multimedialny D-BUS (więcej na ten temat poniżej). Może to być subskrypcja dla innych takich odtwarzaczy multimedialnych (Clementine, VLC lub wszystkiego, co obsługuje MPRIS), jeśli znasz ich struktury przesyłania wiadomości. Wybrałem Amaroka, ponieważ jest on domyślnie dostarczany z moją dystrybucją KDE. Dodatkowo jest szybki i łatwy w konfiguracji.
  • Telefon z Androidem z zainstalowanym Pythonem dla Androida (więcej na ten temat poniżej). Proces jest całkiem prosty — nawet dla Py3k!
  • Zdalny Amarok i Zdalny Amarok Web.

Na wysokim poziomie

Na wysokim poziomie uważamy, że nasz telefon z Androidem jest klientem, a nasz laptop serwerem. Omówię szczegółowo tę architekturę dostępu zdalnego poniżej, ale podstawowy przebieg projektu jest następujący:

  1. Użytkownik wpisuje jakieś polecenie do interpretera Pythona.
  2. Polecenie jest wysyłane do instancji Django.
  3. Django następnie przekazuje polecenie do Twisted.
  4. Twisted analizuje następnie polecenie, wysyła nowe polecenie przez D-Bus do Amaroka.
  5. Amarok wchodzi w interakcję z laptopem, kontrolując odtwarzanie/wstrzymywanie muzyki.

Korzystając z tego paska narzędzi, naucz się sterować laptopem za pomocą Pythona, Twisteda i Django.

Teraz zajmijmy się.

Python na Androida

Więc pewnego dobrego dnia zacząłem szukać interpreterów Pythona, które mogłem uruchomić na moim telefonie z Androidem (wtedy Droid 2). Niedługo potem odkryłem doskonały pakiet SL4A, który ożywił Pythona dla Androida. To naprawdę fajny pakiet: klikasz kilka przycisków i nagle masz prawie w pełni funkcjonalne środowisko Pythona na swoim urządzeniu mobilnym lub tablecie, które może zarówno uruchomić twój stary dobry kod Pythona, jak i uzyskać dostęp do interfejsu API Androida (mówię prawie , ponieważ prawdopodobnie niektóre rzeczy brakuje, a interfejs API Androida nie jest w 100% dostępny, ale w większości przypadków jest wystarczający).

Jeśli wolisz, możesz także zbudować własną dystrybucję Pythona do uruchomienia na urządzeniu z Androidem, co ma tę zaletę, że możesz uruchomić dowolną wersję interpretera, którą chcesz. Proces obejmuje kompilację krzyżową Pythona do uruchomienia na ARM (architekturze używanej na urządzeniach z Androidem i innych tabletach). Nie jest to łatwe, ale z pewnością wykonalne. Jeśli masz ochotę na wyzwanie, zajrzyj tutaj lub tutaj.

Po skonfigurowaniu interpretera możesz robić w zasadzie wszystko, co chcesz, łącząc Python z API Androida, w tym zdalnie sterować swoim laptopem. Na przykład możesz:

  • Wysyłaj i czytaj SMS-y.
  • Interakcja z zewnętrznymi interfejsami API w Internecie za pośrednictwem urllib i innych bibliotek.
  • Wyświetlaj natywne monity dotyczące wyglądu i działania, obracające się okna dialogowe i tym podobne.
  • Zmień dzwonek.
  • Odtwarzaj muzykę lub filmy.
  • Interakcja z Bluetooth — ten w szczególności toruje drogę do wielu możliwości. Na przykład, kiedyś bawiłem się używaniem telefonu jako aplikacji do odblokowywania szafki na moim laptopie (np. Odblokuj laptopa przez Bluetooth, gdy mój telefon był w pobliżu).

Jak działa używanie telefonu do sterowania laptopem

Architektura

Nasz skład projektu przedstawia się następująco:

  • Aplikacja po stronie klienta zbudowana na Twisted, jeśli chcesz przetestować kod serwera (poniżej) bez konieczności uruchamiania aplikacji Django.

  • Aplikacja Django po stronie serwera, która odczytuje polecenia z urządzenia z systemem Android i przekazuje je do Twisted. W obecnej postaci Amarok jest jedyną aplikacją na laptopa, z którą serwer może wchodzić w interakcje (tj. do sterowania muzyką), ale jest to wystarczający dowód koncepcji, ponieważ platforma jest łatwo rozszerzalna.

  • Twisted „instancja” po stronie serwera, która komunikuje się z odtwarzaczem multimedialnym laptopa przez D-Bus, wysyłając polecenia, gdy przychodzą z Django (obecnie wspieram „następny”, „poprzedni”, „odtwarzaj”, „wstrzymaj”, „zatrzymaj” i „wycisz”). Dlaczego po prostu nie przekazać poleceń bezpośrednio z Django do Amaroka? Sterowane zdarzeniami, nieblokujące atrybuty Twisteda zabierają całą ciężką pracę związaną z wątkowaniem (więcej poniżej). Jeśli jesteś zainteresowany małżeństwem, zobacz tutaj.

Twisted jest doskonały, napędzany wydarzeniami i wszechstronny. Działa przy użyciu systemu wywołań zwrotnych, obiektów odroczonych i kilku innych technik. Zdecydowanie polecam wypróbowanie tego: ilość pracy, której unikasz przy użyciu Twisted, jest naprawdę imponująca. Na przykład obsługuje standardowy kod dla wielu protokołów, w tym IRC, HTTP, SSH itp. bez konieczności zajmowania się mechanizmami nieblokującymi (wątki, zaznaczenie itp.).
  • Kod Androida po stronie klienta, przesłany na Twoje urządzenie z dostosowanym adresem URL, aby dotrzeć do Twojej aplikacji Django. Warto wspomnieć, że ten konkretny fragment kodu działa na Pythonie 2.7+, w tym na Py3k.

Co to jest D-Bus?

Kilka razy wspominałem o D-Busie, więc chyba warto omówić go bardziej szczegółowo. Mówiąc ogólnie, D-Bus to system magistrali komunikacyjnej umożliwiający łatwą komunikację między aplikacjami (np. na laptopie i telefonie z systemem Android) za pomocą specjalnie spreparowanych wiadomości.

Składa się głównie z dwóch szyn: szyny systemowej, dla rzeczy ogólnosystemowych; i magistrala sesji, dla rzeczy z przestrzeni użytkownika. Typowe komunikaty do magistrali systemowej to „Hej, dodałem nową drukarkę, powiadom moje aplikacje obsługujące D-Bus, że nowa drukarka jest w trybie online”, podczas gdy typowa komunikacja między procesami (IPC) między aplikacjami będzie przechodzić do sesji autobus.

Używamy szyny sesji do komunikacji z Amarokiem. Jest bardzo prawdopodobne, że większość nowoczesnych aplikacji (przynajmniej w środowiskach linuksowych) będzie obsługiwać ten rodzaj wiadomości i ogólnie wszystkie polecenia/funkcje, które mogą przetwarzać, są dobrze udokumentowane. Ponieważ w ramach tej architektury można sterować dowolną aplikacją z obsługą D-Bus, możliwości są niemal nieograniczone.

Więcej informacji można znaleźć tutaj.

Za kulisami:

Po skonfigurowaniu całej infrastruktury możesz odpalić aplikację na Androida, która wejdzie w nieskończoną pętlę, aby czytać przychodzące wiadomości, przetwarzać je z pewnymi kontrolami poprawności i, jeśli są poprawne, wysyłać je pod predefiniowany adres URL (tj. adres URL). aplikacji Django), która z kolei przetworzy dane wejściowe i podejmie odpowiednie działania. Klient systemu Android oznacza następnie wiadomość jako przeczytaną, a pętla jest kontynuowana, dopóki nie zostanie przetworzona wiadomość z dokładną zawartością „exitclient” (sprytny, co?). W takim przypadku klient zakończy działanie.

Na serwerze aplikacja Django pobiera polecenie do przetworzenia i sprawdza, czy zaczyna się prawidłową instrukcją. Jeśli tak, łączy się z serwerem Twisted (używając Telnetlib do łączenia się przez telnet) i wysyła polecenie. Na koniec Twisted analizuje dane wejściowe, przekształca je w coś odpowiedniego dla Amaroka i pozwala Amarokowi robić swoją magię! Wreszcie, twój laptop reaguje, odtwarzając utwory, wstrzymując, przeskakując itp.

Odnośnie „predefiniowanego adresu URL”: jeśli chcesz sterować komputerem z daleka, musi to być publiczny adres URL (dostępny przez Internet). Należy pamiętać, że obecnie kod nie implementuje żadnej warstwy bezpieczeństwa (SSL itp.) — takie ulepszenia są w tej chwili ćwiczeniami dla czytelnika.

Co jeszcze mogę z tym zrobić?

Jak dotąd wszystko wygląda bardzo prosto, co? Być może zadajesz sobie pytanie: „Czy można to rozszerzyć o obsługę fajnych funkcji [X]?” Odpowiedź brzmi: tak (prawdopodobnie)! Biorąc pod uwagę, że wiesz, jak prawidłowo współdziałać z komputerem za pomocą telefonu, możesz uzupełnić kod po stronie serwera, aby robić, co chcesz. Zanim się zorientujesz, będziesz zdalnie odpalać długie procesy na swoim komputerze. Lub, jeśli poradzisz sobie z elektroniką, możesz zbudować interfejs między komputerem a ulubionym urządzeniem, kontrolując to za pomocą instrukcji SMS (przychodzi mi na myśl „Zrób mi kawę!”).

Co dalej

Będę jeszcze przez jakiś czas bawić się moją zabawką do sterowania laptopem z Androidem, ulepszając jej funkcje, naprawiając błędy itp. Ale jeśli jesteś zainteresowany, chciałbym, abyś pomógł! Po prostu rozwidlaj repozytorium i wyślij wszystkie żądania ściągnięcia.

Jeśli masz jakieś pytania, wyślij mi e-mail na adres [email protected], a chętnie Ci pomogę.