Управляйте своим ноутбуком с помощью телефона Android с помощью Python, Twisted и Django
Опубликовано: 2022-03-11Введение
Всегда интересно продемонстрировать свои навыки программирования на Android или Python. Некоторое время назад я подумал, что было бы здорово попробовать управлять своим ноутбуком через мобильное устройство Android. Подумайте об этом: удаленный доступ к ноутбуку, включая возможность воспроизведения и приостановки музыки, запуска и остановки программных заданий или загрузок и т. д., и все это путем отправки сообщений с вашего телефона. Аккуратно, да?
Прежде чем продолжить чтение, имейте в виду, что это детский проект, который все еще находится на ранней стадии, но основная платформа уже есть. Склеив некоторые основные инструменты, я смог настроить свой телефон Android для управления ноутбуком через интерпретатор Python.
Кстати: проект с открытым исходным кодом. Вы можете проверить код клиента здесь и код сервера здесь.
Ремень для удаленного доступа к ноутбуку: Python, Twisted, Django и Amarok
Этот проект включает в себя следующие технологии, некоторые из которых вам могут быть знакомы, а некоторые из них весьма специфичны для поставленной задачи:
- Питон 2.7+
- Twisted: отличный фреймворк, управляемый событиями, специально созданный для сетевых хакеров.
- Джанго: Я использовал версию 1.4, так что вам придется настроить расположение некоторых файлов, если вы хотите запустить более раннюю версию.
- Amarok: D-BUS (подробнее об этом ниже) управляемый медиаплеер. Это может быть заменено на другие подобные медиаплееры (Clementine, VLC или все, что поддерживает MPRIS), если вы знаете их структуру обмена сообщениями. Я выбрал Amarok, потому что он по умолчанию входит в мой дистрибутив KDE. Кроме того, это быстро и легко настраивается.
- Android-телефон с установленным Python для Android (подробнее об этом ниже). Процесс довольно прост — даже для Py3k!
- Удаленный Amarok и удаленный Amarok Web.
На высоком уровне
На высоком уровне мы считаем наш Android-телефон клиентом, а наш ноутбук — сервером. Я подробно рассмотрю эту архитектуру удаленного доступа ниже, но основной поток проекта выглядит следующим образом:
- Пользователь вводит некоторую команду в интерпретатор Python.
- Команда отправляется экземпляру Django.
- Затем Джанго передает команду Twisted.
- Затем Twisted анализирует команду, отправляет новую команду через D-Bus на Amarok.
- Amarok взаимодействует с реальным ноутбуком, управляя воспроизведением/приостановкой музыки.
Теперь давайте покопаемся.
Питон на Андроиде
Итак, в один прекрасный день я начал искать интерпретаторы Python, которые я мог бы запустить на своем телефоне Android (тогда это был Droid 2). Вскоре после этого я обнаружил отличный пакет SL4A, который оживил Python для Android. Это действительно отличный пакет: вы нажимаете пару кнопок, и вдруг у вас есть почти полностью функциональная среда Python на вашем мобильном устройстве или планшете, которая может одновременно запускать ваш старый добрый код Python и получать доступ к Android API (я говорю почти , потому что некоторые вещи, вероятно, отсутствует, а Android API не доступен на 100%, но для большинства случаев этого достаточно).
Если вы предпочитаете, вы также можете создать свой собственный дистрибутив Python для работы на вашем Android-устройстве, преимущество которого заключается в том, что вы можете запускать любую версию интерпретатора, которую пожелаете. Процесс включает в себя кросс-компиляцию Python для запуска на ARM (архитектура, используемая на устройствах Android и других планшетах). Это непросто, но, безусловно, выполнимо. Если вы готовы принять вызов, проверьте здесь или здесь.
После того, как вы настроите интерпретатор, вы сможете делать практически все, что захотите, комбинируя Python с Android API, в том числе удаленно управлять своим ноутбуком. Например, вы можете:
- Отправлять и читать СМС.
- Взаимодействуйте со сторонними API через Интернет через urllib и другие библиотеки.
- Отображение собственных подсказок внешнего вида, вращающихся диалоговых окон и т. п.
- Измените мелодию звонка.
- Воспроизведение музыки или видео.
- Взаимодействуйте с Bluetooth — это, в частности, открывает множество возможностей. Например, однажды я экспериментировал с использованием своего телефона в качестве приложения для блокировки и разблокировки ноутбука (например, разблокировать ноутбук через Bluetooth, когда мой телефон был поблизости).
Как работает использование телефона для управления ноутбуком
Архитектура
Состав нашего проекта следующий:
Клиентское приложение, построенное на Twisted, если вы хотите протестировать серверный код (ниже) без необходимости вообще запускать приложение Django.
Серверное приложение Django, которое считывает команды с устройства Android и передает их Twisted. В настоящее время Amarok — единственное приложение для ноутбука, с которым сервер может взаимодействовать (т. е. управлять музыкой), но это достаточное доказательство концепции, поскольку платформа легко расширяется.
«Экземпляр» Twisted на стороне сервера, который взаимодействует с медиаплеером ноутбука через D-Bus, отправляя команды по мере их поступления от Django (в настоящее время я поддерживаю «следующий», «предыдущий», «воспроизведение», «пауза», «остановить» и «выключить звук»). Почему бы просто не передать команды напрямую из Django в Amarok? Неблокирующие атрибуты Twisted, управляемые событиями, снимают всю тяжелую работу с многопоточностью (подробнее ниже). Если вы заинтересованы в женитьбе этих двоих, смотрите здесь.
- Клиентский код Android, загруженный на ваше устройство с настроенным URL-адресом для доступа к вашему приложению Django. Стоит отметить, что этот конкретный фрагмент кода работает на Python 2.7+, включая Py3k.
Что такое D-Bus?
Я несколько раз упоминал D-Bus, так что, наверное, стоит поговорить о нем подробнее. Вообще говоря, D-Bus — это шинная система обмена сообщениями для простого обмена сообщениями между приложениями (например, на портативном компьютере и телефоне Android) с помощью специально созданных сообщений.
В основном он состоит из двух шин: системной шины для общесистемных вещей; и сессионная шина для пользовательского контента. Типичными сообщениями для системной шины будут: «Эй, я добавил новый принтер, уведомите мои приложения с поддержкой D-Bus о том, что новый принтер находится в сети», в то время как типичное межпроцессное взаимодействие (IPC) между приложениями будет идти в сеанс. автобус.
Мы используем сессионную шину для связи с Amarok. Весьма вероятно, что большинство современных приложений (по крайней мере, в среде Linux) будут поддерживать этот тип обмена сообщениями, и, как правило, все команды/функции, которые они могут обрабатывать, хорошо документированы. Поскольку в этой архитектуре можно управлять любым приложением с поддержкой D-Bus, возможности практически безграничны.
Дополнительную информацию можно найти здесь.
За кулисами:
Настроив всю инфраструктуру, вы можете запустить приложение Android, и оно войдет в бесконечный цикл для чтения входящих сообщений, обработки их с некоторыми проверками работоспособности и, если они действительны, отправки их на предопределенный URL-адрес (т. е. URL-адрес вашего приложения Django), которое, в свою очередь, будет обрабатывать ввод и действовать соответствующим образом. Затем клиент Android помечает сообщение как прочитанное, и цикл продолжается до тех пор, пока не будет обработано сообщение с точным содержимым «exitclient» (умно, да?), и в этом случае клиент завершит работу.
На сервере приложение Django выбирает команду для обработки и проверяет, начинается ли она с действительной инструкции. Если это так, он подключается к серверу Twisted (используя Telnetlib для подключения через telnet) и отправляет команду. Наконец, Twisted анализирует ввод, преобразует его во что-то подходящее для Amarok и позволяет Amarok творить чудеса! Наконец, ваш ноутбук отвечает воспроизведением песен, паузами, пропусками и т. д.
Что еще я могу сделать с этим?
Пока все выглядит очень просто, да? Вы можете спросить себя: «Можно ли это расширить для поддержки отличной функции [X]?» Ответ: Да (вероятно)! Учитывая, что вы знаете, как правильно взаимодействовать с компьютером с помощью телефона, вы можете дополнить код на стороне сервера, чтобы делать все, что захотите. Прежде чем вы это узнаете, вы будете удаленно запускать длительные процессы на своем компьютере. Или, если вы можете справиться с электроникой, вы можете создать интерфейс между вашим компьютером и вашим любимым устройством, управляя им с помощью SMS-инструкций («Сделай мне кофе!» — приходит на ум).
Что дальше
Я продолжу играть с моей игрушкой для управления ноутбуком на Android некоторое время, улучшая ее функции, исправляя ошибки и т. д. Но если вам интересно, я буду рад, если вы поможете! Просто разветвите репозиторий и отправьте любые запросы на включение.
Если у вас есть какие-либо вопросы, пожалуйста, отправьте мне электронное письмо по адресу [email protected], и я буду рад помочь.