개요
리눅스 가상 콘솔에서 XKB 기반의 복잡한 키보드 레이아웃을 적용하기 위해서는 ckbcomp 명령어로 콘솔용 키맵을 컴파일해야 합니다. 본 가이드에서는 복잡한 man 페이지 대신 실습 명령어를 통해 ckbcomp의 기본 사용법부터 국가별 레이아웃 변환, CapsLock-Ctrl 스왑 같은 커스텀 키 매핑 및 loadkeys 적용까지 단계별로 살펴봅니다.
1. ckbcomp 설치 및 기본 US 키보드 레이아웃 컴파일
콘솔 환경에서 XKB 키보드 레이아웃을 변환하고 적용하는 실습을 진행하기 위해 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 콘솔 규격에 맞는 키맵을 생성합니다.

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

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

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

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

4. 컴파일된 키맵 파일 저장 및 loadkeys 명령어로 즉시 적용
생성할 키맵 파일들을 보관할 전용 디렉터리를 생성하기 위해 mkdir -p ~/keymaps 명령어를 실행합니다.

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

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

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

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

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