¿Cómo crear un atajo de teclado para reproducir/pausar cualquier audio/vídeo que se ejecute en segundo plano?

¿Cómo crear un atajo de teclado para reproducir/pausar cualquier audio/vídeo que se ejecute en segundo plano?

Así que compré este teclado para mi computadora portátil que no tiene teclas multimedia y estoy muy acostumbrado a presionar el botón de reproducción/pausa en mi computadora portátil para pausar cualquier reproducción multimedia en segundo plano. Sin embargo, con este teclado tengo que crear mis propios atajos de teclado para hacerlo debido a la ausencia de teclas multimedia. Hasta ahora he logrado crear atajos de teclado para controlar el volumen.

Investigación y mis intentos:

  1. Encontré esta página que muestra un comando para simular claves multimedia desde la terminal. https://askubuntu.com/questions/235126/simulate-media-keys-in-terminal/235181#235181. El comando es xdotool key XF86AudioPlay, pero cuando hago un atajo de teclado a partir de esto yendo aConfiguración > Teclado > Atajos de aplicaciones. No parece funcionar.

  2. Cuando presiono el método abreviado de teclado que he configurado enSúper+F11El uso de mi CPU aumenta un poco, lo que significa que el acceso directo está funcionando. Confirmé esto cambiando el comando que ejecutan los accesos directos y exo-open --launch WebBrowserque, como habrás pensado, abre mi navegador web cuando presionoSúper+F11.

  3. Ahora, como sabía un poco de C/C++, creé este programa contenedor que hace exactamente lo mismo.

#include <stdlib.h>

int main() {
    system("xdotool key XF86AudioPlay");
}

y mapeé el acceso directo para ejecutar este programa, pero ¡¡Ay!! todavía no funciona.

¿Cómo obtengo el comando que XFCE ejecuta cuando presiono el botón predeterminado de reproducción/pausa en el teclado de mi computadora portátil porque parece reproducir/pausar cualquier medio que se esté reproduciendo en segundo plano?

Yo uso XFCE en Arch Linux. Normalmente escucho música en rhytmbox music play.

Respuesta1

Si solo desea controlar rhythmbox, reproducir rhythmbox-client --playla canción o rhythmbox-client --pausepausarla debería ser suficiente.

Pero encontré este software llamado playerctlen algún wiki de Arch que controla los medios que se reproducen actualmente. No estoy 100% seguro de cuál es su prioridad, pero cuando tengo un vídeo de YouTube abierto, lo controla de forma predeterminada en lugar de alterar Rhythmbox. Para alternar entre reproducir y pausar, ejecute playerctl play-pause. Para ir al siguiente vídeo/música que ejecute playerctl nexty al vídeo/música anterior que ejecute playerctl previous.

No estoy 100% seguro de si esto funciona en cualquier otra distribución o incluso si está disponible, pero a mí me funciona en Arch.

Respuesta2

Rhythmbox parece admitir ambos rhythmbox-client --play/--pausecomandos y los comandos D-Bus enviados mediante dbus-send, como se explica enesta pregunta en AskUbuntuyesta pregunta aquí en U&L.SE vinculada desde esa respuesta de AskUbuntu.

En resumen el dbus-sendcomando sería:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

con la condición de que primero se debe habilitar la API MPRIS de Rhythmbox.

Pero si también necesita controlar cualquier video de YouTube usando esas mismas pulsaciones de teclas, probablemente necesitará esas pulsaciones para activar una secuencia de comandos que determina qué reproductor está reproduciendo actualmente y envía los comandos correctos a Rhythmbox o a cualquier navegador web. (u otra aplicación) que estés usando para reproducir vídeos de YouTube. Y para el navegador, el comando/pulsación de tecla debería enviarse a la pestaña correcta del navegador, que no será necesariamente la actual...

Respuesta3

Encontré lo mismo que tú: el comando xdotool key XF86AudioPlayfunciona desde un shell, pero no desde un acceso directo o un iniciador de aplicaciones. Entonces llegué a la conclusión de que xdotoolsolo funciona cuando se ejecuta desde un shell interactivo. Y, curiosamente, lo hice funcionar en atajos de teclado e íconos de inicio (por ejemplo, en la barra de tareas) con el siguiente comando:

bash -i -c 'xdotool key XF86AudioPlay'

Tan pronto como quitas el -iinterruptor, dejándolo así bashno interactivo, deja de funcionar. No tengo idea de por qué este es el caso...

Lo bueno de este XF86AudioPlaymétodo es que también funciona para pausar vídeos de Youtube que se reproducen en segundo plano en Firefox, por ejemplo.


Actualizar

Bien, descubrí por qué sucede esto. En mi .bashrchabía cambiado $LD_LIBRARY_PATH, lo cual era necesario para xdotoolpoder correr. Sin embargo, esto no sucedió al iniciar sesión en mi sesión GUI (XFCE). Por lo tanto, cualquier programa iniciado directamente desde la GUI (por ejemplo, un iniciador o Alt+F2) y no desde una terminal no verá el archivo modificado $LD_LIBRARY_PATH, por lo que faltarán algunas bibliotecas.

Entonces, la solución correcta fue colocar las modificaciones de $LD_LIBRARY_PATHen .profileen lugar de .bashrc. De esa manera, XFCE los ejecutaría al iniciar sesión y todos los programas podrían verlos. Sin embargo, dejaré aquí la antigua respuesta para futuros visitantes.

Respuesta4

En caso de que estés usando Audacious, puedes usar

audacious -t

para alternar entre pausa y reproducción (ver man audacious).

información relacionada