Klavye olaylarını kaydeden Bluetooth fare hareketlerini kontrol etme


9

tl; Dr.

Bir Logitech T630 satın aldım . Hareketler (PDF) aracılığıyla çeşitli klavye olaylarını destekleyen bir Bluetooth faresidir . Bu hareketler iyi ve züppe ama onlar için çok az kullanıyorum. Onlardan kurtulmak için korkunç bir zaman geçiriyorum.

Azalan önceliğe göre aşağıdakileri yapmak istiyorum:

  1. bu hareketleri devre dışı bırak
  2. hareketleri yeniden eşleştirin (Ürün yazılımını hacklemeden veya Windows / OS X aygıt sürücülerini tersine çevirmeden bu mümkün olmadığını düşünüyorum)

Yapmak istemiyorum:

  • Windows'u kullan
  • tüm hareketleri devre dışı bırak

Daha fazla bilgi için okumaya devam edin…

düğmeler ve jestler

Olası on üç fare olayı:

  1. sol tık
  2. Orta tıklama
  3. sağ tık
  4. yukarı kaydırmak
  5. Aşağı kaydır
  6. sola kaydır
  7. sağa kaydır
  8. kenarı sola kaydır
  9. kenarı sağa kaydır
  10. iki parmakla sola kaydırma
  11. iki parmağınızla sağa kaydırın
  12. çift ​​dokunma
  13. iki parmak çift dokunma

İlk yedi işletim sisteminin onları nasıl eşlediğini gösterir.

Sadece ilk üçü mekaniktir - diğerlerinin tümü dokunmatik yüzeyi kullanır:

dokunma hareketleri

GUI seçenekleri

Kubuntu Trusty'de kurmak bir esinti, ancak bu diğer hareketleri yapılandırmak için çok az destek sunuyor.

Bu hareketler aşağıdakilerle ilgili değildir:

  • dokunmatik yüzey ( synapticsçalışmıyor)
  • ulaşılabilirlik
  • sıcak köşeler
  • standart fare hareketleri

Bunlarla ilgili tüm ayarlar kontrol edildi ve hepsi kapalı.

komut satırı ayarları

lomoco

lomocoLogitech USB farelerin yardım yapılandırmak özel özelliklere yarar uygulanamaz.

xinput

xinputBazı yardımlar sunabileceğini düşündüm :

$ 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 düğme etiketine dikkat edin:

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

Onları kapatmak yardımcı olmadı:

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

Olsa bile, mesela, bu olabilir bir sol tıklama içine orta fare düğmesini çevirin:

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

xmodmap

Benzer xinputsonuçlar:

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

inputkbd

Aşağıdaki elmicha tarafından önerilen , bu çekirdek düzeyinde çalışıyor, hareketlerin boş klavye olaylarına neden olmasını sağlamaya çalışıyor. Çalışmalı, ancak aşağıdaki süreçte de şans yok:

$ 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

Bunu yaptıktan sonra, tuş haritası değişiklik göstermez.

xkbcomp

Bu, Xgiriş korsanı Peter Hutterer tarafından önerildi , kesinlikle ne yaptığını bilmesi gereken bir adam. Yine de şans yok:

$ 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

Bunu yaptıktan sonra, klavye açıklaması hiçbir değişiklik göstermez.

Peter, bunun muhtemelen Xcihazın doğasıyla ilgili bir klavye veya fare olarak karıştırılmasından kaynaklandığını, bunun tersi bir soruna sahip olan bu böcek gibi olduğunu hissetti . Bu, beklenen diğer tüm öğelerin neden çalışmadığını açıklayabilir. Bununla birlikte, evdevaynı nedenden ötürü kullanımın işe yaramaması gerektiğini de söyledi .

evdev

İlk başta işe yarıyor gibiydi, ama öyle de değil. Bu X, aşağıdakilere /usr/share/X11/xorg.conf.d/10-evdev.confveya ekleyerek düğme eşlemesini ayarlamak için genel giriş sürücüsünü kullanmaya çalışır /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

Bu, /var/log/Xorg.0.log(kullanımda grep EE) hatasız çalışıyor gibi görünüyor xinputve düğme eşlemesini onaylıyor, ancak arzu efekti ile sonuçlanmıyor.

Bu edilir ancak, T631 için çalışmalarına da bilinir.

klavye olayları

Sorun, bence, bu hareketlerin klavye olayları oluşturmasıdır:

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

Kadarıyla itibariyle keymap konusu olduğunda, bu bakınız:

$ 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

Çift dokunma hiçbir şey yapmıyor gibi görünüyor.

diğer referanslar

Yukarıda belirtilen farenin pin kodu veritabanında olmaması ile bir hatadaki benzer sorunlara bir referansı belirtmek de yardımcı olabilir gnome-bluetooth. Söylemeye gerek yok, konuyla ilgili daha fazla yorum, bu hata raporunda resmi olarak uygunsuzdur, ancak referanslar, bu sorunun doğası hakkında bir bakış açısı eklemeye yardımcı olabilir.

İşteevemu-describe /dev/input/event4 FWIW çıktısı .

Bluetooth adaptörleri

FWIW İki farklı USB Bluetooth adaptörü kullandım:

$ 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
Yorumlar uzun tartışmalar için değildir; bu sohbet sohbete taşındı .
Mitch

bu yüzden sorunu çözdüm: Windows VM standart Windows Logitech sürücünüze yüklemeniz ve vmmouse_detectyardımcı programa başvurmanız gerektiğini düşünüyorum . xmodmapve xinputhatta xorg.confKubuntu'nuz altında yararlı olacak, ancak Windows VM altında bile yararlı olmayacak. Bu nedenle WinVM altında farenizi Windows için standart Logitech yardımcı programlarıyla yapılandırabilmeniz gerekir.
hızlı

Bunu hiç çözdün mü?
Seth

hayır, düzeltilmedi. fikirleriniz mi var?
wxl

Yanıtlar:


3

Çok fazla acıdan sonra, yararlı bir şey yapan önemli bir harita oluşturmayı başardım.

İlk önceki cevap hakkında birkaç not (henüz yorum yapamam):

  1. Mr yedeklemesi tarafından sağlanan fixMouse betiği çalışmaz, çünkü bazen farenin Klavye girişi xinput'ta yanlış adla görünür, yani benim durumumda:

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

    Öte yandan doğru kimliği bulmak için input-utils öğesinden lsinput komutunu kullanabilirsiniz:

    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. bazı nedenlerden dolayı haritayı fare için boşaltırken, bazı kodlar çoğaltılır (0x700e0 ve 0x700e7 arasındakiler), bunları bulmaya ve ortadan kaldırmaya dikkat edin, yoksa delirirsiniz.

  3. tüm anahtar kodları KEY_UNKNOWN ile değiştirmek rastgele karakterlerin patlamasını önler, ancak özel dokunma eylemlerini işe yaramaz hale getirir. Bunun yerine bazı hareketleri yararlı kombinasyonlara yeniden eşleyebileceğinizi buldum. Özellikle "soldan hızlıca kaydır" kodu 0x700e0 + 0x700e3 + 0x7002b kodlarını gönderirken "sağdan hızlıca kaydır" 0x700e3 + 0x700e3 + 0x70072 gönderir. Her iki hareket için ortak olan 0x700e3'ü KEY_UNKNOW ile eşleştirdim. Sonra CTRL + F8 (masaüstü ızgarası) ve ALT-F2 (koşucu) yapmak için kalan anahtar kodlarını kullandım, ancak elbette iki tuşun herhangi bir kombinasyonunu oluşturabilirsiniz. İşte benim harita, boş satır ve başlangıç ​​boş boşluk bırakmak için kopyala / yapıştırırken dikkatli olun (giriş-kbd'yi kırıyorlar):

    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
    

İki parmak tokatlamak için uygun kodları alamadım, ancak yine umurumda değil çünkü bu hareketlerin gerçekleştirilmesi imkansız.

Not: Diğer hareketleri özelleştirmeyi denemek istiyorsanız, işte şöyle devam ettim:

  1. Harita girişlerini sıraladım, kopyaları temizledim ve 252 sembol (artı 5 düğme) içerdiğini fark ettim.

  2. İlk on sembolü KEY_A'ya, sonraki on sembolü KEY_B'ye ayarladım ve KEY_Z olan son 2'ye kadar devam ettim; sonra bu haritayı yükledim.

  3. Hareketleri metin pencerelerinde gerçekleştiririm (veya "xbindkeys -mk" kullanabilirsiniz) ve üretilen harfleri not alırım.

  4. Haritada üretilmeyen tüm harfleri KEY_UNKNOWN olarak değiştirdim, üçü de KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4 olarak değiştirdim, sonra bu yeni HARİTA'yı yüklüyorum.

  5. Hareketi tekrar yapıyorum, üretilen harfleri / sayıları not ediyorum: bu, belirli bir tuş kombinasyonu yapmak için ihtiyacınız olan her şeye tanımlanabilen kodlardır.


2

Kullanılacak deneyebilirsiniz input-kbdgelen input-utilspaketin:

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

Giriş cihazı dizinini kullanarak (örn. İçin kullanılan kimlikten mutlaka farklı /dev/input/event4olan 4 için ), klavye haritasını anahtarla bir dosyaya göndererek yeniden yapılandırabilirsiniz , örn.lsinputxinput-f

$ sudo input-kbd -f some-file 4

burada, aşağıdaki some-fileformun scancode = keycode|keynameeşdeğer olduğu şekli alır :

0x0001 = KEY_F9
0x0001 = 67

Mevcut haritayı ile bulabilirsiniz sudo input-kbd 4. Adlı dosyayı bir dosya açmanız /devgerektiğinden, olayı okumak için süper kullanıcı kullanmanız gerekir.

Ayrıca, görünüşte yanıltıcı bir isme rağmen, farelerle de çalıştığını unutmayın.


Sen ne yazık bakarak, sağ mekanizmasına üzerinde olabilir, ancak klavye haritası , özellikle bu anahtar adları bazı tamamen tanımsız göz önüne alındığında değişime ne scancode, belli değildir. Belki de anahtar adlarının tanımını bulmak için bir mekanizma bulabilirseniz, bu yararlı olacaktır. Yaklaşmak için +1.
wxl

Tüm KEY_ * değerlerini 0 ile veya KEY_UNKNOWN değerlerinden biriyle (örneğin 240) eşlerseniz ne olur? Yoksa bu, korumak istediğiniz bazı hareketleri devre dışı mı bırakıyor? Yeni haritayı oluşturmak için mevcut haritayı birbirine bağlayabilirsiniz awk '/KEY_/ { $3 = 240 } { print }'.
elmicha

Sanırım soru şu, KEY_UNKNOWNbu konunun tanımını nereden bulabilirim ya da bunun için BTN_EXTRA?
wxl

sudo input-events 4Hangi fare düğmesinin hangisi olduğunu görmek için kullanabilirsiniz . KEY_UNKNOWN (umarım) herhangi bir işlem yazdırmaz veya tetiklemez.
elmicha

1
Anahtar adlarının tanımı /usr/include/linux/input.h dosyasındadır. Bu, adların 232-65535 anahtar kodlarının "Ayrılmış" olduğunu belirten USB HUT 1.12'den sonra modelleneceğini belirtir. input-kbdname.sh , anahtar adını -> kod eşlemesini tersine çevirmek için orada kullanır ve input_kbd'nin anahtar kodları için adları yazdırmasını sağlar.
elmicha

2

Hareketleri devre dışı bırakmak için evdevsürücü ile düğme eşlemesini , son 6 "düğmenin" şu şekilde devre dışı bırakılacağı şekilde değiştirebilirsiniz:

  1. aşağıdakilere ekleme /usr/share/X11/xorg.conf.d/10-evdev.confveya /etc/X11/xorg.conf.d/10-evdev.confsahip olduğunuz şeye bağlı olarak:

    # 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. Xile sunucuyu yeniden başlatmaksudo service lightdm restart

  3. ile onayla xinput --get-button-map "Ultrathin Touch Mouse"

İsterseniz değerini değiştirebilirsiniz InputDevice Identifier, ancak değeri "Ultrathin Touch Mouse" olarak InputDevice Nameve bu şekilde tutmak önemlidir InputClass Identifier, çünkü bu xinputonu tanır.

Mac sürümü T631 ile test edilmiştir.

Biraz daha fazla bilgi edinmek istiyorsanız evdev, Joe Shaw'un bu blog yazısı özellikle tüm giriş yığınına nasıl uyduğu hakkında bilgi veriyor.


Bu potansiyel olarak iyi bir çözümdür. Ancak, Xyapılandırma dosyalarını, özellikle de global olarak tanımlanan dosyaları kullanarak nefret ediyorum . Bazı yükseltme yolları bunların üzerine yazılır, bu ideal değildir. Ayrıca, bu ideal değildir, çünkü anahtarların nasıl yeniden eşleştirileceği net değildir. Bunun geçerli bir çözüm olmadığını söylemiyorum, ancak ödül söz konusu olduğunda diğer cevap kazanabilir. ☺ Son olarak, bunun yeniden başlatma olmadan uygulanamayacağı bir serseri. Belki evdevdoğrudan başa çıkmanın bir yolunu bulabilirseniz , bu hoş olabilir, ama böyle bir şey bulamadım.
wxl

Saygılarımla, çok fazla şey istediğinizi düşünüyorum. Ama yine de, benzer bir problemi olanlara yardım etmek için lütuf almak için mesaj atmadım. Bir çözüm üzerinde daha az kısıtlamaları varsa, o zaman onlar için yararlı olmalıdır. Bununla birlikte, X'i yeniden başlatmak istiyorsanız, yeniden başlatmadan aynı sonucu elde edebileceğinizden eminim. Sadece biraz dağınık olurdu. Ama yükseltme konusunda seni duydum. Bir güncelleme sırasında bir şeyleri kırmamaya çok dikkat etmeliyim.
steev

1
saygılarımla, katılıyorum, ama umudum her zaman kendimden daha fazla yardım etmektir. söyleniyor, cevabınızı takdir ediyorum, bu yüzden bunu + 1'ledim!
wxl

peki, seninki gerçekten işe yaradığı için tebrikler;)
wxl

1
Aman tanrım, yanılmışım. davranıyor gibi görünüyordu, ama aslında test edemedim evemu-record. çalışmıyor :(
wxl

1

Xbindkeys kullanarak "sol kenar kaydırma" ve "sağ kenar kaydırma" hareketlerini yapılandırmayı başardım; bu muhtemelen iki parmak tokatlaması için de geçerli olabilir, ancak yine de gerçekleştirilmelerini zor bulduğum için bunlarla uğraşmadım.

Bu benim .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

Onları yararlı KDE kısayollarıyla eşleştirdim, elbette başka bir şey yapabilirsiniz. Girişte xbindkey'leri çalıştırmanız gerekiyor, herhangi bir xbindkeys eğitiminde açıklandığı gibi bir .desktop dosyası oluşturdum:

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

Bu konuda hayal kırıklığına uğradım çünkü Xgiriş kodunu yazan biri tarafından sağlananlar da dahil olmak üzere sağlanan tüm çözümlere rağmen asla çalışamadım . Bununla birlikte, ondan uzaklaştım ve normal, kablolu bir fare kullandım.

Dün Ultrathin'i buldum ve tekrar denemeye karar verdim ve Just Works ™. Bu, en azından bu sorunun nedeni, bu hareketlerin garip yollarla yorumlanması ve iş akışımı karıştırması anlamında doğrudur. Sol kenar kaydırmasının Firefox'ta son kullanılan sekmeler arasında geçiş yapmamı sağlaması dışında gerçek bir etkisi yok gibi görünüyor.

Garip olan, hiçbir şekilde hareketlerin aslında devre dışı olmamasıdır. 13 "düğmenin" tümü tarafından döndürülür xinput --get-button-map "Ultrathin Touch Mouse". Ayrıca grep Ultrathin /usr/share/X11/xorg.conf.dhiçbir şey döndürmez. Bulunan alakalı NoSymbol(veya hiç VoidSymbol) bulunmayan xkbcompveya ilgili KEY_UNKNOWNolan yoktur input-kbd.

Öte yandan, evemu-recordçift ​​dokunma hareketlerinin basit BTN_LEFTolaylar olarak alınması dışında her şey aynı görünüyor .

Bununla birlikte, bununla ilgili bir şey değişti, ama ne olduğundan emin değilim.

Ayrıca, bir şeyleri yeniden eşleştirmeyi test etmedim, ama bu aslında orijinal sorunun kapsamında değildi.


0

Tüm cevapları okudum ve bu sorunu otomatik olarak düzeltmek için input-kbd (input-utils'in bir parçası) etrafında bir komut dosyası yazdım.

Her girişte bir kez bu depodan fixMouse'u çalıştırmalısınız . Olacak:

  1. bu fare için dbus'ı dinle
  2. tüm tuş vuruşlarını KEY_UNKNOWN olarak yapılandır

Standart fare özellikleri (sol düğme; kaydırma; vb.) Hala iyi çalışıyor. Yalnızca tuhaf klavye tuşları durur.

Askıya alma, bluetooth uyku, fare açma-kapama vb.

Benim için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.