멀티미디어 키보드 재매핑

멀티미디어 키보드 재매핑

키보드와 멀티미디어 버튼이 모두 있는 G7BTS 리모컨이 있습니다. "확인" 버튼을 제외한 대부분의 버튼은 잘 작동합니다.

확인 버튼에는 KEY_SELECT를 의미하는 키코드 353이 있습니다. 하지만 내 우분투 20.04는 그것을 인식하지 못합니다.

다음은 제가 수행한 몇 가지 연구입니다.

  1. sudo evtest

산출:

/dev/input/event9:  G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
  1. grep "" /sys/class/input/event11/device/id/*

산출:

/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300
  1. sudo evtest /dev/input/event11

산출:

Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------
  1. /etc/udev/hwdb.d/60-keyboard.hwdb

확인 버튼을 '입력'으로 다시 매핑하려고 했습니다.

60-keyboard.hwdb 파일 내용:

# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

산출:

KEYBOARD_KEY_c0041=enter

지금까지는 확인 버튼을 눌러도 xev에서 어떤 출력도 볼 수 없습니다.

어떤 제안이나 도움이라도 주시면 감사하겠습니다.

답변1

모두 감사합니다.

해결책을 찾는 데 며칠이 걸렸고, 마침내 올바른 방법을 찾았습니다.

참조

스캔코드를 키코드에 매핑

배경

X 프로토콜 버전 11은 단일 바이트 키 코드만 지원합니다. 따라서 255 이상의 키 코드는 무시됩니다. Ubuntu 20.04 LTS는 지금까지 X 프로토콜 버전 11을 사용합니다.

내 G7BTS 원격 키보드에 "확인" 버튼이 있습니다. 이 버튼의 키 코드는 353입니다. “xev” 내에서는 이 버튼을 눌러도 아무 일도 일어나지 않습니다.

해결책

간단히 말해서 해결책은 특정 키를 다른 키에 다시 매핑하는 데 사용되는 hwdb 구성 파일을 만드는 것입니다.

udev

udev는 /etc/udev/hwdb.bin에서 하드웨어 데이터베이스 인덱스를 유지하기 위해 hwdb라는 내장 함수를 제공합니다. 데이터베이스는 /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ 및 /etc/udev/hwdb.d/ 디렉토리에 있는 .hwdb 확장자를 가진 파일에서 컴파일됩니다. 기본 스캔코드-키코드 매핑 파일은 /usr/lib/udev/hwdb.d/60-keyboard.hwdb입니다.

USB 커널 모달리아로 식별되는 일반 입력 장치(또한 USB 키보드):

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

여기서 <bus_id>, <vendor_id> 및 <version_id>는 4자리 16진수 대문자 공급업체, 제품 및 버전 ID입니다.

위의 ID를 찾는 방법이 핵심입니다.

install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

또 다른 중요한 점은 "확인" 버튼의 스캔 코드를 얻는 것입니다.

install evtest
sudo apt-get install evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:    Lid Switch
/dev/input/event1:    Sleep Button
/dev/input/event2:    Power Button
/dev/input/event3:    AT Translated Set 2 keyboard
/dev/input/event4:    SynPS/2 Synaptics TouchPad
/dev/input/event5:    TPPS/2 IBM TrackPoint
/dev/input/event6:    ThinkPad Extra Buttons
/dev/input/event7:    Video Bus
/dev/input/event8:    Integrated Camera: Integrated C
/dev/input/event9:    G7BTS Keyboard
/dev/input/event10:    G7BTS Mouse
/dev/input/event11:    G7BTS Consumer Control
/dev/input/event12:    G7BTS System Control
/dev/input/event13:    HDA Intel PCH Mic
/dev/input/event14:    HDA Intel PCH Dock Mic
/dev/input/event15:    HDA Intel PCH Headphone
/dev/input/event16:    HDA Intel PCH Dock Headphone
/dev/input/event17:    HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11:    HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19:    HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C

"/dev/input/event11"에 주의하세요.

sudo evtest /dev/input/event11

그런 다음 “확인” 버튼을 누르면 아래와 같이 출력됩니다.

Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------

"값 c0041"에 주의하세요. 이 값 c0041은 “OK” 버튼의 스캔 코드입니다.

hwdb 파일을 만드세요

이제 필요한 ID와 스캔 코드가 생겼습니다. 위의 "usb 커널 모달리아로 식별된 일반 입력 장치(또는 USB 키보드)"에 입력하면 마지막으로 아래 구성 파일 G7BTS.hwdb가 있습니다.

evdev:input:b0005v045Ep0041e0300*
 KEYBOARD_KEY_c0041=enter

컨텍스트에서 "확인" 버튼은 "입력" 키에 매핑됩니다. 원하는 키에 매핑할 수 있습니다.

파일을 대상에 넣기

sudo mv G7BTS.hwdb /etc/udev/hwdb.d/

업데이트

sudo udevadm hwdb --update
sudo udevadm trigger --verbose 

시험

sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'

결과는

KEYBOARD_KEY_c0041=enter

이것이 키를 다시 매핑하는 모든 단계입니다. 재매핑은 재부팅 후에도 계속 작동합니다.

답변2

다음의 정보를 사용하여 Ubuntu 20.04에서 작동하는 외부 키보드를 얻었습니다.https://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/

  1. sudo evtest다음과 같이 키보드에 대한 정보를 찾는 데 사용됩니다 .
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
  1. sudo evemu-describe선행 0을 포함하여 키보드의 속성을 찾는 데 사용됩니다 . 출력에서 다음과 같은 내용을 찾을 수 있습니다.
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
  1. 당신처럼 .hwdb 파일을 생성하지만앞에 오는 000을 모두 포함, 그리고16진수 기호는 대문자로 입력하세요.좋다:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*

  1. 시스템을 재부팅할 필요는 없습니다. 다음을 수행하세요.
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. 키보드가 올바르게 매핑되었는지 확인할 수 있습니다 $ udevadm info /dev/input/event20(event20을 키보드 이벤트로 교체).

관련 정보