Sólo para verdaderos jugadores: vlc, mpv, RhythmBox, navegadores web, cmus, mpd, spotify y otros.
Charlar
Playerctl es una utilidad y biblioteca de línea de comandos para controlar reproductores multimedia que implementan la especificación de interfaz MPRIS D-Bus. Playerctl facilita vincular acciones del reproductor, como reproducir y pausar, a teclas multimedia. También puede obtener metadatos sobre la pista en reproducción, como el artista y el título, para integrarlos en generadores de líneas de estado u otras herramientas de línea de comandos.
Playerctl también viene con un demonio que le permite actuar sobre el reproductor multimedia actualmente activo llamado playerctld
.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
Aquí hay una lista de comandos disponibles:
Dominio | Descripción |
---|---|
play | Ordena al jugador que juegue. |
pause | Ordena al jugador que haga una pausa |
play-pause | Ordene al reproductor que alterne entre reproducir/pausar. |
stop | Ordena al jugador que se detenga. |
next | Ordena al jugador que salte a la siguiente pista. |
previous | Ordena al jugador que salte a la pista anterior. |
position [OFFSET][+/-] | Ordene al jugador que vaya a la posición o busque OFFSET hacia adelante o hacia atrás en segundos. |
volume [LEVEL][+/-] | Imprima o establezca el volumen en NIVEL de 0,0 a 1,0. |
status | Obtenga el estado de reproducción del jugador. Ya sea "Reproduciendo", "Pausado" o "Detenido". |
metadata [KEY...] | Imprime los metadatos de la pista actual. Si se pasa KEY, imprima solo aquellos valores de los metadatos. |
open [URI] | Comando para que el jugador abra una URI determinada. Puede ser una ruta de archivo o una URL remota. |
loop [STATUS] | Imprima o establezca el estado del bucle. Ya sea "Ninguno", "Pista" o "Lista de reproducción". |
shuffle [STATUS] | Imprima o establezca el estado de reproducción aleatoria. Ya sea "Activado", "Desactivado". |
Sin especificar ningún jugador a controlar, Playerctl actuará sobre el primer jugador que pueda encontrar.
Playerctl viene con un servicio llamado playerctld
que monitorea la actividad de los reproductores multimedia en segundo plano. Si playerctld
se está ejecutando, Playerctl actuará sobre los jugadores en el orden de su última actividad. Para iniciar playerctld
, agregue el siguiente comando al script de inicio de su sistema:
playerctld daemon
Puede enumerar los nombres de los reproductores que están disponibles para controlar y que se ejecutan en el sistema con playerctl --list-all
.
Si solo deseas controlar ciertos jugadores, puedes pasar los nombres de esos jugadores separados por comas con la bandera --player
. Playerctl seleccionará la primera instancia de un jugador en esa lista que admita el comando. Para controlar a todos los jugadores de la lista, puedes usar la bandera --all-players
.
De manera similar, puedes ignorar a los jugadores pasando sus nombres con la bandera --ignore-player
.
El nombre de jugador especial %any
se puede usar en la lista de jugadores seleccionados una vez para coincidir con cualquier jugador que no esté en la lista. Esto se puede utilizar para priorizar o despriorizar a los jugadores.
Ejemplos:
# 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
Puede pasar una cadena de formato con el argumento --format
para imprimir propiedades en un formato específico. Pase la variable que desea imprimir en la cadena de formato entre llaves dobles como {{ VARIABLE }}
. Las variables disponibles son el nombre del comando de consulta o cualquier cosa en el mapa de metadatos que se pueda ver con playerctl metadata
. Puedes usar esto para integrar playerctl en un generador de línea de estado.
Para un simple banner de "reproduciendo ahora":
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
En el lenguaje de la plantilla se incluyen algunas variables integradas y funciones auxiliares para el formato común que puede utilizar en las variables de la plantilla. También puede realizar operaciones matemáticas básicas con 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 }} "
Función | Argumento | Descripción |
---|---|---|
lc | cadena | Convierte la cadena a minúsculas. |
uc | cadena | Convierte la cadena a mayúsculas. |
duration | entero | Convierta la duración al formato hh:mm:ss. |
markup_escape | cadena | Escapar de los caracteres de marcado XML en la cadena. |
default | cualquiera, cualquiera | Imprima el primer valor si está presente, o imprima el segundo. |
emoji | estado o volumen | Intente convertir la variable en una representación emoji. |
trunc | cadena, entero | Truncar la cadena a una longitud máxima. |
Variable | Descripción |
---|---|
playerName | El nombre del jugador actual. |
position | La posición de la pista actual en microsegundos. |
status | El estado de reproducción del reproductor actual. |
volume | El volumen de 0,0 a 1,0 |
album | El álbum de la pista actual. |
artist | El artista de la pista actual. |
title | El título de la pista actual. |
Puede pasar el indicador --follow
para consultar comandos para bloquear, esperar a que los jugadores se conecten e imprimir la consulta cada vez que cambie. Si se pasa a los jugadores con --player
, se preferirá a los jugadores anteriores en la lista en el orden en que aparecen, a menos que se pase --all-players
. Cuando ningún jugador puede soportar la consulta, como cuando todos los jugadores salen, se imprimirá una nueva línea. Por ejemplo, para recibir notificaciones sobre la última pista que se reproduce actualmente en sus reproductores multimedia, utilice:
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
Puedes buscar una posición en la pista o saltar hacia adelante y hacia atrá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 habilitar el registro de depuración, configure la variable de entorno G_MESSAGES_DEBUG=playerctl
. Es útil incluir un registro de depuración cuando informa problemas.
Algunos reproductores como Spotify requieren que se establezcan ciertas variables de entorno DBus que normalmente se configuran dentro del administrador de sesión. Si no está utilizando un administrador de sesión o no configura estas variables automáticamente (como xinit
), inicie su entorno de escritorio envuelto en un comando dbus-launch
. Por ejemplo, en su archivo .xinitrc
, use esto para iniciar su WM:
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
Algunos reproductores pueden requerir la instalación de un complemento u otra configuración.
En Quod Libet abra la ventana Archivo -> Complementos y seleccione el complemento llamado MPRIS D-Bus Support .
Si playerctld
no se inicia automáticamente y usa xinit
y systemd, es posible que necesite esta solución para permitir que la activación de DBus funcione correctamente:
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
Primero, verifique si Playerctl está disponible en su administrador de paquetes (si no lo está, pídale a alguien que aloje un paquete por usted) y también consulte la página de lanzamientos en github.
playerctl
está disponible para Fedora 28 o posterior:
sudo dnf install playerctl
playerctl
está disponible para Mageia y openSUSE a través de este repositorio COPR. Primero, instale el archivo del repositorio para su distribución desde COPR. Luego, instale playerctl
con el administrador de paquetes de su elección.
playerctl
está disponible como un paquete de Guix que se puede instalar en cualquier distribución de Linux después de instalar Guix:
guix install playerctl
El uso de la cli y la biblioteca requiere GLib (que también es una dependencia de casi todos estos reproductores, por lo que probablemente ya lo tenga). Puede utilizar la biblioteca en casi cualquier lenguaje de programación con la biblioteca de enlace de introspección asociada.
Además, también necesita las siguientes dependencias de compilación:
gobject-introspection para construir datos de introspección (configurable con la opción mesón introspection
)
gtk-doc para documentación de construcción (configurable con la opción mesón gtk-doc
)
Los usuarios de Fedora también necesitan instalar redhat-rpm-config
Generar y construir el proyecto para contribuir al desarrollo e instalar playerctl en /
:
meson mesonbuild
sudo ninja -C mesonbuild install
Tenga en cuenta que necesita tener instalado meson
. En caso de que tu distribución solo tenga una versión anterior de meson en su repositorio, puedes instalar la versión más nueva mediante pip:
pip3 install meson
También tenga en cuenta que gtk-doc y gobject-introspection están habilitados de forma predeterminada, puede deshabilitarlos con -Dintrospection=false
y -Dgtk-doc=false
.
Si no desea instalar playerctl en /
puede instalarlo en otro lugar exportando DESTDIR
antes de invocar a ninja, por ejemplo:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
Puede usarlo más adelante exportando las siguientes variables:
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 utilizar una biblioteca de secuencias de comandos, busque su idioma favorito en esta lista e instale la biblioteca de enlaces. La documentación de la biblioteca está alojada aquí. Para obtener ejemplos sobre cómo utilizar la biblioteca, consulte la carpeta de ejemplos.
Para usuarios más avanzados, Playerctl proporciona una biblioteca introspectable disponible en su lenguaje de programación favorito que permite un control más detallado, como la posibilidad de suscribirse a eventos del reproductor multimedia u obtener metadatos como el artista y el título de la pista en reproducción. Este ejemplo utiliza los enlaces de 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 obtener un ejemplo más completo que sea capaz de escuchar cuándo los jugadores comienzan y salen, consulte player-manager.py en los ejemplos oficiales.
Consulte los siguientes artículos sobre Playerctl:
Proyectos relacionados del creador de Playerctl:
Este trabajo está disponible bajo la Licencia Pública General Reducida de GNU (Ver COPIAR).
Copyright © 2014, Tony Crisci