Termux X11 한글 입력 설정하기 (벼루 입력기)
안녕하십니까? 도정진입니다.
termux 를 통해 삼성 Dex에서 리눅스를 사용하고 있습니다.
termux x11 앱을 통해 간단한 작업은 가능한 환경이 구축됩니다.
이때 한글 입력이 안되는 부분이 있어 아래와 같이 설정하시면 해결이 가능합니다.
1. com.termux.x11 에 WRITE_SECURE_SETTINGS 퍼미션 주기
shizuku 의 rish를 사용해도 되고 USB adb 를 사용해도 됩니다.
shizuku를 사용하여 진행해보겠습니다.
shizuku를 사용하면 아래 메뉴가 있습니다.
해당 파일을 termux home 디렉터리로 옮겨 아래와 같이 실행합니다.
~ $ RISH_APPLICATION_ID=com.termux ./rish dm3q:/ $ pm grant com.termux.x11 android.permission.WRITE_SECURE_SETTINGS dm3q:/ $ exit |
2. termux-x11 에서 설정
Preference 를 실행합니다.
아래에 Prefer scancodes when possible에 체크하고 Enable Accessibility service for intercepting system shorcuts automatically 에 체크합니다.
3. proot-distro 에서 x11 실행
com.termux.x11 은 아래 프로젝트입니다.
https://github.com/termux/termux-x11
내부적으로는 wayland 프로토콜로 디스플레이를 하고 있으며 외부 프로토콜로는 x11 프로토콜을 사용합니다.
내부에 xwayland로 통신이 되게 구현이 되어 있을 것 같습니다.
저는 현재 아래 명령으로 간단하게 디스플레이 환경을 실행합니다.
#!/bin/sh # Termux-X11 start am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity XDG_RUNTIME_DIR=${TMPDIR} termux-x11 :0 -ac & sleep 1 pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1 > /dev/null 2>&1 & sleep 1 proot-distro login --shared-tmp --no-sysvipc -- bash -c "export DISPLAY=:0 PULSE_SERVER=tcp:127.0.0.1:4713; dbus-launch --exit-with-session xfce4-session" |
4. xev / xinput 로 한글키 한자키 테스트
테스트시, 키코드가 8번으로 나오면 2번 섹션의 설정이 잘못된 것입니다.
root@localhost:~# xev # 한글키 KeyPress event, serial 37, synthetic NO, window 0x3800001, root 0x511, subw 0x0, time 383556162, (253,141), root:(1124,588), state 0x0, keycode 130 (keysym 0xff31, Hangul), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x3800001, root 0x511, subw 0x0, time 383556271, (253,141), root:(1124,588), state 0x0, keycode 130 (keysym 0xff31, Hangul), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False # 한자키 KeyPress event, serial 37, synthetic NO, window 0x3800001, root 0x511, subw 0x0, time 383556776, (253,141), root:(1124,588), state 0x0, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 37, synthetic NO, window 0x3800001, root 0x511, subw 0x0, time 383556903, (253,141), root:(1124,588), state 0x0, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False |
xinput 으로도 테스트 해보겠습니다.
root@localhost:~# xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Lorie mouse id=6 [slave pointer (2)] ⎜ ↳ Lorie touch id=7 [slave pointer (2)] ⎜ ↳ Lorie pen id=9 [slave pointer (2)] ⎜ ↳ Lorie eraser id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Lorie keyboard id=8 [slave keyboard (3)] |
여기서 id 8번을 테스트 해야합니다.
root@localhost:~# xinput test 8 key release 36 key press 130 key release 130 key press 131 key release 131 |
5. 벼루 입력기 설치
아래 명령으로 설치합니다.
root@localhost:~# apt install uim uim-byeoru |
그리고 termux 의 경우 환경이 굉장히 제한적이라 계정 자체에 환경변수를 설정하는게 편합니다.
root@localhost:~# cat ~/.bashrc export XIM=uim export XMODIFIERS=@im=uim export UIM_CANDWIN_PROG=uim-candwin-gtk export GTK_IM_MODULE=uim export QT_IM_MODULE=uim |
그리고 uim-xim 프로세스를 구동해야하는데 이 부분은 xfce4 startup 에 반영합니다.
그리고 키보드 설정을 합니다.
root@localhost:~# uim-pref-gtk |
그럼 아래 화면이 나옵니다.
Global key bindings 1로 이동합니다.
아래 Global on / off 단축키를 비웁니다.
다음으로 Byeoru key bindings 1 로 이동합니다.
한글키를 on / off 에 설정해줍니다.
이후 세션을 다시 시작해보면 한글키로 한글/영어 변환이 잘 됨을 확인할 수 있습니다.
6. 환경 및 마치며
termux 에서 termux-x11 app 을 통해 실제 리눅스를 사용하는 듯한 환경을 만들어낼 수 있습니다.
gpu를 활용하여 가속을 하기도 하는데 간단한 작업을 하기에는 llvmpipe로도 충분히 사용할만합니다.
그리고 proot 를 사용하지 않고 termux native 로도 xfce4 환경을 구동할 수 있으나, 실제 사용해본 결과로는 큰 차이가 없어서 proot에 debian12 + xfce4 를 통해 사용중에 있습니다.
처음에는 terminal 앱이 dex에서 사용하는데 마음에 들지 않아 termux 까지 오게 되었네요.
추후에는 사용하면 편리한 프로그램들을 소개하도록 하겠습니다.
감사합니다.