Linux 데몬에서 사운드 재생

Linux 데몬에서 사운드 재생

저는 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.confPulseAudio를 사용하려는 모든 사용자를 위해 다른 파일을 추가하세요.

default-server = unix:/tmp/pulse-socket
enable-memfd = yes

이제 모든 사용자가 별도의 트릭 없이 오디오를 재생할 수 있습니다.

관련 정보