저는 Manjaro Linux를 사용하고 있으며 데몬에서 스크립트를 사용하여 사운드(mp3 및 wav)를 재생하려고 합니다. 기본적으로 사운드 재생을 시도하는 명령이 포함된 script.sh가 있습니다. 스크립트는 데몬에서 호출됩니다. (아래 코드에 대한 자세한 내용)
빠른 참고 사항:
- 스크립트가 내 명령줄에서 성공적으로 실행됩니다(데몬 없이).
- 내 스크립트가 사용자로 루트를 사용한다는 것을 알고 있지만 세션에서 음성이 필요합니다. 이를 위해 사용자로 직접 명령을 실행하기 위해 기본 명령 앞에 "접두사"를 추가하기만 하면 됩니다.
- (데몬 없이, 접두사 없이) 사운드를 재생하는 단일 명령으로 내 옵션이 모두 작동합니다(
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)와 동시에 재생할 수 없습니다.
내 목표:
- 내 컴퓨터의 배터리가 부족하면 이 데몬을 실행하여 알림을 켭니다.
그게 다야.
이것은 script.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
이제 모든 사용자가 별도의 트릭 없이 오디오를 재생할 수 있습니다.