¿Por qué estos comandos xte funcionan en la terminal, pero no cuando están vinculados con xbindkeys?

18

Este xtecomando, cuando lo ejecuto en una terminal, activa el modo Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

Sin embargo, cuando pongo esto en mi archivo .xbindkeysrc:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

No pasa nada cuando hago clic en el botón. El siguiente enlace hace que la letra X aparezca en mi consola cuando presiono el botón 11:

"xte 'key X'"
  b:11

Entonces, ¿por qué no funciona la encuadernación Expo?


Este es el resultado detallado de xbindkeys -n -val hacer clic en el botón 11:

Presione el botón!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'tecla W' 'keyup Super_L'"
    m: 0x0 + b: 11 (mouse)
tengo la pantalla 0 para la ventana 2bb
Iniciar programa con fork + llamada ejecutiva
Botón de liberación!
e.xbutton.button = 11
e.xbutton.state = 16

Y no pasa nada. ¿Tiene esto algo que ver con la forma en que xbindkeysejecuta el comando? (tenedor + llamada ejecutiva)


Intento número dos.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

La ejecución de este script desde la línea de comando activa Expo. Encuadernándolo en xbindkeys:

"sh ~/expo.sh"
  b:11

Al hacer clic en el botón del mouse 11:

Presione el botón!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (mouse)
tengo la pantalla 0 para la ventana 2bb
Iniciar programa con fork + llamada ejecutiva

¡No pasa nada!

Hubro
fuente
1
¿Estás intentando presionar <Super> <S>? Sé que xbindkeys + xte puede ser exigente a veces.
Seth
@Seth: Correcto. ¿Alguna forma de evitar la delicadeza?
Hubro
1
Tratar 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth
@Seth: No hizo ninguna diferencia, me temo :(
Hubro
¿Relanzaste xbindkeys después de hacer los cambios? A veces eso es necesario. Supongo que su objetivo final es abrir la vista general del espacio de trabajo.
Seth

Respuestas:

17

Otra solución más simple: en lugar de usar solo "b: 11" en la definición de xbindkeys, use "b: 11 + release". Esperará hasta que sueltes el botón para disparar el comando.

Ejemplo:

"sh ~/expo.sh"
  b:11 + release
usuario215129
fuente
2
Hubro debería volver aquí y marcar esto como la respuesta correcta ...
David Ljung Madison Stellar
7

Esto es muy raro Resulta que si mi botón del mouse todavía se presiona (aún no se suelta) cuando Super+Wse simula la pulsación de tecla, no pasa nada. No sé a quién culpar por eso (¿tal vez Canela?). Sin embargo, lo he solucionado agregando un breve retraso al xtecomando:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Ahora espera 0.1 segundos antes de simular Super+S. Si presiono y sostengo el botón del mouse por más de 0.1 segundos, no pasa nada.

Esta es una respuesta alternativa. Preferiría una respuesta adecuada.

Hubro
fuente
Hubro, por favor vea la respuesta mejor calificada por user215129 y márquela como correcta
David Ljung Madison Stellar
1
@DavidLjungMadison No. Ni siquiera es una respuesta a mi pregunta, solo una sugerencia para una solución alternativa.
Hubro
1
Me pregunto si entiendes la respuesta. El problema es que está intentando enviar las claves mientras el botón aún está presionado. Esperar a que se suelte el botón significa que no enviará las teclas hasta que se suelte el botón, resolviendo así su problema. No es una solución alternativa, es una explicación del problema y una forma de resolverlo.
David Ljung Madison Stellar
1
Entonces todavía no entiendes. El problema es que está tratando de escribir las teclas mientras el botón está presionado, y lo que se inicia Expo está buscando Super-S, no Btn-2 + Super-S. Su solución es una solución alternativa porque no resuelve el problema al garantizar que el botón esté activado y no funciona en muchas circunstancias. La solución es (como suele ser el caso cuando se trata de eventos del mouse) esperar a que se suelte el botón antes de activar cualquier comando, esto asegura que el botón no se mezcle con la pulsación del teclado.
David Ljung Madison Stellar
2
Puede confirmar que la respuesta del usuario215129 no es correcta y no responde la pregunta. Hacer mi propia investigación sobre este problema en este momento y en mi caso cambiarlo para liberarlo o retrasarlo no es una opción porque necesito que realice una acción mientras se presiona el botón, con una acción diferente en el lanzamiento. Ver: askubuntu.com/questions/984054/…
Ethuil UI
2

Me enfrenté al mismo problema.

"xte 'key b'"

estaba trabajando en la consola pero no en el archivo de parámetros xbindkeys. Cambié b por su código keyym, usando el comando "xev" para obtenerlo:

"xte 'key Ox62'"

Funciono para mi

sebastien cossin
fuente
1

Probar con + Release

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Eso puede ayudar.

Ivan Nikitovic
fuente
1

Tiene un problema similar al usar sxhkcd keymapper. Resulta que sus teclas de acceso directo reales se detectan como aún presionadas.

Hay algunas soluciones alternativas:

  • busca el evento de lanzamiento
  • agregar sleep 0.2delante de su comando
  • usar acceso directo con la tecla de líder
  • suelte sus modificadores de acceso directo frente a su secuencia xte

Sin embargo, no puede obtener acciones en tiempo real con eso =)

Possum Gallo
fuente