Python、Twisted、Djangoを使用してAndroidフォンでラップトップを制御する

公開: 2022-03-11

序章

AndroidまたはPythonのプログラミングスキルを披露するのはいつでも楽しいことです。 しばらく前に、Androidモバイルデバイスを介してラップトップを制御してみるのはクールだと思いました。 考えてみてください。音楽の再生と一時停止、プログラミングジョブやダウンロードの開始と停止など、すべて携帯電話からメッセージを送信することで、ラップトップにリモートアクセスできます。 きちんとね?

読み続ける前に、これはまだ初期段階のペットプロジェクトですが、基本的なプラットフォームはそこにあることを覚えておいてください。 いくつかの主流のツールを接着することで、Pythonインタープリターを介してラップトップを制御するようにAndroidフォンをセットアップすることができました。

ちなみに、プロジェクトはオープンソースです。 ここでクライアントコードを確認でき、ここでサーバーコードを確認できます。

リモートラップトップアクセスツールベルト:Python、Twisted、Django、およびAmarok

このプロジェクトには、次のテクノロジーが含まれます。そのうちのいくつかは、あなたが精通している可能性があり、いくつかは、目前のタスクに非常に固有のものです。

  • Python 2.7+
  • Twisted:特にネットワークハッカー向けに作成された優れたイベント駆動型フレームワーク。
  • Django:私はv1.4を使用したので、より低いバージョンを実行する場合は、いくつかのファイルの場所を調整する必要があります。
  • アマロック:D-BUS(これについては以下で詳しく説明します)管理可能なメディアプレーヤー。 メッセージング構造を知っている場合、これは他のそのようなメディアプレーヤー(クレメンタイン、VLC、またはMPRISをサポートするもの)のために下がることができます。 Amarokを選んだのは、デフォルトでKDEディストリビューションが付属しているからです。 さらに、高速で簡単に構成できます。
  • Python for AndroidがインストールされたAndroidフォン(これについては以下で詳しく説明します)。 Py3kの場合でも、プロセスは非常に簡単です。
  • リモートAmarokおよびリモートAmarokWeb。

高レベルで

大まかに言えば、Androidスマートフォンをクライアント、ラップトップをサーバーと見なします。 このリモートアクセスアーキテクチャについては、以下で詳しく説明しますが、プロジェクトの基本的なフローは次のとおりです。

  1. ユーザーはPythonインタープリターにコマンドを入力します。
  2. コマンドはDjangoインスタンスに送信されます。
  3. 次に、DjangoはコマンドをTwistedに渡します。
  4. 次に、ツイストはコマンドを解析し、D-Busを介して新しいコマンドをAmarokに送信します。
  5. アマロックは実際のラップトップと対話し、音楽の再生/一時停止を制御します。

このツールベルトを使用して、Python、Twisted、およびDjangoでラップトップを制御する方法を学びます。

さて、掘り下げましょう。

Android上のPython

それで、ある良い日、私は自分のAndroid携帯電話(当時はDroid 2)で実行できるPythonインタープリターを調べ始めました。 その後すぐに、PythonForAndroidに命を吹き込む優れたSL4Aパッケージを発見しました。 これは本当に気の利いたパッケージです。いくつかのボタンをクリックすると、突然、モバイルデバイスまたはタブレットデバイスでほぼ完全に機能するPython環境ができ、古き良きPythonコードを実行してAndroid APIにアクセスできるようになります(おそらくいくつかのものがあるためです)が欠落しており、Android APIに100%アクセスできるわけではありませんが、ほとんどのユースケースではそれで十分です)。

必要に応じて、Androidデバイスで実行する独自のPythonディストリビューションを構築することもできます。これには、任意のバージョンのインタープリターを実行できるという利点があります。 このプロセスには、ARM(Androidデバイスやその他のタブレットで使用されるアーキテクチャ)で実行されるPythonのクロスコンパイルが含まれます。 簡単ではありませんが、確かに実行可能です。 挑戦するなら、ここかここをチェックしてください。

インタプリタを設定したら、ラップトップをリモートで制御するなど、PythonとAndroid APIを組み合わせることで、基本的に好きなことを行うことができます。 たとえば、次のことができます。

  • SMSを送信して読みます。
  • urllibおよびその他のライブラリを介してインターネット上のサードパーティAPIと対話します。
  • ネイティブのルックアンドフィールプロンプト、回転するダイアログなどを表示します。
  • 着信音を変更します。
  • 音楽やビデオを再生します。
  • Bluetoothと対話する—これは特に多くの機会への道を開きます。 たとえば、私はかつて自分の電話をラップトップのロッカーロック解除アプリケーションとして使用して遊んだことがあります(たとえば、電話が近くにあるときにBluetooth経由でラップトップのロックを解除します)。

電話を使用してラップトップを制御する方法

建築学、建築物、建築様式

私たちのプロジェクト構成は次のとおりです。

  • Djangoアプリケーションをまったく実行せずにサーバーコード(以下)をテストする場合は、Twisted上に構築されたクライアント側アプリケーション。

  • サーバー側のDjangoアプリケーション。Androidデバイスからコマンドを読み込み、Twistedに渡します。 現状では、Amarokはサーバーが対話できる(つまり、音楽を制御する)ことができる唯一のラップトップアプリケーションですが、プラットフォームは簡単に拡張できるため、これは十分な概念実証です。

  • D-Busを介してラップトップのメディアプレーヤーと通信し、Djangoからのコマンドを送信するサーバー側のTwisted「インスタンス」(現在、「next」、「previous」、「play」、「pause」をサポートしています。 'stop'、および'mute')。 コマンドをDjangoからAmarokに直接渡してみませんか? Twistedのイベント駆動型の非ブロッキング属性は、スレッド化のすべてのハードワークを取り除きます(以下で詳しく説明します)。 2人の結婚に興味がある場合は、こちらをご覧ください。

Twistedは優れており、イベント駆動型で、用途が広いです。 コールバックシステム、遅延オブジェクト、およびその他のいくつかの手法を使用して動作します。 ぜひ試してみることをお勧めします。Twistedを使用することで回避できる作業量は非常に印象的です。 たとえば、非ブロッキングメカニズム(スレッド、選択など)を処理することなく、IRC、HTTP、SSHなどの多くのプロトコルの定型コードを提供します。
  • Djangoアプリケーションに到達するためにカスタマイズされたURLを使用してデバイスにアップロードされたクライアント側のAndroidコード。 この特定のコードは、Py3kを含むPython2.7以降で実行されることに注意してください。

D-Busとは何ですか?

D-Busについては何度か言及したので、もっと詳しく説明する価値があるでしょう。 大まかに言えば、D-Busは、特別に細工されたメッセージを介してアプリケーション間(たとえば、ラップトップコンピューターとAndroid電話)で簡単に通信するためのメッセージングバスシステムです。

これは主に2つのバスで構成されています。システム全体のバス用のシステムバスです。 そして、ユーザーランドのもののためのセッションバス。 システムバスへの一般的なメッセージは、「新しいプリンタを追加しました。新しいプリンタがオンラインであることをD-Bus対応アプリケーションに通知します」ですが、アプリケーション間の一般的なプロセス間通信(IPC)はセッションに送信されます。バス。

セッションバスを使用してアマロックと通信します。 最近のほとんどのアプリケーション(少なくともLinux環境では)がこのタイプのメッセージングをサポートしている可能性が非常に高く、通常、処理できるすべてのコマンド/機能は十分に文書化されています。 D-Busをサポートするアプリケーションはすべてこのアーキテクチャで制御できるため、可能性はほぼ無限です。

詳細については、こちらをご覧ください。

舞台裏:

すべてのインフラストラクチャをセットアップしたら、Androidアプリケーションを起動すると、無限ループに入り、着信メッセージを読み取り、健全性チェックで処理し、有効な場合は、事前定義されたURL(つまり、URL Djangoアプリの)。これにより、入力が処理され、それに応じて動作します。 次に、Androidクライアントはメッセージを既読としてマークし、正確な内容の「exitclient」(賢いですね)のメッセージが処理されるまでループが続きます。処理されると、クライアントは終了します。

サーバー上で、Djangoアプリケーションは処理されるコマンドを取得し、それが有効な命令で開始されているかどうかを確認します。 その場合、Twistedサーバーに接続し(Telnetlibを使用してtelnet経由で接続します)、コマンドを送信します。 最後に、Twistedは入力を解析し、それをAmarokに適したものに変換し、Amarokにその魔法を実行させます。 最後に、ラップトップは曲の再生、一時停止、スキップなどで応答します。

「事前定義されたURL」について:コンピュータを遠くから制御したい場合、これはパブリックURL(インターネット経由でアクセス可能)である必要があります。 現在、コードはセキュリティのレイヤー(SSLなど)を実装していないことに注意してください。このような改善は、現時点では読者にとっての演習です。

これで他に何ができますか?

これまでのところ、すべてが本当にシンプルに見えますね。 「これを拡張して、気の利いた機能[X]をサポートできますか?」と自問するかもしれません。 答えは:はい(おそらく)! 電話を適切に使用してコンピューターを操作する方法を知っている場合は、サーバー側のコードを補足して、好きなことを行うことができます。 あなたがそれを知る前に、あなたはあなたのコンピュータ上でリモートで長いプロセスを撃ち落とすことになるでしょう。 または、電子機器に対応できる場合は、コンピューターとお気に入りのアプライアンスの間にインターフェイスを構築し、SMS命令介してそれを制御することができます(「コーヒーを飲んでください!」が思い浮かびます)。

次は何ですか

私はAndroidラップトップのコントロールおもちゃでしばらく遊んで、その機能を改善したり、バグを修正したりします。しかし、興味があれば、助けてもらいたいです! リポジトリをフォークして、プルリクエストを送信するだけです。

ご不明な点がございましたら、[email protected]までメールでお問い合わせください。喜んでサポートさせていただきます。