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

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)