On 21/03/2023 15.29, Samuel Sieb wrote:
On 3/20/23 21:13, Eyal Lebedinsky wrote:
> On 20/03/2023 17.22, Eyal Lebedinsky wrote:
>> Fedora 36 up-to-date.
>>
>> $ uname -a
>> Linux e4.eyal.emu.id.au 6.1.15-100.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Mar 3
17:22:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
>>
>> I have a script running as root (using sudo) and in it I play a sound
>> paplay /audio/ogg/beginning.ogg
>> and it always worked.
>>
>> Then a few days ago it stopped and I now get an error. Something changed.
>>
>> $ sudo paplay /audio/ogg/beginning.ogg
>> Connection failure: Connection refused
>> pa_context_connect() failed: Connection refused
>>
>> $ sudo ogg123 -q /audio/ogg/beginning.ogg
>> ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection
refused
>>
>> === Could not load default driver and no driver specified in config file.
Exiting.
>>
>> Is there a simple way to allow playing sounds in this context?
>>
>> TIA
>
> Received a few replies that suggest it is not trivial to do so. Some think it is also
unwise.
>
> My current solution is to run the affected script as my non-root user and in it run
some parts with sudo
> (set up to run without a sudo password to avoid script interruption).
>
> BTW: I did try to use su/sudo back to my user, to run from inside the script (which
is running as root) but it still fails.
There used to be an environment variable that pointed to the pulseaudio socket, but that
seems to have changed (at least in F37). Check that the XDG_RUNTIME_DIR variable is set.
It wasn't when I tested going through root. It should point to /run/user/<pid>
which is most likely /run/user/1000 unless you aren't the first user.
Yet, it is present and set up. I expect that it is lost by sudo... yes it is.
I set it up manually and got a similar error:
[eyal@e7:~]$ sudo -i
[root@e7 ~]# set|grep XDG_RUNTIME_DIR
[root@e7 ~]# export XDG_RUNTIME_DIR=/run/user/500
[root@e7 ~]# paplay /audio/ogg/beginning.ogg
XDG_RUNTIME_DIR (/run/user/500) is not owned by us (uid 0), but by uid 500! (This could
e.g. happen if you try to connect to a non-root PulseAudio as a root user, over the native
protocol. Don't do that.)
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
--
Eyal Lebedinsky (fedora(a)eyal.emu.id.au)