집에 새로 맞춘 우분투 PC를 메인 작업 환경으로 쓰려고 하는데 노트북은 맥북 에어다. 책상에서 같은 모니터를 쓰면 좋겠지만 자리를 자주 옮기다 보니, 맥북에서 iTerm2로 우분투에 SSH 접속하는 게 제일 편했다. ssh dohyun@<리눅스IP>로 접속까지는 잘 됐는데, 두 가지가 계속 거슬렸다.
하나는 우분투 쪽에서 한글이 들어간 파일명이나 메시지가 표시될 때 폭이 너무 넓게 잡혀서 줄이 밀려 보이는 문제였다. 한글파일.txt가 한 글 파 일 . t x t처럼 사이가 벌어진 느낌으로 보였다. 다른 하나는 우분투 기본 bash 프롬프트가 너무 단조로워서 pwd도 매번 쳐야 하는 게 불편했다는 거였다.
처음엔 우분투 쪽 로케일이 잘못된 줄 알았다. locale을 쳐보니 ko_KR.UTF-8로 잘 잡혀 있었고, 폰트 문제도 아니었다. 한글 자체는 잘 보였고, 다만 한 글자가 차지하는 셀 폭이 두 칸이 아니라 그 이상처럼 렌더링됐다.
찾아보니 iTerm2의 "ambiguous-width" 설정 때문이었다. 유니코드 명세상 어떤 문자(그리스 문자나 일부 기호)는 폭이 모호하게 정의돼 있어서, 터미널이 그걸 1칸으로 그릴지 2칸으로 그릴지 선택할 수 있다. iTerm2는 기본적으로 이걸 double-width로 그리게 돼 있는데, CJK 환경에서는 이게 한글과 충돌해서 폭 계산이 꼬이는 것 같았다.
iTerm2 → Settings → Profiles → Text에서 "Treat ambiguous-width characters as double-width" 체크를 해제하니 바로 해결됐다. 같은 메뉴 옆에 있는 "Use Unicode version 9+ widths"는 켜두는 게 좋다. 이모지나 최신 유니코드 글리프의 폭 계산을 더 정확하게 해준다.
여기서 하나 더 알아둔 게 있다. macOS는 한글 파일명을 NFD(분리형, ㅎ+ㅏ+ㄴ+ㄱ+ㅡ+ㄹ)로 저장하고 Linux는 NFC(조합형, 한글)를 쓰는데, 이 때문에 어떤 상황에서는 한글이 자모 단위로 쪼개져 보이는 일이 생긴다고 한다. iTerm2의 "Unicode normalization form" 옵션은 기본값(None)으로 두는 게 무난했다. 굳이 NFC로 강제했다가 다른 문제가 생길 수 있어서 건드리지 않았다.
기본 bash가 너무 밋밋해서 zsh로 갈아탔다.
sudo apt install -y zsh
chsh -s $(which zsh)
chsh로 기본 셸을 바꾸고 로그아웃 후 다시 로그인했다. 이어서 oh-my-zsh를 설치했다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
설치가 끝나면 ~/.zshrc가 자동으로 생기고, 여기서 ZSH_THEME 항목을 바꾸면 테마가 바뀐다. 처음엔 agnoster 테마를 골랐다.
ZSH_THEME="agnoster"
source ~/.zshrc 하고 새 터미널을 띄웠는데 화살표 모양 글리프가 두부(□)로 떴다. 여기서 30분을 날렸다.
agnoster 테마는 Powerline 글리프(화살표 모양)를 쓰는데, 이건 Powerline 패치가 들어간 폰트가 있어야 그려진다. 일반 폰트에는 그 글리프가 없어서 두부로 표시된 거였다.
가장 쉬운 해결책은 Nerd Fonts(Powerline과 아이콘 글리프를 다 박아넣은 패치판) 폰트를 쓰는 거였다.
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/Meslo.zip
unzip Meslo.zip
fc-cache -fv
그런데 이걸 우분투에 깔아놓고 나서야 깨달았다. SSH 클라이언트는 맥북의 iTerm2니까, 폰트는 우분투가 아니라 iTerm2 쪽에 깔아야 했다. 터미널에서 글자를 실제로 그리는 건 클라이언트 쪽이다. 맥에서는 이렇게 설치했다.
brew tap homebrew/cask-fonts
brew install --cask font-meslo-lg-nerd-font
iTerm2 → Settings → Profiles → Text → Font에서 MesloLGS NF로 폰트를 바꾸니 화살표가 살아났다.
색감도 바꾸고 싶어서 Dracula 컬러 스킴을 깔았다. iTerm2용 컬러 프리셋은 draculatheme.com/iterm에서 받을 수 있다.
git clone https://github.com/dracula/iterm.git ~/dracula-iterm
iTerm2 → Settings → Profiles → Colors → Color Presets → Import에서 Dracula.itermcolors를 선택하고, 다시 Color Presets에서 Dracula를 적용하면 된다.
마지막으로 하나 더 손봤다. agnoster 테마는 기본적으로 user@hostname을 항상 표시하는데, 노트북에서 SSH로 들어가면 이게 길어져서 가독성이 떨어졌다. ~/.zshrc에 아래 한 줄을 추가하면 해결된다.
DEFAULT_USER="dohyun"
agnoster는 현재 사용자가 DEFAULT_USER와 같으면 user@host 부분을 그리지 않는다. SSH로 접속한 경우엔 자동으로 다시 표시되기 때문에 원격/로컬 구분도 알아서 된다.
돌아보면 원격 터미널의 한글 폭 문제는 거의 다 클라이언트 쪽 ambiguous-width 설정 때문이었고, Powerline 화살표가 두부로 뜨는 건 100% 폰트 문제였다. 둘 다 iTerm2 설정 몇 번 만지는 걸로 끝났다.
참고한 자료:
SSH에서 한글이 깨지는 문제와 Powerline 기호가 네모로 보이는 문제는 겉보기만 비슷하다. 전자는 로컬·원격의 UTF-8 로케일과 터미널 환경변수를 보고, 후자는 실제로 선택한 글꼴에 필요한 glyph가 들어 있는지 봐야 한다.
# 로컬과 원격 양쪽에서 비교
locale
printf '%s
' "$LANG" "$LC_ALL"
# 실제 셸 확인
printf '%s
' "$SHELL"
ps -p $$ -o comm=
로케일이 정상인데 프롬프트 아이콘만 깨지면 인코딩을 다시 설치할 문제가 아니다. iTerm2 프로필의 Normal/Non-ASCII Font와 zsh 테마가 요구하는 글꼴을 맞춘다. 반대로 파일명과 명령 출력의 한글까지 깨지면 원격 서버 로케일부터 확인한다.
| Parsec 원격 PC에서 npm 없을 때 Node.js 설치하고 재부팅 없이 파섹 유지하기 (0) | 2026.07.26 |
|---|---|
| Parsec으로 맥→윈도우 원격접속할 때 Cmd+W 누르면 파섹이 꺼지는 문제 (0) | 2026.07.26 |
| 새 PC에 Windows + Ubuntu 듀얼부팅 처음 깔아보기 (Rufus, BIOS, 미할당 256GB) (0) | 2026.07.22 |
| Kali Linux에 fcitx5로 한글 입력기 잡기 + 한영 전환 키 매핑 (0) | 2026.07.22 |
| Ubuntu 24.04에 카카오톡 설치하다 결국 포기한 이유 (Bottles + Wine + fcitx5) (0) | 2026.07.22 |