Python, Twisted 및 Django를 사용하여 Android 휴대폰으로 노트북 제어

게시 됨: 2022-03-11

소개

Android 또는 Python 프로그래밍 기술을 전시하는 것은 언제나 즐겁습니다. 얼마 전 Android 모바일 장치를 통해 랩톱을 제어하고 제어하는 ​​​​것이 멋지다고 생각했습니다. 휴대전화에서 메시지를 전송하여 음악 재생 및 일시 중지, 프로그래밍 작업 또는 다운로드 시작 및 중지 등을 포함한 원격 랩톱 액세스를 생각해 보십시오. 깔끔하죠?

계속 읽기 전에 이 프로젝트는 아직 초기 단계에 불과하지만 기본 플랫폼은 있다는 점을 염두에 두시기 바랍니다. 몇 가지 주류 도구를 결합하여 Python 인터프리터를 통해 랩톱을 제어하도록 Android 휴대전화를 설정할 수 있었습니다.

그건 그렇고 : 프로젝트는 오픈 소스입니다. 여기에서 클라이언트 코드를 확인하고 여기에서 서버 코드를 확인할 수 있습니다.

원격 노트북 액세스 도구 벨트: Python, Twisted, Django 및 Amarok

이 프로젝트에는 다음과 같은 기술이 포함되며 그 중 일부는 익숙할 수 있으며 그 중 일부는 당면한 작업에 매우 구체적입니다.

  • 파이썬 2.7+
  • Twisted: 네트워크 해커를 위해 특별히 제작된 우수한 이벤트 기반 프레임워크입니다.
  • Django: v1.4를 사용했으므로 더 낮은 버전을 실행하려면 일부 파일의 위치를 ​​조정해야 합니다.
  • Amarok: D-BUS(자세한 내용은 아래 참조) 관리 가능한 미디어 플레이어입니다. 메시징 구조를 알고 있는 경우 다른 미디어 플레이어(Clementine, VLC 또는 MPRIS를 지원하는 모든 것)에 대해 제외될 수 있습니다. 기본적으로 KDE 배포판과 함께 제공되기 때문에 Amarok를 선택했습니다. 또한 빠르고 쉽게 구성할 수 있습니다.
  • Android용 Python이 설치된 Android 전화(자세한 내용은 아래 참조). 이 프로세스는 Py3k의 경우에도 매우 간단합니다!
  • 원격 Amarok 및 원격 Amarok 웹.

높은 수준에서

높은 수준에서 Android 휴대폰을 클라이언트로, 랩톱을 서버로 간주합니다. 아래에서 이 원격 액세스 아키텍처를 자세히 살펴보겠지만 프로젝트의 기본 흐름은 다음과 같습니다.

  1. 사용자가 Python 인터프리터에 일부 명령을 입력합니다.
  2. 명령은 Django 인스턴스로 전송됩니다.
  3. 그런 다음 Django는 Twisted에 명령을 전달합니다.
  4. Twisted는 명령을 구문 분석하여 D-Bus를 통해 Amarok에 새 명령을 보냅니다.
  5. Amarok은 실제 랩톱과 상호 작용하여 음악 재생/일시 정지를 제어합니다.

이 도구 모음을 사용하여 Python, Twisted 및 Django로 노트북을 제어하는 ​​방법을 배우십시오.

이제 파헤쳐 보겠습니다.

안드로이드의 파이썬

그래서 어느 좋은 날, 나는 내 안드로이드 폰(당시 Droid 2)에서 실행할 수 있는 파이썬 인터프리터를 보기 시작했습니다. 얼마 지나지 않아 저는 Python For Android를 구현한 뛰어난 SL4A 패키지를 발견했습니다. 정말 멋진 패키지입니다. 몇 개의 버튼을 클릭하면 갑자기 모바일 또는 태블릿 장치에 거의 완벽 하게 작동하는 Python 환경이 생겨 좋은 Python 코드를 실행하고 Android API에 액세스할 수 있습니다. 가 없고 Android API에 100% 액세스할 수는 없지만 대부분의 사용 사례에서는 충분합니다).

원하는 경우 Android 장치에서 실행할 자체 Python 배포판을 빌드할 수도 있습니다. 그러면 원하는 인터프리터 버전을 실행할 수 있다는 이점이 있습니다. 이 프로세스에는 ARM(Android 장치 및 기타 태블릿에서 사용되는 아키텍처)에서 실행되도록 Python을 교차 컴파일하는 작업이 포함됩니다. 쉽지는 않지만 확실히 할 수 있습니다. 도전할 준비가 되셨다면 여기 또는 여기를 확인하세요.

인터프리터 설정이 완료되면 원격으로 노트북을 제어하는 ​​것을 포함하여 Python을 Android API와 결합하여 기본적으로 원하는 모든 작업을 수행할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.

  • SMS를 보내고 읽습니다.
  • urllib 및 기타 라이브러리를 통해 인터넷에서 타사 API와 상호 작용합니다.
  • 기본 모양과 느낌 프롬프트, 회전하는 대화 상자 등을 표시합니다.
  • 벨소리를 변경합니다.
  • 음악이나 비디오를 재생합니다.
  • Bluetooth와 상호 작용 - 특히 이것은 많은 기회를 위한 길을 열어줍니다. 예를 들어, 한 번은 휴대폰을 랩톱의 잠금 해제 응용 프로그램으로 사용하여 장난을 쳤습니다(예: 휴대폰이 근처에 있을 때 Bluetooth를 통해 랩톱 잠금 해제).

휴대전화를 사용하여 노트북을 제어하는 ​​방법

아키텍처

우리의 프로젝트 구성은 다음과 같습니다.

  • Django 애플리케이션을 전혀 실행할 필요 없이 서버 코드(아래)를 테스트하려는 경우 Twisted에 구축된 클라이언트 측 애플리케이션.

  • Android 장치에서 명령을 읽고 Twisted에 전달하는 서버 측 Django 응용 프로그램입니다. 그대로 Amarok은 서버와 상호 작용할 수 있는(즉, 음악 제어용) 유일한 랩톱 응용 프로그램이지만 플랫폼을 쉽게 확장할 수 있으므로 충분한 개념 증명입니다.

  • D-Bus를 통해 노트북의 미디어 플레이어와 통신하는 서버 측 Twisted 'instance', Django에서 들어오는 명령을 따라 보냅니다(현재 'next', 'previous', 'play', 'pause', '중지' 및 '음소거'). Django에서 Amarok으로 직접 명령을 전달하지 않는 이유는 무엇입니까? Twisted의 이벤트 기반 비차단 속성은 스레딩의 모든 힘든 작업을 없애줍니다(아래에서 자세히 설명). 두 사람의 결혼에 관심이 있다면 여기를 참조하십시오.

Twisted는 우수하고 이벤트 중심이며 다재다능합니다. 콜백 시스템, 지연된 개체 및 기타 기술을 사용하여 작동합니다. 나는 당신이 그것을 시도하는 것을 확실히 추천하고 싶습니다: Twisted를 사용함으로써 피할 수 있는 작업의 양은 심각하게 인상적입니다. 예를 들어, 비차단 메커니즘(스레드, 선택 등)을 처리할 필요 없이 IRC, HTTP, SSH 등을 포함한 많은 프로토콜에 대한 상용구 코드를 제공합니다.
  • Django 애플리케이션에 도달하기 위해 사용자 정의된 URL을 사용하여 기기에 업로드된 클라이언트 측 Android 코드입니다. 이 특정 코드는 Py3k를 포함하여 Python 2.7 이상에서 실행된다는 점을 언급할 가치가 있습니다.

디버스란?

나는 D-Bus에 대해 여러 번 언급 했으므로 더 자세히 논의 할 가치가 있습니다. 일반적으로 D-Bus는 특수 제작된 메시지를 통해 응용 프로그램(예: 랩톱 컴퓨터 및 Android 전화) 간에 쉽게 통신하기 위한 메시징 버스 시스템입니다.

주로 두 개의 버스로 구성됩니다. 시스템 버스, 시스템 전체에 사용되는 버스, 사용자 영역을 위한 세션 버스. 시스템 버스에 대한 일반적인 메시지는 "이봐, 새 프린터를 추가했습니다. D-Bus 지원 응용 프로그램에 새 프린터가 온라인 상태임을 알립니다."입니다. 반면 응용 프로그램 간의 일반적인 IPC(Inter-Process Communication)는 세션으로 이동합니다. 버스.

세션 버스를 사용하여 Amarok과 통신합니다. 대부분의 최신 응용 프로그램(적어도 Linux 환경에서)은 이러한 유형의 메시징을 지원할 가능성이 매우 높으며 일반적으로 처리할 수 있는 모든 명령/기능이 잘 문서화되어 있습니다. D-Bus를 지원하는 모든 애플리케이션은 이 아키텍처에서 제어할 수 있으므로 가능성은 거의 무한합니다.

더 많은 정보는 여기에서 찾을 수 있습니다.

무대 뒤에서:

모든 인프라를 설정한 후 Android 애플리케이션을 실행하면 수신 메시지를 읽고, 일부 온전성 검사를 통해 처리하고, 유효한 경우 사전 정의된 URL(예: URL Django 앱), 차례로 입력을 처리하고 그에 따라 작동합니다. 그런 다음 Android 클라이언트는 메시지를 읽은 것으로 표시하고 정확한 내용 "exitclient"(영리한, 응?)가 포함된 메시지가 처리될 때까지 루프가 계속됩니다. 이 경우 클라이언트는 종료됩니다.

서버에서 Django 애플리케이션은 처리할 명령을 선택하고 유효한 명령으로 시작하는지 확인합니다. 그렇다면 Twisted 서버에 연결하고(텔넷을 통해 연결하기 위해 Telnetlib를 사용) 명령을 함께 보냅니다. 마지막으로 Twisted는 입력을 구문 분석하여 Amarok에 적합한 것으로 변환하고 Amarok가 마법을 수행하도록 합니다! 마지막으로 랩톱은 노래 재생, 일시 중지, 건너뛰기 등으로 응답합니다.

"미리 정의된 URL"과 관련하여: 멀리서 컴퓨터를 제어하려면 공개 URL(인터넷을 통해 연결할 수 있음)이어야 합니다. 현재 코드는 보안 계층(SSL 등)을 구현하지 않습니다. 이러한 개선 사항은 현재로서는 독자를 위한 연습입니다.

이것으로 다른 무엇을 할 수 있습니까?

여기까지는 모든 것이 정말 간단해 보이죠? "이것이 멋진 기능 [X]를 지원하도록 확장될 수 있습니까?" 대답은 다음과 같습니다. 예(아마도)! 전화를 올바르게 사용하여 컴퓨터와 상호 작용하는 방법을 알고 있다면 서버 측 코드를 보완하여 원하는 모든 작업을 수행할 수 있습니다. 당신이 그것을 알기도 전에, 당신은 원격으로 당신의 컴퓨터에 있는 긴 프로세스를 쏘아 올릴 것입니다. 또는 전자 장치에 대처할 수 있다면 컴퓨터와 즐겨 사용하는 가전 제품 사이에 인터페이스를 구축하여 SMS 지침 을 통해 제어할 수 있습니다(“Make me coffee!”가 떠오름).

무엇 향후 계획

당분간은 Android 노트북 제어 장난감을 계속 가지고 놀면서 기능을 개선하고 버그를 수정하는 등의 작업을 계속할 것입니다. 하지만 관심이 있으시면 도움이 되었으면 합니다! 저장소를 포크하고 풀 리퀘스트를 보내면 됩니다.

질문이 있는 경우 [email protected]으로 이메일을 보내주시면 기꺼이 도와드리겠습니다.