私は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.conf
PulseAudioを使用したいすべてのユーザーに別のファイルを追加します。
default-server = unix:/tmp/pulse-socket
enable-memfd = yes
これで、すべてのユーザーが別のトリックなしでオーディオを再生できるようになります。