查看当前实时音频输出电平

查看当前实时音频输出电平

我试图检测计算机是否空闲,然后运行脚本作为根用户x 时间后。


我使用 xprintidle 来测量自上次用户输入发生以来的时间。问题是,如果正在播放视频或音乐,xprintidle 不会重置。

因此,我一直在寻找终端命令,以便能够查看当前的音频输出级别。

我测试过的大多数命令仅显示当前的音量百分比/值设置,而不是实时音频输出级别。

我已经能够使用此命令获取输出音频的所有应用程序源:

pacmd list-sink-inputs | grep -c 'state: RUNNING'

但当我以 root 身份运行它时,最终收到此错误消息:

No PulseAudio daemon running, or not running as session daemon.

有谁知道有什么命令/文件来检查当前的实时音频输出电平?

或者只是简单地检查是否正在播放音频?

答案1

pacmd使用XDG_RUNTIME_DIR环境变量找到正在运行的 PulseAudio 守护程序的路径。但是,如果用户不匹配,连接将被拒绝。这意味着 root 无法直接运行pacmd来与普通用户的 PulseAudio 进行通信。

以 root 身份运行的脚本可以使用sudopacmd以正确的用户身份运行,但仍然具有适当的权限XDG_RUNTIME_DIR(例如这个答案)。该脚本需要知道几个值。

作为有权访问 PulseAudio 的普通用户(即pacmd list-sink-inputs工作时)调用:

id -u
echo "$XDG_RUNTIME_DIR"

输出将分别是例如1000/run/user/1000。然后在脚本中使用这些值。它将是这样的:

sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pacmd … | grep …

请注意,一般来说,传递的变量sudo VAR=value …受到限制(请参阅man 8 sudo)。我不确定sudo以 root 身份运行是否会改变任何事情。如果您的sudo配置不允许XDG_RUNTIME_DIR以这种方式设置,请使用 shell:

sudo -u '#1000' sh -c 'XDG_RUNTIME_DIR=/run/user/1000 pacmd …' | grep …

相关内容