단일 장치 (Logitech 발표자)의 키맵을 어떻게 변경합니까?


20

내 Logitech R400 발표자는 다음 키 코드를 보냅니다.

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

기본적으로, 나는 다시 매핑하고 싶습니다 있도록 원격으로 밴시를 제어하려면이 발표자 사용할 PriorB, NextN, 등등을.

이 키 코드를 전체적으로 다시 매핑하고 싶지 않기 때문에이 장치의 키맵 만 변경하려면 어떻게해야합니까?


AFAIU "슬레이브 포인터"는 키보드가 아니라 마우스임을 의미합니다. 키맵을 마우스에로드 할 수 없습니다. 실제로 xinput 목록에있는 유일한 장치입니까?
Marius Gedminas

@MariusGedminas / dev / input / eventX 장치를 거쳐야하고 event5는 발표자이므로 결국 "키보드"인 것 같습니다.
htorque

답변:


15

나는 그렇게하지 않았지만 키 맵 파일을 만들고 /lib/udev/keymaps/장치에 대한 규칙을 추가 해야한다고 생각합니다./lib/udev/rules.d/95-keymap.rules


세부:

  • udev 키맵은 스캔 코드를 키 코드에 맵핑하므로 키맵 파일을 작성하려면 두 가지를 모두 찾아야합니다. 스캔 코드를 찾으려면 다음을 실행하고 장치의 버튼을 누르십시오.

    sudo /lib/udev/keymap -i input/event5
    

    event *에 대해 다른 숫자를 시도해야 할 수도 있습니다 . 출력은 다음과 같아야합니다.

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    키 코드 목록은 여기 에서 찾을 수 있습니다 .

    이제 키맵 파일을 작성하십시오 ( / lib / udev / keymaps / logitech-r400으로 저장함 ).

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    유용한 작업을 수행하지 않습니다. 테스트가 작동하는지 쉽게 확인할 수 있습니다.

  • 새 키맵을 임시로 테스트하려면 다음을 실행하십시오.

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    결과는 다음과 같습니다.

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    버튼이 이제 밝기를 변경해야합니다.

  • 변경 사항을 영구적 /lib/udev/rules.d/95-keymap.rules으로 유지하려면 장치에 키맵 파일을 적용 하는 udev 규칙을 추가해야합니다 .

    1. 파일을여십시오 : gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. 파일의 맨 아래에 있지만 LABEL="keyboard_end"줄 앞에 다음을 추가하십시오.

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. 저장, 닫기 및 재부팅 후 버튼이 밝기를 변경해야합니다.


오, 어떻게 잊어 버릴 수 있습니까 (/ lib / udev / keymaps / zepto-znote는 나에게 기여했습니다 : D). 나중에 귀하의 답변에 어떻게 작동하게했는지 더 자세히 설명하겠습니다.
htorque

이 답변에 키보드를 실행하여 "eventX"가 무엇인지 제로화 할 수 있다고 대답했습니다 /lib/udev/findkeyboards. 현재 연결된 모든 키보드가 나열되므로 너무 많이 시도하지 않아도됩니다. 로지텍 r400은 "USB 키보드 : 입력 / 이벤트 11"로 나타났습니다.
jat255

좋은 답변이지만 사용할 ID_VENDOR 및 idProduct를 어떻게 알 수 있습니까? 나는 시도 /sys/class/dmi/id/sys_vendor하고 /sys/class/dmi/id/product_name있지만 작동하지 않았다.
PutzKipa

2
/lib/udev/keymap그리고 /lib/udev/findkeyboards더 이상 13.10에 존재하지 않습니다. forum.ubuntu-fr.org/viewtopic.php?id=1395051 은 evtest를 대신 사용 하라고 말합니다.
Stéphane Gourichon

6
안녕하세요 @ htorque, 새로운 방법으로 답변을 업데이트 할 수 있습니까? 우분투 트러스티에는이 모든 파일들이 더 이상 존재하지 않습니다. 당신은 내가 같은 isue를 가진 그물에서 본 유일한 사람입니다.
londumas 2016 년

4

우분투 16.04에 있습니다. 여기 에 가이드를 만들었습니다

evtest로 감지

sudo evtest

장치 목록을보십시오.

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

첫 번째 "Logitech USB Receiver"를 받았습니다. 여기에 이벤트 ID 9가 있습니다.

Testing ... (interrupt to exit)

이제 evtest는 입력을 원합니다. Logitech 원격 버튼을 클릭하기 만하면됩니다.

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

참고 : [>]를 여러 번 클릭하면 7003e, 70029, 7003e 등이 발생한다는 것을 알았습니다. 이유를 모르겠습니다.

udev conf 수정

입력 코드가 생겼으니 udev conf를 보자 :

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

"R400"를 검색하고, 원하는에 의해 발표 및 displaytoggle을 대체 playpause & stopcd 화살표 키를 :

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

이전에 언급 한 바와 같이 07003e & 070029이 같은 버튼 때문에, 나는 그들에게 동일한 출력했다 최대 키를 누릅니다. 7004b & 7004e는 기본적으로 여기에 나타나지 않습니다. 아마도 기본 PAGEUP & PAGEDOWN 입력이고 "Logitech Presenter R400"과 관련이 없기 때문일 수 있습니다. 그것들을 추가합시다 :

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

여기 내 마지막 conf가 있습니다.

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

새로 고침 규칙

sudo udevadm hwdb --update

그런 다음 이전에 선택한 것과 동일한 이벤트 ID (여기서 이벤트 ID 9)를 사용하십시오.

sudo udevadm trigger /dev/input/event9

웹 브라우저에서이 새 매핑을 확인할 수 있습니다 (예 :

$('body').on('keydown', function(e){ console.log(e.key) })

그것은 나에게 주었다 :

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

GitHub의 원본 logitech-r400-remap.md 안내서에서 약간의 개선이 이루어졌습니다. 원하는 경우 언제든지 변경하거나 GitHub 웹 페이지에서 편집하십시오 (저에게 귀속 필요 없음). 귀하의 답변은 제 의견으로는 링크 일 뿐이므로 다운 투표되었습니다.
karel

downotes가 제거되었으므로 이제 귀하의 답변은 다른 답변과 마찬가지로 자체 장점으로 간주 될 수 있습니다.
karel

1
당신의 가이드를 사용했습니다. 매력처럼
코스타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.