Obsidian - docker 한글 깨짐 방지

이전부터 Obsidian을 웹브라우저에서 사용하는 docker에 많이 눈독들였었다.

하지만 매번 한글 입력 시, 깨지거나 씹히는 현상으로 인해 포기하곤 했다.

ChatGPT의 분석


왜 linuxserver/obsidian에서 한글이 안 되는가 (팩트)

이 이미지는 내부적으로 다음 구조입니다.

  • Electron (Obsidian)
  • X11
  • KasmVNC (브라우저 렌더링)
  • 가상 키보드 이벤트 → Electron으로 전달

여기서 문제는:

  • 한글은 “조합형 입력”
  • 조합 중간 상태가
    • VNC
    • X11
    • Electron
      을 거치면서 이벤트가 중복/유실됨

그래서 나타나는 증상이:

  • 글자 씹힘
  • 이전 글자 삭제
  • 입력 멈춤
  • 커서 튐

이건:

  • ibus 문제 ❌
  • fcitx 문제 ❌
  • locale 문제 ❌
  • Dockerfile 문제 ❌

Electron + VNC 구조 한계입니다.


Chat GPT의 힘을 빌어 다시 한 번 도전해본다.

먼저 시놀로지의 /volume1/docker/obsidian/ 폴더를 생성하면 소유자와 권한을 설정해줘야 한다.

Obsidian Docker 이미지는 Linux 위에서 돌아서 접근하는 계정의 UID, GID를 알아야 한다.

SSH를 통해 소유자의 시놀로지 계정으로 접속하여 UID, GID를 확인하고,

해당 UID, GID로 Obsidian 폴더의 소유자, 권한도 설정해준다.

ssh

$ id 시놀로지 계정
uid=1234(계정) gid=123(그룹) groups=456(그룹),789(administrators)

$ sudo chown -R 1234:123 /volume1/docker/obsidian/
Password:
$ sudo chmod -R 755 /volume1/docker/obsidian/

한글 언어의 장벽을 깨부수기 위한 야매 방법이 필요하다.

Docker 컨테이너 생성 시 LANG과 LANGUAGE만으로는 부족하다.

iBus/GTK로 충분히 끊기고 씹히는 경험을 했기 때문에 다른 방식을 선택해야 한다.

바로, GTK/Qt IME 방식을 완전히 비활성화하고 XIM 사용을 강제하는 방법이다.

먼저 Dockerfile을 작성하여 컨테이너 빌드 시 한글 자동 사용을 위한 세팅하게 한다.

Dockerfile

(/volume1/docker/obsidian/Dockerfile)

FROM lscr.io/linuxserver/obsidian:latest

RUN apt-get update && \
    apt-get install -y \
      locales \
      fonts-nanum \
      fonts-noto-cjk && \
    locale-gen ko_KR.UTF-8 && \
    update-locale LANG=ko_KR.UTF-8 && \
    fc-cache -fv && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

docker-compose 파일을 작성하여 XIM 강제 설정을 해주고 빌드한다.

compose.yaml

(/volume1/docker/obsidian/compose.yaml)

version: "3.9"

services:
  obsidian:
    build:
      context: .
      dockerfile: Dockerfile
    image: obsidian-kor:latest
    container_name: obsidian
    restart: unless-stopped
    user: "0:0"
    environment:
      - PUID=1234(시놀로지 계정 UID)
      - PGID=123(시놀로지 계정 GID)
      - PASSWORD=암호
      - TZ=Asia/Seoul
      - LANG=ko_KR.UTF-8
      - LANGUAGE=ko_KR:ko
      - LC_ALL=ko_KR.UTF-8
      - GTK_IM_MODULE=xim
      - QT_IM_MODULE=xim
      - XMODIFIERS=@im=none
    volumes:
      - /volume1/docker/obsidian/config:/config
      - /volume1/docker/obsidian/vault:/vault
    ports:
      - "시놀로지 Port:3000"
      - "시놀로지 Port:3001"
    shm_size: "2gb"

linuxserver obsidian은 ssl 및 websocket 환경에서만 접근 가능하므로 웹서비스 환경을 잘 설정해준다.

타이핑은 이전보다 확실히 낫긴 한데 편한 건 아니다.

빠른 타자 시 시놀로지의 부족한 사양에 무리가 간다.

렉이 있는 것은 타이핑 때보다 마우스를 통해 알 수 있었다.

무엇보다.... 계정관리가 따로 없는게 보안이 허술하다 😭

(linuxserver의 기본 계정은 abc 이다)

root@cyberpunk:~#