hid-apple-numberless-ko: Linux용 Apple Magic Keyboard (wo/ Numeric Keypad) 한국어 키보드 드라이버 (hid-apple-patched 기반)
hid-apple-numberless-ko: A Linux driver for Apple Magic Keyboard (wo/ Numeric Keypad) Korean Keyboard Support - A Fork of hid-apple-patched.
Apple Magic Keyboard (wo/ Numeric Keypad)를 Linux 상에서 사용하기 위한 드라이버입니다.
Linux에서 한국어를 입력하기 위해서는 오른쪽 Alt, Ctrl 키를 각각 Hangul, Hanja 키로 사용할 수 있어야 합니다. 하지만 Apple Magic Keyboard (wo/ Numeric Keypad)는 Space Bar와 화살키 사이에 Command 키와 Option 키밖에 없죠. 게다가 F1 ~ F12 키가 media key 기능을 우선하도록 되어 있기 때문에 function key 가 디버깅 툴 단축키로 할당되어 있는 경우가 많은 개발자 입장에서는 사용하기가 좀 불편합니다 - 일일이 FN 키와 함께 눌러야 하니까요. 심지어 쓰다 보면 Backspace 가 아닌 Delete 키가 필요한 경우도 있는데 Delete는 없고 대신 Eject 키가 장착되어 있기도 하죠.
이 드라이버는 위에 열거한 단점들을 해결하기 위해 제작되었습니다. 결코 제작자가 곧 죽어도 애플 키보드를 써야겠다는 중증 앱등이여서 만든 것이 아닙니다 이 driver는 apple keyboard에 대해 다음과 같은 기능들을 추가합니다:
- F1 ~ F12 키의 동작을 function key 우선으로 변경합니다.
- Eject 키가 Delete 키로 동작하도록 변경합니다.
- 오른쪽 Command 키가 Ctrl 키로 동작하도록 변경합니다.
+1. Linux System에서 오른쪽 Alt, Ctrl 키를 Hangul, Hanja 키로 인식시키는 방법에 대해서는 아래 '부록 1'을 참조해 주세요.
이 드라이버를 사용하기 위한 최소 사양입니다.
-
DKMS가 지원되는 Linux 배포판
2020년 현재 거의 대부분의 리눅스 배포판이 여기 해당됩니다.
-
git 클라이언트 (Optional)
아래 '사용법'은 git으로 코드를 clone 받는 것을 기준으로 설명하고 있기 때문에 git 역시 필요합니다. 소스코드를 직접 다운로드 하실 경우에는 해당 사항 없겠지만요.
Ubuntu 등 Debian 기반 System에서는 아래 command로 필요한 프로그램들을 한 번에 설치할 수 있습니다:
sudo apt install git dkms
이 드라이버를 개발하는 데 사용된 + 기준으로 삼은 시스템들입니다.
- Ubuntu Linux 20.04
- Apple Magic Keyboard (MQ5L2KH)
git clone https://github.com/dongjinleekr/hid-apple-numberless-ko
cd hid-apple-numberless-ko
sudo dkms add .
sudo dkms build hid-apple/1.0
sudo dkms install hid-apple/1.0
+1. 빌드된 내용물을 삭제할 때는 아래와 같이 해 주면 됩니다. (소스코드를 수정한 뒤 다시 빌드할 때 사용합니다.)
sudo dkms uninstall hid-apple/1.0
sudo dkms remove hid-apple/1.0
/etc/modprobe.d/hid_apple.conf
파일을 생성하고 아래와 같은 내용을 넣어 줍니다:
options hid_apple fnmode=2
options hid_apple rightcmd_as_rightctrl=1
options hid_apple ejectcd_as_delete=1
각각의 항목은 아래와 같은 의미를 가집니다:
-
fnmode: F1 ~ F12 키가 동작하는 방법을 결정합니다.
- 0: FN 키를 사용할 수 없도록 막습니다. F1 ~ F12 키는 media key로만 동작합니다. (예: F10은 음량 감소, F11은 음량 증가.)
- 1: F1 ~ F12 키를 기본적으로 media key로 동작하도록 하고, FN 키와 함께 눌렀을 때만 function key로 동작하도록 합니다. (default)
- 2: F1 ~ F12 키를 기본적으로 function key로 동작하도록 하고, FN 키와 함께 눌렀을 때만 media key로 동작하도록 합니다.
-
rightcmd_as_rightctrl: 오른쪽 Command 키가 Ctrl 키로 동작하도록 합니다.
- 0: 해당 기능을 끕니다. 오른쪽 Command 키는 원래대로 Command 키로 동작합니다. (default)
- 1: 해당 기능을 켭니다. 오른쪽 Command 키는 Ctrl 키로 동작합니다.
-
ejectcd_as_delete: Eject 키가 Delete 키로 동작하도록 합니다.
- 0: 해당 기능을 끕니다. Eject 키는 원래대로 Eject 키로 동작합니다. (default)
- 1: 해당 기능을 켭니다. Eject 키는 Delete 키로 동작합니다.
즉, 위 설정 파일 내용은 다음과 같은 기능을 합니다:
- fnmode를 2로 설정한다. 즉, F1~F12는 기본적으로 function key로 동작하며 FN 키와 함께 눌렀을 때만 media key로 동작한다.
- 오른쪽 Command 키를 Ctrl 키로 동작하도록 한다.
- Eject 키를 Delete 키로 동작하도록 한다.
다음 command로 기본 드라이버 모듈 (hid_apple) 을 메모리 상에서 삭제하고 대신 새로 빌드된 드라이버 모듈을 적재합니다:
sudo modprobe -r hid_apple && sudo modprobe hid_apple
이제부터 드라이버 기능을 사용할 수 있지만, 리부팅하면 변경 사항이 사라집니다. 아래 command로 부팅할 때마다 자동으로 적재되게 할 수 있습니다:
sudo update-initramfs -u
이 프로젝트는 원본인 hid-apple-patched와 마찬가지로 GNU 일반 공중 사용 허가서 2.0 라이센스를 따릅니다.
Ubuntu 상에서 한글 키보드를 인식되도록 하는 방법입니다. 구체적으로는, 아래 두 기능을 활성화합니다:
- 오른쪽 Alt 키를 한글키로 매핑합니다.
- 오른쪽 Ctrl 키를 한자키로 매핑합니다.
여기서 한 설정은 laptop에 붙어 있는 키보드건 유/무선으로 연결한 키보드건 상관 없이 전부 다 적용됩니다.
/usr/share/X11/xkb/symbols/altwin
의 xkb_symbols "meta_alt" { ... }
부분을 아래와 같이 수정합니다:
// Meta is mapped to second level of Alt.
partial modifier_keys
xkb_symbols "meta_alt" {
key <LALT> { [ Alt_L, Meta_L ] };
key <RALT> { type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Hangul ] };
modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
// modifier_map Mod4 {};
};
/usr/share/X11/xkb/symbols/altwin
에 아래 부분을 추가합니다:
// Ctrl is mapped to Hangul_Hanja.
partial modifier_keys
xkb_symbols "ctrl_hangul_hanja" {
key <LCTL> { [ Control_L, Control_L ] };
key <RCTL> { type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Hangul_Hanja ] };
modifier_map Control { Control_L, Control_R };
};
/usr/share/X11/xkb/symbols/pc
의 include "altwin(meta_alt)"
아래에 다음과 같이 include "altwin(ctrl_hangul_hanja)"
를 추가합니다:
key <ALT> { [ NoSymbol, Alt_L ] };
include "altwin(meta_alt)"
include "altwin(ctrl_hangul_hanja)"
key <META> { [ NoSymbol, Meta_L ] };
modifier_map Mod1 { <META> };
sudo rm /var/lib/xkb/*
이제 리부팅하면 수정된 설정이 반영됩니다.
+1. 테스트는 해보지 않았으나 Ubuntu가 기반하고 있는 Debian 기반 System 모두에서 작동할 것으로 생각합니다.
+2. ${HOME}/.xinputrc
을 사용하는 방법도 있다고 알고 있습니다만, 왠일인지 제 경우는 그 방법이 통하지 않더군요. 위 방법을 사용하면 단일 사용자 뿐만 아니라 한국어 키보드를 사용하는 사용자 전체에 오른쪽 Alt 키 = Hangul 키, 오른쪽 Crtl 키 = Hanja 키로 강제할 수 있다는 차이점이 있습니다.
Ubuntu 상에 다국어 입력기 모듈인 fcitx를 설치하는 방법입니다.
(작성중)
Numeric Keypad가 붙어 있는 모델을 사용 중이신 분이라면 오른쪽 Command, Eject 키를 다른 키로 mapping하고 싶으실 수 있습니다. 이럴 때는 아래와 같이 해 주시면 됩니다.
예를 들어서, Eject 키를 Delete 키가 아닌 Scroll Lock 키로 동작하도록 바꿔 보겠습니다. hid-apple.c
에서 아래와 같은 부분을 찾습니다.
static const struct apple_key_translation ejectcd_as_delete_keys[] = {
{ KEY_EJECTCD, KEY_DELETE },
{ }
};
설정 파일에 ejectcd_as_delete=1
가 설정된 상태에서 위 ejectcd_as_delete_keys
함수를 아래와 같이 변경한 뒤 드라이버를 다시 빌드 + 설치해 주면 Eject 키는 이제부터 Scroll Lock 키로 동작합니다.
static const struct apple_key_translation ejectcd_as_delete_keys[] = {
{ KEY_EJECTCD, KEY_SCROLLLOCK }, // KEY_DELETE → KEY_SCROLLLOCK
{ }
};
마찬가지로 오른쪽 Command 키를 다른 키로 사용하고 싶을 경우 rightcmd_as_rightctrl_keys
함수를 같은 방식으로 수정해 주면 됩니다.
Linux 커널에서 사용하는 Keycode 값은 여기을 참조하세요.