elsa in mac

mac:Fedora-Asahi Remix, Wayland 환경에서 키보드 키나 마우스 버튼을 다른 키로 맵핑하는 방법 본문

Mac(OS X)/Asahi Linux

mac:Fedora-Asahi Remix, Wayland 환경에서 키보드 키나 마우스 버튼을 다른 키로 맵핑하는 방법

elsa in mac 2024. 3. 29. 21:58

이번 포스트에서는 Wayland 환경에서 마우스나 키보드의 특정 키를 다른 키나 마우스 버튼으로 re-mapping 하는 방법을 알아 보도록 하겠습니다. 

키보드나 마우스의 키를 remap 하는 방법은 여러가지가 있을 수 있습니다. shell script나 python에서 입력되는 키를 감지하고, 이를 다른 event로 바꿔치기하는 방법이 있는 반면, Linux 자체의 low level에서 아예 해당 키의 출력 값을 바꾸는 방법이 있습니다. 전자를 high-level 방법이라고 한다면, 후자는 좀 더 low-level에서 처리하는 방법이라고 할 수 있습니다.  high-level의 장점은 단순 키 맵이 아닌 하나의 키에 스트링을 assign 하는 등 보다 폭넓고 다양한 맵핑을 할 수 있는 반면, key 입력 인식과, 바꿔치기를 이해 deamon을 띄워 놓아야 하는 단점이 있습니다.  low-level은 폭넓은 맵핑은 지원하지 않지만 저 수준에서 처리하기 때문에 특별히 응용 프로그램을 별도로 띄울 필요가 없고, 처리 속도가 매우 빠르다는 장점을 갖게 됩니다. 

여기서는 low-level 한 방법을 알아보고자 합니다.  high-level에서 key remapping 하는 솔루션을 원한다면, 여기를 참고 하시기 바랍니다. 

linux 시스템은 hardware 관련 database(hwdb)를 관리하는데, 이 정보를 수정함으로써 입력 디바이스의 입력 트리거를 변경(remap)할 수 있습니다. 

우선, 해당키의 키값을 알아야 하는데, 입력 이벤트에 대한 정보를 확인하려면 evtest라는 CLI 도구를 설치해야 합니다. 

sudo dnf install evtest

evtest를 실행하면 아래와 같이 출력이 됩니다. 

여기서는 mouse의 middle button을 왼쪽 meta 키로 바꾸는 예를 들어 보겠습니다. meta 키는 window에서는 window키라고 하고, Hyprland에서는 super 키라고 정의 합니다.  보통 window용 키보드를 보면, space 키를 기준으로 왼쪽 방향으로 alt 키 , meta 키, ctrl 키 순으로 배치 되어 있습니다. 

다시 위의 evtest 에서 2.4G Mouse가 /dev/input/event7 과 event8 로 되어 있는데, event7를 선택합니다. select the device event number를 7을 선택하면 되죠. 

마우스를 선택하면, 이벤트를 감지하는 대기 상태가 되는데, 여기서 마우스의 가운데 버튼을 클릭하면, 위의 스샷과 같이 2개의 이벤트 메시지가 출력이 됩니다. press(value 0)와 release(value 1) 이벤트가 각각 출력된 것입니다. 여기서 확인할 정보는 바로 value 값으로 위의 예를 보면, 90003 이 보입니다. 즉, mouse의 가운데 버튼에 대한 식별 값이 90003 인 것입니다. 

다음으로, ctrl-c를 눌러 종료 한 후, 다시 evtest를 실행하고 이번에는 키보드를 선택 한 후, meta 키를 눌러봅니다. 

여기서는 meta키의 이름이 KEY_LEFTMETA 라는 것을 확인할 수 있습니다. 

원하는 정보를 모두 확인했으니, 이제부터 마우스의 가운데 버튼을 meta 키로 맵핑할 차례 입니다.  hwdv.d 폴더로 이동을 합니다. 

cd /etc/udev/hwdb.d

여기서 70-mouse-middle-button-remap.hwdb 라는 파일을 하나 생성합니다. 번호는 적당히 잡아주고, 이름도 적덩히 정의해 주면 되지만, 확장자는 반드시 .hwdb로 해야 합니다. 

그리고, sudo nano 70-mouse-middle-button.hwdb 로 해서 아래의 내용을 넣어 줍니다. 

# 2.4G Mouse의 가운데 버튼을 meta 키로 맵핑
evdev:name:2.4G Mouse:*
  ID_INPUT_KEY=1
  KEYBOARD_KEY_90003=key_leftmeta

'KEYBOARD_KEY_마우스 가운데_버튼_code=맵핑할 키 이름'  이런 규칙인 것을 확인할 수 있습니다. evdev:name:은 장치명, ID_INPUT_KEY=1 은 해당 키를 키보드의 키로 인식하도록 하겟다는 의미 입니다.  ID_INPUT_KEY와 KEYBOARD_KEY... 라인은 스페이스나 탭으로 들여써야 된다는 점을 유의 하시기 바랍니다. 

파일을 저장한 후, hardware database를 업데이트 해 주기 위해 아래의 명령을 수행합니다. 

sudo systemd-hwdb update
sudo udevadm trigger

별다른 오류 메시지가 없다면 잘 적용된 것입니다. 만일 위의 두 명령 후에도 동작을 하지 않는다면, reboot을 하거나 키보드 혹은 마우스를 연결 제거 -> 다시 연결 한 후 확인하면 됩니다. 

evdev:name:HOLDCHIP USB Gaming Keyboard:*
   ID_INPUT_MOUSE=1
   KEYBOARD_KEY_70039=btn_left

위의 예는 키 벨류 70039(CapsLock 키)를 마우스 왼쪽 버튼으로 맵핑하는 예 입니다.  전체 코드는 아래와 같을 것 입니다. 

# 2.4G Mouse의 가운데 버튼을 meta 키로 맵핑
evdev:name:2.4G Mouse:*
  ID_INPUT_KEY=1
  KEYBOARD_KEY_90003=key_leftmeta
  
# 키보드의 CapsLock키를 마우스의 왼쪽 버튼으로 맵핑
evdev:name:HOLDCHIP USB Gaming Keyboard:*
   ID_INPUT_MOUSE=1
   KEYBOARD_KEY_70039=btn_left

물론, 일반적으로는 CapsLock 키를 마우스 왼쪽 버튼으로 맵핑해 사용할 일은 없을 것입니다. 그래서 저의 경우에는 위와 같이 설정을 하지만, mouse 왼쪽 버튼의 경우 일단 주석처리를 해 놓고 있습니다.  어느날 마우스의 왼쪽 버튼에 갑자기 문제가 생긴 다면,  긴급하고 유용하게 대처할 때가 있을 것 입니다. ^^ 


만일, 원상복귀 즉, 초기상태로 되돌리고 싶다면, /etc/udev/hwdb.d/70-mouse-middle--button.hwdb 파일을 삭제 하거나 다른 폴더로 이동 시킨 후, sudo systemd-hwdb update와 sudo udevadm trigger 를 하고, rebooting 혹은 키보드나 마우스를 연결해제/재 연결 하면 됩니다. 

공유하기 링크
Comments