我试图检测计算机是否空闲,然后运行脚本作为根用户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 身份运行的脚本可以使用sudo
并pacmd
以正确的用户身份运行,但仍然具有适当的权限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 …