Resumen de la pregunta: Quiero que Super_LX11 registre uno de los botones de mi mouse como el botón izquierdo de Windows .
En mi administrador de ventanas, puedo mover ventanas manteniendo presionado el "botón izquierdo de Windows" (Súper izquierdo) y arrastrando una ventana con el botón izquierdo del mouse. Quiero poder hacer eso sin tocar el teclado, así que quiero asignar la súper tecla izquierda al botón del mouse 11, de esa manera puedo mantener presionado el botón del mouse 11 y hacer clic + arrastrar ventanas.
La solución más obvia es usar xbindkeys y xte como este ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Esto funciona así:
- Cuando Super_Lpresiono el botón 11 del mouse, también se presiona
- Cuando suelto el botón 11 del mouse, Super_Ltambién se libera
Pero hay un problema: no puedo mover Windows usando Super_L+ Mouse1si también estoy presionando otro botón del mouse, como el botón 11. Usando la solución anterior, el botón 11 del mouse todavía se está registrando como presionado y liberado, por lo que ninguno de las operaciones del administrador de ventanas funcionan.
He intentado esto usando Cinnamon y Awesome WM, y ninguna de las Super_Lcombinaciones de teclado funciona mientras se mantiene presionado el botón 10 u 11 del mouse.
Un truco mediocre
Actualmente estoy solucionando este problema haciendo que el clic del mouse 11 mantenga presionado el Super_Lbotón durante un cierto tiempo. De esa manera puedo hacer clic en el botón del mouse, luego arrastrar las cosas por un breve período de tiempo después:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Otro intento
Como sugirió totti, probé esta xbindkeys
configuración:
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
No funciona Parece que la Super_Ltecla se mantiene presionada, porque tan pronto como suelto el botón 10 permanece presionada para siempre (hasta que presiono la Super_Ltecla nuevamente en el teclado) pero el botón del mouse todavía se está registrando, porque no puedo hacer clic y arrastrar ventanas . No creo que pueda hacer que esto funcione usando xbindkeys
y xte
.
Respuestas:
Una publicación de askubuntu contiene una respuesta que resumiré a continuación.
El problema es que xbindkeys toma todo el mouse, lo que hace que los modificadores + el mapeo del mouse sean inciertos. La respuesta usa uinput a través del script python-uinput para monitorear
/dev/my-mouse
el clic del botón del pulgar y enviar la Ctrltecla al teclado virtual. Aquí están los pasos detallados:1. Hacer reglas de udev
Para el mouse, archivo
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev buscará dispositivos kernel con nombres como event5. El SYMLINK es para encontrar el mouse
/dev/my_mx_mouse
, legible por el grupomxgrabber
.Para buscar información de hardware, ejecute algo como:
Para uinput, archivo
/etc/udev/rules.d/94-mxkey.rules
:Desenchufe y conecte su mouse, u obligue a udev a activar las reglas con
udevadm trigger
.2. Active el módulo UINPUT
Y en
/etc/modules-load.d/uinput.conf
:3. Crear nuevo grupo
4. Script de Python
Instalar
python-uinput library
ypython-evdev library
.El siguiente script requiere identificar el código de evento del botón:
5. Acabado
Haga que el archivo Python sea ejecutable y asegúrese de que se cargue al inicio.
fuente
F13
,F14
eF15
, e inhabilitación de las funciones del ratón usandoxinput
. Entonces simplemente puede reasignar las teclas a lo que tenga uso de un simplexmodmap
. La idea principal se redactó En pocas palabras (hay algunos valores codificados y no restauro laxinput
función del mouse después), haré una publicación de blog sobre esto con la versión final del script (y compartiré el enlace aquí cuando esté listo. GraciasComo puede ejecutar el script con un clic del mouse, puede usar el siguiente truco.
1. Presione el Botón 11 para mantener presionada la tecla súper . (El botón 11 activa una secuencia de comandos)
2. Mueva las ventanas usando los otros botones del mouse
3. Presione el botón del mouse 11 nuevamente para liberar la tecla súper
script
Usar
xdotool
para mantener la superclaveAl hacer clic en el primer botón, crear un archivo temporal y mantener presionada la tecla. En el siguiente clic, elimine el archivo tmp y suelte la tecla,
actualizar
De acuerdo con la página de ayuda de ubuntu (muchos botones del mouse)
imwheel
pueden reasignarse a una tecla.fuente
+ Mod4
mi configuración de xbindkeys para tener en cuenta la superclave que se mantiene presionada. La solución que sugieres es mejor que la mía, y estoy cambiando a ella :-) Pero aún así no responde la pregunta.Sugerencia de depuración: intentaría monitorear el
/dev/input/eventX
archivo para ver qué eventos se generan cuando presiona y suelta ese botón, especialmente en combinaciones conBTN_LEFT
. Aquí hay un código de muestra para comenzar. Obviamente, tendrá que modificarlo para registrar todos los eventos, no solo las pulsaciones de teclas.También es posible que desee verificar la
xev
salida, si aún no lo ha hecho. Analizar ambos registros debería revelar el problema exacto que está teniendo.Lo más probable es que su mouse genere eventos de liberación de botones adicionales cuando se presionan varios botones. En ese caso, sus opciones serían usar soluciones alternativas de enlace de teclas o modificar la
xf86-input-evdev
biblioteca para filtrar eventos no deseados (o simular los que faltan). Hice algo similar hace un tiempo para una pantalla táctil que generaba eventos de "clic" al intentar arrastrar y soltar. La idea era filtrar los eventos de "lanzamiento" que se producían casi simultáneamente (dentro de un breve intervalo de tiempo) con los eventos de "clic". Si mi suposición es correcta, esencialmente necesitarías implementar algo similar.fuente
Me di cuenta de esto hoy con otras teclas modificadoras. El problema es que debe incluir el modificador en la combinación de botones para el lanzamiento. Suponiendo que su Super clave esté asignada a Mod4 (que debería ser el predeterminado, afaik):
EDITAR: Acabo de darme cuenta de que esto no responde completamente a su pregunta, ya que aún no podrá usar LMB mientras mantiene presionado b: 11
fuente