WSL2 에 Obsidian Linux 빌드 올리기 — FUSE·AppRun·한글 폰트 세 함정

Windows Obsidian 으로 WSL 폴더를 열면 9P 오버헤드와 watcher 불안정을 겪는다. WSLg 로 Linux 빌드를 띄우면 해결되지만 AppImage 추출·바이너리 직접 실행·CJK 폰트 링크가 필요하다.

노트 vault 를 WSL2 안에 두고 Windows Obsidian 으로 열고 있었다. \\wsl.localhost\Ubuntu\... 경로를 vault 로 지정하면 일단 열리기는 한다. 문제는 그다음이다.

  • 9P 프로토콜을 거치므로 vault 가 커질수록 느려진다
  • file watcher 가 불안정하다. WSL 셸에서 파일을 고쳐도 Obsidian 이 바로 반영하지 못한다
  • .obsidian/workspace.json 처럼 자주 쓰이는 파일에서 lock 충돌이 난다

WSLg 로 Linux 빌드 Obsidian 창을 Windows 데스크톱에 띄우면 이 셋이 한 번에 사라진다. 파일 접근이 전부 Linux 쪽에서 끝나기 때문이다. 대신 설치 과정에서 함정을 세 개 밟는다.

환경은 Ubuntu 26.04 on WSL2 (Linux 6.6) + Windows 11 이고, WSLg 가 살아 있어야 한다. DISPLAY=:0 이 설정돼 있고 /mnt/wslg 가 존재하면 준비된 상태다.

함정 ① AppImage 가 FUSE 를 못 찾는다

Ubuntu 기본 WSL 이미지에는 libfuse.so.2 가 없다. 받은 AppImage 를 그대로 실행하면 이렇게 죽는다.

dlopen(): error loading libfuse.so.2

AppImages require FUSE to run.

FUSE 를 설치해도 되지만 sudo 가 필요하다. AppImage 자체가 --appimage-extract 를 지원하므로 압축을 풀어서 일반 디렉터리로 실행하면 권한 없이 끝난다.

mkdir -p ~/apps && cd ~/apps
curl -L -o Obsidian.AppImage \
  https://github.com/obsidianmd/obsidian-releases/releases/download/v1.12.7/Obsidian-1.12.7.AppImage
chmod +x Obsidian.AppImage
./Obsidian.AppImage --appimage-extract
mv squashfs-root obsidian

버전 URL 은 obsidian-releases 의 latest 에서 확인한다. 원본 AppImage 는 지우지 말고 남겨두면 나중에 다시 추출할 때 편하다.

함정 ② AppRun 에 vault 경로를 넘기면 깨진다

추출된 디렉터리에는 AppRun 스크립트가 있다. 보통은 이걸 실행하는 게 맞는데, 이 스크립트가 첫 positional 인자를 디렉터리 탐색용으로 쓴다.

while [[ "$path" != "" && ! -e "$path/$1" ]]; do
  path=${path%/*}
done

vault 경로를 인자로 주면 $path/$1 조합이 성립하지 않는 경로를 만들어내면서 이런 에러가 난다.

/obsidian: No such file or directory

AppRun 을 우회하고 안에 있는 바이너리를 직접 실행하면 된다. WSL 의 Electron 앱은 --no-sandbox 가 필요하다.

nohup ~/apps/obsidian/obsidian --no-sandbox > /tmp/obsidian.log 2>&1 &

vault 는 인자로 넘기지 않는다. 첫 실행 때 vault picker 가 뜨므로 거기서 Open folder as vault 를 눌러 WSL 안의 노트 디렉터리를 고르면, 그다음부터는 기억한다.

함정 ③ 한글이 □ 로 보인다

창은 떴는데 한글이 네모나 깨진 글리프로 나온다. Linux 쪽 fontconfig 에 CJK 폰트가 하나도 없기 때문이다.

$ fc-list :lang=ko
# 빈 출력 → 한글 폰트 없음

새로 설치할 필요는 없다. Windows 가 이미 갖고 있는 폰트를 사용자 폰트 디렉터리로 심볼릭 링크하면 sudo 없이 해결된다.

mkdir -p ~/.local/share/fonts/windows
for f in malgun.ttf malgunbd.ttf malgunsl.ttf gulim.ttc batang.ttc; do
  ln -sf "/mnt/c/Windows/Fonts/$f" ~/.local/share/fonts/windows/
done
fc-cache -fv

확인하면 이번엔 목록이 나온다.

$ fc-list :lang=ko
# Malgun Gothic, Dotum, Batang, Gungsuh ...

Obsidian 을 반드시 재시작해야 한다. 실행 중인 프로세스는 fontconfig 캐시를 다시 읽지 않는다.

pkill -f 'apps/obsidian/obsidian'
nohup ~/apps/obsidian/obsidian --no-sandbox > /tmp/obsidian.log 2>&1 &

폰트가 잡혔는데도 특정 화면에서 못생기게 나온다면 Settings → Appearance → Font 에 Malgun Gothic 이나 Dotum 을 직접 적는다. CSS snippet 으로도 된다.

body { font-family: "Malgun Gothic", sans-serif; }

로그에 뜨지만 무시해도 되는 것

첫 실행 로그에 빨간 줄이 여럿 뜬다. 셋은 동작에 영향이 없다.

메시지 실제 의미
[ERROR:viz_main_impl.cc:189] Exiting GPU process due to errors during initialization WSLg 가 소프트웨어 렌더링으로 폴백. 정상
LaunchProcess: failed to execvp: xdg-settings 기본 브라우저 등록 시도 실패. 기능 영향 없음
ENOENT: ... obsidian.json 첫 실행이라 설정 파일이 아직 없음. 자동 생성된다

남는 문제 — 한글 입력

폰트 표시와 입력은 별개다. WSLg 는 Windows IME 를 자동으로 패스스루하지 않는다. Linux Obsidian 창 안에서 한글을 타이핑하려면 fcitx5 + fcitx5-hangul 같은 IME 를 따로 설치해야 하고, 이건 sudo 가 필요하다.

나는 아직 안 깔았다. 긴 한글 입력은 다른 에디터에서 하고 붙여넣는 식으로 쓰고 있는데, vault 를 읽고 링크를 따라다니는 용도가 대부분이라 아직 불편하지 않다. 붙여넣기가 잦다면 WSL2 → Windows 클립보드 한글 깨짐 쪽도 같이 보면 된다.

정리

세 함정은 전부 “Linux 데스크톱 앱을 데스크톱 없는 환경에 올린 대가”다. FUSE 가 없고, 런처 스크립트가 데스크톱 관례를 가정하고, 폰트 세트가 비어 있다. 다행히 셋 다 sudo 없이 우회된다. 그 대가로 vault 접근 속도와 watcher 를 되찾는다.