我正在使用以下内容来检查是否有任何程序正在写入pulseaudio接收器:
pacmd list-sink-inputs
Run Code Online (Sandbox Code Playgroud)
这在终端上非常有效。这给了我这个输出:
1 sink input(s) available.
index: 4
driver: <protocol-native.c>
flags: START_CORKED
state: RUNNING
sink: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
volume: front-left: 24144 / 37% / -26.02 dB, front-right: 24144 / 37% / -26.02 dB
balance 0.00
muted: no
current latency: 59.33 ms
requested latency: 25.00 ms
sample spec: float32le 2ch 48000Hz
channel map: front-left,front-right
Stereo
resample method: copy
module: 7
client: 3 <Firefox>
properties:
media.name = "AudioStream"
application.name = "Firefox"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "30"
application.process.id = "1241"
application.process.user = "balajeerc"
application.process.host = "smallguy"
application.process.binary = "firefox"
application.language = "en_IN"
window.x11.display = ":0"
application.process.machine_id = "82f34b545d7441ad9439148d54b19c2e"
application.process.session_id = "c2"
application.icon_name = "firefox"
module-stream-restore.id = "sink-input-by-application-name:Firefox"
Run Code Online (Sandbox Code Playgroud)
但是,当我将它作为 cron 作业的一部分运行时,即使正在播放音频,它也不会给我任何东西(空字符串)。
为什么会这样?
编辑:为了回应下面的一些评论,我尝试了更多的东西。我现在使用完整路径运行它并使用以下方法记录错误:
/usr/bin/pacmd list-sink-inputs >> $LOG_FILE 2>&1
Run Code Online (Sandbox Code Playgroud)
这会抛出以下日志,它本质上是打印到 stderr 的内容,因为我之前提到的 stdout 是空的:
No PulseAudio daemon running, or not running as session daemon.
我的 crontab 条目如下:
*/2 * * * * /home/balajeerc/.i3/utils/idle_check_suspend.sh
Run Code Online (Sandbox Code Playgroud)
这是一个用户 crontab 条目,而不是 root。
idle_check_suspend.sh我的 pacmd 调用所在的脚本在哪里。
系统信息:
Kernel version: 4.8.0-49-generic
Ubuntu 16.04
pacmd 8.0
Compiled with libpulse 8.0.0
Linked with libpulse 8.0.0
Run Code Online (Sandbox Code Playgroud)
为了安全和方便,大多数发行版都将pulseaudio 使用用户的内置临时存储作为其守护程序控件(通常在/run/user/ 中)。在cron中,它没有设置相关的环境变量,所以不知道使用什么路径。您需要在脚本中为其提供一些参考信息:
export PULSE_RUNTIME_PATH="/run/user/$(id -u)/pulse/"
Run Code Online (Sandbox Code Playgroud)
或者,根据textshell 的建议,如果您的系统通常不会设置 PULSE_RUNTIME_PATH,则pulseaudio 可以使用 XDG_RUNTIME_DIR 环境变量:
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
Run Code Online (Sandbox Code Playgroud)
要验证上述变量,请在正常的已知工作 shell 会话中回显它们:
$ echo ${XDG_RUNTIME_DIR}
/run/user/1000
$ echo ${PULSE_RUNTIME_PATH}
/run/user/1000/pulse/
$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |