¿Cómo vuelvo a asignar el botón de búsqueda en mi Logitech MX400?

10

Tengo un logitech MX400 inalámbrico. Tiene un botón de búsqueda que me gustaría usar para pegar (en lugar de la rueda de desplazamiento extremadamente sensible pero difícil de presionar). Ya reasigné otros botones con xbindkeys, y usé xev para encontrar el código de presión del botón, pero esto no funciona para el botón de búsqueda. usando xev y haciendo clic en el botón de búsqueda obtengo los siguientes eventos

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

No hay eventos de ButtonPress. Parece que el botón de búsqueda se intercepta en un nivel por debajo de los X eventos. ¿Algunas ideas? Tengo ubuntu 12.04. Ubuntu realmente ve el clic y genera un diálogo de búsqueda, pero no hay rastro de un evento de clic en el xev.

Editar

Revisé el método provisto con xmodmap. Mi .Xmodmapahora contiene la siguiente línea

keycode 225 = XF86Paste NoSymbol XF86Paste``

ejecutar xmodmap ~/.Xmodmapahora deshabilita el botón por completo (o al menos, no obtengo ningún resultado al presionarlo). Lo intenté xmodmap -pkey se imprime:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

Lo suficientemente extraño. Todas las otras entradas tienen un formato similar. Estoy cerca de la solución, pero todavía hay algo extraño.

Editar 2

Traté de ejecutar xinput (nunca escuché de este comando. Cosas increíbles). Hay dos entradas para Logitech. Aquí está el resultado de enumerar cada uno de ellos (id 9 y 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

El dispositivo de prueba 9 no hace nada con el botón. En cambio, el dispositivo de prueba 10 funciona, y esta es la salida cuando hago clic

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

Por lo tanto, parece que el mouse actúa como un teclado en este sentido, pero por alguna razón, xmodmap no hace nada cuando recibe la clave 225.

** Editar **

Puedo confirmar que agregar keycode 225 = aimpresiones acada vez que hago clic en el botón. Entonces, el problema parece estar relacionado con cómo se maneja realmente XF86Paste. Lo estoy enviando, pero no está pegando.

Stefano Borini
fuente
Te has xbindkeysconfigurado para ejecutarte cuando inicias, ¿verdad? ¿Puedes desactivarlo e intentarlo de nuevo?
Seth
@ iSeth: mató a xbindkeys. Intenté nuevamente, el mismo resultado.
Stefano Borini
Abra una terminal y corra, tail -f /var/log/dmesgluego intente presionar el botón. ¿Obtiene alguna salida que se refiera a teclas / botones?
Seth
1
Antes de publicar otra respuesta sin sentido ... descubra la identificación de entrada de su mouse con y xinput listluego descubra el código del botón de su clave de búsqueda con xinput test <MOUSE ID>. ¿Esto funciona?
mrcktz
1
Parece que hay un error confirmado que permite xevmostrar los eventos XF86Paste / XF86Copy, pero no sucede nada. Eso significa que debe usar la combinación de teclas CTRL + v para pegar. Xmodmap asigna los botones 1: 1, pero puede usar la configuración de métodos abreviados de teclado para activar la ejecución de un comando al presionar una tecla (consulte mi respuesta).
mrcktz

Respuestas:

3

Para simular eventos de teclado te sugiero la gran herramienta xdotoolInstalar xdotool .

1. Instalar axdotool través de la terminal ( CTRL+ ALT+ T):

sudo apt-get install xdotool

o use el Centro de softwareInstalar xdotool .

2. Cree una secuencia de comandos que use xdotool para emular los eventos key down de CTRLy v. En la terminal:

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

Copie el siguiente contenido en la ventana del editor que se abrió. Después de copiar el código guardar, luego ciérrelo:

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

Ahora haga que el script sea ejecutable:

chmod +x ~/bin/fakepaste

3. Cierre sesión e inicie sesión para recargar su RUTA .

4. Crear el acceso directo personalizado

Ve a System Settings, luego ve a Keyboard, entonces Shortcuts.

Presione el +botón en la parte inferior del cuadro de diálogo. Proporcionar un nombre para el acceso directo que está a punto de crear y para el relleno de comandos en: fakepaste. Presione OK.

Al lado de su nuevo acceso directo, verá disabled. Haga clic en ese texto y luego presione la tecla que desea asignar a su emulación de teclado.

¡Ahora debería poder usar su tecla de búsqueda para pegar!

mrcktz
fuente
1
No veo cómo esto ayudará en un botón del mouse, cambia los atajos de teclado .
Seth
2
@ iSeth: El punto es que resultó que el mouse logitech es tanto un teclado como un mouse. Es un mouse para todo excepto el botón de búsqueda, donde actúa como un teclado
Stefano Borini
2

Solución xbindkeys con xdotool

Para esta solución necesitarás xbindkeysyxdotool

Mata xbindkeys y descarga la configuración de tu botón

killall xbindkeys

y

xbindkeys --defaults >> ~/.xbindkeysrc

Agrega tus nuevos enlaces

Ahora puede modificar este archivo para agregar enlaces personalizados, estos tienen la forma

"<command>"
  <key combination>

así que si agregas

"gedit"
  m:0x0 +b:4

abrirá geditcada vez que se desplace hacia arriba.

Así que ahora puede probar uno de los siguientes, elija el que mejor funcione para usted. En todos los casos xdotool click 2se emulará, esta es la presión del botón central del mouse, y esto pegará los terminales internos y externos.

  1. intercepta el 225 de tu mouse :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. interceptar código clave 225 en general :

    "xdotool click 2"
      c:225
    
  3. reemplace todos los XF86Searcheventos (primero revierta la configuración del mouse a la configuración original, de modo que obtenga la parte XF86Searchposterior):

    "xdotool click 2"
      XF86Search
    

Inicie xbindkeys y pruebe

correr

xbindkeys

y ver si funciona.

Gerhard Burger
fuente
Quiero hacerle saber que creo que ambos merecen la recompensa ya que me ayudaron mucho. Todavía no sé si sus soluciones funcionan, las probaré mañana, pero la recompensa está expirando y no quiero que se desperdicie. Tan pronto como tenga suficientes puntos, te otorgaré la misma recompensa. Gracias
Stefano Borini
Oke, gracias (aunque no sé si eso es posible). Me alegra ser de ayuda;)
Gerhard Burger
uhm ... tienes razón. Solo puedo otorgar uno aquí. No se preocupe, tan pronto como tenga suficiente representante, le concederé una de sus otras respuestas.
Stefano Borini
No, no, no te molestes. Estoy bastante bien;)
Gerhard Burger