命令获取所有正在播放的媒体列表

Hei*_*erg 8 command-line pulseaudio alsa media

我想获取所有正在播放的媒体的列表。有点像通知栏显示的那样。有命令可以做同样的事情吗?

在此输入图像描述

pLu*_*umo 13

MPRIS该功能通过标准D-Bus 接口(媒体播放器远程接口规范)来实现。

D 总线dbus-send

您可以使用 DBUS 命令手动控制它,但我发现它对于日常使用来说“有点”复杂:

# Get current Status
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify \
  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get \
  string:'org.mpris.MediaPlayer2.Player' \
  string:'PlaybackStatus'

# Get Metadata of currently playing song (if Playing)
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify \
  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get \
  string:'org.mpris.MediaPlayer2.Player' \
  string:'Metadata'
Run Code Online (Sandbox Code Playgroud)

(Spotify 是播放器,相应更改)

playerctl

或者简单地使用playerctl:

playerctl status
playerctl metadata
Run Code Online (Sandbox Code Playgroud)

安装apt:

sudo apt install playerctl
Run Code Online (Sandbox Code Playgroud)

Python的D-Bus模块

您还可以使用python'sdbus模块控制玩家:

#!/usr/bin/env python3
import dbus
bus = dbus.SessionBus()
for service in bus.list_names():
    if service.startswith('org.mpris.MediaPlayer2.'):
        player = dbus.SessionBus().get_object(service, '/org/mpris/MediaPlayer2')

        status=player.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus', dbus_interface='org.freedesktop.DBus.Properties')
        print(status)

        metadata = player.Get('org.mpris.MediaPlayer2.Player', 'Metadata', dbus_interface='org.freedesktop.DBus.Properties')
        print(metadata)
Run Code Online (Sandbox Code Playgroud)