¿Cómo crear un acceso directo que ejecute un comando xdotool para simular una pulsación de tecla?

10

Estoy tratando de simular una pulsación de tecla multimedia con un acceso directo personalizado.

Hasta ahora, he podido lograr la simulación que necesito usando el comando:

xdotool key XF86AudioPlay

Funciona perfectamente, pausa o inicia el reproductor de música cada vez que se ejecuta.

El problema surge al intentar ejecutarlo como un acceso directo.

Primero intenté ejecutar un alias con un acceso directo personalizado, pero no funcionó.

Como se explica en esta pregunta :

Los comandos ejecutados por los enlaces del teclado no se analizan a través de un shell. Su mejor opción es crear un directorio bin en su homedir.

Luego creé el script sugerido y lo llamé simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Se encuentra dentro de una carpeta bin que forma parte de PATH, funciona bien y se puede ejecutar desde cualquier ubicación.

Al intentar crear el acceso directo personalizado, no pude ejecutarlo, la configuración es la siguiente:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Después de buscar un poco más, encontré otra forma de ejecutar el acceso directo:

gnome-terminal -e simplay

Lo probé en un terminal y noté que al ejecutarlo se abriría rápidamente una nueva ventana de terminal, ejecutaría el proceso secundario, pausaría la música e inmediatamente cerraría la ventana.

Cambié el comando en el acceso directo y al presionarlo noté el mismo comportamiento al abrir un terminal e inmediatamente se cerró, pero esta vez el proceso secundario no detuvo la música, lo que me hace pensar que el guión se ha llamado en todos mis intentos anteriores. pero de alguna manera no se puede ejecutar.

¿Cómo puedo resolver este problema según tu conocimiento?

Jorge Cuevas
fuente

Respuestas:

12

La cuestión

Su acceso directo se realiza al mismo tiempo que presiona la tecla simulada

Si ejecuta un comando, simulando una pulsación de tecla, llamada con ... otra pulsación de tecla, en realidad simulará una tercera pulsación de tecla, que es la combinación de ambos :)

Resolver

Debe evitar que su acceso directo se ejecute al mismo tiempo que presiona la tecla simulada, en otras palabras, agregue un retraso:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Agregue este comando a un acceso directo, y debería funcionar.

Nota

Por supuesto, puede jugar un poco con el valor sleep 1, para establecerlo al mejor valor que se sienta cómodo, dependiendo de qué tan "pegajosa" se presione la combinación. sleep 0.5bien podría hacerlo y hacer que el atajo actúe más rápidamente

Jacob Vlijm
fuente
8

También puede usar el comando directamente en la definición de acceso directo, por lo que no necesita crear un script independiente para él.

En lugar de usar la solución "dormir 1", puede usar la --clearmodifiersbandera, es decir, su acceso directo personalizado se vería así:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Para mí esto funciona al asignar los accesos directos a Super+F9.

ene
fuente
¿El fragmento de código anterior debe ser un archivo? Si es así, ¿tiene que ponerlo en un lugar particular o ejecutar un comando particular para implementar el acceso directo?
JellicleCat
1
El fragmento es solo una descripción del acceso directo que utilicé. En Ubuntu puede crear accesos directos personalizados en la configuración del teclado. Sin embargo, desde entonces he actualizado mi versión de Ubuntu y ahora puedo asignar directamente la acción "Reproducir (o reproducir / pausar)" a una combinación de teclas de mi elección, lo que demuestra ser más confiable que usar xdotool.
Jan
Incluso mejor que un --clearmodifiers es emitir un "keyup" para la tecla de acceso rápido que está utilizando para llamar al script. Un pequeño inconveniente es que necesita actualizar el script si cambia la tecla de acceso rápido para llamar al script.
vanadio
1

Una alternativa (para un rendimiento más ágil) al uso sleep 1 && xdotool ...es usar xdotool para liberar las teclas de acceso directo. Un poco más largo, pero también puedes usar

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
Alexander Mot
fuente