2025-10-02

memo uim dvorak hangul issue

알겠습니다! 로마자 모드를 사용하지 않고 Dvorak 레이아웃에서 3벌식 한글 입력을 제대로 작동하도록 설정하는 데 집중하겠습니다. 이전 답변의 ~/.uim.d/ 기반 커스텀 키맵 설정이 가장 적합한 해결책입니다. 아래는 로마자 모드를 배제하고, ~/.uim.d/를 사용해 Dvorak용 3벌식 키맵을 설정하는 방법을 간결히 정리하고, 추가로 콘솔 환경(fbterm) 최적화 팁을 보강합니다. Debian 13과 uim-byeoru 기준입니다.
해결책: ~/.uim.d/로 Dvorak 3벌식 키맵 설정
1. ~/.uim.d/ 디렉토리 설정

디렉토리 생성 (없을 경우):
bashmkdir -p ~/.uim.d


2. Dvorak용 키맵 파일 생성

파일 생성: ~/.uim.d/dvorak-byeoru.scm
bashnano ~/.uim.d/dvorak-byeoru.scm

아래 내용 추가 (표준 3벌식 키맵을 Dvorak으로 변환, 초성/중성/종성 전체 포함):
scheme;;; ~/.uim.d/dvorak-byeoru.scm
;;; Dvorak 3beol layout for uim-byeoru

(require "byeoru.scm")

;; Dvorak 3beol 레이아웃 정의
(byeoru-define-layout dvorak-3beol
  ;; 초성 (Choseong)
  ("p" (choseong-giyeok . 1))    ; QWERTY 'r' → Dvorak 'p' = ㄱ
  ("f" (choseong-nieun . 1))     ; QWERTY 'e' → Dvorak 'f' = ㄴ
  ("g" (choseong-digeut . 1))    ; QWERTY 'w' → Dvorak 'g' = ㄷ
  ("c" (choseong-rieul . 1))     ; QWERTY 's' → Dvorak 'c' = ㄹ
  ("r" (choseong-mieum . 1))     ; QWERTY 'f' → Dvorak 'r' = ㅁ
  ("o" (choseong-bieup . 1))     ; QWERTY 'd' → Dvorak 'o' = ㅂ
  ("s" (choseong-siot . 1))      ; QWERTY ';' → Dvorak 's' = ㅅ
  ("u" (choseong-ieung . 1))     ; QWERTY 'u' → Dvorak 'u' = ㅇ
  ("h" (choseong-jieut . 1))     ; QWERTY 'j' → Dvorak 'h' = ㅈ
  ("t" (choseong-chieut . 1))    ; QWERTY 'k' → Dvorak 't' = ㅊ
  ("n" (choseong-kieuk . 1))     ; QWERTY 'l' → Dvorak 'n' = ㅋ
  ("e" (choseong-tieut . 1))     ; QWERTY 'i' → Dvorak 'e' = ㅌ
  ("l" (choseong-pieup . 1))     ; QWERTY 'p' → Dvorak 'l' = ㅍ
  ("b" (choseong-hieut . 1))     ; QWERTY 'n' → Dvorak 'b' = ㅎ
  ;; 복합 초성
  ("P" (choseong-ssanggiyeok . 1)) ; Shift+p = ㄲ
  ("G" (choseong-ssangdigeut . 1)) ; Shift+g = ㄸ
  ("O" (choseong-ssangbieup . 1))  ; Shift+o = ㅃ
  ("S" (choseong-ssangsiot . 1))   ; Shift+s = ㅆ
  ("H" (choseong-ssangjieut . 1))  ; Shift+h = ㅉ

  ;; 중성 (Jungseong)
  ("a" (jungseong-a . 1))        ; QWERTY 'k' → Dvorak 'a' = ㅏ
  ("o" (jungseong-ae . 1))       ; QWERTY 'l' → Dvorak 'o' = ㅐ
  ("i" (jungseong-ya . 1))       ; QWERTY 'h' → Dvorak 'i' = ㅑ
  ("j" (jungseong-yae . 1))      ; QWERTY 'g' → Dvorak 'j' = ㅒ
  ("e" (jungseong-eo . 1))       ; QWERTY 'i' → Dvorak 'e' = ㅓ
  ("u" (jungseong-e . 1))        ; QWERTY 'u' → Dvorak 'u' = ㅔ
  ("d" (jungseong-yeo . 1))      ; QWERTY 'y' → Dvorak 'd' = ㅕ
  ("k" (jungseong-ye . 1))       ; QWERTY 'v' → Dvorak 'k' = ㅖ
  ("q" (jungseong-o . 1))        ; QWERTY 'x' → Dvorak 'q' = ㅗ
  ("w" (jungseong-wa . 1))       ; QWERTY ',' → Dvorak 'w' = ㅘ
  ("v" (jungseong-wae . 1))      ; QWERTY '.' → Dvorak 'v' = ㅙ
  ("z" (jungseong-oe . 1))       ; QWERTY '/' → Dvorak 'z' = ㅚ
  (";" (jungseong-yo . 1))       ; QWERTY 'z' → Dvorak ';' = ㅛ
  ("'" (jungseong-u . 1))        ; QWERTY 'q' → Dvorak ''' = ㅜ
  ("," (jungseong-weo . 1))      ; QWERTY 'm' → Dvorak ',' = ㅝ
  ("." (jungseong-we . 1))       ; QWERTY ',' → Dvorak '.' = ㅞ
  ("/" (jungseong-wi . 1))       ; QWERTY '/' → Dvorak '/' = ㅟ
  ("y" (jungseong-yu . 1))       ; QWERTY 't' → Dvorak 'y' = ㅠ
  ("x" (jungseong-eu . 1))       ; QWERTY 'b' → Dvorak 'x' = ㅡ
  ("m" (jungseong-i . 1))        ; QWERTY 'm' → Dvorak 'm' = ㅣ

  ;; 종성 (Jongseong, 초성과 유사)
  ("p" (jongseong-giyeok . 1))   ; QWERTY 'r' → Dvorak 'p' = ㄱ
  ("f" (jongseong-nieun . 1))    ; QWERTY 'e' → Dvorak 'f' = ㄴ
  ("g" (jongseong-digeut . 1))   ; QWERTY 'w' → Dvorak 'g' = ㄷ
  ("c" (jongseong-rieul . 1))    ; QWERTY 's' → Dvorak 'c' = ㄹ
  ("r" (jongseong-mieum . 1))    ; QWERTY 'f' → Dvorak 'r' = ㅁ
  ("o" (jongseong-bieup . 1))    ; QWERTY 'd' → Dvorak 'o' = ㅂ
  ("s" (jongseong-siot . 1))     ; QWERTY ';' → Dvorak 's' = ㅅ
  ("u" (jongseong-ieung . 1))    ; QWERTY 'u' → Dvorak 'u' = ㅇ
  ("h" (jongseong-jieut . 1))    ; QWERTY 'j' → Dvorak 'h' = ㅈ
  ("t" (jongseong-chieut . 1))   ; QWERTY 'k' → Dvorak 't' = ㅊ
  ("n" (jongseong-kieuk . 1))    ; QWERTY 'l' → Dvorak 'n' = ㅋ
  ("e" (jongseong-tieut . 1))    ; QWERTY 'i' → Dvorak 'e' = ㅌ
  ("l" (jongseong-pieup . 1))    ; QWERTY 'p' → Dvorak 'l' = ㅍ
  ("b" (jongseong-hieut . 1))    ; QWERTY 'n' → Dvorak 'b' = ㅎ
  ("P" (jongseong-ssanggiyeok . 1)) ; Shift+p = ㄲ
  ("G" (jongseong-ssangdigeut . 1)) ; Shift+g = ㄸ
  ("O" (jongseong-ssangbieup . 1))  ; Shift+o = ㅃ
  ("S" (jongseong-ssangsiot . 1))   ; Shift+s = ㅆ
  ("H" (jongseong-ssangjieut . 1))  ; Shift+h = ㅉ
)

;; 기본 레이아웃을 Dvorak 3beol로 설정
(set! byeoru-default-layout 'dvorak-3beol)

;; 한글 모드 전환 시 키맵 새로 고침 (Dvorak 반영)
(set! byeoru-refresh-keymap-on-hangul-switch #t)

설명:

위 코드는 표준 3벌식(QWERTY 기준)을 Dvorak 키로 변환한 완전한 매핑입니다.
Dvorak 키는 QWERTY와 다른 위치를 가지므로, 각 자음/모음이 Dvorak의 물리적 키에 맞게 재정의됨 (예: QWERTY 'r'=ㄱ → Dvorak 'p'=ㄱ).
byeoru-refresh-keymap-on-hangul-switch를 t로 설정해 한글 모드로 전환 시 Dvorak 레이아웃을 강제로 반영.
필요 시 /usr/share/uim/byeoru.scm을 참고해 추가 기호(숫자, 특수문자) 매핑 보완.



3. 콘솔 환경 설정 (fbterm 최적화)

콘솔 키맵을 Dvorak으로 설정:
bashsudo dpkg-reconfigure console-setup

"Keyboard layout" → "English (US)", "Keymap" → "dvorak".
UTF-8 인코딩 유지.


fbterm 실행 전 키맵 로드:
bashloadkeys dvorak
fbterm

uim 환경 변수 설정:
bashexport GTK_IM_MODULE=uim
uim-xim --engine=byeoru &


4. 테스트 및 디버깅

uim 재시작:
bashpkill uim-xim
uim-xim --engine=byeoru &

fbterm에서 한글 입력 테스트:

한영 전환 (기본: Shift+Space).
Dvorak 키로 입력 (예: 'p' 누르면 ㄱ, 'a' 누르면 ㅏ 출력 확인).


오류 확인:
bashuim -d

/tmp/uim.log나 stderr로 키매핑 오류 확인.
특정 키가 안 맞으면 ~/.uim.d/dvorak-byeoru.scm에서 해당 키 수정.



5. uim-pref-gtk 보완 (선택)
로마자 모드를 안 쓰더라도 GUI로 설정 보완:

실행:
bashuim-pref-gtk

Byeoru 탭:

"Korean keyboard layout" → "3beol" 확인.
"Refresh keyboard map at each switch into Hangul mode" 체크 (필수, Dvorak 반영).
한영 전환 키 (Shift+Space 등) 확인.


저장 후 uim 재시작.

문제 지속 시

매핑 오류: dvorak-byeoru.scm의 특정 키 (예: 'p'가 ㄱ 대신 다른 글자 출력) 수정.
fbterm 호환성: fbterm 버전 확인 (fbterm --version), 최신인지 확인 (sudo apt update && sudo apt install fbterm).
로그 공유: 오류 로그나 특정 키 입력 결과 (예: 'p'를 눌렀는데 X 나옴)를 알려주시면 매핑 조정 도움드립니다.

요약
~/.uim.d/dvorak-byeoru.scm에 Dvorak용 3벌식 키맵을 정의하고, byeoru-refresh-keymap-on-hangul-switch를 활성화하면 fbterm에서 한글 입력이 Dvorak 키로 정상 작동합니다. 로마자 모드를 배제했으니, 3벌식 기반으로 정확한 자판 입력이 가능할 겁니다. 추가 질문이나 특정 키 문제 있으면 말씀해 주세요!

댓글 없음:

댓글 쓰기