Linux Programmer

리눅스에서 커스텀 키보드 펑션키 F11, F12등의 이상 작동 문제 본문

컴퓨터 관련/리눅스 데스크탑

리눅스에서 커스텀 키보드 펑션키 F11, F12등의 이상 작동 문제

sunyzero 2023. 10. 31. 12:15

리눅스에서 키크론(keychron) 계열이나 각종 커스텀 키보드 사용시 Function 키인 F1~F12키가 이상 작동하는 경우가 있다. 이상 작동 현상이란 F11키를 눌렀더니 사운드 볼륨이 줄어들거나 하는 것을 말한다. F5를 누르면 키보드 불빛을 제어한다든지 하는 기능도 있다.

예를 들어 아래 사진처럼 키보드 키캡의 Function key 위쪽에 아이콘 그림이 그려있다면 멀티미디어나 특수 기능이 맵핑되어있는 것이다. F10키의 스피커 모양은 볼륨을 끄는 것이고, F11키 스피커 소리가 작은 것은 볼륨을 줄이는 기능, F12키의 스피커 소리가 큰 것은 볼륨을 키우는 기능이다. 이 기능들은 원래 Fn키와 조합해서 사용하는 기능으로 Fn+F11키가 사운드 볼륨을 줄이고, Fn+F12키는 사운드 볼륨을 키우는 기능이다. 그런데 이상 작동을 하면서 그냥 F11만 눌러도 사운드 볼륨이 줄어들고, F12만 눌러도 사운드 볼륨이 커진다. 즉 Fn키가 기본으로 눌려있는 것처럼 작동하는 것이다. 이런 상황에서는 사실상 F1~F12 키를 쓰지 못하게 된다. 그런데 웹 브라우저에서 F5나 F11, F12키는 매우 중요하게 사용되므로, 펑션키를 쓰지 못하면 매우 불편해진다.

 

Function key에 Fn키 기능이 매핑되어있는 경우. F11, F12에 볼륨 조절 기능이 있다.

 

1. 원인

키교환 방식의 커스텀 키보드들 중에는 Win, Mac에서 모두 사용할 수 있도록 제작된 경우가 많다. 보통 아래 그림처럼 스위치로 조정하도록 되어있는데, 이런 기능이 있는 키보드들은 리눅스 연결시 Apple 키보드 타입으로 인식된다.

스위치로 윈도, 맥 키보드 타입을 설정하는 기능

 

리눅스에서 애플 키보드 타입은 hid_apple 커널 모듈이 로딩되면서 작동되는데, 이 모듈에는 Fn 키를 lock하는 파라메터인 fnmode가 있다. 그런데 fnmode의 기본값인 auto의 경우, 키보드들마다 작동하는 방식이 조금 다른데, 문제가 될 시에는 Fn키가 기본으로 눌려있는 것처럼 작동한다.

현재 hid_apple 모듈의 상태는 lsmod와 modinfo로 살펴볼 수 있다. 우선 키보드 연결 후 "lsmod | grep hid_"로 확인해보면 hid_apple 모듈이 로딩되었는지 확인할 수 있다. 그런 다음에 "modinfo hid_apple" 명령으로 해당 모듈의 기능이나 현재 파라메터를 자세하게 살펴볼 수 있다.

$ lsmod | grep hid_
hid_apple              24576  0
...생략...

$ modinfo hid_apple
filename:       /lib/modules/6.5.6-200.fc38.x86_64/kernel/drivers/hid/hid-apple.ko.xz
license:        GPL
alias:          hid:b0005g*v0000004Cp0000029F
alias:          hid:b0003g*v000005ACp0000029F
alias:          hid:b0005g*v0000004Cp0000029A
...생략...
parm:           fnmode:Mode of fn key on Apple keyboards (0 = disabled, 1 = fkeyslast, 2 = fkeysfirst, [3] = auto) (uint)
parm:           iso_layout:Swap the backtick/tilde and greater-than/less-than keys. ([-1] = auto, 0 = disabled, 1 = enabled) (int)
parm:           swap_opt_cmd:Swap the Option ("Alt") and Command ("Flag") keys. (For people who want to keep Windows PC keyboard muscle memory. [0] = as-is, Mac layout. 1 = swapped, Windows layout., 2 = swapped, Swap only left side) (uint)
parm:           swap_ctrl_cmd:Swap the Control ("Ctrl") and Command ("Flag") keys. (For people who are used to Mac shortcuts involving Command instead of Control. [0] = No change. 1 = Swapped.) (uint)
parm:           swap_fn_leftctrl:Swap the Fn and left Control keys. (For people who want to keep PC keyboard muscle memory. [0] = as-is, Mac layout, 1 = swapped, PC layout) (uint)

 

parm 항목이 파라메터 항목을 의미하는 것이고, 각각 설명과 어떤 파라메터 값을 가질 수 있는지 보여주고 있다. fnmode나 iso_layout, swap_opt_cmd, swap_ctrl_cmd, swap_fn_leftctrl 등이 설정 가능한 파라메터들이다. 이중에서 fnmode를 살펴볼 것이다.

예를 들어 fnmode의 경우 총 4가지 값을 설정할 수 있으며 0, 1, 2, 3의 값이 가능하다. 현재 설정된 값은 대괄호로 표시된 값이다. 즉 fnmode의 현재값은 3이다.

fnmode 파라메터 설명
0 disabled
1 fkeyslast
2 fkeysfirst
3 auto, default

앞서 언급한대로 fnmode의 값이 3일때는 이상 작동을 하면 fnmode 파라메터를 2로 변경해주면 된다. 파라메터를 변경한 후에는 Function F1~F12 본래의 기능을 사용할 수 있다. 만일 fnmode=2로 변경한 후에도 이상 작동하면 0, 즉 disabled로 바꿔서 멀티미디어 키 기능을 아예 끌 수도 있다. 그러면 fnmode 파라메터 값을 변경하는 방법을 살펴보자.

2. fnmode 설정 변경 (root 권한)

이 작업은 root 권한이 필요하다. "su -"로 root 유저로 변경하거나 sudo 명령을 사용해야 한다. 여기서는 su - 로 변경했다고 가정하고 명령한다. 보통 명령어 앞에 hash 문자가 있으면 root 권한으로 명령한다는 암묵적 표시이다.

먼저 키보드가 연결된 상태에서 hid_apple의 fnmode 설정 값을 cat으로 읽어보자. 당연히 3으로 나왔다.

# cat /sys/module/hid_apple/parameters/fnmode 
3

그러면 이 값을 echo의 redirection 명령으로 2로 변경하자.

# echo 2 > /sys/module/hid_apple/parameters/fnmode

 

3. 재부팅시 자동으로 설정 적용 (root 권한)

위 echo ... 리다이렉션 명령을 매번 부팅할 때마다 하는 것은 귀찮기 때문에 kernel module config에 설정해서, 커널 모듈 로딩시 자동 설정되도록 해야 한다. 이를 위해 /etc/modprobe.d/hid_apple.conf 파일에 options hid_apple fnmode=2 내용을 넣어두면 된다.

vi 에디터로 해도 되지만, 에디터 없이도 리다이렉션으로 기록할 수 있다. 주의할 점은 오타나면 안되므로 두번,세번 오타가 있는지 확인하자. 특히 공백도 마음대로 넣으면 안된다. 정확하게 기록하자.

# echo "options hid_apple fnmode=2" > /etc/modprobe.d/hid_apple.conf

hid_apple.conf 파일 기록이 완료되었다면, 커널용 램 디스크 이미지를 재생성 하기 위해 dracut --force 명령을 실행한다. dracut는 페도라(레드햇 호환 시스템) 기준이며, 만일 데비안이나 우분투라면 dracut 대신에 sudo update-initramfs -u 명령으로 내린다.

Fedora (root 권한으로) dracut --force
Ubuntu sudo update-initramfs -u

 

완료되었다면 재부팅 후 키보드가 잘 작동하는지 확인해본다. 그리고 cat /sys/module/hid_apple/parameters/fnmode 값이 2인지 확인해본다.

$ cat /sys/module/hid_apple/parameters/fnmode 
2

 

 

K. 참고

Fix keychron k1 function keys on Fedora, https://gist.github.com/abn/e5bb0f2d152f4b96a1f1263b61d0cac9

Asus Expertbook의 설정, https://gist.github.com/MaxVRAM/a7b7bd22231a64b4f6ea5dd2dad37c2b

 

반응형
Comments