Nur für echte Spieler: VLC, MPV, RhythmBox, Webbrowser, CMU, MPD, Spotify und andere.
Chatten
Playerctl ist ein Befehlszeilendienstprogramm und eine Bibliothek zur Steuerung von Mediaplayern, die die MPRIS D-Bus-Schnittstellenspezifikation implementieren. Playerctl macht es einfach, Player-Aktionen wie Wiedergabe und Pause an Medientasten zu binden. Sie können auch Metadaten zum wiedergegebenen Titel abrufen, z. B. den Interpreten und den Titel, zur Integration in Statuszeilengeneratoren oder andere Befehlszeilentools.
Playerctl verfügt außerdem über einen Daemon namens playerctld
, der es ihm ermöglicht, auf den aktuell aktiven Mediaplayer zu reagieren.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
Hier ist eine Liste der verfügbaren Befehle:
Befehl | Beschreibung |
---|---|
play | Befehlen Sie dem Spieler zu spielen. |
pause | Befehlen Sie dem Spieler, eine Pause einzulegen |
play-pause | Befehlen Sie dem Spieler, zwischen Wiedergabe und Pause umzuschalten. |
stop | Befehlen Sie dem Spieler, anzuhalten. |
next | Befehlen Sie dem Player, zum nächsten Titel zu springen. |
previous | Befehlen Sie dem Player, zum vorherigen Titel zu springen. |
position [OFFSET][+/-] | Befehlen Sie dem Spieler, innerhalb von Sekunden zu der Position zu gehen oder einen Vorwärts- oder Rückwärts-OFFSET zu suchen. |
volume [LEVEL][+/-] | Drucken Sie die Lautstärke aus oder stellen Sie sie auf LEVEL von 0,0 bis 1,0 ein. |
status | Rufen Sie den Spielstatus des Spielers ab. Entweder „Wird abgespielt“, „Pause“ oder „Gestoppt“. |
metadata [KEY...] | Drucken Sie die Metadaten für den aktuellen Titel. Wenn KEY übergeben wird, werden nur die Werte aus den Metadaten gedruckt. |
open [URI] | Befehl für den Spieler, einen bestimmten URI zu öffnen. Kann entweder ein Dateipfad oder eine Remote-URL sein. |
loop [STATUS] | Drucken Sie den Schleifenstatus aus oder legen Sie ihn fest. Entweder „Keine“, „Track“ oder „Playlist“. |
shuffle [STATUS] | Drucken Sie den Zufallsstatus aus oder legen Sie ihn fest. Entweder „Ein“, „Aus“. |
Ohne anzugeben, welche Spieler kontrolliert werden sollen, wird Playerctl auf den ersten Spieler reagieren, den es finden kann.
Playerctl verfügt über einen Dienst namens playerctld
, der die Aktivität von Mediaplayern im Hintergrund überwacht. Wenn playerctld
ausgeführt wird, wird „Playerctl“ in der Reihenfolge ihrer letzten Aktivität auf die Spieler einwirken. Um playerctld
zu starten, fügen Sie den folgenden Befehl zu Ihrem Systemstartskript hinzu:
playerctld daemon
Mit playerctl --list-all
können Sie die Namen der Player auflisten, die zur Steuerung verfügbar sind und auf dem System ausgeführt werden.
Wenn Sie nur bestimmte Spieler steuern möchten, können Sie die Namen dieser Spieler durch Kommas getrennt mit der Flagge --player
übergeben. Playerctl wählt die erste Instanz eines Players in dieser Liste aus, der den Befehl unterstützt. Um alle Spieler in der Liste zu steuern, können Sie das Flag --all-players
verwenden.
Ebenso können Sie Spieler ignorieren, indem Sie ihre Namen mit dem Flag --ignore-player
übergeben.
Der spezielle Spielername %any
kann einmal in der Liste der ausgewählten Spieler verwendet werden, um mit jedem Spieler übereinzustimmen, der nicht in der Liste enthalten ist. Dies kann genutzt werden, um Spieler zu priorisieren oder zu depriorisieren.
Beispiele:
# 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
Sie können eine Formatzeichenfolge mit dem Argument --format
übergeben, um Eigenschaften in einem bestimmten Format zu drucken. Übergeben Sie die Variable, die Sie drucken möchten, in der Formatzeichenfolge zwischen doppelten Klammern wie {{ VARIABLE }}
. Die verfügbaren Variablen sind entweder der Name des Abfragebefehls oder alles in der Metadatenzuordnung, das mit playerctl metadata
angezeigt werden kann. Damit können Sie playerctl in einen Statusline-Generator integrieren.
Für ein einfaches „Jetzt abgespielt“-Banner:
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
In der Vorlagensprache sind einige integrierte Variablen und Hilfsfunktionen für allgemeine Formatierungen enthalten, die Sie für Vorlagenvariablen aufrufen können. Es kann auch grundlegende mathematische Operationen mit Zahlen durchführen.
# 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 }} "
Funktion | Argument | Beschreibung |
---|---|---|
lc | Zeichenfolge | Wandeln Sie die Zeichenfolge in Kleinbuchstaben um. |
uc | Zeichenfolge | Wandeln Sie die Zeichenfolge in Großbuchstaben um. |
duration | int | Konvertieren Sie die Dauer in das Format hh:mm:ss. |
markup_escape | Zeichenfolge | Escape-XML-Markup-Zeichen in der Zeichenfolge. |
default | irgendjemand, irgendjemand | Drucken Sie den ersten Wert aus, falls vorhanden, oder drucken Sie andernfalls den zweiten. |
emoji | Status oder Lautstärke | Versuchen Sie, die Variable in eine Emoji-Darstellung umzuwandeln. |
trunc | string, int | Zeichenfolge auf maximale Länge kürzen. |
Variable | Beschreibung |
---|---|
playerName | Der Name des aktuellen Spielers. |
position | Die Position des aktuellen Titels in Mikrosekunden |
status | Der Wiedergabestatus des aktuellen Players |
volume | Die Lautstärke von 0,0 bis 1,0 |
album | Das Album des aktuellen Titels. |
artist | Der Künstler des aktuellen Titels. |
title | Der Titel des aktuellen Titels. |
Sie können das Flag --follow
übergeben, um Befehle abzufragen, die blockiert werden sollen, auf die Verbindung von Spielern warten und die Abfrage ausdrucken, wenn sie sich ändert. Wenn Spieler mit --player
übergeben werden, werden die Spieler weiter oben in der Liste in der Reihenfolge, in der sie erscheinen, bevorzugt, es sei denn, --all-players
wird übergeben. Wenn kein Spieler die Abfrage unterstützen kann, beispielsweise wenn alle Spieler beenden, wird eine neue Zeile gedruckt. Um beispielsweise über Informationen zum zuletzt wiedergegebenen Titel für Ihre Mediaplayer benachrichtigt zu werden, verwenden Sie Folgendes:
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
Sie können eine Position im Track ansteuern oder vor- und zurückspringen.
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
Um die Debug-Protokollierung zu aktivieren, legen Sie die Umgebungsvariable G_MESSAGES_DEBUG=playerctl
fest. Es ist hilfreich, ein Debug-Protokoll einzuschließen, wenn Sie Probleme melden.
Bei einigen Playern wie Spotify müssen bestimmte DBus-Umgebungsvariablen festgelegt werden, die normalerweise im Sitzungsmanager festgelegt werden. Wenn Sie keinen Sitzungsmanager verwenden oder dieser diese Variablen nicht automatisch festlegt (wie z. B. xinit
), starten Sie Ihre Desktop-Umgebung in einem dbus-launch
-Befehl. Verwenden Sie beispielsweise in Ihrer .xinitrc
Datei Folgendes, um Ihren WM zu starten:
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
Bei einigen Playern ist möglicherweise die Installation eines Plugins oder einer anderen Konfiguration erforderlich.
Öffnen Sie in Quod Libet das Fenster Datei -> Plugins und wählen Sie das Plugin namens MPRIS D-Bus Support aus.
Wenn playerctld
nicht automatisch startet und Sie xinit
und systemd verwenden, benötigen Sie möglicherweise diesen Fix, damit die DBus-Aktivierung ordnungsgemäß funktioniert:
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
Überprüfen Sie zunächst, ob Playerctl in Ihrem Paketmanager verfügbar ist (falls nicht, bitten Sie jemanden, ein Paket für Sie zu hosten) und sehen Sie sich auch die Release-Seite auf Github an.
playerctl
ist für Fedora 28 oder höher verfügbar:
sudo dnf install playerctl
playerctl
ist für Mageia und openSUSE über dieses COPR-Repository verfügbar. Installieren Sie zunächst die Repository-Datei für Ihre Distribution von COPR. Installieren Sie dann playerctl
mit dem Paketmanager Ihrer Wahl.
playerctl
ist als Guix-Paket verfügbar, das nach der Installation von Guix auf jeder Linux-Distribution installiert werden kann:
guix install playerctl
Für die Verwendung der CLI und der Bibliothek ist GLib erforderlich (was auch eine Abhängigkeit fast aller dieser Player ist, sodass Sie es wahrscheinlich bereits haben). Sie können die Bibliothek in fast jeder Programmiersprache mit der zugehörigen Introspection-Bindungsbibliothek verwenden.
Darüber hinaus benötigen Sie auch die folgenden Build-Abhängigkeiten:
gobject-introspection zum Erstellen von Introspection-Daten (konfigurierbar mit der Option introspection
Meson“)
gtk-doc für die Gebäudedokumentation (konfigurierbar mit der Option gtk-doc
meson)
Fedora-Benutzer müssen außerdem redhat-rpm-config
installieren
So generieren und erstellen Sie das Projekt, um zur Entwicklung beizutragen, und installieren Sie playerctl in /
:
meson mesonbuild
sudo ninja -C mesonbuild install
Beachten Sie, dass meson
installiert sein muss. Falls Ihre Distribution nur eine ältere Version von Meson im Repository hat, können Sie die neueste Version über pip installieren:
pip3 install meson
Beachten Sie auch, dass gtk-doc und gobject-introspection standardmäßig aktiviert sind. Sie können sie mit -Dintrospection=false
und -Dgtk-doc=false
deaktivieren.
Wenn Sie playerctl nicht in /
installieren möchten, können Sie es an anderer Stelle installieren, indem Sie DESTDIR
exportieren, bevor Sie Ninja aufrufen, z. B.:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
Sie können es später verwenden, indem Sie die folgenden Variablen exportieren:
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"
Um eine Skriptbibliothek zu verwenden, suchen Sie in dieser Liste Ihre bevorzugte Sprache und installieren Sie die Bindungsbibliothek. Die Dokumentation für die Bibliothek wird hier gehostet. Beispiele zur Verwendung der Bibliothek finden Sie im Beispielordner.
Für fortgeschrittenere Benutzer bietet Playerctl eine übersichtliche Bibliothek in Ihrer bevorzugten Skriptsprache, die eine detailliertere Steuerung ermöglicht, z. B. die Möglichkeit, Media Player-Ereignisse zu abonnieren oder Metadaten wie Interpret und Titel für den wiedergegebenen Titel abzurufen. In diesem Beispiel werden die Python-Bindungen verwendet.
#!/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 ()
Ein vollständigeres Beispiel, das das Starten und Beenden von Spielern abhören kann, finden Sie unter player-manager.py in den offiziellen Beispielen.
Schauen Sie sich die folgenden Artikel über Playerctl an:
Verwandte Projekte vom Hersteller von Playerctl:
Dieses Werk ist unter der GNU Lesser General Public License verfügbar (siehe KOPIEREN).
Urheberrecht © 2014, Tony Crisci