Comment remapper le bouton de recherche de mon Logitech MX400?

10

J'ai un logitech MX400 sans fil. Il a un bouton de recherche que j'aimerais utiliser pour coller (au lieu de la molette de défilement extrêmement sensible mais difficile à appuyer). J'ai déjà remappé d'autres boutons avec xbindkeys et utilisé xev pour trouver le code de pression sur le bouton, mais cela ne fonctionne pas pour le bouton de recherche. en utilisant xev et en cliquant sur le bouton de recherche, j'obtiens les événements suivants

FocusOut event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 34, synthetic NO, window 0x0,
    keys:  4294967275 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

PropertyNotify event, serial 34, synthetic NO, window 0x3c00001,
    atom 0x1d7 (_NET_WM_ICON_GEOMETRY), time 23653064, state PropertyNewValue

Aucun événement ButtonPress. Il semble que le bouton de recherche soit intercepté à un niveau inférieur aux événements X. Des idées? J'ai Ubuntu 12.04. Ubuntu voit en fait le clic et fait apparaître une boîte de dialogue de recherche, mais il n'y a aucune trace d'un événement de clic dans le xev.

Éditer

J'ai vérifié la méthode fournie avec xmodmap. Mon .Xmodmapcontient maintenant la ligne suivante

keycode 225 = XF86Paste NoSymbol XF86Paste``

courir xmodmap ~/.Xmodmapmaintenant désactive complètement le bouton (ou du moins, je n'obtiens aucun résultat en appuyant dessus). J'ai essayé xmodmap -pkeet ça imprime:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

Assez étrange. Toutes les autres entrées sont formatées de manière similaire. Je suis proche de la solution, mais il y a toujours quelque chose de bizarre.

Modifier 2

J'ai essayé d'exécuter xinput (je n'ai jamais entendu parler de cette commande. Des trucs incroyables). Il existe deux entrées pour Logitech. Voici le résultat de la liste de chacun d'eux (id 9 et 10)

Logitech USB Receiver                       id=9    [slave  pointer  (2)]
    Reporting 7 classes:
        Class originated from: 9. Type: XIButtonClass
        Buttons supported: 24
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
        Button state:
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 3:
          Label: Rel Vert Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 3
          type: 1 (vertical)
          increment: -1.000000
          flags: 0x2 ( preferred )


Logitech USB Receiver                       id=10   [slave  pointer  (2)]
    Reporting 6 classes:
        Class originated from: 10. Type: XIButtonClass
        Buttons supported: 7
        Button labels: "Button 0" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
        Button state:
        Class originated from: 10. Type: XIKeyClass
        Keycodes supported: 248
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0

Le dispositif de test 9 ne fait rien avec le bouton. L'appareil de test 10 fonctionne à la place, et c'est la sortie lorsque je clique

$ xinput test 10
key press   225 
key release 225 
key press   225 
key release 225 
key press   225 
key release 225

Il apparaît donc que la souris agit comme un clavier à cet égard, mais pour une raison quelconque, xmodmap ne fait rien quand il reçoit la clé 225.

** Éditer **

Je peux confirmer que l'ajout d' keycode 225 = aimpressions à achaque fois que je clique sur le bouton. Le problème semble donc être lié à la façon dont XF86Paste est réellement géré. Je l'envoie, mais ce n'est pas du collage.

Stefano Borini
la source
Vous avez xbindkeysconfiguré pour exécuter lorsque vous démarrez à droite? Pouvez-vous le désactiver et réessayer?
Seth
@iSeth: a tué xbindkeys. J'ai encore essayé, même résultat.
Stefano Borini
Ouvrez un terminal et exécutez tail -f /var/log/dmesgpuis essayez d'appuyer sur le bouton. Obtenez-vous une sortie se référant aux touches / boutons?
Seth
1
Avant de poster une autre réponse absurde ... découvrez l'ID d'entrée de votre souris avec xinput listpuis découvrez le code du bouton de votre clé de recherche avec xinput test <MOUSE ID>. Est-ce que ça marche?
mrcktz
1
Il semble y avoir un bogue confirmé qui permet d' xevafficher les événements XF86Paste / XF86Copy, mais rien ne se passe. Cela signifie que vous devez utiliser la combinaison de touches CTRL + v pour le collage. Xmodmap mappe les boutons 1: 1, mais vous pouvez utiliser les paramètres des raccourcis clavier pour déclencher l'exécution d'une commande lorsque vous appuyez sur une touche (voir ma réponse).
mrcktz

Réponses:

3

Pour simuler les événements du clavier, je vous suggère le grand outil xdotoolInstaller xdotool .

1. Installezxdotool via le terminal ( CTRL+ ALT+ T):

sudo apt-get install xdotool

ou utilisez le Centre logicielInstaller xdotool .

2. Créez un script qui utilise xdotool pour émuler les événements de clé vers le bas de CTRLet v. Dans le terminal:

mkdir -p ~/bin  
gedit ~/bin/fakepaste

Copiez le contenu suivant dans la fenêtre de l'éditeur qui s'est ouverte. Après avoir copié le code, enregistrez-le, puis fermez-le:

#!/bin/sh
exec /usr/bin/xdotool key CTRL+V  
EOF

Rendez maintenant le script exécutable:

chmod +x ~/bin/fakepaste

3. Déconnectez-vous et connectez-vous pour recharger votre PATH .

4. Créez le raccourci personnalisé

Allez à System Settings, puis allez à Keyboard, alors Shortcuts.

Appuyez sur le +bouton en bas de la boîte de dialogue. Fournir un nom pour le raccourci que vous êtes sur le point de créer et pour le remplissage de commande en: fakepaste. Appuyez sur OK.

À côté de votre nouveau raccourci, vous verrez disabled. Cliquez sur ce texte, puis appuyez sur la touche que vous souhaitez attribuer à votre émulation de clavier.

Vous devriez maintenant pouvoir utiliser votre clé de recherche pour coller!

mrcktz
la source
1
Je ne vois pas comment cela va aider sur un bouton de la souris, cela change les raccourcis clavier .
Seth
2
@iSeth: Le fait est qu'il s'est avéré que la souris logitech est à la fois un clavier et une souris. C'est une souris pour tout sauf pour le bouton de recherche, où il agit comme un clavier
Stefano Borini
2

Solution xbindkeys avec xdotool

Pour cette solution, vous aurez besoin xbindkeysetxdotool

Tuez les xbindkeys et videz la configuration de vos boutons

killall xbindkeys

et

xbindkeys --defaults >> ~/.xbindkeysrc

Ajoutez vos nouvelles fixations

Vous pouvez maintenant modifier ce fichier pour ajouter des liaisons personnalisées, celles-ci ont la forme

"<command>"
  <key combination>

donc si vous ajoutez

"gedit"
  m:0x0 +b:4

vous ouvrirez geditchaque fois que vous faites défiler vers le haut.

Alors maintenant, vous pouvez essayer l'une des options suivantes, choisissez celle qui vous convient le mieux. Dans tous les cas, xdotool click 2sera émulé, c'est la pression du bouton central de la souris, et cela collera les terminaux internes et externes.

  1. intercepter le 225 depuis votre souris :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. intercepter le code clé 225 en général :

    "xdotool click 2"
      c:225
    
  3. remplacez tous les XF86Searchévénements (rétablissez d'abord les paramètres de votre souris aux paramètres d'origine, afin que vous récupériez XF86Search):

    "xdotool click 2"
      XF86Search
    

Lancez xbindkeys et testez

Courir

xbindkeys

et voyez si cela fonctionne.

Gerhard Burger
la source
Je veux vous faire savoir que je pense que vous méritez tous les deux la prime car vous m'avez beaucoup aidé. Je ne sais toujours pas si vos solutions fonctionnent, je les testerai demain, mais la prime expire et je ne veux pas qu'elle soit perdue. Dès que j'aurai suffisamment de points, je vous accorderai la même prime. Merci
Stefano Borini
Oke, merci (même si je ne sais pas si c'est possible). Heureux de vous aider;)
Gerhard Burger
euh ... vous avez raison. Je ne peux en attribuer qu'un ici. Ne vous inquiétez pas, dès que j'aurai assez de représentants, je vous accorderai l'une de vos autres réponses.
Stefano Borini
Non, non, ne t'embête pas. Je vais bien;)
Gerhard Burger