使用 Python、Twisted 和 Django 通过 Android 手机控制您的笔记本电脑
已发表: 2022-03-11介绍
展示您的 Android 或 Python 编程技能总是很有趣。 不久前,我认为尝试通过我的 Android 移动设备控制我的笔记本电脑会很酷。 想一想:远程笔记本电脑访问,包括能够播放和暂停音乐、开始和停止编程作业或下载等,所有这些都可以通过手机发送消息。 整齐吧?
在继续阅读之前,请记住这是一个宠物项目,仍处于早期阶段——但基本平台已经存在。 通过将一些主流工具粘合在一起,我能够设置我的 Android 手机以通过 Python 解释器控制我的笔记本电脑。
顺便说一句:该项目是开源的。 您可以在此处查看客户端代码,并在此处查看服务器代码。
远程笔记本电脑访问工具带:Python、Twisted、Django 和 Amarok
该项目涉及以下技术,其中一些您可能熟悉,其中一些非常特定于手头的任务:
- Python 2.7+
- Twisted:一个优秀的事件驱动框架,专为网络黑客设计。
- Django:我用的是v1.4,所以如果你想运行较低的版本,你必须调整一些文件的位置。
- Amarok:一个 D-BUS(更多内容见下文)可管理的媒体播放器。 如果您知道它们的消息结构,则可以将其替换为其他此类媒体播放器(Clementine、VLC 或任何支持 MPRIS)。 我选择 Amarok 是因为它默认附带我的 KDE 发行版。 此外,它快速且易于配置。
- 安装了适用于 Android 的 Python 的 Android 手机(更多内容见下文)。 这个过程非常简单——即使对于 Py3k!
- 远程 Amarok 和远程 Amarok Web。
高水平
在高层次上,我们认为我们的 Android 手机是客户端,我们的笔记本电脑是服务器。 我将在下面深入介绍这个远程访问架构,但项目的基本流程如下:
- 用户在 Python 解释器中键入一些命令。
- 该命令被发送到 Django 实例。
- Django 然后将命令传递给 Twisted。
- Twisted 然后解析命令通过 D-Bus 向 Amarok 发送一个新命令。
- Amarok 与实际的笔记本电脑交互,控制音乐的播放/暂停。
现在,让我们深入研究。
安卓上的 Python
所以有一天,我开始研究可以在我的 Android 手机(当时是 Droid 2)上运行的 Python 解释器。 不久之后,我发现了将 Python For Android 带入生活的优秀 SL4A 包。 这是一个非常漂亮的包:您单击几个按钮,突然间您在移动或平板设备上拥有了一个几乎功能齐全的 Python 环境,既可以运行您的优秀 Python 代码,又可以访问 Android API(我说几乎是因为有些东西可能缺少并且 Android API 不是 100% 可访问的,但对于大多数用例来说,这就足够了)。
如果您愿意,您还可以构建自己的 Python 发行版以在您的 Android 设备上运行,这样做的好处是您可以运行您想要的任何版本的解释器。 该过程涉及交叉编译 Python 以在 ARM(Android 设备和其他平板电脑上使用的架构)上运行。 这并不容易,但肯定是可行的。 如果您准备迎接挑战,请查看此处或此处。
一旦你设置好了解释器,你就可以通过将 Python 与 Android API 结合起来做任何你喜欢的事情,包括远程控制你的笔记本电脑。 例如,您可以:
- 发送和阅读短信。
- 通过 urllib 和其他库与 Internet 上的第三方 API 交互。
- 显示本机外观提示、旋转对话框等。
- 更改您的铃声。
- 播放音乐或视频。
- 与蓝牙交互——这一点尤其为许多机会铺平了道路。 例如,我曾经尝试将手机用作笔记本电脑的储物柜解锁应用程序(例如,当手机在附近时,通过蓝牙解锁笔记本电脑)。
使用手机控制笔记本电脑的工作原理
架构
我们的项目构成如下:
如果您想测试服务器代码(如下)而无需运行 Django 应用程序,则构建在 Twisted 上的客户端应用程序。
一个服务器端 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] 吗?” 答案是:是的(可能)! 鉴于您知道如何正确使用手机与计算机进行交互,您可以补充服务器端代码来做任何您喜欢的事情。 在不知不觉中,您将在计算机上远程完成冗长的进程。 或者,如果你能应付电子设备,你可以在你的电脑和你最喜欢的设备之间建立一个接口,通过短信指令控制它(“给我煮咖啡!”浮现在脑海中)。
下一步是什么
我会继续玩我的安卓笔记本电脑控制玩具一段时间,改进它的功能,修复错误等。但如果你有兴趣,我很乐意看到你帮忙! 只需 fork 存储库并发送任何拉取请求。
如果您有任何问题,请发送电子邮件至 [email protected],我很乐意为您提供帮助。