Como criar um atalho de teclado para reproduzir/pausar qualquer áudio/vídeo em execução em segundo plano?

Como criar um atalho de teclado para reproduzir/pausar qualquer áudio/vídeo em execução em segundo plano?

Então comprei este teclado para o meu laptop que não possui teclas de mídia e estou muito acostumado a pressionar o botão reproduzir/pausar no meu laptop para pausar qualquer mídia reproduzida em segundo plano. Com este teclado, entretanto, tenho que criar meus próprios atalhos de teclado para fazer isso devido à ausência de teclas de mídia. Até agora consegui criar atalhos de teclado para controle de volume.

Pesquisa e minhas tentativas:

  1. Encontrei esta página que mostra um comando para simular chaves de mídia do terminal. https://askubuntu.com/questions/235126/simulate-media-keys-in-terminal/235181#235181. O comando é xdotool key XF86AudioPlaymas quando eu faço um atalho de teclado indo paraConfigurações > Teclado > Atalhos de aplicativos. Parece não funcionar.

  2. Quando pressiono o atalho de teclado que defini paraSuper+F11meu uso de CPU aumenta um pouco, o que significa que o atalho está funcionando. Confirmei isso alterando o comando que os atalhos executam, para exo-open --launch WebBrowsero qual, como você deve ter pensado, abre meu navegador quando pressionoSuper+F11.

  3. Agora, porque eu conhecia um pouco de C/C++, criei este programa wrapper que faz exatamente a mesma coisa

#include <stdlib.h>

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

e mapeei o atalho para executar este programa, mas infelizmente!! ainda não funciona.

Como obtenho o comando que o XFCE executa quando pressiono o botão reproduzir/pausar padrão no teclado do meu laptop, porque isso parece reproduzir/pausar qualquer mídia reproduzida em segundo plano.

Eu uso o XFCE no Arch Linux. Eu costumo ouvir música no rhytmbox music play.

Responder1

Se você deseja apenas controlar rhythmbox, rhythmbox-client --playtocar a música ou rhythmbox-client --pausepausá-la deve ser suficiente.

Mas encontrei este software chamado playerctlem algum wiki do Arch que controla a mídia atualmente reproduzida. Não tenho 100% de certeza de qual é sua prioridade, mas quando abro um vídeo do YouTube, ele controla isso por padrão, em vez de mexer no Rhythmbox. Para alternar entre reproduzir e pausar, execute playerctl play-pause. Para ir para o próximo vídeo/música que você executa playerctl nexte para o vídeo/música anterior que você executa playerctl previous.

Não tenho 100% de certeza se isso funciona em qualquer outra distro ou se está disponível, mas funciona para mim no Arch.

Responder2

O Rhythmbox parece suportar rhythmbox-client --play/--pausecomandos e comandos D-Bus enviados usando dbus-send, conforme explicado emesta pergunta no AskUbuntueesta pergunta aqui no U&L.SE conforme link da resposta do AskUbuntu.

Resumindo, o dbus-sendcomando seria:

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

com a condição de que a API MPRIS do Rhythmbox precise ser habilitada primeiro.

Mas se você também precisar controlar qualquer vídeo do YouTube usando essas mesmas teclas, provavelmente precisará dessas teclas para ativar um script que descobre qual player está tocando no momento e envia os comandos corretos para o Rhythmbox ou para qualquer navegador da web. (ou outro aplicativo) que você está usando para reproduzir vídeos do YouTube. E para o navegador, o comando/tecla precisaria ser enviado para a aba correta do navegador, que não será necessariamente a atual...

Responder3

Achei o mesmo que você: o comando xdotool key XF86AudioPlayfunciona em um shell, mas não em um atalho ou inicializador de aplicativos. Concluí então que xdotoolsó funciona quando executado a partir de um shell interativo. E, engraçado, consegui que funcionasse em atalhos de teclado e ícones do iniciador (por exemplo, na barra de tarefas) com o seguinte comando:

bash -i -c 'xdotool key XF86AudioPlay'

Assim que você remove a -ichave, tornando- basha não interativa, ela para de funcionar. Não faço ideia por que esse é o caso ...

O bom do XF86AudioPlaymétodo é que ele também funciona para pausar a reprodução de vídeos do Youtube em segundo plano no Firefox, por exemplo.


Atualizar

Ok, descobri por que isso está acontecendo. Na minha .bashrceu tinha mudado $LD_LIBRARY_PATHo que era necessário para xdotoolrodar. No entanto, isso não aconteceu ao fazer login na minha sessão GUI (XFCE). Portanto, qualquer programa iniciado diretamente da GUI (por exemplo, um iniciador ou Alt+F2) e não de um terminal não veria o arquivo modificado $LD_LIBRARY_PATH, perdendo assim algumas bibliotecas.

Portanto, a solução correta era colocar as modificações de $LD_LIBRARY_PATHin .profileem vez de .bashrc. Dessa forma, o XFCE os executaria no login e todos os programas poderiam vê-los. No entanto, deixarei aqui a resposta antiga para futuros visitantes.

Responder4

Caso você esteja usando o Audacious, você pode usar

audacious -t

para alternar entre pausa e reprodução (consulte man audacious).

informação relacionada