Pour les vrais joueurs uniquement : vlc, mpv, RhythmBox, navigateurs web, cmus, mpd, spotify et autres.
Chat
Playerctl est un utilitaire de ligne de commande et une bibliothèque permettant de contrôler les lecteurs multimédias qui implémentent la spécification d'interface MPRIS D-Bus. Playerctl permet de lier facilement les actions du joueur, telles que la lecture et la pause, aux touches multimédias. Vous pouvez également obtenir des métadonnées sur la piste en cours de lecture, telles que l'artiste et le titre, pour les intégrer dans des générateurs de lignes de statut ou d'autres outils de ligne de commande.
Playerctl est également livré avec un démon qui lui permet d'agir sur le lecteur multimédia actuellement actif appelé playerctld
.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
Voici une liste des commandes disponibles :
Commande | Description |
---|---|
play | Ordonnez au joueur de jouer. |
pause | Ordonner au joueur de faire une pause |
play-pause | Commandez au joueur de basculer entre lecture/pause. |
stop | Ordonnez au joueur de s'arrêter. |
next | Commandez au joueur de passer à la piste suivante. |
previous | Demandez au joueur de passer à la piste précédente. |
position [OFFSET][+/-] | Commandez au joueur d'aller à la position ou de rechercher un DÉCALAGE en avant ou en arrière en quelques secondes. |
volume [LEVEL][+/-] | Imprimez ou réglez le volume sur LEVEL de 0,0 à 1,0. |
status | Obtenez le statut de jeu du joueur. Soit "Lecture", "En pause" ou "Arrêté". |
metadata [KEY...] | Imprimez les métadonnées de la piste actuelle. Si KEY est transmis, imprimez uniquement les valeurs des métadonnées. |
open [URI] | Commande permettant au joueur d'ouvrir un URI donné. Il peut s'agir d'un chemin de fichier ou d'une URL distante. |
loop [STATUS] | Imprimez ou définissez l'état de la boucle. Soit « Aucun », « Piste » ou « Playlist ». |
shuffle [STATUS] | Imprimez ou définissez le statut de lecture aléatoire. Soit "On", "Off". |
Sans spécifier de joueurs à contrôler, Playerctl agira sur le premier joueur qu'il trouvera.
Playerctl est livré avec un service appelé playerctld
qui surveille l'activité des lecteurs multimédias en arrière-plan. Si playerctld
est en cours d'exécution, Playerctl agira sur les joueurs dans l'ordre de leur dernière activité. Pour démarrer playerctld
, ajoutez la commande suivante au script de démarrage de votre système :
playerctld daemon
Vous pouvez répertorier les noms des joueurs disponibles pour le contrôle et exécutés sur le système avec playerctl --list-all
.
Si vous souhaitez contrôler uniquement certains joueurs, vous pouvez transmettre les noms de ces joueurs séparés par des virgules avec le drapeau --player
. Playerctl sélectionnera la première instance d'un lecteur dans cette liste qui prend en charge la commande. Pour contrôler tous les joueurs de la liste, vous pouvez utiliser le drapeau --all-players
.
De même, vous pouvez ignorer les joueurs en passant leurs noms avec le drapeau --ignore-player
.
Le nom de joueur spécial %any
peut être utilisé une fois dans la liste des joueurs sélectionnés pour correspondre à n'importe quel joueur ne figurant pas dans la liste. Cela peut être utilisé pour prioriser ou déprioriser les joueurs.
Exemples :
# 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
Vous pouvez transmettre une chaîne de format avec l'argument --format
pour imprimer les propriétés dans un format spécifique. Passez la variable que vous souhaitez imprimer dans la chaîne de format entre doubles accolades comme {{ VARIABLE }}
. Les variables disponibles sont soit le nom de la commande query, soit tout ce qui se trouve dans la carte des métadonnées qui peut être visualisé avec playerctl metadata
. Vous pouvez l'utiliser pour intégrer playerctl dans un générateur de statut.
Pour une simple bannière « lecture en cours » :
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
Le langage de modèle comprend des variables intégrées et des fonctions d'assistance pour le formatage courant que vous pouvez appeler sur des variables de modèle. Il peut également effectuer des opérations mathématiques de base sur les nombres.
# 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 }} "
Fonction | Argument | Description |
---|---|---|
lc | chaîne | Convertissez la chaîne en minuscules. |
uc | chaîne | Convertissez la chaîne en majuscule. |
duration | int | Convertissez la durée au format hh:mm:ss. |
markup_escape | chaîne | Échappez les caractères de balisage XML dans la chaîne. |
default | n'importe lequel, n'importe lequel | Imprimez la première valeur si elle est présente, ou bien imprimez la seconde. |
emoji | état ou volume | Essayez de convertir la variable en représentation emoji. |
trunc | chaîne, entier | Tronquer la chaîne à une longueur maximale. |
Variable | Description |
---|---|
playerName | Le nom du joueur actuel. |
position | La position de la piste actuelle en microsecondes |
status | L'état de lecture du lecteur actuel |
volume | Le volume de 0,0 à 1,0 |
album | L'album du morceau actuel. |
artist | L'artiste du morceau actuel. |
title | Le titre de la piste actuelle. |
Vous pouvez transmettre l'indicateur --follow
pour interroger les commandes à bloquer, attendre que les joueurs se connectent et imprimer la requête à chaque fois qu'elle change. Si les joueurs sont passés avec --player
, les joueurs plus tôt dans la liste seront préférés dans l'ordre dans lequel ils apparaissent à moins que --all-players
ne soit passé. Lorsqu'aucun joueur ne peut prendre en charge la requête, par exemple lorsque tous les joueurs quittent, une nouvelle ligne sera imprimée. Par exemple, pour être informé des informations sur la dernière piste en cours de lecture sur vos lecteurs multimédias, utilisez :
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
Vous pouvez rechercher une position dans la piste ou avancer et reculer.
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
Pour activer la journalisation du débogage, définissez la variable d'environnement G_MESSAGES_DEBUG=playerctl
. Il est utile d'inclure un journal de débogage lorsque vous signalez des problèmes.
Certains lecteurs comme Spotify nécessitent la définition de certaines variables d'environnement DBus qui sont normalement définies dans le gestionnaire de session. Si vous n'utilisez pas de gestionnaire de session ou s'il ne définit pas ces variables automatiquement (comme xinit
), lancez votre environnement de bureau enveloppé dans une commande dbus-launch
. Par exemple, dans votre fichier .xinitrc
, utilisez ceci pour démarrer votre WM :
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
Certains lecteurs peuvent nécessiter l'installation d'un plugin ou d'une autre configuration.
Dans Quod Libet, ouvrez la fenêtre Fichier -> Plugins et sélectionnez le plugin appelé MPRIS D-Bus Support .
Si playerctld
ne démarre pas automatiquement et que vous utilisez xinit
et systemd, vous aurez peut-être besoin de ce correctif pour permettre à l'activation DBus de fonctionner correctement :
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
Tout d'abord, vérifiez si Playerctl est disponible depuis votre gestionnaire de packages (si ce n'est pas le cas, demandez à quelqu'un d'héberger un package pour vous) et consultez également la page des versions sur github.
playerctl
est disponible pour Fedora 28 ou version ultérieure :
sudo dnf install playerctl
playerctl
est disponible pour Mageia et openSUSE via ce référentiel COPR. Tout d’abord, installez le fichier de référentiel pour votre distribution à partir de COPR. Ensuite, installez playerctl
avec le gestionnaire de packages de votre choix.
playerctl
est disponible sous forme de package Guix qui peut être installé sur n'importe quelle distribution Linux après avoir installé Guix :
guix install playerctl
L'utilisation de la cli et de la bibliothèque nécessite GLib (qui est également une dépendance de presque tous ces lecteurs, vous l'avez donc probablement déjà). Vous pouvez utiliser la bibliothèque dans presque tous les langages de programmation avec la bibliothèque de liaison d'introspection associée.
De plus, vous avez également besoin des dépendances de build suivantes :
gobject-introspection pour créer des données d'introspection (configurable avec l'option méson introspection
)
gtk-doc pour la documentation de construction (configurable avec l'option gtk-doc
meson)
Les utilisateurs de Fedora doivent également installer redhat-rpm-config
Pour générer et construire le projet pour contribuer au développement et installer playerctl sur /
:
meson mesonbuild
sudo ninja -C mesonbuild install
Notez que vous devez installer meson
. Si votre distribution n'a qu'une ancienne version de meson dans son référentiel, vous pouvez installer la version la plus récente via pip :
pip3 install meson
Gardez également à l'esprit que gtk-doc et gobject-introspection sont activés par défaut, vous pouvez les désactiver avec -Dintrospection=false
et -Dgtk-doc=false
.
Si vous ne souhaitez pas installer playerctl sur /
vous pouvez l'installer ailleurs en exportant DESTDIR
avant d'invoquer ninja, par exemple :
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
Vous pourrez l'utiliser ultérieurement en exportant les variables suivantes :
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"
Pour utiliser une bibliothèque de scripts, recherchez votre langage préféré dans cette liste et installez la bibliothèque de liaisons. La documentation de la bibliothèque est hébergée ici. Pour des exemples sur la façon d'utiliser la bibliothèque, consultez le dossier d'exemples.
Pour les utilisateurs plus avancés, Playerctl fournit une bibliothèque introspectable disponible dans votre langage de script préféré qui permet un contrôle plus détaillé, comme la possibilité de s'abonner aux événements du lecteur multimédia ou d'obtenir des métadonnées telles que l'artiste et le titre de la piste en cours de lecture. Cet exemple utilise les liaisons 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 ()
Pour un exemple plus complet capable d'écouter le début et la sortie des joueurs, voir player-manager.py à partir des exemples officiels.
Consultez les articles suivants sur Playerctl :
Projets associés du créateur de Playerctl :
Ce travail est disponible sous la licence publique générale limitée GNU (voir COPIE).
Copyright © 2014, Tony Crisci