MS 키보드의 슬라이더를 작동시키려고 하는데 여전히 작동하지 않습니다.
내가 시도한 것:
존재하다/etc/udev/hwdb.d/61-keyboard-local.hwdb
keyboard:usb:v045Ep00DB*
KEYBOARD_KEY_c022d=up
KEYBOARD_KEY_c022e=down
그리고
evdev:input:b0003v045Ep00DB*
KEYBOARD_KEY_c022d=up
KEYBOARD_KEY_c022e=down
다음과 같은
sudo udevadm hwdb --update
sudo udevadm control --reload
다시 시작해도 아무 일도 일어나지 않았습니다.
존재하다/lib/udev/keymaps/microsoft-ergonomic-keyboard
0xC022D 0xC1 # Zoom Up which we wish to be Scroll up
0xC022E 0xC2 # Zoom Down which we wish to be Scroll down
다시 시작해도 아무 일도 일어나지 않았습니다.
존재하다/etc/X11/xorg.conf.d/10-keyboard.conf
Section "InputDevice"
Identifier "Keyboard1"
Driver "evdev"
Option "Device" "/dev/input/event9"
Option "event_key_remap" "418=185 419=186 423=101 425=156 421=157"
EndSection
다시 시작해도 아무 일도 일어나지 않았습니다.
내가 가진 것은
> sudo evtest /dev/input/event9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x45e product 0xdb version 0x111
Input device name: "Microsoft Natural® Ergonomic Keyboard 4000"
...
Testing ... (interrupt to exit)
Event: time 1478692111.766327, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.766327, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1
Event: time 1478692111.766327, -------------- SYN_REPORT ------------
Event: time 1478692111.886318, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.886318, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0
Event: time 1478692111.886318, -------------- SYN_REPORT ------------
Event: time 1478692112.678287, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.678287, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1
Event: time 1478692112.678287, -------------- SYN_REPORT ------------
Event: time 1478692112.798370, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.798370, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 0
Event: time 1478692112.798370, -------------- SYN_REPORT ------------
슬라이더가 작동하여 evtest
이벤트를 볼 수 있지만 xev
아무것도 표시되지 않습니다. 2016년에 제가 할 수 있는 일이 또 있을까요?
저는 4.4.0-34-generic 커널과 함께 Linux Mint 18 Sarah를 사용하고 있습니다.
답변1
배경: 귀하의 키보드는고압 가스 방전관USB 장치의 경우 커널은 슬라이더 키에 대한 HID USB 이벤트를 올바르게 인식하고 이를 키코드( KEY_ZOOMIN
sums KEY_ZOOMOUT
)로 변환합니다. 따라서 그 점에서는 이미 "작동"하고 있습니다. 이벤트를 수신하여 유용한 작업을 수행할 수 있습니다.
그러나 X 키보드 번역기는 최대 255개의 키코드만 지원합니다(참조:이 답변, 이는 X 프로토콜의 제한 사항입니다). 따라서 X 키 기호로 변환할 수 없습니다. (어쨌든 이것은 당신이 원하는 것이 아닐 수도 있습니다. 확대/축소는 일반적으로 응용 프로그램의 마우스 버튼 이벤트, 즉 버튼 4 및 5에 의해 처리되기 때문입니다. 따라서 키보드 기호로 변환하더라도 확대 또는 축소되지 않습니다.) .
그러나 당신이 하려는 것은 이미 키보드의 다른 키로 사용되는 위쪽 및 아래쪽 화살표 키와 마찬가지로 up및 키에 다시 매핑하려는 것처럼 보입니다.down
에서와 같이답변X가 255보다 큰 키코드를 다시 매핑할 수 있도록 링크됨누구생성됨패치 변형X
evdev
드라이버. 따라서 이 패치된 변형을 컴파일하고 설치해야 합니다.그 다음에옵션event_key_remap
이 인식됩니다. 표준 드라이버는 이를 인식하지 못하므로 입력이 아무 것도 하지 않는 것은 놀라운 일이 아닙니다evdev
.xorg.conf
아마도 이것이 가장 깨끗한 방법 일 것입니다.
모든 Linux를 인수하는 과정에서
systemd
이제 자체 하드웨어 데이터베이스도 갖게 되었으며 키맵을 무시할 수 있게 되었습니다. 이것이 커널의 어느 수준에서 작동하는지 잘 모르기 때문에 도움이 되는지 모르겠고 "하드웨어 데이터베이스"의 형식이 문서화되어 있지 않은 것 같습니다. 그래서 나는 그 점에 있어서는 당신에게 별로 도움을 줄 수 없습니다.그러나 일치하는 형식은변한 것 같아, 설명된 대로 버스 번호를 포함하면 운이 더 좋을 수도 있습니다.
편집하다: 커널 소스를 읽으면서 각 입력 장치에는 자체 스캔 코드(하드웨어에 따라 최대 8바이트, 많은 곳에서는 커널의 1/2/4바이트만 전송됨)와 키 코드(당신이 원하는 것은 무엇입니까?)가 있음을 발견했습니다. ) 번역 매핑을 참조하세요
evtest
. 온디바이스 및 ioctl을 사용하여EVIOCGKEYCODE_V2
큰 코드 값을 설정하고 얻을 수 있습니다. 일부 IR 수신기 관련 도구가 이러한 ioctl을 사용하는 것으로 보이지만EVIOCSKEYCODE_V2
이와 유사한 일반 도구xmodmap
는loadkeys/dumpkeys
존재하지 않는 것 같습니다. 이것이systemd
데이터베이스가 작동하는 방식 이라면 더 유연한 대안은udev
규칙에서 그러한 도구를 사용하는 것입니다(또한 테스트하기 더 쉽습니다). 지도를 덤프하기 위한 빠른 C 프로그램을 작성했습니다. 아마도 github에 올려야 할 것 같습니다...원칙적으로 이미 자신의 프로그램이나 스크립트를 사용하여 이벤트를 처리하고 원하는 작업을 수행할 수 있습니다. 예를 들어,
evtest
이를 실행하고 bash 스크립트를 사용하여 출력을 구문 분석한 다음xdotool
버튼을 4~5번 눌러 호출하면 슬라이더 버튼이 있는 마우스 휠과 동일한 효과를 얻을 수 있습니다. 등등 (비슷한 목적의 기본 스크립트로 stackexchange 질문이 있는데 지금은 못찾겠습니다. 필요하면 더 검색해보겠습니다.)