我有 Manjaro Linux,我正在尝试使用守护程序中的脚本来播放声音(mp3 和 wav)。基本上,我有一个 script.sh ,其中包含一个尝试播放声音的命令。该脚本是从守护程序调用的。 (下面有关代码的更多详细信息)。
快速注释:
- 该脚本从我的命令行成功运行(没有守护程序)
- 我知道我的脚本使用 root 作为用户,但我需要会话中的声音,为此,我只需在主命令之前添加一个“前缀”,以便自己以用户身份执行命令
- 作为播放声音的单个命令(没有守护进程且没有前缀),我的两个选项都有效(我尝试使用
paplay
和cvlc
) - 仅适用于“前缀”
cvlc
- 这是我使用过的前缀
sudo -u julian DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path="/run/user/1000/bus" ***Code to play sound***
- 播放声音的代码是:
paplay lowBattery2.wav --volume 65536
和cvlc --play-and-exit lowBattery.mp3
- 带有前缀的两个代码都可以正常工作,但是当存在另一个声音正在播放时(例如 youtube),命令行会返回错误。
概括:
我的问题:
- 我无法同时播放守护进程中的声音与另一个声音(例如 youtube)
我的目标:
- 当我的电脑电池电量不足时,执行此守护程序以打开我的通知。
就是这样。
这是脚本.sh
battery=$(cat /sys/class/power_supply/BAT0/capacity)
batteryLimit=97
user=julian
userID=1000
sayHelloMessage="Hi ${user}!"
messagePart1="Your computer has "
messagePart2="% of battery, please connect it"
finalMessage=$messagePart1$battery$messagePart2
while true; do
if [ "$batteryLimit" -gt "$battery" ]; then
echo $finalMessage;
echo $user
echo $userID
sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${userID}/bus" notify-send "${sayHelloMessage}" "${finalMessage}"
##sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path="/run/user/${userID}/bus" cvlc --play-and-exit lowBattery.mp3;
sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path="/run/user/${userID}/bus" paplay lowBattery2.wav --volume 65536
##ffplay -autoexit lowBattery.mp3;
##paplay lowBattery2.wav --volume 65536
echo "Sound ended"
else
echo "Your battery is greater than ${batteryLimit+1} you are ok!";
fi
echo $(date);
sleep 10;
done
这是守护进程:
[Unit]
Description=To show notifications when battery is smaller than 18%
After=multi-user.target
[Service]
Type=simple
ExecStart= sh /etc/systemd/system/LowBatteryScripts/script.sh
User=julian
WorkingDirectory=/etc/systemd/system/LowBatteryScripts
StandardOutput=syslog
StandarError=syslog
[Install]
WantedBy=multi-user.target
错误日志(带“前缀”)为: 对于 cvlc:
[000055d038a38c10] alsa audio output error: cannot open ALSA device "default": Dispositivo o recurso ocupado
[000055d038a38c10] main audio output error: Falló salida de audio
[000055d038a38c10] main audio output error: El dispositivo de audio «default» no se puede usar:
Dispositivo o recurso ocupado
[000055d038a38c10] main audio output error: module not functional
[00007f1164c1fb50] main decoder error: failed to create audio output
对于纸质版:
Connection failed: Connection denied
pa_context_connect () failed: Connection denied
答案1
$HOME/.config/pulse/default.pa
使用此内容创建:
!/usr/bin/pulseaudio -nF
.include /etc/pulse/default.pa
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
$HOME/.config/pulse/client.conf
为所有想要使用 PulseAudio 的用户添加另一个文件:
default-server = unix:/tmp/pulse-socket
enable-memfd = yes
现在所有用户都可以播放音频,不需要任何技巧。