تحكم في الكمبيوتر المحمول الخاص بك باستخدام هاتف Android باستخدام Python و Twisted و Django

نشرت: 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 الخاص بنا هو العميل وجهاز الكمبيوتر المحمول الخاص بنا ، الخادم. سأخوض في بنية الوصول عن بُعد بالتفصيل أدناه ، لكن التدفق الأساسي للمشروع هو كما يلي:

  1. يكتب المستخدم بعض الأوامر في مترجم بايثون.
  2. يتم إرسال الأمر إلى مثيل Django.
  3. ثم يمرر Django الأمر إلى Twisted.
  4. Twisted ثم يوزع الأمر يرسل أمرًا جديدًا عبر D-Bus إلى Amarok.
  5. يتفاعل Amarok مع الكمبيوتر المحمول الفعلي ، ويتحكم في تشغيل / إيقاف الموسيقى.

باستخدام حزام الأدوات هذا ، تعرف على كيفية التحكم في جهاز كمبيوتر محمول باستخدام Python و Twisted و Django.

الآن ، دعنا نحفر.

Python على Android

لذلك ذات يوم جيد ، بدأت في البحث عن مترجمي Python الفوريين الذين يمكنني تشغيلهم على هاتف Android (Droid 2 ، في ذلك الوقت). بعد فترة وجيزة ، اكتشفت حزمة SL4A الممتازة التي أعادت الحياة إلى Python لنظام Android. إنها حزمة رائعة حقًا: يمكنك النقر فوق زوجين وفجأة يكون لديك بيئة Python تعمل بكامل طاقتها تقريبًا على هاتفك المحمول أو جهازك اللوحي والتي يمكنها تشغيل كود Python الجيد والوصول إلى واجهة برمجة تطبيقات Android (أقول تقريبًا لأن بعض الأشياء ربما مفقود ولا يمكن الوصول إلى واجهة برمجة تطبيقات Android بنسبة 100٪ ، ولكنه يكفي لمعظم حالات الاستخدام).

إذا كنت تفضل ذلك ، يمكنك أيضًا إنشاء توزيع Python الخاص بك لتشغيله على جهاز Android الخاص بك ، والذي يتمتع بميزة أنه يمكنك بعد ذلك تشغيل أي إصدار من المترجم الشفهي الذي تريده. تتضمن العملية تجميع Python المتقاطع ليتم تشغيله على ARM (البنية المستخدمة على أجهزة Android والأجهزة اللوحية الأخرى). إنه ليس بالأمر السهل ، لكنه بالتأكيد ممكن. إذا كنت على مستوى التحدي ، تحقق هنا أو هنا.

بمجرد الانتهاء من إعداد المترجم الشفهي ، يمكنك فعل ما تريد بشكل أساسي من خلال الجمع بين Python و Android API ، بما في ذلك التحكم في الكمبيوتر المحمول عن بُعد. على سبيل المثال ، يمكنك:

  • إرسال وقراءة الرسائل القصيرة.
  • تفاعل مع واجهات برمجة التطبيقات (APIs) التابعة لجهات خارجية حول الإنترنت عبر urllib والمكتبات الأخرى.
  • اعرض مطالبات الشكل والمظهر الأصلي ، ومربعات الحوار الدوارة ، وما شابه ذلك.
  • تغيير نغمة الرنين الخاصة بك.
  • قم بتشغيل الموسيقى أو مقاطع الفيديو.
  • التفاعل مع البلوتوث - هذا على وجه الخصوص يمهد الطريق لكثير من الفرص. على سبيل المثال ، لقد لعبت مرة واحدة باستخدام هاتفي كتطبيق locker-unlocker لجهاز الكمبيوتر المحمول الخاص بي (على سبيل المثال ، فتح جهاز الكمبيوتر المحمول الخاص بي عبر Bluetooth عندما كان هاتفي قريبًا).

كيف يعمل استخدام هاتفك للتحكم في الكمبيوتر المحمول الخاص بك

العمارة

تكوين مشروعنا كالتالي:

  • تطبيق من جانب العميل مبني على Twisted إذا كنت تريد اختبار كود الخادم (أدناه) دون الحاجة إلى تشغيل تطبيق Django على الإطلاق.

  • تطبيق Django من جانب الخادم ، والذي يقرأ الأوامر من جهاز Android ويمررها إلى Twisted. كما هو الحال ، Amarok هو تطبيق الكمبيوتر المحمول الوحيد الذي يمكن للخادم التفاعل معه (أي للتحكم في الموسيقى) ، ولكن هذا دليل كافٍ على المفهوم ، حيث يمكن توسيع النظام الأساسي بسهولة.

  • "مثيل" ملتوي من جانب الخادم يتصل بمشغل وسائط الكمبيوتر المحمول عبر D-Bus ، ويرسل الأوامر عندما تأتي من Django (حاليًا ، أؤيد "التالي" ، "السابق" ، "تشغيل" ، "إيقاف مؤقت" ، "إيقاف" و "كتم الصوت"). لماذا لا تقوم فقط بتمرير الأوامر مباشرة من Django إلى Amarok؟ تزيل سمات Twisted المدفوعة بالحدث وغير المحظورة كل العمل الشاق للترابط (المزيد أدناه). إذا كنت مهتمًا بالزواج من الاثنين ، انظر هنا.

الملتوية ممتازة ، مدفوعة بالحدث ، ومتعددة الاستخدامات. إنه يعمل باستخدام نظام رد الاتصال ، والكائنات المؤجلة ، وبعض التقنيات الأخرى. أوصي بالتأكيد بتجربته: مقدار العمل الذي تتجنبه باستخدام Twisted مثير للإعجاب للغاية. على سبيل المثال ، يقدم رمزًا معياريًا للعديد من البروتوكولات ، بما في ذلك IRC و HTTP و SSH وما إلى ذلك دون الحاجة إلى التعامل مع الآليات غير المحظورة (الخيوط ، التحديد ، إلخ).
  • كود Android من جانب العميل ، الذي تم تحميله على جهازك بعنوان URL مخصص للوصول إلى تطبيق Django الخاص بك. من الجدير بالذكر أن هذا الجزء المحدد من التعليمات البرمجية يعمل على Python 2.7+ ، بما في ذلك Py3k.

ما هو D-Bus؟

لقد ذكرت D-Bus عدة مرات ، لذلك ربما يستحق الأمر مناقشتها بمزيد من التفصيل. بشكل عام ، D-Bus هو نظام ناقل رسائل للتواصل بين التطبيقات (على سبيل المثال ، على جهاز كمبيوتر محمول وهاتف Android) بسهولة من خلال الرسائل المعدة خصيصًا.

تتكون بشكل أساسي من حافلتين: ناقل النظام ، للأشياء على مستوى النظام ؛ وحافلة الجلسة ، لأشياء userland. ستكون الرسائل النموذجية إلى ناقل النظام هي "مرحبًا ، لقد أضفت طابعة جديدة ، وأبلغ التطبيقات الممكّنة لـ D-Bus الخاصة بي بأن طابعة جديدة متصلة بالإنترنت" ، بينما تنتقل الاتصالات البينية (IPC) بين التطبيقات إلى الجلسة أوتوبيس.

نستخدم حافلة الجلسة للتواصل مع أمروك. من المحتمل جدًا أن تدعم معظم التطبيقات الحديثة (في بيئات Linux على الأقل) هذا النوع من الرسائل وعمومًا يتم توثيق جميع الأوامر / الوظائف التي يمكنهم معالجتها جيدًا. نظرًا لأنه يمكن التحكم في أي تطبيق يدعم D-Bus في ظل هذه البنية ، فإن الاحتمالات لا حصر لها تقريبًا.

مزيد من المعلومات يمكن العثور عليها هنا.

خلف الكواليس:

بعد إعداد كل البنية التحتية ، يمكنك إطلاق تطبيق Android وسيدخل في حلقة لا نهائية لقراءة الرسائل الواردة ومعالجتها ببعض فحوصات السلامة ، وإذا كانت صالحة ، فأرسلها إلى عنوان URL محدد مسبقًا (على سبيل المثال ، عنوان URL) من تطبيق Django) ، والذي بدوره سيعالج الإدخال ويعمل وفقًا لذلك. يقوم عميل Android بعد ذلك بتحديد الرسالة كمقروءة وتستمر الحلقة حتى تتم معالجة رسالة بالمحتويات الدقيقة "exitclient" (ذكي ، أليس كذلك؟) ، وفي هذه الحالة سيخرج العميل.

على الخادم ، يلتقط تطبيق Django أمرًا لتتم معالجته ويتحقق مما إذا كان يبدأ بتعليمات صالحة. إذا كان الأمر كذلك ، فإنه يتصل بالخادم الملتوي (باستخدام Telnetlib للاتصال عبر telnet) ويرسل الأمر معه. أخيرًا ، يوزع Twisted الإدخال ويحوله إلى شيء مناسب لـ Amarok ويتيح لـ Amarok القيام بسحره! أخيرًا ، يستجيب الكمبيوتر المحمول الخاص بك عن طريق تشغيل الأغاني ، والإيقاف المؤقت ، والتخطي ، وما إلى ذلك.

فيما يتعلق بـ "عنوان URL المحدد مسبقًا": إذا كنت تريد التحكم في جهاز الكمبيوتر الخاص بك من بعيد ، فيجب أن يكون هذا عنوان URL عام (يمكن الوصول إليه عبر الإنترنت). اعلم أن الكود لا ينفذ حاليًا أي طبقة أمان (SSL ، وما إلى ذلك) - فهذه التحسينات هي تمارين للقارئ في الوقت الحالي.

ما الذي يمكنني فعله أيضًا بهذا؟

كل شيء يبدو بسيطًا حقًا حتى الآن ، أليس كذلك؟ قد تسأل نفسك: "هل يمكن توسيع هذا لدعم الميزة الأنيقة [X]؟" الجواب: نعم (ربما)! نظرًا لأنك تعرف كيفية التفاعل مع جهاز الكمبيوتر الخاص بك باستخدام هاتفك بشكل صحيح ، يمكنك استكمال رمز جانب الخادم للقيام بما تريد. قبل أن تعرف ذلك ، ستطلق عمليات طويلة على جهاز الكمبيوتر الخاص بك عن بُعد. أو ، إذا كان بإمكانك التعامل مع الأجهزة الإلكترونية ، فيمكنك إنشاء واجهة بين جهاز الكمبيوتر الخاص بك وجهازك المفضل ، والتحكم في ذلك عبر تعليمات الرسائل القصيرة (يتبادر إلى الذهن "اجعلني قهوة!").

ماذا بعد

سأستمر في اللعب بلعبة التحكم في الكمبيوتر المحمول الذي يعمل بنظام Android لفترة من الوقت ، وتحسين ميزاتها ، وإصلاح الأخطاء ، وما إلى ذلك. ولكن إذا كنت مهتمًا ، فأنا أحب أن أراك تقدم المساعدة! ما عليك سوى تقسيم المستودع وإرسال أي طلبات سحب.

إذا كان لديك أي أسئلة ، يرجى مراسلتي عبر البريد الإلكتروني على [email protected] وسيسعدني تقديم المساعدة.