Kontroluj swój laptop za pomocą telefonu z Androidem za pomocą Pythona, Twisted i Django
Opublikowany: 2022-03-11Wstę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:
- Użytkownik wpisuje jakieś polecenie do interpretera Pythona.
- Polecenie jest wysyłane do instancji Django.
- Django następnie przekazuje polecenie do Twisted.
- Twisted analizuje następnie polecenie, wysyła nowe polecenie przez D-Bus do Amaroka.
- Amarok wchodzi w interakcję z laptopem, kontrolując odtwarzanie/wstrzymywanie muzyki.
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.
- 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.
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ę.
