키보드 이벤트를 등록하는 Bluetooth 마우스 제스처 제어


9

tl; dr

방금 Logitech T630을 구입했습니다 . 제스처 를 통해 여러 키보드 이벤트를 지원하는 Bluetooth 마우스입니다 (PDF). 이 제스처는 훌륭하고 멋지지만 나는 거의 사용하지 않습니다. 나는 그들을 제거하는 끔찍한 시간을 보내고 있습니다.

우선 순위를 낮추는 순서로 다음을 수행하고 싶습니다.

  1. 이 제스처를 비활성화
  2. 제스처 재 맵핑 (펌웨어를 해킹하거나 Windows / OS X 장치 드라이버를 리버스 엔지니어링하지 않으면 불가능합니다)

나는 원하지 않는다 :

  • 윈도우 사용
  • 모든 제스처를 비활성화

자세한 내용은 다음을 참조하십시오.

버튼과 제스처

13 가지 가능한 마우스 이벤트는 다음과 같습니다.

  1. 왼쪽 클릭
  2. 가운데 클릭
  3. 마우스 오른쪽 버튼으로 클릭
  4. 스크롤
  5. 아래로 스크롤
  6. 왼쪽으로 스크롤
  7. 오른쪽으로 스크롤
  8. 왼쪽으로 스 와이프
  9. 오른쪽으로 스 와이프
  10. 두 손가락으로 왼쪽으로 스 와이프
  11. 두 손가락으로 오른쪽으로 스 와이프
  12. 더블 탭
  13. 두 손가락 더블 탭

처음 7 개는 OS가 어떻게 매핑하는 순서대로되어 있습니다.

처음 세 개만 기계식입니다. 다른 모든 것은 터치 표면을 사용합니다.

터치 제스처

GUI 옵션

Kubuntu Trusty 에서 설정하는 것은 바람이 불었지만 이러한 다른 제스처 구성을 거의 지원하지 않습니다.

이 제스처는 다음과 관련이 없습니다.

  • 터치 패드 ( synaptics실행 중이 아님)
  • 접근성
  • 핫 코너
  • 표준 마우스 제스처

해당 설정과 관련된 모든 설정이 확인되었으며 모두 꺼져 있습니다.

명령 줄 설정

lomoco

lomocoLogitech USB 마우스의 특수 기능을 구성하는 데 도움 이되는 유틸리티는 해당되지 않습니다.

xinput

xinput도움이 될 수 있다고 생각했습니다 .

$ xinput --list | grep pointer
 Virtual core pointer                          id=2    [master pointer  (3)]
    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    Ultrathin Touch Mouse                     id=13   [slave  pointer  (2)]
$ xinput --list-props 13
Device 'Ultrathin Touch Mouse':
    Device Enabled (144):   1
    Coordinate Transformation Matrix (146): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (266): 0
    Device Accel Constant Deceleration (267):   1.000000
    Device Accel Adaptive Deceleration (268):   1.000000
    Device Accel Velocity Scaling (269):    10.000000
    Device Product ID (261):    1133, 45069
    Device Node (262):  "/dev/input/event11"
    Evdev Axis Inversion (270): 0, 0
    Evdev Axes Swap (272):  0
    Axis Labels (273):  "Rel X" (154), "Rel Y" (155), "Rel Horiz Wheel" (746), "Rel Vert Wheel" (265)
    Button Labels (274):    "Button Left" (147), "Button Middle" (148), "Button Right" (149), "Button Wheel Up" (150), "Button Wheel Down" (151), "Button Horiz Wheel Left" (152), "Button Horiz Wheel Right" (153), "Button Side" (1032), "Button Extra" (1033), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264)
    Evdev Middle Button Emulation (275):    0
    Evdev Middle Button Timeout (276):  50
    Evdev Third Button Emulation (277): 0
    Evdev Third Button Emulation Timeout (278): 1000
    Evdev Third Button Emulation Button (279):  3
    Evdev Third Button Emulation Threshold (280):   20
    Evdev Wheel Emulation (281):    0
    Evdev Wheel Emulation Axes (282):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (283):    10
    Evdev Wheel Emulation Timeout (284):    200
    Evdev Wheel Emulation Button (285): 4
    Evdev Drag Lock Buttons (286):  0

13 개의 버튼 레이블에 유의하십시오.

$ xinput --get-button-map "Ultrathin Touch Mouse"
1 2 3 4 5 6 7 8 9 10 11 12 13

그것들을 끄는 것은 도움이되지 않았습니다 :

$ xinput --set-button-map "Ultrathin Touch Mouse" 1 2 3 4 5 6 7 0 0 0 0 0 0

예를 들어 마우스 가운데 버튼을 왼쪽 클릭으로 바꿀 수 있습니다 .

$ xinput --set-button-map "Ultrathin Touch Mouse" 1 1 3 4 5 6 7 0 0 0 0 0 0

xmodmap

와 비슷한 xinput결과 :

$ xmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 0 0 0 0"

inputkbd

아래의 elmicha가 제안한 이것은 커널 수준에서 작동하며 제스처로 인해 키보드 이벤트가 발생하지 않도록합니다. 다음 프로세스로 작동하지만 운이 좋지는 않습니다.

$ sudo input-kbd 4 > keymap # note the 4 is from /dev/input/event4
# edit the keymap to map any combination of keys to either 0 or 240 (KEY_UNKNOWN)
# e.g. change this:
# 0x700e0 =  29 # KEY_LEFTCTRL
# to this:
# 0x700e0 =   0 # KEY_LEFTCTRL
# or this:
# 0x700e0 = 240 # KEY_LEFTCTRL
$ sudo input-kbd -f keymap 4
$ sudo input-kbd 4 # should return the updated keymap

이 작업을 수행 한 후 키맵에는 아무런 변화가 없습니다.

xkbcomp

이것은 X입력 해커 Peter Hutterer 가 제안한 것입니다. 여전히 운이 없다 :

$ xkbcomp -xkb $DISPLAY t630.xkb
# edit the keyboard description and replace the definition of any key to NoSymbol or VoidSymbol
# e.g. change this:
#     key <LCTL> {         [       Control_L  ] };
# to this:
#     key <LCTL> {         [       NoSymbol   ] };
# or this:
#     key <LCTL> {         [       VoidSymbol ] };
$ sudo xkbcomp -i 8 t630.xkb $DISPLAY # here the 8 is the id in xinput, names don't work
$ xkbcomp -xkb -i 8 $DISPLAY - # should return the updated keyboard description

이렇게 한 후에 키보드 설명에는 아무런 변화가 없습니다.

베드로는이 사실 때문에 가능성 것을 느꼈다 X가지처럼 키보드 나 마우스와 같은 장치의 특성으로 혼란 이 버그 반대의 문제가있다. 이것은 다른 모든 예상 항목이 작동하지 않는 이유를 설명 할 수 있습니다. 그러나 그는 또한 evdev같은 이유로 사용 해서는 안된다고 말했다 .

evdev

처음에는 작동하는 것 같았지만 작동하지 않습니다. 이 시도에 대한 일반적인 입력 드라이버를 활용하기 X에 다음을 추가하여 버튼 매핑을 설정하는 /usr/share/X11/xorg.conf.d/10-evdev.conf또는 /etc/X11/xorg.conf.d/10-evdev.conf:

# custom for Logitech Ultrathin Touch mouse

Section "InputDevice"
    Identifier "Logitech bluetooth Touch Mouse"
    Driver "evdev"
    Option "Name"   "Ultrathin Touch Mouse"
    Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection

Section "InputClass"
    Identifier  "Ultrathin Touch Mouse"
    Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection

이것은 /var/log/Xorg.0.log(을 사용하여 grep EE) 오류없이 작동하는 것으로 보이고 xinput버튼 매핑을 확인하지만 욕구 효과는 발생하지 않습니다.

이것은 되고 있지만, T631를위한 작업에 알려져 있습니다.

키보드 이벤트

문제는 이러한 제스처가 키보드 이벤트를 생성한다는 사실에 있습니다.

$ sudo evemu-record /dev/input/event4 | grep "E: "
# swipe edge right
E: 0.000000 0004 0004 458976    # EV_MSC / MSC_SCAN             458976
E: 0.000000 0001 001d 0001      # EV_KEY / KEY_LEFTCTRL         1
E: 0.000000 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 0.000000 0001 007d 0001      # EV_KEY / KEY_LEFTMETA         1
E: 0.000000 0004 0004 458795    # EV_MSC / MSC_SCAN             458795
E: 0.000000 0001 000f 0001      # EV_KEY / KEY_TAB              1
E: 0.000000 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
E: 0.002980 0004 0004 458976    # EV_MSC / MSC_SCAN             458976
E: 0.002980 0001 001d 0000      # EV_KEY / KEY_LEFTCTRL         0
E: 0.002980 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 0.002980 0001 007d 0000      # EV_KEY / KEY_LEFTMETA         0
E: 0.002980 0004 0004 458795    # EV_MSC / MSC_SCAN             458795
E: 0.002980 0001 000f 0000      # EV_KEY / KEY_TAB              0
E: 0.002980 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
# swipe edge left
E: 3.306977 0004 0004 458978    # EV_MSC / MSC_SCAN             458978
E: 3.306977 0001 0038 0001      # EV_KEY / KEY_LEFTALT          1
E: 3.306977 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 3.306977 0001 007d 0001      # EV_KEY / KEY_LEFTMETA         1
E: 3.306977 0004 0004 458866    # EV_MSC / MSC_SCAN             458866
E: 3.306977 0001 00c1 0001      # EV_KEY / KEY_F23              1
E: 3.306977 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
E: 3.310979 0004 0004 458978    # EV_MSC / MSC_SCAN             458978
E: 3.310979 0001 0038 0000      # EV_KEY / KEY_LEFTALT          0
E: 3.310979 0004 0004 458979    # EV_MSC / MSC_SCAN             458979
E: 3.310979 0001 007d 0000      # EV_KEY / KEY_LEFTMETA         0
E: 3.310979 0004 0004 458866    # EV_MSC / MSC_SCAN             458866
E: 3.310979 0001 00c1 0000      # EV_KEY / KEY_F23              0
E: 3.310979 0000 0000 0000      # ------------ SYN_REPORT (0) ----------
# two finger double tap
E: 10.225976 0004 0004 458983   # EV_MSC / MSC_SCAN             458983
E: 10.225976 0001 007e 0001     # EV_KEY / KEY_RIGHTMETA        1
E: 10.225976 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 10.229986 0004 0004 458983   # EV_MSC / MSC_SCAN             458983
E: 10.229986 0001 007e 0000     # EV_KEY / KEY_RIGHTMETA        0
E: 10.229986 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
# two finger swipe left
E: 27.934977 0004 0004 589828   # EV_MSC / MSC_SCAN             589828
E: 27.934977 0001 0113 0001     # EV_KEY / BTN_SIDE             1
E: 27.934977 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 27.937983 0004 0004 589828   # EV_MSC / MSC_SCAN             589828
E: 27.937983 0001 0113 0000     # EV_KEY / BTN_SIDE             0
E: 27.937983 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
# two finger swipe right
E: 32.513990 0004 0004 589829   # EV_MSC / MSC_SCAN             589829
E: 32.513990 0001 0114 0001     # EV_KEY / BTN_EXTRA            1
E: 32.513990 0000 0000 0000     # ------------ SYN_REPORT (0) ----------
E: 32.516994 0004 0004 589829   # EV_MSC / MSC_SCAN             589829
E: 32.516994 0001 0114 0000     # EV_KEY / BTN_EXTRA            0
E: 32.516994 0000 0000 0000     # ------------ SYN_REPORT (0) ----------

지금까지 한 키 맵을 우려, 이들은 다음을 참조하십시오

$ sudo input-kbd 4 | grep -e KEY_LEFTCTL -e KEY_LEFTMETA -e KEY_TAB -e KEY_LEFTALT -e KEY_F23 -e KEY_RIGHTMETA -e BTN_SIDE -e BTN_EXTRA
0x700e2 =  56  # KEY_LEFTALT
0x700e3 = 125  # KEY_LEFTMETA
0x700e7 = 126  # KEY_RIGHTMETA
0x7002b =  15  # KEY_TAB
0x70072 = 193  # KEY_F23
0x700e2 =  56  # KEY_LEFTALT
0x700e3 = 125  # KEY_LEFTMETA
0x700e7 = 126  # KEY_RIGHTMETA
0x90004 = 275  # BTN_SIDE
0x90005 = 276  # BTN_EXTRA

더블 탭으로 아무것도하지 않는 것 같습니다.

다른 참조

또한 핀 코드 데이터베이스 에 언급되지 않은 마우스 의 버그 에서 유사한 문제에 대한 참조를 지적하는 데 도움이 될 수 있습니다 gnome-bluetooth. 말할 필요도없이이 주제에 대한 추가 논평은 해당 버그 보고서에서 공식적으로 벗어난 주제이지만이 참조는이 문제의 성격에 대한 관점을 추가하는 데 도움이 될 수 있습니다.

evemu-describe /dev/input/event4FWIW 의 결과는 다음과 같습니다 .

블루투스 어댑터

FWIW 두 가지 다른 USB Bluetooth 어댑터를 사용했습니다.

$ lsusb | grep Bluetooth
Bus 007 Device 010: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ lsusb | grep Bluetooth
Bus 007 Device 011: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0

2
의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Mitch

그래서 나는 문제를 알아 냈습니다 : Windows VM-표준 Windows Logitech 드라이버에 설치하고 vmmouse_detect유틸리티를 참조해야한다고 생각 합니다. xmodmap그리고 xinput심지어 xorg.conf윈도우 VM에서 당신의 쿠분투에서 유용하지만 것입니다. 따라서 WinVM에서는 Windows 용 표준 Logitech 유틸리티를 사용하여 마우스를 구성 할 수 있어야합니다.
스위프트

이 문제를 해결 한 적이 있습니까?
세스

아니, 그것은 수정되지 않았습니다. 아이디어가 있습니까?
wxl

답변:


3

많은 고통을 겪은 후, 유용한 무언가를하는 키 맵을 만들었습니다.

먼저 이전 답변에 대한 몇 가지 메모 (아직 언급 할 수 없음) :

  1. Mr 백업에서 제공하는 fixMouse 스크립트가 작동하지 않는 경우가 있습니다. 때때로 마우스의 키보드 항목이 xinput에 잘못된 이름으로 표시되기 때문에 제 경우에는 다음과 같이 표시됩니다.

    ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
    ...
    ⎜   ↳ Ultrathin Touch Mouse                     id=11   [slave  pointer  (2)]
    ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    
    ...
        ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    

    반면에 input-utils에서 lsinput을 사용하여 올바른 ID를 찾을 수 있습니다.

    lsinput 2>&1|grep -B5 "Ultrathin Touch Mouse"
    /dev/input/event12
       bustype : BUS_BLUETOOTH
       vendor  : 0x46d
       product : 0xb00d
       version : 1792
       name    : "Ultrathin Touch Mouse"
    
  2. 어떤 이유로 마우스에 대한 맵을 덤프 할 때 일부 코드가 복제되어 (0x700e0과 0x700e7 사이), 코드를 찾아서 제거하거나 조심해야합니다.

  3. 모든 키 코드를 KEY_UNKNOWN으로 바꾸면 임의의 문자가 터지지 않지만 특수 터치 동작은 쓸모 없게됩니다. 대신 제스처 중 일부를 유용한 조합으로 다시 매핑 할 수 있습니다. 특히 "왼쪽에서 스 와이프"는 코드 0x700e0 + 0x700e3 + 0x7002b를 전송하고 "오른쪽에서 스 와이프"는 0x700e3 + 0x700e3 + 0x70072를 전송합니다. 두 제스처에 공통적 인 0x700e3을 KEY_UNKNOW에 매핑하여 방해를받지 않았습니다. 그런 다음 나머지 키 코드를 사용하여 CTRL + F8 (데스크톱 그리드) 및 ALT-F2 (러너)를 만들었지 만 물론 두 키의 조합을 생성 할 수 있습니다. 다음은 내지도입니다. 복사 / 붙여 넣기시 빈 줄과 초기 공백을 남기지 않도록주의하십시오 (입력 -kbd를 끊습니다).

    0x700e3 = KEY_UNKNOWN
    0x700e0 = KEY_LEFTCTRL
    0x7002b = KEY_F8
    0x700e2 = KEY_LEFTALT
    0x70072 = KEY_F2
    0x70004 = KEY_UNKNOWN
    0x70005 = KEY_UNKNOWN
    0x70006 = KEY_UNKNOWN
    0x70007 = KEY_UNKNOWN
    0x70008 = KEY_UNKNOWN
    0x70009 = KEY_UNKNOWN
    0x7000a = KEY_UNKNOWN
    0x7000b = KEY_UNKNOWN
    0x7000c = KEY_UNKNOWN
    0x7000d = KEY_UNKNOWN
    0x7000e = KEY_UNKNOWN
    0x7000f = KEY_UNKNOWN
    0x70010 = KEY_UNKNOWN
    0x70011 = KEY_UNKNOWN
    0x70012 = KEY_UNKNOWN
    0x70013 = KEY_UNKNOWN
    0x70014 = KEY_UNKNOWN
    0x70015 = KEY_UNKNOWN
    0x70016 = KEY_UNKNOWN
    0x70017 = KEY_UNKNOWN
    0x70018 = KEY_UNKNOWN
    0x70019 = KEY_UNKNOWN
    0x7001a = KEY_UNKNOWN
    0x7001b = KEY_UNKNOWN
    0x7001c = KEY_UNKNOWN
    0x7001d = KEY_UNKNOWN
    0x7001e = KEY_UNKNOWN
    0x7001f = KEY_UNKNOWN
    0x70020 = KEY_UNKNOWN
    0x70021 = KEY_UNKNOWN
    0x70022 = KEY_UNKNOWN
    0x70023 = KEY_UNKNOWN
    0x70024 = KEY_UNKNOWN
    0x70025 = KEY_UNKNOWN
    0x70026 = KEY_UNKNOWN
    0x70027 = KEY_UNKNOWN
    0x70028 = KEY_UNKNOWN
    0x70029 = KEY_UNKNOWN
    0x7002a = KEY_UNKNOWN
    0x7002c = KEY_UNKNOWN
    0x7002d = KEY_UNKNOWN
    0x7002e = KEY_UNKNOWN
    0x7002f = KEY_UNKNOWN
    0x70030 = KEY_UNKNOWN
    0x70031 = KEY_UNKNOWN
    0x70032 = KEY_UNKNOWN
    0x70033 = KEY_UNKNOWN
    0x70034 = KEY_UNKNOWN
    0x70035 = KEY_UNKNOWN
    0x70036 = KEY_UNKNOWN
    0x70037 = KEY_UNKNOWN
    0x70038 = KEY_UNKNOWN
    0x70039 = KEY_UNKNOWN
    0x7003a = KEY_UNKNOWN
    0x7003b = KEY_UNKNOWN
    0x7003c = KEY_UNKNOWN
    0x7003d = KEY_UNKNOWN
    0x7003e = KEY_UNKNOWN
    0x7003f = KEY_UNKNOWN
    0x70040 = KEY_UNKNOWN
    0x70041 = KEY_UNKNOWN
    0x70042 = KEY_UNKNOWN
    0x70043 = KEY_UNKNOWN
    0x70044 = KEY_UNKNOWN
    0x70045 = KEY_UNKNOWN
    0x70046 = KEY_UNKNOWN
    0x70047 = KEY_UNKNOWN
    0x70048 = KEY_UNKNOWN
    0x70049 = KEY_UNKNOWN
    0x7004a = KEY_UNKNOWN
    0x7004b = KEY_UNKNOWN
    0x7004c = KEY_UNKNOWN
    0x7004d = KEY_UNKNOWN
    0x7004e = KEY_UNKNOWN
    0x7004f = KEY_UNKNOWN
    0x70050 = KEY_UNKNOWN
    0x70051 = KEY_UNKNOWN
    0x70052 = KEY_UNKNOWN
    0x70053 = KEY_UNKNOWN
    0x70054 = KEY_UNKNOWN
    0x70055 = KEY_UNKNOWN
    0x70056 = KEY_UNKNOWN
    0x70057 = KEY_UNKNOWN
    0x70058 = KEY_UNKNOWN
    0x70059 = KEY_UNKNOWN
    0x7005a = KEY_UNKNOWN
    0x7005b = KEY_UNKNOWN
    0x7005c = KEY_UNKNOWN
    0x7005d = KEY_UNKNOWN
    0x7005e = KEY_UNKNOWN
    0x7005f = KEY_UNKNOWN
    0x70060 = KEY_UNKNOWN
    0x70061 = KEY_UNKNOWN
    0x70062 = KEY_UNKNOWN
    0x70063 = KEY_UNKNOWN
    0x70064 = KEY_UNKNOWN
    0x70065 = KEY_UNKNOWN
    0x70066 = KEY_UNKNOWN
    0x70067 = KEY_UNKNOWN
    0x70068 = KEY_UNKNOWN
    0x70069 = KEY_UNKNOWN
    0x7006a = KEY_UNKNOWN
    0x7006b = KEY_UNKNOWN
    0x7006c = KEY_UNKNOWN
    0x7006d = KEY_UNKNOWN
    0x7006e = KEY_UNKNOWN
    0x7006f = KEY_UNKNOWN
    0x70070 = KEY_UNKNOWN
    0x70071 = KEY_UNKNOWN
    0x70073 = KEY_UNKNOWN
    0x70074 = KEY_UNKNOWN
    0x70075 = KEY_UNKNOWN
    0x70076 = KEY_UNKNOWN
    0x70077 = KEY_UNKNOWN
    0x70078 = KEY_UNKNOWN
    0x70079 = KEY_UNKNOWN
    0x7007a = KEY_UNKNOWN
    0x7007b = KEY_UNKNOWN
    0x7007c = KEY_UNKNOWN
    0x7007d = KEY_UNKNOWN
    0x7007e = KEY_UNKNOWN
    0x7007f = KEY_UNKNOWN
    0x70080 = KEY_UNKNOWN
    0x70081 = KEY_UNKNOWN
    0x70082 = KEY_UNKNOWN
    0x70083 = KEY_UNKNOWN
    0x70084 = KEY_UNKNOWN
    0x70085 = KEY_UNKNOWN
    0x70086 = KEY_UNKNOWN
    0x70087 = KEY_UNKNOWN
    0x70088 = KEY_UNKNOWN
    0x70089 = KEY_UNKNOWN
    0x7008a = KEY_UNKNOWN
    0x7008b = KEY_UNKNOWN
    0x7008c = KEY_UNKNOWN
    0x7008d = KEY_UNKNOWN
    0x7008e = KEY_UNKNOWN
    0x7008f = KEY_UNKNOWN
    0x70090 = KEY_UNKNOWN
    0x70091 = KEY_UNKNOWN
    0x70092 = KEY_UNKNOWN
    0x70093 = KEY_UNKNOWN
    0x70094 = KEY_UNKNOWN
    0x70095 = KEY_UNKNOWN
    0x70096 = KEY_UNKNOWN
    0x70097 = KEY_UNKNOWN
    0x70098 = KEY_UNKNOWN
    0x70099 = KEY_UNKNOWN
    0x7009a = KEY_UNKNOWN
    0x7009b = KEY_UNKNOWN
    0x7009c = KEY_UNKNOWN
    0x7009d = KEY_UNKNOWN
    0x7009e = KEY_UNKNOWN
    0x7009f = KEY_UNKNOWN
    0x700a0 = KEY_UNKNOWN
    0x700a1 = KEY_UNKNOWN
    0x700a2 = KEY_UNKNOWN
    0x700a3 = KEY_UNKNOWN
    0x700a4 = KEY_UNKNOWN
    0x700a5 = KEY_UNKNOWN
    0x700a6 = KEY_UNKNOWN
    0x700a7 = KEY_UNKNOWN
    0x700a8 = KEY_UNKNOWN
    0x700a9 = KEY_UNKNOWN
    0x700aa = KEY_UNKNOWN
    0x700ab = KEY_UNKNOWN
    0x700ac = KEY_UNKNOWN
    0x700ad = KEY_UNKNOWN
    0x700ae = KEY_UNKNOWN
    0x700af = KEY_UNKNOWN
    0x700b0 = KEY_UNKNOWN
    0x700b1 = KEY_UNKNOWN
    0x700b2 = KEY_UNKNOWN
    0x700b3 = KEY_UNKNOWN
    0x700b4 = KEY_UNKNOWN
    0x700b5 = KEY_UNKNOWN
    0x700b6 = KEY_UNKNOWN
    0x700b7 = KEY_UNKNOWN
    0x700b8 = KEY_UNKNOWN
    0x700b9 = KEY_UNKNOWN
    0x700ba = KEY_UNKNOWN
    0x700bb = KEY_UNKNOWN
    0x700bc = KEY_UNKNOWN
    0x700bd = KEY_UNKNOWN
    0x700be = KEY_UNKNOWN
    0x700bf = KEY_UNKNOWN
    0x700c0 = KEY_UNKNOWN
    0x700c1 = KEY_UNKNOWN
    0x700c2 = KEY_UNKNOWN
    0x700c3 = KEY_UNKNOWN
    0x700c4 = KEY_UNKNOWN
    0x700c5 = KEY_UNKNOWN
    0x700c6 = KEY_UNKNOWN
    0x700c7 = KEY_UNKNOWN
    0x700c8 = KEY_UNKNOWN
    0x700c9 = KEY_UNKNOWN
    0x700ca = KEY_UNKNOWN
    0x700cb = KEY_UNKNOWN
    0x700cc = KEY_UNKNOWN
    0x700cd = KEY_UNKNOWN
    0x700ce = KEY_UNKNOWN
    0x700cf = KEY_UNKNOWN
    0x700d0 = KEY_UNKNOWN
    0x700d1 = KEY_UNKNOWN
    0x700d2 = KEY_UNKNOWN
    0x700d3 = KEY_UNKNOWN
    0x700d4 = KEY_UNKNOWN
    0x700d5 = KEY_UNKNOWN
    0x700d6 = KEY_UNKNOWN
    0x700d7 = KEY_UNKNOWN
    0x700d8 = KEY_UNKNOWN
    0x700d9 = KEY_UNKNOWN
    0x700da = KEY_UNKNOWN
    0x700db = KEY_UNKNOWN
    0x700dc = KEY_UNKNOWN
    0x700dd = KEY_UNKNOWN
    0x700de = KEY_UNKNOWN
    0x700df = KEY_UNKNOWN
    0x700e1 = KEY_UNKNOWN
    0x700e4 = KEY_UNKNOWN
    0x700e5 = KEY_UNKNOWN
    0x700e6 = KEY_UNKNOWN
    0x700e7 = KEY_UNKNOWN
    0x700e8 = KEY_UNKNOWN
    0x700e9 = KEY_UNKNOWN
    0x700ea = KEY_UNKNOWN
    0x700eb = KEY_UNKNOWN
    0x700ec = KEY_UNKNOWN
    0x700ed = KEY_UNKNOWN
    0x700ee = KEY_UNKNOWN
    0x700ef = KEY_UNKNOWN
    0x700f0 = KEY_UNKNOWN
    0x700f1 = KEY_UNKNOWN
    0x700f2 = KEY_UNKNOWN
    0x700f3 = KEY_UNKNOWN
    0x700f4 = KEY_UNKNOWN
    0x700f5 = KEY_UNKNOWN
    0x700f6 = KEY_UNKNOWN
    0x700f7 = KEY_UNKNOWN
    0x700f8 = KEY_UNKNOWN
    0x700f9 = KEY_UNKNOWN
    0x700fa = KEY_UNKNOWN
    0x700fb = KEY_UNKNOWN
    0x700fc = KEY_UNKNOWN
    0x700fd = KEY_UNKNOWN
    0x700fe = KEY_UNKNOWN
    0x700ff = KEY_UNKNOWN
    0x90001 = 272  # BTN_LEFT
    0x90002 = 273  # BTN_RIGHT
    0x90003 = 274  # BTN_MIDDLE
    0x90004 = 275  # BTN_SIDE
    0x90005 = 276  # BTN_EXTRA
    

두 손가락 스 와이프에 적합한 코드를 얻을 수 없었지만 제스처를 수행 할 수 없기 때문에 다시 신경 쓰지 않습니다.

추신 : 당신이 다른 제스처를 사용자 정의하려는 경우, 여기에 내가 진행 한 방법은 다음과 같습니다

  1. 지도 항목을 정렬하고 중복 항목을 정리 한 후 252 개의 기호 (플러스 5 개)로 구성되어 있음을 알았습니다.

  2. 처음 10 개 심볼을 KEY_A로, 다음 10 개를 KEY_B로, 마지막 2 개가 KEY_Z가 될 때까지 계속 설정했습니다. 그런 다음이지도를로드했습니다.

  3. 텍스트 창에서 제스처를 수행하거나 "xbindkeys -mk"를 사용하여 생성 된 문자를 기록합니다.

  4. 지도에서 생성되지 않은 모든 문자를 KEY_UNKNOWN으로 변경하고 나머지 3 개는 KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4로 변경 한 다음이 새 MAP을로드합니다.

  5. 제스처를 다시 수행하고 문자 / 숫자를 기록해 두십시오. 이는 특정 키 조합을 만드는 데 필요한 모든 것에 정의 할 수있는 코드입니다.


2

패키지 input-kbd에서 사용하려고 할 수 있습니다 input-utils.

$ apropos input-kbd
input-kbd (8)        - print or modify keyboard maps for input devices

입력 장치 색인 (예 : 에서 사용 된 id와 반드시 다른 /dev/input/event4것을 통해 찾을 수있는 4 for )을 lsinput사용 xinput하면 -f스위치 와 함께 파일을 제공하여 키보드 맵을 재구성 할 수 있습니다.

$ sudo input-kbd -f some-file 4

여기서의 some-file형식은 scancode = keycode|keyname다음과 같습니다.

0x0001 = KEY_F9
0x0001 = 67

에서 현재지도를 찾을 수 있습니다 sudo input-kbd 4. 에서 파일을 열어야하므로 /dev이벤트를 읽으려면 수퍼 유저를 사용해야합니다.

또한 오해의 소지가 있지만 마우스에서도 작동합니다.


올바른 메커니즘을 사용하고 있지만 불행히도 keymap을 살펴보면 특히 스캔 이름 중 일부가 완전히 정의되지 않은 경우 어떤 스캔 코드를 변경해야하는지 명확하지 않습니다. 아마도 키 이름의 정의를 찾는 메커니즘을 찾을 수 있다면 도움이 될 것입니다. 가까워지면 +1
wxl

모든 KEY_ *를 0 또는 KEY_UNKNOWN 값 중 하나 (예 : 240)에 매핑하면 어떻게됩니까? 아니면 유지하려는 제스처 중 일부가 비활성화됩니까? 새 맵을 생성하기 위해 현재 맵을 통해 파이프 할 수 awk '/KEY_/ { $3 = 240 } { print }'있습니다.
elmicha

나는 질문은, 어디의 정의를 찾을 수 있습니다 추측 KEY_UNKNOWN, 또는 그 문제에 대해 BTN_EXTRA?
wxl

sudo input-events 4어떤 마우스 버튼이 어떤 것인지 확인할 수 있습니다 . KEY_UNKNOWN (희망적으로)은 어떤 작업도 인쇄하거나 트리거하지 않습니다.
elmicha

1
키 이름의 정의는 /usr/include/linux/input.h에 있으며,이 이름은 USB HUT 1.12 이후에 이름이 표시되며 키 코드 232-65535는 "예약 됨"입니다. input-kbdname.sh거기에서 키 이름-> 코드 매핑을 반전시켜 input_kbd가 키 코드의 이름을 인쇄 할 수 있도록합니다.
elmicha

2

제스처를 비활성화하려면 evdev드라이버 와 버튼 매핑을 변경 하여 마지막 6 개의 "버튼"이 모두 다음과 같이 비활성화되도록 할 수 있습니다.

  1. 가지고 /usr/share/X11/xorg.conf.d/10-evdev.conf있거나 /etc/X11/xorg.conf.d/10-evdev.conf무엇에 따라 다음을 추가 :

    # custom for Logitech Ultrathin Touch mouse
    
    Section "InputDevice"
        Identifier "Logitech bluetooth Touch Mouse"
        Driver "evdev"
        Option "Name"   "Ultrathin Touch Mouse"
        Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
    EndSection
    
    Section "InputClass"
        Identifier  "Ultrathin Touch Mouse"
        Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
    EndSection
  2. X서버를 다시 시작sudo service lightdm restart

  3. ~로 확인하다 xinput --get-button-map "Ultrathin Touch Mouse"

당신은의 값을 변경할 수 있습니다 InputDevice Identifier당신이 원하는 경우에, 그러나 그것은의 값을 유지하는 것이 중요 InputDevice Name하고 InputClass Identifier,이 방법이기 때문에 ", 초슬림 터치 마우스"로 xinput그것을 인식합니다.

Mac 버전 T631에서 테스트되었습니다.

에 대해 좀 더 자세한 정보를 원한다면 Joe Shaw evdev의이 블로그 게시물 은 전체 입력 스택에 어떻게 적용되는지에 대해 특히 통찰력이 있습니다.


이것은 잠재적으로 좋은 해결책입니다. 그러나 X구성 파일, 특히 전역 적으로 정의 된 구성 파일을 사용하는 것을 싫어 합니다. 특정 업그레이드 경로는이 경로를 덮어 쓰므로 이상적이지 않습니다. 또한 키를 다시 매핑하는 방법이 명확하지 않기 때문에 이상적이지 않습니다. 나는 그것이 유효한 해결책이라고 말하지는 않지만 현상금에 관해서는 다른 대답이 이길 수 있습니다. ☺ 마지막으로, 다시 시작하지 않고 구현할 수없는 것은 당황스러운 일입니다. 어쩌면 당신이 evdev직접 처리 할 수있는 방법을 알아낼 수 있다면 좋을지 모르지만 나는 그런 것을 찾지 못했습니다.
wxl

존경스럽게도, 당신이 너무 많이 요구한다고 생각합니다. 그러나 어쨌든 나는 현상금을 받기 위해 게시하지 않았으며 비슷한 문제가있는 사람들을 돕기 위해 게시했습니다. 솔루션에 대한 제약이 적 으면 유용합니다. 즉, X를 다시 시작하려면 재부팅하지 않고도 동일한 결과를 얻을 수 있다고 확신합니다. 조금 지저분 할 것입니다. 그러나 업그레이드에 대해 나중에 들었습니다. 업데이트 중에 문제가 발생하지 않도록 매우 조심해야합니다.
steev

1
나는 정중하게 동의하지만, 내 희망은 항상 나 자신보다 더 많은 것을 돕는 것입니다. 즉, 귀하의 답변에 감사드립니다. 이것이 내가 +1 한 이유입니다!
wxl

글쎄, 당신의 실제로 작동하기 때문에 축하합니다;)
wxl

1
세상에, 나는 틀렸다. 그것은 행동하는 것처럼 보였지만 실제로 테스트하지 못했습니다 evemu-record. 작동하지 않습니다 :(
wxl

1

xbindkeys를 사용하여 "왼쪽 가장자리 스 와이프"및 "오른쪽 가장자리 스 와이프"동작을 구성했습니다. 이것은 아마도 두 손가락 스 와이프에도 적용될 수 있지만 어쨌든 수행하기가 어렵다는 것을 알았을 때 나는 귀찮게하지 않았습니다.

이것은 내 .xbindkeysrc입니다.

    #Right edge swipe (Send Alt+F2)
    "xte 'keydown Alt_L' 'key F2' 'keyup Alt_L'"
     Alt+Mod4+XF86TouchpadOff
    #Left edge swipe (Send CTRL+F8)
    "xte 'keydown Control_L' 'key F8' 'keyup Control_L'"
     Control+Mod4 + Tab

유용한 KDE 단축키에 매핑했습니다. 물론 다른 작업을 수행 할 수 있습니다. 로그인시 xbindkeys를 실행해야합니다. xbindkeys 튜토리얼에 설명 된대로 .desktop 파일을 만들었습니다.

    #./.config/autostart/xbindkeys.desktop
    [Desktop Entry]
    Comment[en_GB]=
    Comment=
    Exec=xbindkeys
    GenericName[en_GB]=
    GenericName=
    Icon=system-run
    MimeType=
    Name[en_GB]=
    Name=
    Path=
    StartupNotify=true
    Terminal=false
    TerminalOptions=
    Type=Application
    X-DBUS-ServiceName=
    X-DBUS-StartupType=
    X-KDE-SubstituteUID=false
    X-KDE-Username=

HTH


1

실제로 X입력 코드를 작성하는 사람이 제공하는 솔루션을 포함하여 제공된 모든 솔루션에도 불구하고 작동하지 않을 수 있기 때문에이 문제에 좌절했습니다 . 즉, 나는 그것을 멀리하고 정상적인 유선 마우스를 사용했습니다.

어제 나는 Ultrathin을 발견하고 다시 시도하기로 결정했습니다. 그리고 Just Works ™. 이것은 적어도이 질문에 대한 이유가 이러한 제스처가 이상한 방식으로 해석되어 내 작업 흐름을 망쳐 놓았 기 때문입니다. 이제 왼쪽 가장자리 스 와이프를 사용하면 Firefox에서 마지막으로 사용한 탭 사이를 바꿀 수 있다는 점을 제외하고는 실제 효과가없는 것 같습니다.

이상한 것은 제스처가 실제로 비활성화되어 있지 않다는 것입니다. 모든 13 개의 "버튼"이에 의해 반환됩니다 xinput --get-button-map "Ultrathin Touch Mouse". 또한 grep Ultrathin /usr/share/X11/xorg.conf.d아무것도 반환하지 않습니다. 아무 관련도 없다 NoSymbol의 (없이 VoidSymbol발견에 모두들) xkbcomp도 모든 관련 KEY_UNKNOWN과들 input-kbd.

반면에 evemu-record더블 탭 제스처가 단순한 BTN_LEFT이벤트 로 간주된다는 점을 제외하면 모든 것이 동일하게 보입니다 .

즉, 이것과 관련하여 무언가가 바뀌었지만 확실하지 않습니다.

또한 리 맵핑을 테스트하지는 않았지만 실제로는 원래 질문의 범위에 있지 않았습니다.


0

모든 답변을 읽었 으며이 문제를 자동 수정하기 위해 input-kbd (input-utils의 일부) 주위에 스크립트를 작성했습니다.

로그인 할 때마다이 저장소 에서 fixMouse를 실행해야합니다 . 그것은 :

  1. 이 마우스의 dbus 듣기
  2. 모든 키 입력을 KEY_UNKNOWN으로 구성

표준 마우스 기능 (왼쪽 버튼, 스크롤 등)은 여전히 ​​잘 작동합니다. 이상한 키보드 키만 중지됩니다.

그것은 일시 중단, 블루투스 슬립, 마우스 온 오프 등에서 살아남습니다.

그것은 나를 위해 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.