Только для настоящих игроков: vlc, mpv, RhythmBox, веб-браузеры, cmus, mpd, Spotify и другие.
Чат
Playerctl — это утилита и библиотека командной строки для управления медиаплеерами, реализующими спецификацию интерфейса D-Bus MPRIS. Playerctl позволяет легко привязывать действия проигрывателя, такие как воспроизведение и пауза, к медиа-клавишам. Вы также можете получить метаданные о воспроизводимой дорожке, такие как исполнитель и название, для интеграции в генераторы строки состояния или другие инструменты командной строки.
Playerctl также поставляется с демоном, который позволяет ему воздействовать на текущий активный медиаплеер, называемый playerctld
.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
Вот список доступных команд:
Команда | Описание |
---|---|
play | Прикажите игроку играть. |
pause | Прикажите игроку сделать паузу |
play-pause | Прикажите игроку переключиться между воспроизведением/паузой. |
stop | Прикажите игроку остановиться. |
next | Прикажите игроку перейти к следующему треку. |
previous | Прикажите игроку перейти к предыдущему треку. |
position [OFFSET][+/-] | Прикажите игроку перейти на позицию или искать СМЕЩ вперед или назад за секунды. |
volume [LEVEL][+/-] | Распечатайте или установите громкость УРОВЕНЬ от 0,0 до 1,0. |
status | Получить игровой статус игрока. Либо «Воспроизведение», «Приостановлено» или «Остановлено». |
metadata [KEY...] | Распечатайте метаданные текущего трека. Если передан KEY, выведите только те значения из метаданных. |
open [URI] | Команда для игрока, чтобы открыть данный URI. Может быть либо путем к файлу, либо удаленным URL-адресом. |
loop [STATUS] | Распечатайте или установите статус контура. Либо «Нет», «Трек» или «Список воспроизведения». |
shuffle [STATUS] | Распечатайте или установите статус перемешивания. Либо «Вкл», «Выкл». |
Не указывая игроков для управления, Playerctl будет действовать в отношении первого игрока, которого сможет найти.
Playerctl поставляется с сервисом playerctld
, который отслеживает активность медиаплееров в фоновом режиме. Если playerctld
запущен, Playerctl будет действовать на игроков в порядке их последней активности. Чтобы запустить playerctld
, добавьте следующую команду в сценарий запуска системы:
playerctld daemon
Вы можете перечислить имена игроков, доступных для управления и работающих в системе, с помощью playerctl --list-all
.
Если вы хотите контролировать только определенных игроков, вы можете передать имена этих игроков через запятую с помощью флага --player
. Playerctl выберет первый экземпляр игрока в этом списке, который поддерживает эту команду. Чтобы контролировать всех игроков в списке, вы можете использовать флаг --all-players
.
Аналогичным образом вы можете игнорировать игроков, передавая их имена с флагом --ignore-player
.
Специальное имя игрока %any
можно использовать в списке выбранных игроков один раз, чтобы оно соответствовало любому игроку, которого нет в списке. Это можно использовать для расстановки приоритетов или деприоритета игроков.
Примеры:
# 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
Вы можете передать строку формата с аргументом --format
, чтобы распечатать свойства в определенном формате. Передайте переменную, которую вы хотите напечатать, в строке формата между двойными скобками, например {{ VARIABLE }}
. Доступные переменные — это либо имя команды запроса, либо что-либо в карте метаданных, которую можно просмотреть с помощью playerctl metadata
. Вы можете использовать это для интеграции playerctl в генератор строки состояния.
Для простого баннера «сейчас играет»:
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
В язык шаблонов включены некоторые встроенные переменные и вспомогательные функции для общего форматирования, которые можно вызывать для переменных шаблона. Он также может выполнять основные математические операции с числами.
# 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 }} "
Функция | Аргумент | Описание |
---|---|---|
lc | нить | Преобразуйте строку в нижний регистр. |
uc | нить | Преобразуйте строку в верхний регистр. |
duration | интервал | Преобразуйте продолжительность в формат чч:мм:сс. |
markup_escape | нить | Экранируйте символы разметки XML в строке. |
default | любой, любой | Выведите первое значение, если оно присутствует, или выведите второе. |
emoji | статус или объем | Попробуйте преобразовать переменную в представление смайликов. |
trunc | строка, целое число | Обрезать строку до максимальной длины. |
Переменная | Описание |
---|---|
playerName | Имя текущего игрока. |
position | Положение текущего трека в микросекундах |
status | Статус воспроизведения текущего проигрывателя |
volume | Громкость от 0,0 до 1,0 |
album | Альбом текущего трека. |
artist | Исполнитель текущего трека. |
title | Название текущего трека. |
Вы можете передать флаг --follow
для запроса команд для блокировки, ожидания подключения игроков и печати запроса при каждом его изменении. Если игроки передаются с помощью --player
, игроки, находящиеся раньше в списке, будут иметь преимущество в том порядке, в котором они появляются, если не будет передан --all-players
. Если ни один игрок не может поддержать запрос, например, когда все игроки выходят, будет напечатана новая строка. Например, чтобы получать уведомления о последней воспроизводимой в данный момент дорожке на ваших медиаплеерах, используйте:
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
Вы можете искать нужную позицию на треке или переходить вперед и назад.
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
Чтобы включить ведение журнала отладки, установите переменную среды G_MESSAGES_DEBUG=playerctl
. При сообщении о проблемах полезно включать журнал отладки.
Некоторые проигрыватели, такие как Spotify, требуют установки определенных переменных среды DBus, которые обычно задаются в диспетчере сеансов. Если вы не используете менеджер сеансов или он не устанавливает эти переменные автоматически (например, xinit
), запустите среду рабочего стола с помощью команды dbus-launch
. Например, в вашем файле .xinitrc
используйте это для запуска WM:
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
Некоторым игрокам может потребоваться установка плагина или другой конфигурации.
В Quod Libet откройте окно File -> Plugins и выберите плагин под названием MPRIS D-Bus Support .
Если playerctld
не запускается автоматически и вы используете xinit
и systemd, вам может понадобиться это исправление, чтобы активация DBus работала правильно:
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
Сначала проверьте, доступен ли Playerctl в вашем менеджере пакетов (если нет, попросите кого-нибудь разместить пакет для вас), а также проверьте страницу выпусков на github.
playerctl
доступен для Fedora 28 или новее:
sudo dnf install playerctl
playerctl
доступен для Mageia и openSUSE через репозиторий COPR. Сначала установите файл репозитория для вашего дистрибутива из COPR. Затем установите playerctl
с помощью выбранного вами менеджера пакетов.
playerctl
доступен в виде пакета Guix, который можно установить в любой дистрибутив Linux после установки Guix:
guix install playerctl
Для использования командной строки и библиотеки требуется GLib (который также зависит почти от всех этих проигрывателей, поэтому он, вероятно, у вас уже есть). Вы можете использовать библиотеку практически на любом языке программирования с соответствующей библиотекой привязки интроспекции.
Кроме того, вам также потребуются следующие зависимости сборки:
gobject-introspection для построения данных интроспекции (настраивается с помощью опции introspection
мезонов)
gtk-doc для создания документации (настраивается с помощью опции gtk-doc
meson)
Пользователям Fedora также необходимо установить redhat-rpm-config
Чтобы сгенерировать и собрать проект для участия в разработке и установить playerctl в /
:
meson mesonbuild
sudo ninja -C mesonbuild install
Обратите внимание, что вам необходимо установить meson
. Если в вашем репозитории есть только старая версия meson, вы можете установить новейшую версию через pip:
pip3 install meson
Также имейте в виду, что gtk-doc и gobject-introspection включены по умолчанию. Вы можете отключить их с помощью -Dintrospection=false
и -Dgtk-doc=false
.
Если вы не хотите устанавливать playerctl в /
вы можете установить его в другом месте, экспортировав DESTDIR
перед вызовом ninja, например:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
Вы можете использовать его позже, экспортировав следующие переменные:
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"
Чтобы использовать библиотеку сценариев, найдите свой любимый язык из этого списка и установите библиотеку привязок. Документация к библиотеке размещена здесь. Примеры использования библиотеки см. в папке примеров.
Для более продвинутых пользователей Playerctl предоставляет библиотеку для самоанализа, доступную на вашем любимом языке сценариев, которая обеспечивает более детальный контроль, например, возможность подписываться на события медиаплеера или получать метаданные, такие как исполнитель и название воспроизводимой дорожки. В этом примере используются привязки 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 ()
Более полный пример, позволяющий прослушивать запуск и выход игроков, см. в player-manager.py из официальных примеров.
Ознакомьтесь со следующими статьями о Playerctl:
Похожие проекты от создателя Playerctl:
Эта работа доступна под лицензией GNU Lesser General Public License (см. КОПИРОВАНИЕ).
Авторские права © 2014, Тони Криски