ควบคุมแล็ปท็อปของคุณด้วยโทรศัพท์ 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 ระยะไกล
ในระดับสูง
ในระดับสูง เราถือว่าโทรศัพท์ Android เป็นไคลเอนต์และแล็ปท็อปของเรา เป็นเซิร์ฟเวอร์ ฉันจะพูดถึงสถาปัตยกรรมการเข้าถึงระยะไกลในเชิงลึกด้านล่าง แต่โฟลว์พื้นฐานของโครงการมีดังนี้:
- ผู้ใช้พิมพ์คำสั่งบางอย่างลงในล่าม Python
- คำสั่งจะถูกส่งไปยังอินสแตนซ์ Django
- จากนั้น Django ก็ส่งคำสั่งไปยัง Twisted
- Twisted จากนั้นแยกวิเคราะห์คำสั่งส่งคำสั่งใหม่ผ่าน D-Bus ไปยัง Amarok
- Amarok โต้ตอบกับแล็ปท็อปจริง ควบคุมการเล่น/หยุดเพลง
งั้นไปขุดกัน
Python บน Android
วันหนึ่งที่ดี ฉันเริ่มดูล่าม Python ที่ฉันสามารถเรียกใช้บนโทรศัพท์ Android ของฉัน (Droid 2 ในตอนนั้น) ไม่นานหลังจากนั้น ฉันค้นพบแพ็คเกจ SL4A ที่ยอดเยี่ยมที่ทำให้ Python For Android มีชีวิตขึ้นมา เป็นแพ็คเกจที่ดีจริงๆ: คุณคลิกปุ่มสองสามปุ่มและทันใดนั้นคุณมีสภาพแวดล้อม Python ที่ใช้งานได้ เกือบ ทั้งหมดบนอุปกรณ์มือถือหรือแท็บเล็ตของคุณที่สามารถเรียกใช้โค้ด Python ที่ดีและเข้าถึง Android API ได้ (ฉันพูด เกือบ เพราะบางสิ่งอาจ หายไปและ Android API ไม่สามารถเข้าถึงได้ 100% แต่สำหรับกรณีการใช้งานส่วนใหญ่ ก็เพียงพอแล้ว)
หากคุณต้องการ คุณสามารถสร้างการแจกจ่าย Python ของคุณเองเพื่อทำงานบนอุปกรณ์ Android ของคุณ ซึ่งมีข้อได้เปรียบที่คุณสามารถเรียกใช้ล่ามเวอร์ชันใดก็ได้ที่คุณต้องการ กระบวนการนี้เกี่ยวข้องกับการคอมไพล์ข้าม Python เพื่อรันบน ARM (สถาปัตยกรรมที่ใช้บนอุปกรณ์ Android และแท็บเล็ตอื่นๆ) ไม่ใช่เรื่องง่าย แต่ก็ทำได้อย่างแน่นอน หากคุณพร้อมสำหรับความท้าทาย โปรดตรวจสอบที่นี่หรือที่นี่
เมื่อคุณมีการตั้งค่าล่ามแล้ว คุณสามารถทำสิ่งใดก็ได้ตามต้องการโดยการรวม Python เข้ากับ Android API รวมถึงการควบคุมแล็ปท็อปของคุณจากระยะไกล ตัวอย่างเช่น คุณสามารถ:
- ส่งและอ่าน SMS
- โต้ตอบกับ API ของบริษัทอื่นบนอินเทอร์เน็ตผ่าน urllib และไลบรารีอื่นๆ
- แสดงข้อความแจ้งลักษณะและความรู้สึกดั้งเดิม กล่องโต้ตอบแบบหมุน และอื่นๆ
- เปลี่ยนริงโทนของคุณ
- เล่นเพลงหรือวิดีโอ
- โต้ตอบกับบลูทูธ โดยเฉพาะอย่างยิ่งสิ่งนี้เป็นการปูทางไปสู่โอกาสมากมาย ตัวอย่างเช่น ครั้งหนึ่งฉันเคยเล่นโดยใช้โทรศัพท์เป็นแอปพลิเคชันล็อกเกอร์-ปลดล็อกสำหรับแล็ปท็อป (เช่น ปลดล็อกแล็ปท็อปผ่านบลูทูธเมื่อโทรศัพท์อยู่ใกล้ๆ)
การใช้โทรศัพท์ของคุณเพื่อควบคุมแล็ปท็อปของคุณทำงานอย่างไร
สถาปัตยกรรม
องค์ประกอบของโครงการของเรามีดังนี้:
แอปพลิเคชันฝั่งไคลเอ็นต์ที่สร้างขึ้นบน Twisted หากคุณต้องการทดสอบรหัสเซิร์ฟเวอร์ (ด้านล่าง) โดยไม่ต้องเรียกใช้แอปพลิเคชัน Django เลย
แอปพลิเคชัน Django ฝั่งเซิร์ฟเวอร์ ซึ่งอ่านคำสั่งจากอุปกรณ์ Android และส่งผ่านไปยัง Twisted อย่างที่เป็นอยู่ Amarok เป็นแอปพลิเคชั่นแล็ปท็อปเพียงตัวเดียวที่เซิร์ฟเวอร์สามารถโต้ตอบด้วย (เช่น เพื่อควบคุมเพลง) แต่นั่นเป็นการพิสูจน์แนวคิดที่เพียงพอ เนื่องจากแพลตฟอร์มนี้ขยายได้ง่าย

'อินสแตนซ์' ฝั่งเซิร์ฟเวอร์ที่สื่อสารกับเครื่องเล่นสื่อของแล็ปท็อปผ่าน D-Bus โดยส่งคำสั่งตามที่พวกเขาเข้ามาจาก Django (ปัจจุบันฉันรองรับ 'ถัดไป', 'ก่อนหน้า', 'เล่น', 'หยุดชั่วคราว' 'หยุด' และ 'ปิดเสียง') ทำไมไม่เพียงแค่ส่งคำสั่งโดยตรงจาก Django ไปยัง Amarok? คุณลักษณะที่ขับเคลื่อนด้วยเหตุการณ์และไม่ปิดกั้นของ Twisted จะช่วยขจัดการทำงานหนักของเธรดทั้งหมด (เพิ่มเติมด้านล่าง) หากคุณสนใจที่จะแต่งงานกับทั้งสองคน ดูที่นี่
- โค้ด 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 จะรับคำสั่งที่จะประมวลผลและตรวจสอบว่าคำสั่งเริ่มต้นด้วยคำสั่งที่ถูกต้องหรือไม่ ถ้าเป็นเช่นนั้น มันจะเชื่อมต่อกับเซิร์ฟเวอร์ Twisted (โดยใช้ Telnetlib เพื่อเชื่อมต่อผ่าน telnet) และส่งคำสั่งไปพร้อมกัน สุดท้าย Twisted แยกวิเคราะห์ข้อมูลที่ป้อน แปลงเป็นสิ่งที่เหมาะสำหรับ Amarok และให้ Amarok ทำเวทมนตร์! สุดท้าย แล็ปท็อปของคุณตอบสนองด้วยการเล่นเพลง หยุดชั่วคราว ข้าม ฯลฯ
ฉันจะทำอะไรกับสิ่งนี้ได้อีก
จนถึงตอนนี้ทุกอย่างดูเรียบง่ายจริงๆ เหรอ? คุณอาจกำลังถามตัวเองว่า: “สามารถขยายเพื่อรองรับฟีเจอร์ที่ดี [X] ได้หรือไม่” คำตอบคือ: ใช่ (อาจ)! เนื่องจากคุณรู้วิธีโต้ตอบกับคอมพิวเตอร์โดยใช้โทรศัพท์อย่างถูกต้อง คุณจึงสามารถเสริมโค้ดฝั่งเซิร์ฟเวอร์เพื่อทำสิ่งที่คุณต้องการได้ ก่อนที่คุณจะรู้ตัว คุณจะต้องปิดกระบวนการที่ใช้เวลานานบนคอมพิวเตอร์ของคุณจากระยะไกล หรือหากคุณสามารถรับมือกับอุปกรณ์อิเล็กทรอนิกส์ได้ คุณสามารถสร้างอินเทอร์เฟซระหว่างคอมพิวเตอร์และอุปกรณ์ที่คุณชื่นชอบ โดยควบคุมผ่าน คำ สั่ง SMS (“Make me coffee!”)
อะไรต่อไป
ฉันจะเล่นกับของเล่นควบคุมแล็ปท็อป Android ต่อไปซักพัก ปรับปรุงคุณสมบัติของมัน แก้ไขข้อผิดพลาด ฯลฯ แต่ถ้าคุณสนใจ ฉันยินดีที่จะเห็นคุณช่วยเหลือ! เพียงแยกที่เก็บแล้วส่งคำขอดึงใด ๆ
หากคุณมีคำถามใดๆ โปรดส่งอีเมลมาที่ [email protected] เรายินดีที่จะช่วยเหลือ
