태블릿에 termux, proot 설치해서 vscode로 개발환경 만들기

117.37.***.***
8

Android 태블릿을 질렀습니다. Lenovo Yoga Tab Pro 기종입니다.

태블릿 주제에 램이 16G나 되는 꽤나 좋은 사양입니다.

지르는데 무슨 특별한 이유가 있는게 아닌, 나에게 하는 선물이고, 선지름후고민 철학에 맞게 일단 지른겁니다.

주 목적인 유투브 재생해보고 난후, 개발머신으로 설정을 하기로 하고 시작했습다.

Linux development environment

안드로이드 16부터 시험기능으로 Linux development environment 이 추가되었습니다. Android 자체가 linux kernel 을 쓰는 거라, 그 linux terminal 을 android native 차원에서 지원하는 거라, 그걸 쓰기로 했습다.

개발자 설정화면에서 “Run Linux terminal on Android” 를 켰습니다. 그러면 Linux terminal app 이 추가되고, 그 앱을 실행하면 Linux 설치가 시작됩니다.

헌데, 설치중 에러 발생하네요.

AI가 이 문제에 대해 답해준 것은 컬컴때문이라고 한다.

원인: Qualcomm Snapdragon의 하드웨어 제한

Lenovo Yoga Tab (Pro 포함)은 Qualcomm Snapdragon 8 Gen 3 탑재 기기입니다. 에러 메시지 Non-protected VMs are not supported on this device는 정확히 이 칩셋의 알려진 문제입니다.

Android의 Linux Terminal은 AVF (Android Virtualisation Framework) 위에서 Debian VM을 실행하는데, 이를 위해선 두 가지 조건이 필요합니다: 기기가 AVF를 지원해야 하고, non-protected VM을 지원해야 합니다 — 즉 호스트 OS가 VM 내부 메모리에 접근할 수 있어야 합니다. 그런데 Qualcomm Snapdragon은 보안 목적(Play Protect 등)으로 설계된 protected VM만 지원하며, 이는 Linux 환경 실행에 적합하지 않습니다.

이렇게 Android 자체 제공 기능으로 하는 것은 여기서 실패!

Termux + proot-distro + code-server

AVF를 쓰지 않고 userspace에서 작동해 Snapdragon에서도 가능한 방법이 있고, 단 kernel space에 접근은 안되기에 systemd 는 안되고, device에 대한 접근도 안되는 제약은 있기는 한데, vscode 를 쓰는 용도로는 가능합니다.

먼저 termux와 termux-x11 앱 설치

https://github.com/termux/termux-app/releases

https://github.com/termux/termux-x11/releases/tag/nightly

이제 proot-distro 설치와 개발도구 설치

# Termux에서 도구 설치
pkg install x11-repo
pkg update
pkg install proot-distro
pkg install termux-x11-nightly
pkg install xwayland
pkg install tur-repo
pkg install code-server

# ubuntu 컨테이너 설치
proot-distro install ubuntu
proot-distro login ubuntu

# 그럼 이제 ubuntu shell 이 뜬다
apt install -y xfce4 xfce4-terminal
apt install -y dbus dbus-x11
# 패키지 업데이트
apt update && apt upgrade -y

# 기본 빌드 도구
apt install -y \
  build-essential \
  gcc \
  g++ \
  gdb \
  gdbserver \
  make \
  cmake \
  git \
  curl \
  wget \
  unzip \
  zip \
  pkg-config \
  ltrace \
  strace \
  binutils \
  file \
  xxd \
  netcat-openbsd \
  socat \
  patchelf \
  elfutils \
  tmux \
  htop \
  tree \
  jq \
  ripgrep \
  locales

# Python
apt install -y \
  python3 \
  python3-pip \
  python3-venv \
  python3-dev

# Node.js LTS (nodesource)
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt install -y nodejs

# node 확인
node -v
npm -v

# code-server (node 설치 후 다시)
curl -fsSL https://code-server.dev/install.sh | sh

# locale
locale-gen en_US.UTF-8
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bashrc
source ~/.bashrc

proot는 저수준 핵심 바이너리, proot-distro는 그 위에 만든 편의 래퍼입니다.

proot-distro (셸 스크립트 래퍼)
    ↓ 내부적으로 호출
proot (실제 엔진)
    ↓ 구현 방식
ptrace 시스템콜 인터셉트 → chroot 흉내

그래서 proot-distro login ubuntu 이 한줄은 내부적으로는 아래와 같이 이런 복잡한 proot 명령으로 변환됩니다.

# 내부적으로는 이런 복잡한 proot 명령으로 변환됨
proot \
  --rootfs=~/.local/share/proot-distro/installed-rootfs/ubuntu \
  --bind=/dev --bind=/proc --bind=/sys \
  --bind=/sdcard \
  --change-id=0:0 \
  --sysvipc \
  --link2symlink \
  -w /root \
  /usr/bin/env -i HOME=/root ... /bin/bash

이제 code server 설정합니다.

mkdir -p ~/.config/code-server
cat > ~/.config/code-server/config.yaml << 'EOF'
bind-addr: 127.0.0.1:8080
auth: password
password: mypassword
cert: false
EOF

Android Tab에서 VSCode

자 이제 준비가 되었고, vscode 사용하는 방법은 2가지가 있다. ubuntu 용 vscode 를 직접 x11 을 통해 실행하는 방법이 있고, android browser에서 code server 로 연결하는 방법이 있습니다.

x11로 띄우는 것이 리눅스와 동일한 방식이기는 한데, 그다지 편하지 않았다. 브라우저로 사용하는 방식을 택했습다.

절차는 termux app 을 통해 code server 실행

# termux shell
proot-distro login user

# ubuntu shell
code-server &

이제 브라우저에서 localhost:8080 로 해서 접속하고, native app 처럼 보일 수 있게, 아예 home screen 에 추가했습다.

vscode extension 도 다 설치되어, claude code plugin 설치해서 개발하는 폼을 잡아본 것으로 마무리합니다.

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
8.35 -0.01

2026.07.10 KEB 하나은행 고시회차 900회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!