안드로이드

Termux X11 한글 입력 설정하기 (벼루 입력기)

ㅋㅋ잠자 2024. 6. 26. 00:30
반응형

안녕하십니까? 도정진입니다.

 

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 까지 오게 되었네요.

 

추후에는 사용하면 편리한 프로그램들을 소개하도록 하겠습니다.

 

감사합니다.

 

반응형