키보드 배치 바꾸기
키보드 배치는 키보드의 스캔코드를 프로그램에 보낼 문자에 대응합니다. 키보드 배치는 또한 키 자체의 문자를 출력하지 않지만 다음 키 입력의 출력을 수정하는 복잡한 전달 과정을 수행할 수도 있으며 이를 데드키라고 합니다. QWERTY 키보드가 ASCII 집합 외부에 있는 문자를 입력할 수 있는 것처럼 비 QWERTY 키보드를 지원하려면 적당한 키보드 배치 설정이 필요합니다.
An appropriate keyboard layout is required to support both QWERTY and non-QWERTY keyboards, to enter characters outside of ASCII set.
Keyboard layouts can also do more complex transformations, e.g. via so called dead keys which do not output characters on their own, but modify output of subsequent keys.
Text-mode
OpenRC
문서로 설명이 잘 되어 있지만 상당히 이해하기 힘든 /etc/conf.d/keymaps 파일을 편집하십시오. 이 파일에는 keymap 변수의 값 /usr/share/keymaps/i386/qwerty/에 나타나는 적당한 키보드 배치를 설정해야 하며 추가로 extended_keymaps 변수의 값 /usr/share/keymaps/i386/include/ 디렉터리와 같은 적당한 포함 디렉터리 경로에서 추가적으로 파일을 설정할 수 있음을 보여줍니다.
keymap="us"
extended_keymaps=""
마지막으로 부팅 실행 레벨에 /etc/init.d/keymaps를 추가하십시오.
root #
rc-update add keymaps boot
터미널에 비 ASCII 문자를 표시하려면 /etc/conf.d/consolefont를 편집해야 할 수도 있습니다.
consolefont="cyr-sun16"
Restart the consolefont service and add it to boot runlevel:
root #
rc-service consolefont restart
root #
rc-update add consolefont boot
개별 키보드 배치
개별 키 배치를 만들려면 /usr/share/keymaps의 제공 키 배치를 살펴보십시오:
user $
vi <keymap file>.map
user $
gzip <keymap file>.map
root #
mv <keymap file>.map /usr/share/keymaps/<some directory>
여기에 제시한 예제는 U.S. QWERTY 키 배치에서 정방향 슬래시와 어퍼스트로피 키를 서로 바꾼 점만 제외하고 모든 면이 동일한 개별 키 배치입니다:
include "us.map"
keycode 40 = slash question
keycode 53 = apostrophe quotedbl
키 코드는 시스템별로 다릅니다.
키에 할당한 키 코드를 찾으려면 dumpkeys 출력 내용을 보십시오:
user $
dumpkeys -l
위 명령으로 키를 찾지 못했다면 다음 명령을 실행하십시오:
user $
showkey
그냥 키를 누르면 키 코드가 나타납니다. 과정이 끝났다면 몇 초 기다리시면 showkey 프로그램이 닫힙니다.
systemd
systemd는 /etc/vconsole.conf 설정 파일을 활용하며 터미널 글꼴과 키보드 배치 설정을 넣습니다만 OpenRC에 들어있는 고급 설정 몇가지가 빠져있습니다. OpenRC에서 지원하는 관련 변수에 따라 올바른 값을 동일하게 넣어야합니다.
KEYMAP=pl2
FONT=LatArCyrHeb-16
X11
최신 X11 프로그램은 보통 libXklavier를 사용하며("klavier"는 "키보드"의미를 지닌 독일어) setxkbmap으로 설정할 수 있습니다. 게다가 X11에서는 가상 터미널에서 지원하는 키보드 배치보다 더 많은 키보드 배치 셋을 지원합니다. 적당한 데스크톱 환경에서는 자체적으로 자체 키보드 배치를 관리한다는 점을 알아두어야합니다. 앞에서 언급한 프로그램이 직접 활용할 필요는 없어졌지만, 키보드 배치 관리 프로그램에 문제가 있거나 기능이 빠졌을 경우 이를 다루는 일이 간단해질 수 있습니다.
It should be kept in mind that a proper desktop environment will do its own keyboard layout management. There is no need to directly use the aforementioned application but it can come in handy when dealing with broken or lacking keyboard layout management.
KDE4
시스템 설정을 열고 입력 장치 모듈을 찾아보십시오.
To make additional languages available in the SDDM login manager, follow instructions on adding custom keymap.
일반 데스크톱 환경
~/.xprofile을 편집하고 해당 위치에서 setxkbmap를 부르거나 Xorg 설정 파일에서 키보드를 설정하십시오(예제는 하단 참조).
그놈 3 최근 버전에서는 더이상 libXklavier를 활용하지 않으므로 이 설정은 더이상 동작하지 않거나 그놈 설정을 대체합니다. 이와 비슷하게 다른 데스크톱 환경에서도 초기화 또는 키보드 배치 변경에 있어 libXklavier 설정을 덮어쓸 수도 있습니다.
~/.xprofile은 디스플레이 관리자에서 로깅할 때 이 파일을 지원할 경우에만 참고하는 비표준 파일이며(GDM, KDM, LightDM, LXDM, SDDM에서만 시험함), 모든 일반 배포판에서 이 파일을 지원하는 것 같지만 개별 배포판에 한정하는 것 같습니다.
일반 X11
setxkbmap 활용
여기서 바꾼 설정은 임시적이며 사용자가 X11을 다시 시작하기 전까지 지속됩니다. 보통 X 서버를 시작할 때마다 적당한 매개 변수를 설정하는 시작 스크립트에서 명령을 호출할 수 있습니다.
기존 설정을 요청한 다음:
user $
setxkbmap -query
키보드 배치를 설정하시고:
user $
setxkbmap lv
키보드 배치, 형식, 모델을 설정하십시오:
user $
setxkbmap lv apostrophe -model logiultrax
Setting up two keyboard layouts with LED indication:
user $
setxkbmap -layout us,ru -option grp:shifts_toggle -option grp_led:caps
It is advised to read xkeyboard-config
manual for a full list of keyboard configuration options:
user $
LESS=--chop-long-lines man xkeyboard-config
지원 키보드 배치 및 변형판 또는 다른 xkb 속성 값을 찾는 일은, 대부분 /usr/share/X11/xkb/rules/base.lst 파일에 나타나더라도, 이 프로그램에서는 나타나지 않아 불가능합니다. 거의 완벽한 내용을 가져오는건 /usr/share/X11/xkb/ 경로에서 다른 파일을 찾아보는 방법만 가능할 수도 있습니다. 온전하게 사용하는 목적으로라면 데스크톱 환경에 맞는 자체 키보드 배치 관리 프로그램을 활용하는게 좋습니다.
시스템 범위 설정 배치 및 단축키 활용
데스크톱 환경을 사용하지 않는, 달리 말해 창 관리자를 활용하는 X11 환경에서 설정하는 방법이라면 이 방법을 추천합니다. 10-keyboard.conf 파일을 만들어 적당한 키보드 설정 값을 넣으십시오.
Section "InputClass"
Identifier "keyboard-all"
Driver "evdev"
Option "XkbLayout" "us,br"
Option "XkbVariant" ",abnt2"
Option "XkbOptions" "grp:shift_toggle,grp_led:scroll"
MatchIsKeyboard "on"
EndSection
위 예제에서는 미국 및 브라질 키보드 배치에서 Left Shift+Right Shift 키를 서로 바꿔가며 사용하는 단축키로 설정합니다. 브라질 키보드 배치는 키보드의 스크롤 록 LED로 신호를 보냅니다.
When using a Cyrillic language layout and the keyboard has “Windows®” keys, it may be necessary to add responsive
",winkeys"
to XkbVariant
option.가능한 추가 설정
다양한 변형판이 있고, 키보드 키 대응을 설정할 때 활용할 수 있는 여러 옵션이 있습니다. 대부분의 내용은 /usr/share/X11/xkb/rules/base.lst 파일에서 찾아볼 수 있습니다.
예를 들어 일부 국제 문자를 쓸 수 있는 미국 키보드 배치는 altgr-intl
변형판을 활용하여 설정할 수 있습니다:
...
Option "XkbLayout" "us,br"
Option "XkbVariant" "altgr-intl,abnt2"
...
그 다음 Right Alt를 국제 문자 입력의 조합 입력키로 활용할 수 있습니다.
Xorg에서는 컴포지션을 통해 국제 문자 및 변형 심볼 문자를 입력할 수 있는 옵션을 제공합니다. "조합 키"를 누르고 그 다음 문자키를 누르면 된다는 의미입니다. 키 조합을 활성화하려면 compose:<compose_key>
옵션을 추가하십시오:
...
Option "XkbOptions" "grp:shift_toggle,grp_led:scroll,compose:sclk"
...
위에서 compose:sclk
옵션은 Scroll Lock 키를 조합 키로 지정합니다. 이 설정을 통해:
- Scroll Lock를 누르고 'oo'를 입력하면 도 기호 '°'가 나옴
- Scroll Lock를 누르고 'oc'를 입력하면 저작권 기호 '©'가 나옴
- Scroll Lock를 누르고 ':)'를 입력하면 웃는 얼굴 기호 '☺' 가 나옴
- Scroll Lock를 누르고 '^2'를 입력하면 위첨자 2 ('²')가 나옴
- Scroll Lock를 누르고 '_2'를 입력하면 아래첨자 2 ('₂')가 나옴
- Scroll Lock를 누르고 'di'를 입력하면 지름 기호 '⌀'가 나옴
... 그리고 그 밖에 여러 옵션을 지정할 수 있습니다. /usr/share/X11/locale/compose.dir 파일에는 가능한 키 조합 소스를 보여줍니다.
X 키보드 배치 개선
키 할당 추가, 또는 기능키의 동작 추가 같은 식으로 키보드 배치를 설정하는데 상당한 변화 영향을 가져올 경우 필요합니다. 설정을 바꾸는 각각의 경우는 실제로 꾸러미의 소스 파일을 바꾸므로 epatch_user 매커니즘을 활용하여 꾸러미를 다음에 업데이트할 때 수정을 보류할 수 있게 하는게 좋습니다.
기본 원리
관련 젠투 꾸러미는 x11-misc/xkeyboard-config입니다. X 키보드 설정은 가상 콘솔에서 설정하는 것보다 훨씬 복잡합니다. 적절한 설정 파일은 /usr/share/X11/xkb 경로의 하위 디렉터리에서 찾을 수 있습니다:
- keycodes
- 이 파일은 심볼릭 이름 및 키 코드가 들어갑니다 - 아마 누구든 바꾸고 싶어하지 않을 것 같습니다.
- geometry
- 키보드 그림을 그릴 때 프로그램에서 활용할 키보드의 실제 모양새 정보입니다 - 이 또한 누구든 바꾸고 싶어하지 않을 것 같습니다.
- types
- 여기 있는 파일은 "형식" 을 만듭니다. 키 선언에 활용하며, 어떤 Shift 키 조합 입력이 가능한지 지정합니다.
- symbols
- 이 파일은 실제 키 할당 여부를 지정합니다.
- compat
- 이 파일은 "동작"(가상 터미널 전환 등), 명칭, 어떤 동작을 키에 할당할 수 있는지를 지정합니다.
- rules
- 이 파일은 키보드 형식, 언어, 같은 매개 변수를 지정하며, 다른 디렉터리의 적당한 명세를 활성화합니다.
이 디렉터리의 완전한 설명은 Doug Palmer가 작성한 An Unreliable Guide to XKB Configuration에서 찾아볼 수 있습니다. 이름으로보다는 훨씬 더 많은 내용이 있습니다. 더 많은 문서는 freedesktop.org의 xkeyboard-config 홈페이지에서 찾아볼 수 있습니다.
xkb에서는 "<AC01>" 같은 키 이름을 부여하는데 "영숫자(Alphanumeric) 영역 에서 아래에서 세번째(C)(CapsLock 을 켠 상태), 그리고 줄 왼쪽 으로부터 키 번호 01번을 의미합니다. 이 키는 영문 배치에서 A입니다. 다른 영역의 키에는 다른 이름이 붙어 있으며, F5키에는 "<FK05>"가, 왼쪽 Ctrl 키에는 "<LCTL>"이 붙습니다.
키 할당 추가
예제에서 보신 바와 같이, 이 섹션에서는 a, o, u를 입력하는 영국 영어 키보드 배치를 AltGr 키를 활용하여 독일어 움라우트 문자 ä, ö, ü를 입력할 수 있게 개선하겠습니다. 대문자 버전으로도 올바로 동작할 수 있게 해야합니다. 동작을 개선할 키는 A (<AC01>), O (<AD09>), U (<AD07>)입니다(ß 문자는 이미 AltGr+S 키에 할당했습니다).
xkb에서 움라우트 문자에는 "adiaeresis" 같은 이름이 붙습니다. 이 이름은 "XK_"가 붙는 부분은 이름을 가져오려면 빼야하겠지만, /usr/include/X11/keysymdef.h 파일에서 찾을 수 있습니다.
symbols 디렉터리에 올바른 파일을 식별 표시하십시오. 대부분의 파일은 영문자 2개를 지닌 국가 코드(대영 제국의 경우 gb)가 붙으며 어떤 키보드 배치를 X에서 선택했는지 짐작할 수 있습니다. 이 예제에서는 symbols/gb를 개선했습니다.
위 내용을 통해 symbols/gb의 기존 스킴을 복사하여 새 항목을 만들겠습니다. 이 예제에서 "basic" 섹션에 이 항목을 추가해야합니다. 이 설정 내용을 통해, 각 키에 있는 항목의 중괄호와 각괄호에 있는 네 항목은(다른 키와 함께 누르지 않는) 일반적인 각각의 Shift, AltGr, Shift+AltGr 키임을 쉽게 짐작할 수 있습니다.
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth] };
추가 설정을 넣고 나면, 섹션의 내용은 다음과 같습니다:
default partial alphanumeric_keys
xkb_symbols "basic" {
// Describes the differences between a very simple en_US
// keyboard and a very simple U.K. keyboard layout defined by
// the SVR4 European Language Supplement and sometimes also
// known as the IBM 166 layout.
include "latin"
name[Group1]="English (UK)";
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
key <AE03> { [ 3, sterling, threesuperior, sterling ] };
key <AE04> { [ 4, dollar, EuroSign, onequarter ] };
key <AC11> { [apostrophe, at, dead_circumflex, dead_caron] };
key <TLDE> { [ grave, notsign, bar, bar ] };
key <BKSL> { [numbersign, asciitilde, dead_grave, dead_breve ] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
// Keys inserted by ACM, 2015-10-23.
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
// End of insertion 2015-10-23
include "level3(ralt_switch_multikey)"
};
이 파일을 저장하고 나면 X 윈도우를 다시 시작하십시오. 보통 데스크톱 환경, XFCE 같은 경우는 시작할 때마다 위 설정 파일을 다시 읽습니다. 오류가 있으면 일반적인 stderr 에 오류 메시지를 기록합니다. X 윈도우를 명령행에서 시작하면 stddrr은 X 윈도우를 시작한 가상 터미널이 됩니다.
기능 키에 동작 할당
예제에서와 같이 Ctrl, Alt, Shift 키를 모두 선택했을 때 F1 - F12 기능 키에 "터미널 n번으로 전환" (n > 12) 동작을 추가하겠습니다. AltGr키와 Fn키를 선택했을 때도 동일한 동작이 일어나야합니다.
우선 기능키에서 기존에 할당한 동작 설정이 있는 symbols 디렉터리에서 파일을 찾아보십시오. 여기서 찾을 파일은 symbols/srvr_ctrl입니다. 이 파일에서 F1키 동작에 대해 수정해보려는 항목은 다음과 같습니다:
key <FK01> {
type="CTRL+ALT",
symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
};
이 항목에서 참고해야 할 두가지는 다음과 같습니다:
- "CTRL+ALT" 형식입니다; 따라서 Shift, AltGr 키를 함께 누르는 네가지 표준 shift 키 설정에, 다섯번째에 Ctrl+Alt 설정을 넣었습니다. Ctrl+Alt+Shift 키를 사용하는게 목적이고 기존 입력에 적당한 항목이 없으니, 새 설정을 만들어야합니다.
XF86_Switch_VT_1
"동작"은 xkb 시스템에서 정의한 심볼입니다. compat 디렉터리의 compat/xfree86 파일 안에 넣은 설정 항목에 이 부분이 있습니다.XF86_Switch_VT_13
(또는 그 이상)의 심볼이 없으므로, 대신 사용하지 않는 기존의 F13, F14, ..., F24 심볼을 빼돌려 쓰겠습니다.
- It is of type "CTRL+ALT"; it thus takes the standard four shift key settings with Shift and AltGr, plus a fifth setting of Ctrl+Alt. Since the goal is to use Ctrl+Alt+Shift, and there is no suitable existing type, a new one needs to be created.
- The "action"
XF86_Switch_VT_1
is just a defined symbol in the xkb system. Its semantics are given to it by an entry in a file in the compat directory, namely compat/xfree86. There is no symbolXF86_Switch_VT_13
(or higher) - instead, steal the otherwise unused existing symbols F13, F14, ..., F24.
새 CTRL+ALT+SHIFT 형식 만들기
types/pc에서 "CTRL+ALT" 부분을 보시면 복사하고, "CTRL+ALT+SHIFT"로 이름을 바꾼 후, 단축 키 조합 Ctrl+Alt+Shift로 바꿀 수 있게 확장하기에 충분히 쉽습니다. 결과는 다음과 같습니다:
type "CTRL+ALT+SHIFT" {
modifiers = Control+Alt+Shift+LevelThree;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Control+Alt] = Level5;
map[Shift+Control+Alt] = Level6;
preserve[Shift] = Shift;
preserve[Shift+LevelThree] = Shift;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "Ctrl+Alt";
level_name[Level6] = "Ctrl+Alt+Shift";
};
F13, ..., F24 심볼 활성화
XF86_Switch_VT_1
심볼은 compat/xfree86에 바로 들어있습니다. F13, ..., F24 심볼 할당 값을 만들 모양새를 복사하기에 간단한 구조를 갖추고 있습니다. compat/xfree86에서, 이 심볼 중 첫번째 F13에 대한 정의는 다음과 같습니다:
interpret F13 {
action = SwitchScreen(Screen=13, !SameServer);
};
F14, ..., F24 키에 대한 유사 정의는 이 파일에 넣어야합니다.
F1, ..., F12 키 심볼 항목 수정
이제 새 CTRL+ALT+SHIFT 입력과 F13, ..., F24 심볼 정의를 넣었으니 symbols/srvr_ctrl 의 기능키에 대한 키 정의를 수정하겠습니다. F1 기능키에 대한 내용을 아래에 보여드리는 바와 같이, 다른 기능키에도 유사한 정의를 넣어야합니다.
key <FK01> {
type="CTRL+ALT+SHIFT",
symbols[Group1]= [ F1, F1, F13, F1, XF86_Switch_VT_1, F13 ]
};
types/pc, compat/xfree86, symbols/srvr_ctrl 설정을 바꾸고 나면 X 서버를 다시 시작하고 X 에서 13번 가상 터미널로 바로 전환하면 위의 설정대로 활용할 수 있습니다 - 물론 /etc/inittab(또는 systemd의 동급 항목)에서 설정한 대로 나타납니다.
See also
- Key repeat rate — controls how quickly a key press on the keyboard will repeat if the key is pressed and held for a period of time.