[aur-general] Sound in systemd service

NicoHood archlinux at nicohood.de
Thu Jan 3 17:45:57 UTC 2019


On 1/3/19 12:14 AM, David Runge wrote:
> Hi!
> 
> TL;DR: Don't. Use what the package provides and start it as a systemd
> user service!
> 
> On 2019-01-02 00:56:24 (+0100), NicoHood wrote:
>> I currently try to create a system-wide spotifyd service that can play
>> music from a dedicated user/group. I used the spotifyd package from AUR
>> as a base:
>> https://aur.archlinux.org/packages/spotifyd/
>>
>> I added a user directory for the user and added it to the audio group:
>> u spotifyd - "Spotify daemon user" /var/lib/spotifyd
>> m spotifyd audio
> That's not a good idea.
> 
>> The directory is created like this:
>> d /var/lib/spotifyd 0750 spotifyd spotifyd -
> That also is unneeded.
> 
>> I've added to the system service to start with a config file in
>> /etc/sptoifyd.conf and start with:
>> User=spotifyd
>> Group=spotifyd
> Also pointless.
> 
>> Now the service is running fine in the background, I can select it in
>> spotify. But no sound will play. I am also running a gnome desktop
>> environment with pulseaudio on the machine. And I dont know how to get
>> audio working within this service. The software supports alsa backend
>> and pulseaudio backend, but none of them seem to give me a sound.
> Not sure how to operate multiple pulseaudio sinks of multiple users to
> work together. However, ALSA will only allow to be accessed by *one*
> application/mixer/whatever.
> 
>> If I run locally, I get:
>> $ sudo -u spotifyd -g spotifyd /usr/bin/spotifyd --no-daemon --config
>> /etc/spotifyd.conf
>>
>> ```
>> No protocol specified
>> xcb_connection_has_error() returned true
>> ALSA lib pcm_dmix.c:1099:(snd_pcm_dmix_open) unable to open slave
>> 00:42:24 [ERROR] Alsa error PCM open -2
>> 00:42:24 [ERROR] Could not start audio: Alsa error: PCM open failed
>> ```
> AFAICS this is because your user session with activated pulseaudio
> already grabs the ALSA device. There can only be one client.
> Additionally: Arch actually doesn't require being in the audio group and
> might be more in the way than anything else (it's also not required for
> your own user!):
> https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/PerfectSetup/
> 
>> This does not happen with my local user, even with `sudo -u nicohood`.
> Well, if you have a user session with that user, pulseaudio will have
> already grabbed the device.
> Running notifyd with sudo -u (see `man sudo`) roughly equals just
> running directly as your user.
> 
>> Using a more simpler command gives me the same problem:
>> $ sudo -u spotifyd -g spotifyd aplay
>> /usr/share/sounds/alsa/Front_Center.wav No protocol specified
>> xcb_connection_has_error() returned true
>> ALSA lib pcm_dmix.c:1099:(snd_pcm_dmix_open) unable to open slave
>> aplay: main:828: audio open error: No such file or directory
> Same problem as above.
> 
>> Can anyone give me a hint how to get audio running with this separated
>> user/service?
> Start the user service with your session (running spotifyd as your user)
> and use the pulseaudio backend to not use ALSA directly and block your
> device for other applications.
> 
> That's btw. also what upstream intends:
> https://github.com/Spotifyd/spotifyd#running-as-a-systemd-service
> And it's also how the packager installs it:
> https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=spotifyd#n35
> 
> Additionally:
> 
> If it was Tidal, you could use mpd:
> https://www.musicpd.org/doc/html/plugins.html#tidal
> While looking at mpd, I realized, that the mpd user is in the audio
> group... and I'm not sure, but this might actually break fast user
> switching and should probably be removed.
> 
> If it had a JACK backend, you could use $JACK_PROMISCUOUS_MODE to access
> a local jackd with multiple clients (from different users).
> 
> Best,
> David
> 
> P.S.: We now have the arch-proaudio mailing list, where one can ask
> about these types of setups/ideas.
> 

I understand the problem better now, thanks.

I want to run it on a headless device where no user should be logged in.
I try to avoid autologin, as it looks hacky to me. My problem was that I
tested it on my desktop with a logged in user that has the master audio
permission. And then the playback failed.

BTW: This workaround worked, but is not what I really want to do:
http://billauer.co.il/blog/2014/01/pa-multiple-users/

I guess the best idea is to run pulseaudio in system mode. I am aware
that this is not adviced, but in this case it looks like the correct
setup for a headless PC with no logged in user. I'd still create a
spotifyd user with its own UID, so it is not run as root.

About the audio group: I am not sure if it is required, I remember
alsamixer did not work in some setups without the audio group.

About the user directory of the service: I assume it does cache some
tracks, so I gave it a user directory.

Does anyone has a pulseaudio systemd service file for system mode? I've
seen some online, but all differ a bit. I want to set it up properly
with the correct options enabled.

~Nico

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/aur-general/attachments/20190103/2fd59283/attachment.asc>


More information about the aur-general mailing list