우분투 ckbcomp 완벽 실습: man 페이지보다 쉬운 콘솔 키맵 변환 가이드

개요

리눅스 가상 콘솔에서 XKB 기반의 복잡한 키보드 레이아웃을 적용하기 위해서는 ckbcomp 명령어로 콘솔용 키맵을 컴파일해야 합니다. 본 가이드에서는 복잡한 man 페이지 대신 실습 명령어를 통해 ckbcomp의 기본 사용법부터 국가별 레이아웃 변환, CapsLock-Ctrl 스왑 같은 커스텀 키 매핑 및 loadkeys 적용까지 단계별로 살펴봅니다.

1. ckbcomp 설치 및 기본 US 키보드 레이아웃 컴파일

콘솔 환경에서 XKB 키보드 레이아웃을 변환하고 적용하는 실습을 진행하기 위해 console-setup, kbd, xkb-data 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y console-setup kbd xkb-data

ckbcomp 명령어는 XKB 키보드 정의를 리눅스 콘솔에서 인식할 수 있는 loadkeys 키맵 형식으로 컴파일하여 출력합니다.
기본 US 레이아웃을 지정하고 head -n 30으로 파이프 연결하여 상위 30줄의 키코드 매핑 구조를 확인합니다.
⚙️ [주요 옵션]

-model : 사용할 키보드 모델(예: pc105, pc104)을 지정합니다.
-variant : 레이아웃의 세부 변형(예: dvorak, colemak)을 지정합니다.
-option : CapsLock 키의 역할을 변경하는 등 XKB 부가 옵션(예: ctrl:nocaps)을 추가합니다.
-charmap : 생성할 키맵의 인코딩 문자셋(예: UTF-8, ISO-8859-1)을 설정합니다.
-compact : 중복 키 정의를 결합하여 생성되는 키맵의 크기를 축소합니다.
-freebsd : 리눅스 형식이 아닌 FreeBSD 콘솔 규격에 맞는 키맵을 생성합니다.

ckbcomp us | head -n 30

2. 국가별 키보드 모델(-model) 및 변형(-variant) 지정

표준 105키 하드웨어 모델(-model pc105)과 한국어 레이아웃(-layout kr)을 지정하여 콘솔 키맵을 컴파일합니다.
출력 결과를 통해 각 키코드 번호에 대응하는 유니코드 문자 값과 조합 상태별 키 매핑 구조를 확인할 수 있습니다.

ckbcomp -model pc105 -layout kr | head -n 25

독일어 레이아웃(-layout de)에 데드키를 제거하는 변형 옵션(-variant nodeadkeys)을 추가하여 키맵을 컴파일합니다.
데드키(Dead keys) 기능이 비활성화되어 악센트 기호 입력 시 조합 대기 상태 없이 해당 문자가 즉시 출력되도록 매핑된 결과를 확인할 수 있습니다.

ckbcomp -model pc105 -layout de -variant nodeadkeys | head -n 25

3. 커스텀 키 옵션 적용: CapsLock 키를 Control 키로 변경

-option ctrl:nocaps 옵션을 적용하여 CapsLock 키를 Control 키로 대체하는 키맵을 생성한 뒤 grep 명령어로 Caps_Lock 심볼을 검색합니다.
CapsLock 키가 Control 키로 완전히 변경되었기 때문에 키맵 정의 내에서 Caps_Lock 심볼이 제거되어 검색 결과가 빈 화면으로 출력되는 것을 확인할 수 있습니다.

ckbcomp -layout us -option ctrl:nocaps | grep -i ‘caps_lock’ -B 2 -A 5

-option ctrl:swapcaps 옵션을 지정하여 CapsLock 키와 Control 키의 기능을 서로 맞바꾼 키맵을 생성하고 관련 키 정의를 필터링합니다.
본래 Control 키 자리인 keycode 29에 Caps_Lock이 할당되는 등 두 제어 키의 역할이 성공적으로 상호 교체되어 매핑된 결과를 확인할 수 있습니다.

ckbcomp -layout us -option ctrl:swapcaps | grep -E ‘Caps_Lock|Control’ | head -n 20

4. 컴파일된 키맵 파일 저장 및 loadkeys 명령어로 즉시 적용

생성할 키맵 파일들을 보관할 전용 디렉터리를 생성하기 위해 mkdir -p ~/keymaps 명령어를 실행합니다.

mkdir -p ~/keymaps

US 레이아웃에 CapsLock 키를 Control 키로 대체하는 옵션을 적용하여 키맵을 컴파일한 후, 리다이렉션(>)을 통해 ~/keymaps/custom_us.map 파일로 저장합니다.

ckbcomp -layout us -option ctrl:nocaps > ~/keymaps/custom_us.map

콘솔 환경에서 효율적으로 활용할 수 있도록 원본 파일을 유지하면서 키맵을 압축하기 위해 gzip -fk ~/keymaps/custom_us.map 명령어를 실행합니다.

gzip -fk ~/keymaps/custom_us.map

ls -lh ~/keymaps/custom_us.map* 명령어로 생성된 원본 키맵 파일과 압축 파일의 상세 정보를 확인합니다.
약 120KB 크기의 텍스트 키맵 파일이 압축 과정을 거쳐 4.0KB 수준으로 대폭 축소되어 정상적으로 생성된 것을 확인할 수 있습니다.

ls -lh ~/keymaps/custom_us.map*

sudo loadkeys ~/keymaps/custom_us.map 명령어를 실행하여 컴파일한 키맵 정의를 현재 리눅스 가상 콘솔에 즉시 적용합니다.
별도의 오류 메시지 없이 실행이 완료되어 CapsLock 키가 Control 키로 동작하는 커스텀 키 매핑이 콘솔 환경에 즉각 반영됩니다.

sudo loadkeys ~/keymaps/custom_us.map

지금까지 우분투 환경에서 ckbcomp 명령어를 활용해 XKB 레이아웃을 리눅스 콘솔 키맵으로 변환하고 적용하는 방법을 간단하게 살펴보았습니다.
복잡한 man 페이지 대신 오늘 정리한 실습 과정을 참고하여 콘솔 환경에서도 원하는 키 매핑을 편리하게 구성해 보시기 바랍니다.