
강의 Termux 리눅스 강좌 1부 : 리눅스 컨테이너 설치 및 GUI 구동하기
- 흡혈귀왕
- 조회 수 11658
- 2023.07.22. 02:29
6월 중순부터 Termux에 리눅스를 설치 후
한달하고 반 정도 지났습니다.
리눅스에서 이것저것 테스트하고 최적의 환경을 구축하는데 여러 시행착오를 거친 끝에
드디어 미코 회원님들이 사용하실 수 있는 강좌를 올릴 수 있게 되었습니다.
좀 더 빨리 올리지 못해서 죄송하단 말씀드립니다. (꾸벅)
Q. Termux는 무엇인가?
A. 안드로이드에서 사용 가능한 리눅스 터미널 에뮬레이터입니다.
Q. 이걸로 무엇을 할 수 있는가?
A. proot-distro를 통해 안드로이드 환경에서 ARM64 리눅스 설치가 가능합니다.
Q. 리눅스 구동은 어떤 방식인가? 가상화? 에뮬레이터?
A. Termux에서 proot-distro를 통한 리눅스 설치는 컨테이너 방식이라 호스트 커널을 서로 공유합니다.
하이퍼바이저 같은 가상화보다 진보된 구동 방식이므로 리눅스 환경에서 네이티브급 CPU 성능을
내줍니다.
Q. 디바이스 제한이 있는가?
A. 현존 모든 안드로이드 디바이스에서 구동 가능합니다. 다만 CPU 성능에 따른 성능 차이는 분명히
존재하기에 적당한 사용성을 보장하는 최소 사양은 '스냅드래곤865'정도라고 생각합니다.
(그 이하로 간다면 '엑시노스9825', '스냅드래곤855'가 마지노선?)
Q. 그외 참고 사항이 있는가?
A. 태블릿이 아닌 폰에 설치해서 사용할 경우 DeX모드 같이 외부 디스플레이 출력을 지원하는 폰에서
사용하는 것을 권장합니다.
강좌에서 사용된 디바이이스는 삼성 갤럭시S20(SM-G981N)로 정리하였습니다.
역시 원할한 진행을 위해 DeX모드에서 따라하시는 것을 추천드립니다.
강좌는 총 4부로 정리될 예정입니다.
https://drive.google.com/file/d/1VNVaTYk6Yp_s1Q6-_KrSxTYc8_HAD7Sf/view?usp=drive_link
우선 Termux APK를 다운받습니다.
Termux APK를 디바이스에 설치합니다.
설치가 완료되면 Termux를 실행해 주세요.
이게 Termux의 터미널 화면입니다.
설명을 순서대로 잘 따라하시면 리눅스 구동까지 전혀 문제 없을겁니다!
복사한 내용을 붙여넣기 하려면 화면을 길게 탭하거나 길게 마우스 클릭 시 텍스트를 복사 및 붙여넣기
할 수 있습니다.
$ pkg update -y && pkg upgrade -y
패키지 업데이트 중에 중간중간 이런 상태가 되면
y키 -> Enter키를 눌러서 넘어가시면 됩니다.
$ termux-setup-storage
저장소 접근 권한을 위해 위의 명령어를 입력 후 Enter를 눌러주세요.
Termux 저장소 액세스 허용을 선택합니다.
$ pkg install proot-distro pulseaudio vim
vim, pulseaudio, proot-distro 설치를 위해 위의 패키지 설치 명령어를 입력해줍니다.
설치가 완료되면 PulseAudio 서버를 시작하기 위해 스크립트 작성이 필요합니다.
$ nano ~/.profile
위의 명령어를 입력해줍니다.
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
.profile에 위의 스크립트를 입력해줍니다.
입력 후 저장을 위해 Ctrl+X 키를 누르고 Y를 눌러서 저장해줍니다.
$ proot-distro install ubuntu
우분투 컨테이너 설치를 위해 위의 명령어를 입력해줍니다.
※ 해당 강좌는 우분투 기준으로 되어있지만 debian이나 archlinux, fedora 등등도 설치 가능합니다.
우분투 설치가 진행됩니다.
설치가 완료되었습니다.
생각보다 빨리되었죠?
그 이유는 리눅스 컨테이너만 설치되어서 그렇습니다.
GUI 구동을 위한 패키지 등은 별도로 설치해줘야 합니다.
$ proot-distro login ubuntu --user root --shared-tmp --no-sysvipc
우분투 로그인을 위해 위의 명령어를 입력해주세요.
# apt update -y && apt upgrade -y
우분투 apt repo와 패키지 업데이트를 위해 위의 명령어를 입력해주세요.
# apt install -y dialog apt-utils
debconf 오류 해결을 위해 위의 명령어를 입력 후 해당 패키지들을 설치해줍니다.
# apt install -y psmisc htop software-properties-common wget mesa-utils dbus-x11 xfce4 xfce4-terminal xfce4-goodies sudo nano vim git tzdata
XFCE4 관련 패키지와 기타 패키지 설치를 위해 위의 명령어를 입력해주세요.
패키지 다운로드 및 설치가 진행됩니다.
최소 20분이상 소요됩니다.
설치가 어느정도 진행되면 시간을 설정하는 화면이 나옵니다.
Asia -> Seoul을 선택해주세요.
설치가 어느정도 진행되면 키보드 선택 화면이 나옵니다.
Korean -> Korean 순으로 선택해주세요.
※ 설치 과정 중 시간 설정과 키보드 설정 순서가 다르게 나올 수 있으니 참고 부탁드립니다.
시간이 어느정도 지나면 패키지 설치가 모두 완료됩니다.
다음은 인터넷 브라우저 설치를 진행합니다.
우분투 기본 저장소에 있는 파이어폭스는 snap이 작동하지 않아서 사용이 불가능합니다.
PPA를 추가해서 Firefox-esr을 별도 설치해줘야합니다.
# add-apt-repository ppa:mozillateam/ppa
위의 명령어를 입력해주세요.
PPA 검증이 끝나면 추가를 위해 Enter를 눌러주세요.
# apt update
apt repo 업데이트를 위해 위의 명령어를 입력해주세요.
# apt install firefox-esr
firefox-esr 설치를 위해 위의 명령어를 입력해주세요.
# passwd
root 계정 비밀번호 설정을 위해 위의 명령어를 입력해주세요.
비밀번호를 설정해줍니다.
※ 입력한 비밀번호는 "***"처럼 마스킹되어서 표시되지 않고 아예 안보입니다.
# groupadd storage
# groupadd wheel
# groupadd video
그룹 추가 설정을 위해 위의 명령어를 차례로 입력해주세요.
# useradd -m -g users -G wheel,audio,video,storage -s /bin/bash user
su 계정 생성을 위해 위의 명령어를 입력해주세요.
저는 임의로 user로 지정했습니다.
원하는 유저 ID를 소문자 영문+숫자 포함으로 입력해주심 됩니다.
# passwd user
su 계정 비밀번호 설정을 위해 위의 명령어를 입력해주세요.
user에 설정하신 ID를 입력하시면 됩니다.
비밀번호를 설정해줍니다.
# nano /etc/sudoers
su 계정 권한 설정을 위해 위의 명령어를 입력해주세요.
하단으로 스크롤해서 %sudo라고 되어있는 줄을 찾습니다.
%sudo대신 생성한 su 계정을 입력 후 Ctrl+X키로 저장해줍니다.
# su user
su 계정 로그인을 위해 위의 명령어를 입력해줍니다.
$ cd
최상위 카테고리 이동을 위해 명령어를 입력해줍니다.
$ nano ~/.profile
우분투에서 Pulseaudio 서버 시작을 위해 위의 명령어를 입력해주세요.
export PULSE_SERVER=127.0.0.1 && pulseaudio --start --disable-shm=1 --exit-idle-time=-1
해당 위치에 위의 변수를 추가 후 Ctrl+X키로 저장해줍니다.
$ sudo apt install fcitx fcitx-hangul fonts-noto-cjk locales language-pack-ko
우분투에서 한글 언어 및 한글 입력 설정을 위해 위의 명령어를 입력해주세요.
sudo로 명령어 입력 시 설정한 su 계정 비밀번호를 입력해줍니다.
그러면 패키지 설치가 진행됩니다.
$ sudo apt install fonts-nanum* fonts-roboto
한글 폰트 설치를 위해 위의 명령어를 입력해주세요.
$ sudo nano /etc/profile.d/fcitx.sh
fcitx 초기화 파일 생성을 위해 위의 명령어를 입력해주세요.
#!/bin/bash
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
#optional
fcitx-autostart &>/dev/null
위의 내용을 입력 후 Ctrl+X키로 저장해줍니다.
$ sudo nano /etc/default/locale
한글 언어 설정을 위해 위의 명령어를 입력해주세요.
LANG=ko_KR.UTF-8
LANGUAGE=ko_KR.UTF-8
위의 내용을 입력 후 Ctrl+X키로 저장해줍니다.
$ nano startx.sh
GUI 실행 스크립트 생성을 위해 위의 명령어를 입력해주세요.
export DISPLAY=:0
# XFCE4-SESSION
dbus-launch --exit-with-session startxfce4 &
위의 내용을 입력 후 Ctrl+X키로 저장해줍니다.
$ chmod +x startx.sh
스크립트가 실행 가능하도록 위의 명령어를 입력해줍니다.
$ exit
# exit
위 명령어를 차례로 입력해서 우분투를 종료해주세요.
$ clear
위 명령어를 입력해서 터미널을 깔끔하게 만들어줍니다.
https://drive.google.com/file/d/1whG3mX3TrooWgdJYEW07NLrwYAY4LQmO/view?usp=sharing
Termux-x11.zip을 다운로드 합니다.
zip 파일 안에 있는 두 APK를 설치해줏세요.
$ pkg install x11-repo
위 명령어를 입력해서 x11repo를 추가해줍니다.
$ pkg install xwayland xorg-server-xvfb
리눅스 GUI 구동을 위해 위의 명령어를 입력 후 두 패키지 설치를 진행합니다.
$ dpkg -i storage/shared/Download/termux-x11/termux-x11*.deb
zip 파일에 포함되어있는 termux-x11-nightly.deb 설치를 위해 위의 명령어를 입력해주세요.
※ termux-x11-nightly deb패키지가 디바이스의 다운로드 폴더 -> termux-x11 폴더에 있다는 전제입니다.
설치가 완료된 화면입니다.
$ nano ~/.termux/termux.properties
위의 명령어를 입력해주세요.
allow-external-apps = true의 앞에 있는 주석처리를 제거 후
Ctrl+X키로 저장해주세요.
리눅스 GUI 구동을 위한 준비가 모두 끝났습니다.
$ XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac &
$ proot-distro login ubuntu --user 유저id --shared-tmp --no-sysvipc
위의 명령어를 차례로 입력해주세요.
유저id에 생성하신 su 계정을 입력하시면 됩니다.
이런 화면이 나오면 성공한겁니다.
Termux-x11을 실행해주세요.
짜잔! 우분투 XFCE4-SESSION이 구동되었습니다!
근데 하단에 키보드도 보이고 전체 화면 시 완전 풀화면이 되지 않는 문제가 있습니다.
Termux-x11의 아이콘을 길게 탭하거나 마우스 우클릭 후
Preferences를 선택합니다.
PIP Mode
: Termux-x11을 PIP 모드로 실행합니다. 폰보다는 갤럭시탭S 시리즈처럼 태블릿에 쓰기 좋습니다.
(선택사항)
Fullscreen on device display
: 화면을 최대 크기로하면 타이틀바 없이 꽉찬화면으로 만들어줍니다. 무조건 ON 해주세요.
Show additional keyboard
: 화면 하단의 컨트롤 UI를 표시하는 옵션입니다. 하드웨어 키보드 연결 사용이 전제이니 무조건 OFF로
해주세요.
Intercept system shortcuts
: 키보드 Alt+Tab 같은 단축키가 안드로이드와 간섭하지 않게 하는 옵션입니다. 무조건 ON으로 해주세요.
Capture external mouse when possible
: 상단 영역과 하단 영역으로 마우스를 이동하면 안드로이드의 네비게이션이 노출되지 않게하는 옵션
입니다. 리눅스에 집중하고 싶은 회원님들은 ON 하시는걸 추천드리고 안드로이드와 자유롭게 전환
하는것을 고려하시면 그냥 OFF로 놓는걸 추천드립니다.
Show additional keyboard 옵션을 꺼주니 하단 컨트롤 UI가 드디어 안보입니다.
깔끔하네요.
처음 리눅스 GUI를 구동하면 전원관리 플러그인 관련 안내창이 나오는데
'제거' 버튼을 클릭해주시면 됩니다.
GUI를 구동하면 제일 먼저 해야할것이 있습니다.
프로그램 -> 설정 -> Xfce Screensaver를 실행해줍니다.
화면 보호기와 화면 잠금 사용을 OFF로 설정해줍니다.
그 이유는 버그인지 화면 잠금 상태에서 su 비밀번호를 입력해도
잠금이 풀리지 않는 이슈가 있습니다.
어차피 안드로이드의 화면 잠금이 적용되기 때문에 OFF로 해도 상관없습니다.
키보드 설정을 위해
프로그램 -> 시스템 -> Fcitx를 실행해주세요.
키보드가 실행되면 아이콘이 생성됩니다.
키보드 아이콘을 우클릭 후 Configure를 클릭합니다.
전역 설정 탭메뉴로 이동해서 Hangul을 클릭 합니다.
한영 전환할 키를 입력해줍니다.
저는 오른쪽 Alt키로 설정하였습니다.
한영 전환 키가 설정된 상태입니다.
마우스패드에서 한글 입력을 테스트해봅니다.
프로그램 -> 설정 -> 세션 및 시동을 실행해주세요.
프로그램 자동 시작 탭메뉴를 선택 후 추가 버튼을 클릭하세요.
우분투 로그인 시 fcitx 키보드가 자동 실행되게끔 위의 명령어를 입력 후
확인 버튼을 클릭해주세요.
하단 패널의 브라우저 아이콘을 우클릭 후 속성을 클릭하세요.
실행 아이콘 창에서 기존 웹 브라우저를 삭제해주세요
웹 브라우저 제거 후 추가 버튼을 클릭하세요.
파이어폭스를 선택 후 추가 버튼을 클릭하세요.
하단 패널의 웹 브라우저 아이콘이 파이어폭스로 변경되었습니다.
파이어폭스를 실행하면 UI가 영어로 나옵니다.
언어 설정을 위해 Settings으로 진입하세요.
위 과정을 거치면 파이어폭스 한국어 언어가 다운로드되고 적용됩니다.
파이어폭스 주소창에 about:config를 입력합니다.
config에서
webgl.force-enabled를 검색 후 true로 설정해주세요.
이제 파이어폭스 브라우저에서 WebGL이 작동됩니다.
WebGL 테스트를 위해 데모 사이트로 진입합니다.
아쿠아리움을 실행합니다.
프레임이 2~4FPS(...)로 엄청 낮게 나옵니다.
그 이유는 GPU 가속을 설정하지 않은 상태라서 그렇습니다.
XFCE4 정보를 보면 GPU가 llvmpipe로 표시됩니다.
해당 방식은 CPU를 사용하는 소프트웨어 가속 방식입니다.
우수한 호환성을 보여주지만 3D 가속은 사실상 불가능 수준입니다.
여기까지가 리눅스 강좌 1부 "리눅스 컨테이너 설치 및 GUI 구동하기"편 이였습니다.
다음 2부는 "GPU 가속 설정하기"로 이어집니다.
<번외>
Termux를 종료하는 방법은 다음과 같습니다.
우분투 로그아웃을 합니다.
터미널에서 exit 명령어를 연속 입력해서 Termux를 종료합니다.
Xwayland 서버가 완전히 종료되지 않았기 때문에
Termux 애플리케이션 정보에서 '강제 중지' 버튼을 선택해줍니다.
이러면 완전히 종료됩니다.
리눅스를 다시 실행할거면
Termux 실행 후
$ XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac &
$ proot-distro login ubuntu --user 유저id --shared-tmp --no-sysvipc
위의 명령어를 차례로 입력 후 Termux-x11을 실행주면 됩니다.
현재는 시작과 종료가 굉장히 번거롭지만
강좌 4부에는 위젯을 통한 원클릭 실행, 원클릭 종료를 구현 예정이니
너무 걱정하지 않으셔도 됩니다.
그럼 2부의 "GPU 가속 설정하기"로 곧 돌아오겠습니다.
토요일 중으로 2부, 3부 4부 모두 업데이트하는것이 목표입니다! :)
























안드로이드 12 이후 추가된 phantom process killer 때문입니다.
루팅을 하지 않으셨다면 pc에 연결하셔서 adb를 이용해 비활성화 해주셔야 합니다.
https://www.youtube.com/watch?v=IlBeGznxXH8






xwayland도 설치 후
$ nano ~/.termux/termux.properties
에서 주석처리도 없애신거죠?
처음보는 증상군요...
일단 Termux을 애플리케이션 정보에서 강제 중지 후
수동으로 진입하는 방법으로 시도해보시는걸 추천드립니다.
$ XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac &
$ proot-distro login ubuntu --user 유저id --shared-tmp --no-sysvipc
$ export DISPLAY=:0
$ dbus-launch --exit-with-session startxfce4 &
위 명령어들을 차례로 입력 후
Termux-X11을 실행하심됩니다

흑흑 왜 안될까요 주석도 지웠고 파일 확인해보니 명령어도 제대로 입력 했는데..
처음할때 잘못해서 캐쉬 삭제, 데이터 삭제 후 다시 처음부터 천천히 보구 다시 한건데 이러네요 ㅜㅜ
이따가 저녁에 다시 처음부터 해봐야겠습니다... 어플만 삭제 하면 되겠죠??
아 그리고 질문이 있는데 위에 명령어랑 스샷중 조금씩 다른게 있는데
apt install -y psmisc htop ~~~~~ 이 명령어 끝에 글에는 tzdata가 끝이신데 스샷에는 locales 까지 있는데 상관 없을까요??
아래 스샷은 안돼서 x11만 삭제 했다 다시 설치 했더니 XDG 명령어 치니 command 어쩌구 엄청 나오네요 다 삭제 후 다시 해봐야겠습니다. ㅜㅜ



































음. 저는 proot-distro login ubuntu --user 유저id --shared-tmp --no-sysvipc 명령어 실행하면
su: user ~~~~ --shared-tmp dose not exist or the user entry does not contain all the required fields
라는 오류가 뜨네요. --shared-tmp 옵션을 빼면 오류는 안나는데 그러면 ./startx.sh에서 오류 뜨구요.
데이터 삭제 후 처음부터 다시해봐도 똑같습니다.



회원님 여기에 OWL+OpenDrop 설치 가능한지 테스트가능하신가여?? OWL은 애플이 AirDrop에 wifi direct 대신 쓰는 애플 독자 wifi adhoc 규격인 adwl의 오픈소스 재구현이고 OpenDrop은 이를 바탕으로 에어드랍에 호환되도록 만든 프로그램인데 와이파이 드라이버 로레벨 접근이 필요해서 리눅스에서만 지원됩니다.
만약 동작한다면 GUI 서버나 GPU가속 설정 단계까지 안가도 OpenDrop을 안드로이드에 Termux + 리눅스 조합으로 이용해서 애플 디바이스랑 파일 무선공유가 가능하겠네여!!
아근데 root 권한 문제로 인하여 안될것같기도하네여.. OpenDrop 안드로이드 이식이 힘든 이유로 루팅도 필요하고 기존 안드로이드 커널 한계가 지적되긴 해서여..
Owl: https://owlink.org https://github.com/seemoo-lab/owl
OpenDrop: https://github.com/seemoo-lab/opendrop