Apenas para verdadeiros jogadores: vlc, mpv, RhythmBox, navegadores web, cmus, mpd, spotify e outros.
Bater papo
Playerctl é um utilitário de linha de comando e uma biblioteca para controlar reprodutores de mídia que implementam a especificação de interface MPRIS D-Bus. Playerctl facilita vincular ações do player, como reproduzir e pausar, a teclas de mídia. Você também pode obter metadados sobre a faixa em reprodução, como artista e título, para integração em geradores de linha de status ou outras ferramentas de linha de comando.
Playerctl também vem com um daemon que permite atuar no media player atualmente ativo chamado playerctld
.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
Aqui está uma lista de comandos disponíveis:
Comando | Descrição |
---|---|
play | Comande o jogador para jogar. |
pause | Comande o jogador para pausar |
play-pause | Comande o jogador para alternar entre reproduzir/pausar. |
stop | Comande o jogador para parar. |
next | Comande o jogador para pular para a próxima faixa. |
previous | Comande o player para pular para a faixa anterior. |
position [OFFSET][+/-] | Comande o jogador para ir para a posição ou buscar OFFSET para frente ou para trás em segundos. |
volume [LEVEL][+/-] | Imprima ou defina o volume para LEVEL de 0,0 a 1,0. |
status | Obtenha o status de jogo do jogador. Ou "Reproduzindo", "Pausado" ou "Parado". |
metadata [KEY...] | Imprima os metadados da trilha atual. Se KEY for passado, imprima apenas os valores dos metadados. |
open [URI] | Comando para o jogador abrir um determinado URI. Pode ser um caminho de arquivo ou uma URL remota. |
loop [STATUS] | Imprima ou defina o status do loop. Ou "Nenhum", "Faixa" ou "Lista de reprodução". |
shuffle [STATUS] | Imprima ou defina o status aleatório. Ou "Ligado", "Desligado". |
Sem especificar nenhum jogador para controlar, o Playerctl agirá no primeiro jogador que encontrar.
Playerctl vem com um serviço chamado playerctld
que monitora a atividade dos reprodutores de mídia em segundo plano. Se playerctld
estiver em execução, o Playerctl atuará nos jogadores na ordem de sua última atividade. Para iniciar playerctld
, adicione o seguinte comando ao script de inicialização do sistema:
playerctld daemon
Você pode listar os nomes dos players disponíveis para controle em execução no sistema com playerctl --list-all
.
Se quiser controlar apenas alguns jogadores, você pode passar os nomes desses jogadores separados por vírgulas com a bandeira --player
. Playerctl selecionará a primeira instância de um player nessa lista que suporta o comando. Para controlar todos os jogadores da lista, você pode usar a flag --all-players
.
Da mesma forma, você pode ignorar jogadores passando seus nomes com a flag --ignore-player
.
O nome especial do jogador %any
pode ser usado uma vez na lista de jogadores selecionados para corresponder a qualquer jogador que não esteja na lista. Isso pode ser usado para priorizar ou despriorizar jogadores.
Exemplos:
# Command the first instance of VLC to play
playerctl --player=vlc play
# Command all players to stop
playerctl --all-players stop
# Command VLC to go to the next track if it's running. If it's not, send the
# command to Spotify.
playerctl --player=vlc,spotify next
# Get the status of the first player that is not Gwenview.
playerctl --ignore-player=Gwenview status
# Command any player to play, but select Chromium last
playerctl --player=%any,chromium play
# Command any player to play, but select VLC first
playerctl --player=vlc,%any play
Você pode passar uma string de formato com o argumento --format
para imprimir propriedades em um formato específico. Passe a variável que deseja imprimir na string de formato entre colchetes duplos como {{ VARIABLE }}
. As variáveis disponíveis são o nome do comando de consulta ou qualquer coisa no mapa de metadados que possa ser visualizada com playerctl metadata
. Você pode usar isso para integrar o playerctl em um gerador de linha de status.
Para um banner simples "em execução":
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
Incluídas na linguagem de modelo estão algumas variáveis integradas e funções auxiliares para formatação comum que você pode chamar em variáveis de modelo. Ele também pode realizar operações matemáticas básicas com números.
# Prints 'Total length: 3:23'
playerctl metadata --format " Total length: {{ duration(mpris:length) }} "
# Prints 'At position: 1:16'
playerctl position --format " At position: {{ duration(position) }} "
# Prints 'Artist in lowercase: lana del rey'
playerctl metadata --format " Artist in lowercase: {{ lc(artist) }} "
# Prints 'STATUS: PLAYING'
playerctl status --format " STATUS: {{ uc(status) }} "
# Prints the time remaining in the track (e.g, 'Time remaining: 2:07')
playerctl metadata --format " Time remaining: {{ duration(mpris:length - position) }} "
# Prints volume from 0 - 100
playerctl metadata --format " Volume: {{ volume * 100 }} "
Função | Argumento | Descrição |
---|---|---|
lc | corda | Converta a string em minúsculas. |
uc | corda | Converta a string para maiúscula. |
duration | interno | Converta a duração para o formato hh:mm:ss. |
markup_escape | corda | Escape de caracteres de marcação XML na string. |
default | qualquer, qualquer | Imprima o primeiro valor, se estiver presente, ou então imprima o segundo. |
emoji | status ou volume | Tente converter a variável em uma representação emoji. |
trunc | string, int | Truncar a string até um comprimento máximo. |
Variável | Descrição |
---|---|
playerName | O nome do jogador atual. |
position | A posição da faixa atual em microssegundos |
status | O status de reprodução do player atual |
volume | O volume de 0,0 a 1,0 |
album | O álbum da faixa atual. |
artist | O artista da faixa atual. |
title | O título da faixa atual. |
Você pode passar o sinalizador --follow
para consultar comandos a serem bloqueados, esperar que os jogadores se conectem e imprimir a consulta sempre que ela mudar. Se os jogadores forem aprovados com --player
, os jogadores anteriores na lista serão preferidos na ordem em que aparecem, a menos que --all-players
seja aprovado. Quando nenhum jogador puder suportar a consulta, como quando todos os jogadores saírem, uma nova linha será impressa. Por exemplo, para ser notificado sobre informações sobre a última faixa em reprodução nos seus reprodutores de mídia, use:
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
Você pode buscar uma posição na pista ou pular para frente e para trás.
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
Para ativar o log de depuração, defina a variável de ambiente G_MESSAGES_DEBUG=playerctl
. É útil incluir um log de depuração ao relatar problemas.
Alguns players como o Spotify exigem que certas variáveis de ambiente DBus sejam definidas, que normalmente são definidas no gerenciador de sessão. Se você não estiver usando um gerenciador de sessão ou ele não definir essas variáveis automaticamente (como xinit
), inicie seu ambiente de desktop agrupado em um comando dbus-launch
. Por exemplo, em seu arquivo .xinitrc
, use isto para iniciar seu WM:
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
Alguns players podem exigir a instalação de um plugin ou outra configuração.
No Quod Libet abra a janela Arquivo -> Plugins e selecione o plugin chamado MPRIS D-Bus Support .
Se playerctld
não iniciar automaticamente e você usar xinit
e o systemd, talvez seja necessária esta correção para permitir que a ativação do DBus funcione corretamente:
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
Primeiro, verifique se o Playerctl está disponível no seu gerenciador de pacotes (se não estiver, peça a alguém para hospedar um pacote para você) e verifique também a página de lançamentos no github.
playerctl
está disponível para Fedora 28 ou posterior:
sudo dnf install playerctl
playerctl
está disponível para Mageia e openSUSE através deste repositório COPR. Primeiro, instale o arquivo de repositório para sua distribuição do COPR. Em seguida, instale playerctl
com o gerenciador de pacotes de sua preferência.
playerctl
está disponível como um pacote Guix que pode ser instalado em qualquer distribuição Linux após instalar o Guix:
guix install playerctl
Usar o cli e a biblioteca requer GLib (que também é uma dependência de quase todos esses players, então provavelmente você já o possui). Você pode usar a biblioteca em praticamente qualquer linguagem de programação com a biblioteca de ligação de introspecção associada.
Além disso, você também precisa das seguintes dependências de compilação:
gobject-introspection para construir dados de introspecção (configurável com a opção introspection
meson)
gtk-doc para documentação de construção (configurável com a opção gtk-doc
meson)
Os usuários do Fedora também precisam instalar redhat-rpm-config
Para gerar e construir o projeto para contribuir com o desenvolvimento e instalar o playerctl em /
:
meson mesonbuild
sudo ninja -C mesonbuild install
Observe que você precisa meson
instalado. Caso sua distro tenha apenas uma versão mais antiga do meson em seu repositório você pode instalar a versão mais recente via pip:
pip3 install meson
Lembre-se também de que gtk-doc e gobject-introspection estão habilitados por padrão, você pode desabilitá-los com -Dintrospection=false
e -Dgtk-doc=false
.
Se você não deseja instalar o playerctl em /
você pode instalá-lo em outro lugar exportando DESTDIR
antes de invocar o ninja, por exemplo:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
Você pode usá-lo posteriormente exportando as seguintes variáveis:
export LD_LIBRARY_PATH="$DESTDIR/${PREFIX}/lib/:$LD_LIBRARY_PATH"
export GI_TYPELIB_PATH="$DESTDIR/${PREFIX}/lib/:$GI_TYPELIB_PATH"
export PATH="$DESTDIR/${PREFIX}/bin:$PATH"
Para usar uma biblioteca de scripts, encontre sua linguagem favorita nesta lista e instale a biblioteca de ligações. A documentação da biblioteca está hospedada aqui. Para exemplos de como usar a biblioteca, consulte a pasta de exemplos.
Para usuários mais avançados, o Playerctl fornece uma biblioteca introspectável disponível em sua linguagem de script favorita que permite um controle mais detalhado, como a capacidade de assinar eventos do media player ou obter metadados, como artista e título da faixa em reprodução. Este exemplo usa as ligações Python.
#!/usr/bin/env python3
from gi . repository import Playerctl , GLib
player = Playerctl . Player ( 'vlc' )
def on_metadata ( player , metadata ):
if 'xesam:artist' in metadata . keys () and 'xesam:title' in metadata . keys ():
print ( 'Now playing:' )
print ( '{artist} - {title}' . format (
artist = metadata [ 'xesam:artist' ][ 0 ], title = metadata [ 'xesam:title' ]))
def on_play ( player , status ):
print ( 'Playing at volume {}' . format ( player . props . volume ))
def on_pause ( player , status ):
print ( 'Paused the song: {}' . format ( player . get_title ()))
player . connect ( 'playback-status::playing' , on_play )
player . connect ( 'playback-status::paused' , on_pause )
player . connect ( 'metadata' , on_metadata )
# start playing some music
player . play ()
if player . get_artist () == 'Lana Del Rey' :
# I meant some good music!
player . next ()
# wait for events
main = GLib . MainLoop ()
main . run ()
Para um exemplo mais completo que é capaz de ouvir quando os jogadores iniciam e saem, consulte player-manager.py nos exemplos oficiais.
Confira os seguintes artigos sobre Playerctl:
Projetos relacionados do criador do Playerctl:
Este trabalho está disponível sob a Licença Pública Geral Menor GNU (Veja CÓPIA).
Copyright © 2014, Tony Crisci