Linuxデーモンでサウンドを再生する

Linuxデーモンでサウンドを再生する

私は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など)と同時に再生することはできません。

私の目標:

  • コンピュータのバッテリーが不足している場合は、このデーモンを起動して通知をオンにします。

それはすべてです。

これは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

これで、すべてのユーザーが別のトリックなしでオーディオを再生できるようになります。

おすすめ記事