[ODROID] ODROID 를 원격지에서 접속하기 (sndcpy + srcpy)

문연수·2022년 6월 14일
0

ODROID

목록 보기
2/4

ODROID 를 이용하기 위해선 일반적으로 주변 I/O 장치를 필요로 한다. 마우스키보드, 그리고 HDMI 단자를 연결하여 장치를 제어할 수 있으나, 이러한 환경을 상시 구성하는 것이 쉽지 않을 수 있다. 또한 원격지에서 사용이 불가능하기 때문에 접근성이 크게 떨어진다.

 이러한 문제 해결을 위해, 일반적으로 잘 알려진 VNC 프로토콜을 사용할 수 있다. 그러나 글을 작성하는 현 시점(2022-06-13)에선 Android Host 가 오디오를 송출할 수가 없으며, 지연률로 인해 반응성이 중요한 게임(특히 음악 게임, 전략 게임) 등은 즐기기 어려울 수 있다.

 이러한 문제 해결을 위해 sndcpy, scrcpy 를 통한 Native 에 가까운 원격지 접속 환경을 구축해보려 한다.


 후술할 개념들은 개발자가 아니면 이해하기 다소 어려울 수 있습니다. 그래도 이해하기 쉽게끔 최대한 풀어 써 보겠습니다.

1. 개념 요약

scrcpysndcpy 는 각각 화면 공유 및 제어, 오디오 송출 프로그램이다. 일반적으로 ADB 와 함께 물려서 같이 동작하며, 데이터를 직송하기 때문에 지연률도 적고, 화질도 깨끗하며, 반응성도 좋다.

 여기에서 ADBAndroid Debug Bridge 로 쉽게 생각하면 디버깅 도구? 더 쉽게 설명하면 Android 프로그래밍 개발 툴 정도로 이해하면 될 것이다.

 문제는 ADB 자체에 보안 프로토콜이 따로 없기에 ODROID 측의 ADB Server 포트를 외부로 포워딩하게 되면 누구나 접속이 가능한 상태가 된다. 이런 일은 절대, 무슨 일이 있어도 피해야 한다!

 따라서 새로운 원격지 ADB 서버를 구축하고 여기에서 SSH 터널링을 물려 외부와 통신, 해당 서버가 다시 ODROID 와 통신하는 중계 서버? 를 구축해보려 한다.

(못 배워 쳐먹어서 글씨가 개판이긴 하지만 도식 자체를 이해하는데 무리는 없으리라 생각합니다.)


 실제로 adbadb_keys 를 통한 보안 관련 feature 가 있으나, 필자는 하다가 도저히 안되서 포기했다. ODROID 장치에선 adb 관련된 설정 수정도 어렵고, keypair 공유도 제대로 안되는 듯 했다. (혹시 여기에 대한 솔루션을 알고 있다면 댓글 부탁드립니다.)

2. 중개 서버 설치

 중개 서버로 무엇을 사용하든 상관없지만 필자는 Raspberry Pi 4 Model B+ RAM 8GB 를 사용할 예정이다. 집에 있는 데스크탑도 가능하며, ADBSSH 만 돌아가면 되지만 가장 중요한 것은 ODROID 와 같은 네트워크 상에 상주해야 한다는 것이다.

이것이 필자의 raspberry pi 이다. 내부 IP 주소는 192.168.219.101 을 할당받은 상태이다. 이제 여기에 ADB 서버를 구축할 것이다.

sudo apt-get install adb
adb start-server
adb connect <ODROID IP>
adb devices

위처럼 ADBODROID 를 물고 있도록 한다. 이제 외부에서 raspberry pi 에 접속할 수 있도록 포트포워딩을 해주고, 외부에서 SSH Tunneling 을 이용하여 ODROID 에 접속하면 된다.

3. scrcpy, sndcpy 설치

scrcpysndcpy 는 모두 공식 github 에서 설치가 가능하다.

sndcpy 를 실행하기 위해선 반드시 VLC 를 설치해야 한다.

Windows 64-bit 의 경우, 글 작성 시점으로 scrcpy-win64-v1.24.zipsndcpy-v1.1.zip 를 설치하고 sndcpy 의 압축파일 내용을 잘라내서 scrcpy 디렉토리에 붙여넣는다.

4. SSH Tunneling

 이제 Raspberry PiSSH Tunnel 을 구축해서 Raspberry Pi 를 경유하여 ODROID 에 접속해보려 한다. Windows Terminal 을 열어 아래의 명령어를 입력한다:

ssh -CN -L5555:<ODROID IP> -R27183:localhost:27183 <Remote Address>

<ODROID IP> 에는 중개 서버에서 확인했던 ODROID 의 내부 IP 주소(필자의 경우 #2 중개 서버 설치 에서 본 것과 같이 192.168.219.106:5555)를, <Remote Address> 에는 중개 서버의 주소(필자의 경우, Raspberry Pi 의 유저명과 IPmythos@www.mythos.link) 를 작성하면 된다.

  • C : 위 옵션은 데이터의 압축(Compression) 을 요청하는 명령이다.
  • N : 원격지 명령을 실행하지 말라는 요청으로, 일반적으로 forwarding 등을 할 때 쓰임. (위와 같이 중개 서버가 아닌 내부 서버로 데이터를 넘겨주는 상황에서 쓰임)
  • L : 콜론 앞쪽의 로컬(Local) 주소의 접근을, 콜론 뒤에 오는 원격지의 내부 아이피로 넘겨 전송.
  • R : 콜론 앞쪽의 원격지(Remote) 내 주소의 접근을, 콜론 뒤의 주소로 넘겨 전송.

27183 이라는 포트 번호는 ADB 서버가 forwarding 에 이용하는 디폴트 포트 번호이다. 이제 위의 터널링을 유지한 채로 새로운 터미널을 연다.

5. scrcpy + sndcpy = ODROID 접속

터미널 다시 두 개 열어 아래의 명령어를 입력한다:

.\scrcpy.exe --tcpip=localhost
.\sndcpy localhost

이를 통해 위와 같이 ODROID 를 원격으로 접속할 수 있게 된다.

6. 시연 영상

profile
2000.11.30

0개의 댓글