Mengontrol gerakan mouse Bluetooth yang mendaftarkan acara keyboard

9

tl; dr

Saya baru saja membeli Logitech T630 . Ini adalah mouse Bluetooth yang mendukung beberapa acara keyboard melalui gerakan (PDF). Gerakan-gerakan ini baik-baik saja dan keren tetapi saya tidak banyak menggunakannya. Saya mengalami kesulitan menyingkirkan mereka.

Saya ingin melakukan hal berikut, dalam rangka mengurangi prioritas:

  1. nonaktifkan gerakan ini
  2. memetakan ulang gestur (saya pikir tanpa meretas firmware atau merekayasa balik driver perangkat Windows / OS X, ini tidak mungkin)

Saya tidak mau:

  • gunakan Windows
  • nonaktifkan semua gerakan

Untuk info lebih lanjut, baca terus ...

tombol dan gerakan

Tiga belas kemungkinan acara mouse adalah:

  1. klik kiri
  2. klik tengah
  3. klik kanan
  4. gulir ke atas
  5. gulir ke bawah
  6. gulir ke kiri
  7. gulir ke kanan
  8. geser ke kiri
  9. geser ke kanan
  10. geser dua jari ke kiri
  11. dua jari menggesek ke kanan
  12. ketuk dua kali
  13. ketuk dua jari dua kali

Tujuh yang pertama adalah dalam urutan bagaimana OS memetakannya.

Hanya tiga yang pertama yang mekanis — yang lainnya menggunakan permukaan sentuh:

sentuh gerakan

Opsi GUI

Mengatur di Kubuntu Trusty sangat mudah, tetapi ia menawarkan sedikit dukungan untuk mengonfigurasi gerakan lain ini.

Gerakan ini tidak terkait dengan:

  • touchpad ( synapticstidak aktif)
  • aksesibilitas
  • sudut panas
  • gerakan mouse standar

Semua pengaturan terkait dengan yang telah diperiksa dan semuanya mati.

pengaturan baris perintah

lomoco

The lomocoutilitas untuk bantuan configure fitur-fitur khusus dari Logitech USB tikus tidak berlaku.

xinput

Saya pikir xinputmungkin menawarkan bantuan:

$ 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

Perhatikan label 13 tombol:

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

Menonaktifkannya tidak membantu:

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

Meskipun demikian, misalnya, ini dapat mengubah tombol tengah mouse menjadi klik kiri:

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

xmodmap

Mirip dengan xinput, hasil yang sama:

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

inputkbd

Disarankan oleh elmicha di bawah ini, ini berfungsi pada level kernel, mencoba untuk membuat gestur menghasilkan peristiwa keyboard nol. Harus bekerja, tetapi tidak ada keberuntungan di sini, juga, dengan proses berikut:

$ 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

Setelah melakukan ini, keymap tidak menunjukkan perubahan.

xkbcomp

Ini disarankan oleh Xinput peretas Peter Hutterer , tentu saja seorang pria yang harus tahu apa yang dia lakukan. Tetap saja tidak berhasil:

$ 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

Setelah melakukan ini, deskripsi keyboard tidak menunjukkan perubahan.

Peter merasa bahwa ini kemungkinan disebabkan oleh fakta yang Xdikacaukan dengan sifat perangkat seperti keyboard atau mouse, seperti bug yang memiliki masalah sebaliknya. Ini mungkin menjelaskan mengapa semua barang yang diharapkan lainnya tidak berfungsi. Namun, ia juga mengatakan bahwa menggunakan evdevtidak boleh bekerja karena alasan yang sama.

evdev

Tampaknya pada awalnya berhasil, tetapi ternyata tidak. Upaya ini untuk meningkatkan pengandar input generik untuk Xmengatur pemetaan tombol dengan menambahkan berikut ini ke /usr/share/X11/xorg.conf.d/10-evdev.confatau /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

Ini tampaknya berfungsi tanpa kesalahan dalam /var/log/Xorg.0.log(menggunakan grep EE), dan xinputmengonfirmasi pemetaan tombol, tetapi tidak menghasilkan efek keinginan.

Ini adalah diketahui bekerja untuk T631, namun.

acara keyboard

Masalahnya terletak, saya pikir, pada kenyataan bahwa gerakan ini menghasilkan peristiwa keyboard:

$ 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) ----------

Sejauh menyangkut keymap , ini merujuk pada:

$ 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

Ketuk dua kali tampaknya tidak melakukan apa-apa.

referensi lain

Mungkin juga membantu untuk menunjukkan referensi ke masalah serupa dalam bug dengan mouse yang disebutkan di atas tidak ada dalam gnome-bluetoothdatabase kode PIN. Tak perlu dikatakan, komentar lebih lanjut tentang subjek secara resmi offtopic pada laporan bug itu, tetapi referensi dapat membantu menambah beberapa perspektif tentang sifat masalah ini.

Inilah output dari evemu-describe /dev/input/event4FWIW.

Adaptor Bluetooth

FWIW Saya telah menggunakan dua adapter USB Bluetooth yang berbeda:

$ 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
wxl
sumber
2
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Mitch
jadi saya menemukan masalah: Saya pikir Anda perlu menginstal ke VM Windows - driver Windows Logitech standar dan merujuk ke vmmouse_detectutilitas. xmodmapdan xinputdan bahkan xorg.confakan berguna di bawah Kubuntu Anda tetapi tidak di bawah Windows VM. Jadi di bawah WinVM Anda harus dapat mengkonfigurasi mouse Anda dengan utilitas Logitech standar untuk Windows.
Swift
Apakah Anda pernah memecahkan ini?
Seth
tidak, itu belum diperbaiki. punya ide?
wxl

Jawaban:

3

Setelah banyak kesakitan, saya berhasil membuat peta kunci yang melakukan sesuatu yang bermanfaat.

Beberapa catatan pertama (saya belum bisa berkomentar) pada jawaban sebelumnya:

  1. skrip fixMouse yang disediakan oleh cadangan Mr tidak berfungsi, karena kadang-kadang entri Keyboard mouse muncul dengan nama yang salah di xinput, yaitu dalam kasus saya ini menunjukkan:

    ⎡ 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)]
    

    di sisi lain Anda dapat menggunakan lsinput dari input-utils untuk menemukan id yang benar:

    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. untuk beberapa alasan saat membuang peta untuk mouse, beberapa kode digandakan (kode antara 0x700e0 dan 0x700e7), hati-hati untuk menemukan dan menghilangkannya, atau Anda akan menjadi gila.

  3. mengganti semua kode kunci dengan KEY_UNKNOWN mencegah ledakan karakter acak, tetapi menjadikan tindakan sentuhan khusus tidak berguna. Saya malah menemukan bahwa Anda dapat memetakan kembali beberapa gerakan menjadi kombinasi yang berguna. Secara khusus "gesek masuk dari kiri" mengirimkan kode 0x700e0 + 0x700e3 + 0x7002b, sedangkan "gesek masuk dari kanan" mengirim 0x700e3 + 0x700e3 + 0x70072. Saya memetakan 0x700e3, yang umum untuk kedua gerakan, ke KEY_UNKNOW, untuk menghindarinya. Kemudian saya menggunakan kode kunci yang tersisa untuk membuat CTRL + F8 (desktop grid) dan ALT-F2 (runner), tetapi tentu saja Anda dapat menghasilkan kombinasi dua tombol apa saja. Ini peta saya, berhati-hatilah saat menyalin / menempel agar tidak meninggalkan garis kosong dan tidak ada spasi kosong awal (mereka memecah input-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
    

Saya tidak bisa mendapatkan kode yang tepat untuk gesekan dua jari, tapi sekali lagi saya tidak peduli karena gerakan itu tidak mungkin dilakukan.

PS Jika Anda ingin mencoba menyesuaikan gerakan lain, berikut adalah cara saya melanjutkan:

  1. Saya mengurutkan entri peta, membersihkan duplikat, dan memperhatikan bahwa itu terdiri dari 252 simbol (ditambah 5 tombol).

  2. Saya mengatur sepuluh simbol pertama ke KEY_A, sepuluh berikut ke KEY_B dan seterusnya sampai 2 terakhir yang menjadi KEY_Z; lalu saya memuat peta ini.

  3. Saya melakukan gerakan di jendela teks (atau Anda dapat menggunakan "xbindkeys -mk") dan perhatikan huruf yang dihasilkan.

  4. Di peta saya mengubah semua huruf TIDAK diproduksi menjadi KEY_UNKNOWN, tiga yang tersisa menjadi KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, lalu saya memuat MAP baru ini.

  5. Saya melakukan gerakan lagi, perhatikan huruf / angka yang dihasilkan: ini adalah kode yang dapat didefinisikan untuk apa pun yang Anda butuhkan untuk membuat kombinasi tombol tertentu.

Lorenzo
sumber
2

Anda dapat mencoba menggunakan input-kbddari input-utilspaket:

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

Menggunakan indeks perangkat input (mis. 4 untuk /dev/input/event4, yang dapat ditemukan melalui lsinputyang tentu berbeda dari id yang digunakan dalam xinput), Anda dapat mengkonfigurasi ulang peta keyboard dengan mengumpankannya file dengan -fswitch, mis.

$ sudo input-kbd -f some-file 4

di mana some-filemengambil bentuk scancode = keycode|keyname, di mana yang berikut ini setara:

0x0001 = KEY_F9
0x0001 = 67

Anda dapat menemukan peta saat ini dengan sudo input-kbd 4. Karena Anda perlu membuka file dari /dev, Anda perlu menggunakan superuser untuk acara membaca ini.

Perhatikan juga, meskipun nama itu kelihatannya menyesatkan, ini juga berfungsi dengan mouse.

elmicha
sumber
Anda mungkin berada di mekanisme yang benar, tetapi, sayangnya melihat keymap , tidak jelas apa yang harus diubah scancode, terutama mengingat bahwa beberapa keynames sepenuhnya tidak terdefinisi. Mungkin jika Anda bisa menemukan mekanisme untuk mengetahui definisi keynames, itu akan sangat membantu. +1 untuk mendekat.
wxl
Apa yang terjadi jika Anda memetakan semua nilai KEY_ * menjadi 0 atau salah satu dari nilai KEY_UNKNOWN (mis. 240)? Atau apakah itu menonaktifkan beberapa gerakan yang ingin Anda pertahankan? Untuk menghasilkan peta baru, Anda dapat menyalurkan melalui peta saat ini awk '/KEY_/ { $3 = 240 } { print }'.
elmicha
Saya kira pertanyaannya adalah, di mana saya bisa mengetahui definisi KEY_UNKNOWN, atau dalam hal ini BTN_EXTRA,?
wxl
Anda dapat menggunakan sudo input-events 4untuk melihat tombol mouse mana. KEY_UNKNOWN (mudah-mudahan) tidak mencetak atau memicu tindakan apa pun.
elmicha
1
Definisi nama-nama kunci adalah di /usr/include/linux/input.h, yang menyatakan bahwa nama-nama tersebut dimodelkan setelah USB HUT 1.12 , yang mengatakan kode kunci 232-65535 adalah "Dicadangkan". input-kbd menggunakan name.shsana untuk membalikkan nama kunci -> pemetaan kode, untuk mengaktifkan input_kbd untuk mencetak nama untuk kode-kode kunci.
elmicha
2

Untuk menonaktifkan gerakan, Anda dapat mengubah pemetaan tombol dengan evdevdriver sehingga 6 "tombol" terakhir semua dinonaktifkan seperti:

  1. menambahkan yang berikut ke /usr/share/X11/xorg.conf.d/10-evdev.confatau /etc/X11/xorg.conf.d/10-evdev.conftergantung pada apa yang Anda miliki:

    # 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. memulai kembali Xserver dengansudo service lightdm restart

  3. konfirmasi dengan xinput --get-button-map "Ultrathin Touch Mouse"

Anda dapat mengubah nilai InputDevice Identifierjika Anda mau, tetapi penting untuk menyimpan nilai untuk InputDevice Namedan InputClass Identifiersebagai "Ultrathin Touch Mouse," karena ini adalah cara xinputmengenalinya.

Diuji dengan versi Mac, T631.

Jika Anda ingin sedikit informasi lebih lanjut evdev, posting blog ini oleh Joe Shaw sangat wawasan tentang bagaimana hal itu cocok dengan seluruh tumpukan input.

steev
sumber
Ini berpotensi solusi yang baik. Namun, saya tidak suka menggunakan Xfile konfigurasi, terutama yang didefinisikan secara global. Jalur peningkatan tertentu akan menimpa ini, yang tidak ideal. Selain itu, ini tidak ideal karena tidak jelas cara memetakan kembali kunci. Saya tidak mengatakan itu bukan solusi yang valid, tetapi ketika datang ke karunia jawaban lain mungkin menang. ☺ Akhirnya, ini menyedihkan bahwa ini tidak dapat diimplementasikan tanpa restart. Mungkin jika Anda bisa mencari cara untuk menghadapinya evdevsecara langsung, itu mungkin baik, tetapi saya belum menemukan hal seperti itu.
wxl
Dengan penuh hormat, saya pikir Anda meminta terlalu banyak. Tapi bagaimanapun, saya tidak memposting untuk mendapatkan hadiah, hanya untuk membantu mereka yang memiliki masalah serupa. Jika mereka memiliki sedikit kendala pada solusi maka Anda, maka itu akan berguna bagi mereka. Yang mengatakan, saya yakin jika Anda ingin me-restart X Anda bisa mencapai hasil yang sama tanpa me-reboot. Itu hanya akan sedikit berantakan. Tapi saya dengar ya tentang peningkatan. Saya harus sangat berhati-hati agar tidak merusak sesuatu selama pembaruan.
steev
1
dengan hormat, saya setuju, tetapi harapan saya selalu untuk membantu lebih dari sekedar diri saya sendiri. yang sedang berkata, saya sangat menghargai jawaban Anda, itulah sebabnya saya memberi ini +1!
wxl
baik, selamat karena milikmu benar-benar berfungsi;)
wxl
1
omg, aku salah. tampaknya berperilaku, tetapi saya gagal untuk benar-benar menguji evemu-record. tidak bekerja :(
wxl
1

Saya berhasil mengonfigurasi gerakan "geseran tepi kiri" dan "gesekan tepi kanan" menggunakan xbindkeys; ini mungkin bisa berlaku juga untuk sapuan jari dua, tapi saya tidak repot-repot dengan itu karena saya merasa sulit untuk melakukan pula.

Ini adalah .xbindkeysrc saya

    #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

Saya telah memetakannya ke cara pintas KDE yang berguna, tentu saja Anda dapat melakukan hal lain. Anda perlu menjalankan xbindkeys saat login, saya telah membuat file .desktop seperti yang dijelaskan dalam tutorial xbindkeys:

    #./.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

Lorenzo
sumber
1

Saya merasa frustrasi pada hal ini karena saya tidak pernah bisa membuatnya bekerja, terlepas dari semua solusi yang disediakan, termasuk yang disediakan oleh seseorang yang benar-benar menulis Xkode input. Yang mengatakan, saya berjalan menjauh dari itu dan hanya menggunakan mouse, dijalin dgn tali normal.

Kemarin saya menemukan Ultrathin dan memutuskan untuk mencobanya lagi dan Just Works ™.Ini benar setidaknya dalam arti bahwa alasan untuk pertanyaan ini adalah bahwa gerakan ini ditafsirkan dengan cara yang aneh dan mengacaukan alur kerja saya. Sekarang mereka tampaknya tidak memiliki efek nyata, kecuali bahwa menggesek tepi kiri memungkinkan saya untuk bertukar antara tab yang terakhir digunakan di Firefox.

Apa yang aneh adalah bahwa sama sekali tidak ada gerakan yang benar-benar dinonaktifkan. Semua 13 "tombol" dikembalikan oleh xinput --get-button-map "Ultrathin Touch Mouse". Juga grep Ultrathin /usr/share/X11/xorg.conf.dtidak mengembalikan apa pun. Tidak ada yang relevan NoSymbol(dan tidak ada VoidSymbolsama sekali) ditemukan xkbcompatau relevanKEY_UNKNOWN dengan input-kbd.

Di sisi lain, semuanya terlihat sama evemu-recordkecuali untuk kenyataan bahwa gerakan ketuk ganda hanya dilakukan sesederhana ituBTN_LEFT peristiwa .

Yang mengatakan, ada sesuatu yang berubah sehubungan dengan ini, tapi saya tidak yakin apa.

Juga, saya belum menguji memetakan hal-hal, tapi itu tidak benar-benar dalam lingkup pertanyaan aslinya.

wxl
sumber
0

Saya telah membaca semua jawaban, dan saya telah menulis skrip di input-kbd (bagian dari input-utils) untuk memperbaiki secara otomatis masalah ini.

Anda harus menjalankan fixMouse dari repositori ini setiap kali login. Itu akan:

  1. dengarkan dbus untuk mouse ini
  2. konfigurasikan semua penekanan tombol ke KEY_UNKNOWN

Fitur mouse standar (tombol kiri; gulir; dll.) Masih berfungsi dengan baik. Hanya tombol keyboard aneh yang dihentikan.

Ini bertahan dari penundaan, tidur bluetooth, mouse on-off, dll.

Ini bekerja untuk saya.

Berend
sumber