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 .Xmodmap
ahora contiene la siguiente línea
keycode 225 = XF86Paste NoSymbol XF86Paste``
ejecutar xmodmap ~/.Xmodmap
ahora deshabilita el botón por completo (o al menos, no obtengo ningún resultado al presionarlo). Lo intenté xmodmap -pke
y 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 = a
impresiones a
cada 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.
xbindkeys
configurado para ejecutarte cuando inicias, ¿verdad? ¿Puedes desactivarlo e intentarlo de nuevo?tail -f /var/log/dmesg
luego intente presionar el botón. ¿Obtiene alguna salida que se refiera a teclas / botones?xinput list
luego descubra el código del botón de su clave de búsqueda conxinput test <MOUSE ID>
. ¿Esto funciona?xev
mostrar 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).Respuestas:
Para simular eventos de teclado te sugiero la gran herramienta xdotool .
1. Instalar a
xdotool
través de la terminal ( CTRL+ ALT+ T):o use el Centro de software .
2. Cree una secuencia de comandos que use xdotool para emular los eventos key down de CTRLy v. En la terminal:
Copie el siguiente contenido en la ventana del editor que se abrió. Después de copiar el código guardar, luego ciérrelo:
Ahora haga que el script sea ejecutable:
3. Cierre sesión e inicie sesión para recargar su RUTA .
4. Crear el acceso directo personalizado
Ve a
System Settings
, luego ve aKeyboard
, entoncesShortcuts
.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
. PresioneOK
.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!
fuente
Solución xbindkeys con xdotool
Para esta solución necesitarás
xbindkeys
yxdotool
Mata xbindkeys y descarga la configuración de tu botón
y
Agrega tus nuevos enlaces
Ahora puede modificar este archivo para agregar enlaces personalizados, estos tienen la forma
así que si agregas
abrirá
gedit
cada 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 2
se emulará, esta es la presión del botón central del mouse, y esto pegará los terminales internos y externos.intercepta el 225 de tu mouse :
interceptar código clave 225 en general :
reemplace todos los
XF86Search
eventos (primero revierta la configuración del mouse a la configuración original, de modo que obtenga la parteXF86Search
posterior):Inicie xbindkeys y pruebe
correr
y ver si funciona.
fuente