Contrôle des gestes de la souris Bluetooth qui enregistrent les événements du clavier

9

tl; dr

Je viens d'acheter un Logitech T630 . Il s'agit d'une souris Bluetooth qui prend en charge plusieurs événements clavier via des gestes (PDF). Ces gestes sont fins et dandy mais je les ai peu utilisés. J'ai du mal à m'en débarrasser.

Je souhaite effectuer les opérations suivantes, par ordre de priorité décroissante:

  1. désactiver ces gestes
  2. remapper les gestes (je pense que sans pirater le firmware ou inverser l'ingénierie des pilotes de périphériques Windows / OS X, ce n'est pas possible)

Je ne veux pas:

  • utiliser Windows
  • désactiver tous les gestes

Pour plus d'informations, lisez la suite…

boutons et gestes

Les treize événements souris possibles sont:

  1. click gauche
  2. Clic du milieu
  3. clic-droit
  4. faire défiler vers le haut
  5. défiler vers le bas
  6. défiler vers la gauche
  7. défiler vers la droite
  8. glisser le bord vers la gauche
  9. glisser le bord vers la droite
  10. glissement de deux doigts vers la gauche
  11. glissement de deux doigts vers la droite
  12. tapez deux fois
  13. toucher deux doigts

Les sept premiers sont dans l'ordre de la façon dont le système d'exploitation les mappe.

Seuls les trois premiers sont mécaniques - tous les autres utilisent la surface tactile:

gestes tactiles

Options GUI

L'installation dans Kubuntu Trusty était un jeu d'enfant, mais elle offre peu de support pour configurer ces autres gestes.

Ces gestes ne sont pas liés à:

  • pavé tactile ( synapticsne fonctionne pas)
  • accessibilité
  • coins chauds
  • gestes standard de la souris

Tous les paramètres liés à ceux-ci ont été vérifiés et ils sont tous désactivés.

paramètres de ligne de commande

lomoco

L' lomocoutilitaire permettant de configurer les fonctions spéciales des souris USB Logitech n'est pas applicable.

xinput

Je pensais que cela xinputpourrait aider:

$ 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

Notez les 13 étiquettes des boutons:

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

Les désactiver n'a pas aidé:

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

Même si, par exemple, il peut transformer le bouton central de la souris en un clic gauche:

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

xmodmap

Similaire à xinput, mêmes résultats:

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

inputkbd

Suggéré par elmicha ci - dessous , cela fonctionne au niveau du noyau, essayant de faire en sorte que les gestes entraînent des événements clavier nuls. Devrait fonctionner, mais pas de chance ici non plus, avec le processus suivant:

$ 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

Après cela, le clavier ne montre aucun changement.

xkbcomp

Cela a été suggéré par Xle pirate informatique Peter Hutterer , certainement un homme qui devrait savoir ce qu'il faisait. Mais pas de chance:

$ 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

Après cela, la description du clavier ne montre aucun changement.

Peter a estimé que cela était probablement dû au fait que Xla nature de l'appareil en tant que clavier ou souris est confuse, un peu comme ce bogue qui a le problème opposé. Cela peut expliquer pourquoi tous les autres éléments attendus ne fonctionnent pas. Cependant, il a également déclaré que l'utilisation evdevne devrait pas fonctionner pour la même raison.

evdev

Cela a semblé fonctionner au début, mais ce n'est pas le cas non plus. Cela tente de tirer parti du pilote d'entrée générique pour Xdéfinir le mappage des boutons en ajoutant les éléments suivants à /usr/share/X11/xorg.conf.d/10-evdev.confou /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

Cela semble fonctionner sans erreur dans /var/log/Xorg.0.log(utilisation grep EE) et xinputconfirme le mappage des boutons, mais cela n'entraîne pas l'effet désiré.

Cependant, cela est connu pour fonctionner avec le T631.

événements clavier

Le problème réside, je pense, dans le fait que ces gestes génèrent des événements clavier:

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

En ce qui concerne le clavier , ils se réfèrent à:

$ 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

Appuyer deux fois ne semble rien faire.

Autres références

Il peut également être utile de signaler une référence à des problèmes similaires dans un bogue avec la souris susmentionnée ne se trouvant pas dans la gnome-bluetoothbase de données de code PIN. Inutile de dire que d'autres commentaires sur le sujet sont officiellement hors sujet sur ce rapport de bogue, mais les références peuvent aider à ajouter une certaine perspective sur la nature de ce problème.

Voici la sortie de evemu-describe /dev/input/event4FWIW.

Adaptateurs Bluetooth

FWIW J'ai utilisé deux adaptateurs USB Bluetooth différents:

$ 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
la source
2
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Mitch
donc je me suis posé un problème: je pense que vous devez installer sur votre machine virtuelle Windows - le pilote Windows Logitech standard et vous référer à l' vmmouse_detectutilitaire. xmodmapet xinputet même xorg.confsera utile sous votre Kubuntu mais pas sous Windows VM. Donc, sous WinVM, vous devriez pouvoir configurer votre souris avec les utilitaires Logitech standard pour Windows.
rapide
Avez-vous déjà résolu cela?
Seth
non, il n'a pas été corrigé. vous avez des idées?
wxl

Réponses:

3

Après beaucoup de douleur, j'ai réussi à créer une carte clé qui fait quelque chose d'utile.

Tout d'abord quelques notes (je ne peux pas encore commenter) sur la réponse précédente:

  1. le script fixMouse fourni par Mr back-up ne fonctionne pas, car parfois l'entrée Clavier de la souris apparaît avec le mauvais nom dans xinput, c'est-à-dire dans mon cas, elle montre:

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

    d'autre part, vous pouvez utiliser lsinput de input-utils pour trouver l'id correct:

    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. pour une raison quelconque lors du vidage de la carte pour la souris, certains codes sont dupliqués (ceux entre 0x700e0 et 0x700e7), faites attention à les trouver et à les éliminer, sinon vous deviendrez fou.

  3. le remplacement de tous les codes clés par KEY_UNKNOWN empêche les salves de caractères aléatoires, mais rend les actions tactiles spéciales inutiles. J'ai trouvé à la place que vous pouvez remapper certains des gestes en combinaisons utiles. En particulier, le "balayage à partir de la gauche" envoie les codes 0x700e0 + 0x700e3 + 0x7002b, tandis que le "balayage à partir de la droite" envoie 0x700e3 + 0x700e3 + 0x70072. J'ai mappé 0x700e3, qui est commun aux deux gestes, à KEY_UNKNOW, pour le supprimer. Ensuite, j'ai utilisé les codes de clé restants pour créer CTRL + F8 (grille de bureau) et ALT-F2 (coureur), mais bien sûr, vous pouvez générer n'importe quelle combinaison de deux clés. Voici ma carte, soyez prudent lors du copier / coller pour ne laisser aucune ligne vide et aucun espace vide initial (ils cassent 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
    

Je n'ai pas pu obtenir les codes appropriés pour les balayages à deux doigts, mais encore une fois, je m'en fiche car ces gestes sont impossibles à effectuer.

PS Au cas où vous voudriez essayer de personnaliser d'autres gestes, voici comment j'ai procédé:

  1. J'ai trié les entrées de la carte, nettoyé les doublons et remarqué qu'il comprend 252 symboles (plus 5 boutons).

  2. J'ai mis les dix premiers symboles à KEY_A, les dix suivants à KEY_B et ainsi de suite jusqu'aux 2 derniers qui sont devenus KEY_Z; puis j'ai chargé cette carte.

  3. J'effectue les gestes dans une fenêtre de texte (ou vous pouvez utiliser "xbindkeys -mk") et je prends note des lettres produites.

  4. Dans la carte, je change toutes les lettres NON produites en KEY_UNknown, les trois restantes en KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, puis je charge cette nouvelle CARTE.

  5. J'exécute à nouveau le geste, je prends note des lettres / chiffres produits: ce sont les codes qui peuvent être définis selon ce dont vous avez besoin pour faire une combinaison de touches spécifique.

Lorenzo
la source
2

Vous pouvez essayer d'utiliser à input-kbdpartir du input-utilspackage:

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

En utilisant l'index du périphérique d'entrée (par exemple 4 pour /dev/input/event4, qui peut être trouvé via lsinputqui est nécessairement différent de l'id utilisé dans xinput), vous pouvez reconfigurer la carte du clavier en lui fournissant un fichier avec le -fcommutateur, par exemple

$ sudo input-kbd -f some-file 4

où le some-fileprend la forme de scancode = keycode|keyname, où les éléments suivants sont équivalents:

0x0001 = KEY_F9
0x0001 = 67

Vous pouvez trouver la carte actuelle avec sudo input-kbd 4. Puisque vous devez ouvrir un fichier à partir de /dev, vous devez utiliser le superutilisateur pour lire l'événement.

Notez également que malgré son nom apparemment trompeur, cela fonctionne aussi avec les souris.

elmicha
la source
Vous êtes peut-être sur le bon mécanisme, mais, malheureusement, en regardant le clavier , il n'est pas clair quel code à changer, d'autant plus que certains de ces noms de clés sont entièrement indéfinis. Peut-être que si vous pouviez trouver le mécanisme pour trouver la définition des noms de clés, ce serait utile. +1 pour se rapprocher.
wxl
Que se passe-t-il si vous mappez toutes les KEY_ * à 0 ou l'une des valeurs KEY_UNknown (par exemple 240)? Ou cela désactive-t-il certains des gestes que vous souhaitez conserver? Pour générer la nouvelle carte, vous pouvez diriger la carte actuelle awk '/KEY_/ { $3 = 240 } { print }'.
elmicha
Je suppose que la question est, où puis-je trouver la définition de KEY_UNKNOWN, ou d'ailleurs BTN_EXTRA,?
wxl
Vous pouvez utiliser sudo input-events 4pour voir quel bouton de la souris est lequel. KEY_UNknown (espérons-le) n'imprime ni ne déclenche aucune action.
elmicha
1
La définition des noms de clé se trouve dans /usr/include/linux/input.h, qui indique que les noms sont modélisés d'après USB HUT 1.12 , qui indique que les codes de clé 232-65535 sont "réservés". input-kbd utilise name.shlà pour inverser le nom de la clé -> mappage de code, pour permettre à input_kbd d'imprimer les noms des codes de clé.
elmicha
2

Pour désactiver les gestes, vous pouvez modifier le mappage des boutons avec le evdevpilote afin que les 6 derniers "boutons" soient tous désactivés comme suit:

  1. en ajoutant /usr/share/X11/xorg.conf.d/10-evdev.confou en /etc/X11/xorg.conf.d/10-evdev.conffonction de ce que vous avez:

    # 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. redémarrer le Xserveur avecsudo service lightdm restart

  3. confirmer avec xinput --get-button-map "Ultrathin Touch Mouse"

Vous pouvez modifier la valeur de la InputDevice Identifiersi vous le souhaitez, mais il est important de conserver la valeur pour InputDevice Nameet InputClass Identifiercomme "Ultrathin Touch Mouse", car c'est ainsi que la xinputreconnaît.

Testé avec la version Mac, T631.

Si vous voulez un peu plus d'informations sur evdev, ce billet de blog de Joe Shaw est particulièrement perspicace sur la façon dont il s'intègre dans la pile d'entrée entière.

steev
la source
C'est potentiellement une bonne solution. Cependant, je déteste utiliser Xdes fichiers de configuration, en particulier ceux définis globalement. Certains chemins de mise à niveau les remplaceront, ce qui n'est pas idéal. De plus, ce n'est pas idéal car il n'est pas clair comment remapper les clés. Je ne dis pas que ce n'est pas une solution valable, mais en ce qui concerne la prime, l'autre réponse pourrait l'emporter. ☺ Enfin, il est regrettable que cela ne puisse pas être mis en œuvre sans redémarrage. Peut-être que si vous pouviez trouver un moyen de traiter evdevdirectement, ce serait bien, mais je n'ai rien trouvé de tel.
wxl
Respectueusement, je pense que vous en demandez trop. Mais de toute façon, je n'ai pas posté pour obtenir la prime, juste pour aider éventuellement ceux qui ont un problème similaire. S'ils ont moins de contraintes sur une solution que vous, alors cela devrait leur être utile. Cela dit, je suis sûr que si vous vouliez redémarrer X, vous pourriez obtenir le même résultat sans redémarrer. Ce serait juste un peu désordonné. Mais je vous entends parler de la mise à niveau. Je vais devoir faire très attention à ne pas casser les choses lors d'une mise à jour.
steev
1
respectueusement, je suis d'accord, mais mon espoir est toujours d'aider plus que moi-même. cela étant dit, j'apprécie votre réponse, c'est pourquoi je l'ai +1!
wxl
eh bien, félicitations car le vôtre fonctionne réellement;)
wxl
1
omg, j'avais tort. il semblait se comporter, mais je n'ai pas réussi à tester avec evemu-record. ne fonctionne pas :(
wxl
1

J'ai réussi à configurer les gestes «balayage du bord gauche» et «balayage du bord droit» à l'aide de xbindkeys; cela peut probablement s'appliquer également aux deux glissements de doigts, mais je ne me suis pas soucié de ceux-ci car je les trouve difficiles à exécuter de toute façon.

Ceci est mon .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

Je les ai mappés à des raccourcis KDE utiles, bien sûr, vous pouvez faire autre chose. Vous devez exécuter xbindkeys à la connexion, j'ai créé un fichier .desktop comme expliqué dans les tutoriels 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
la source
1

J'ai été frustré par cette chose parce que je n'ai jamais pu le faire fonctionner, malgré toutes les solutions fournies, y compris celles fournies par quelqu'un qui écrit réellement du Xcode d'entrée. Cela dit, je m'en suis éloigné et j'ai simplement utilisé une souris filaire normale.

Hier, j'ai trouvé l'Ultrathin et j'ai décidé de l'essayer à nouveau et de le Just Works ™. Cela est vrai au moins dans le sens où la raison de cette question est que ces gestes étaient interprétés de manière étrange et gâchaient mon flux de travail. Maintenant, ils semblent n'avoir aucun effet réel, sauf que le balayage du bord gauche me permet de permuter entre les derniers onglets utilisés dans Firefox.

Ce qui est étrange, c'est que les gestes ne sont en aucun cas désactivés. Les 13 "boutons" sont retournés par xinput --get-button-map "Ultrathin Touch Mouse". Ne grep Ultrathin /usr/share/X11/xorg.conf.drenvoie également rien. Il n'y a aucun NoSymbols pertinent (et aucun VoidSymbols du tout) trouvé avec xkbcompni aucun KEY_UNKNOWNs pertinent avec input-kbd.

D'un autre côté, tout se ressemble à l' evemu-recordexception du fait que les gestes de double tapotement ne sont pris que comme de simples BTN_LEFTévénements.

Cela dit, quelque chose a changé par rapport à cela, mais je ne sais pas quoi.

De plus, je n'ai pas testé le remappage des choses, mais ce n'était pas vraiment dans le cadre de la question d'origine.

wxl
la source
0

J'ai lu toutes les réponses et j'ai écrit un script autour de input-kbd (partie des input-utils) pour résoudre automatiquement ce problème.

Vous devez exécuter fixMouse à partir de ce référentiel une fois à chaque connexion. Ce sera:

  1. écouter dbus pour cette souris
  2. configurer toutes les frappes sur KEY_UNknown

Les fonctionnalités standard de la souris (bouton gauche, défilement, etc.) fonctionnent toujours bien. Seules les touches du clavier étranges sont arrêtées.

Il survit à la suspension, au sommeil Bluetooth, à l'activation / désactivation de la souris, etc.

Ça marche pour moi.

Berend
la source