Running squeezelite lms audio client as system service?

At the beginning of the day, this was the status of squeezelite.service after install and enabling and starting:

$ sudo systemctl status squeezelite
× squeezelite.service - Squeezelite headless streaming music client
Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf, 50-keep-warm.conf
Active: failed (Result: exit-code) since Sat 2026-03-14 19:15:37 GMT; 3s ago
Duration: 58ms
Invocation: 7e869c682da94bfa9774e935b3ace237
Docs: man:squeezelite.service(7)
Process: 1072061 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
Main PID: 1072061 (code=exited, status=1/FAILURE)
Mem peak: 11.4M
CPU: 79ms

Mar 14 19:15:37 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 14 19:15:37 morgansmachine (eezelite)[1072061]: squeezelite.service: Referenced but unset environment variable evaluates to an >
Mar 14 19:15:37 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 14 19:15:37 morgansmachine squeezelite[1072061]: [19:15:37.448045] test_open:281 playback open error: Host is down
Mar 14 19:15:37 morgansmachine squeezelite[1072061]: [19:15:37.448078] output_init_common:401 unable to open output device: default
Mar 14 19:15:37 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 14 19:15:37 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.​

And, after having a look at the unit file and realising it was running as usr/grp system user squeezelite this is what I’ve done:

$ sudo loginctl enable-linger squeezelite
$ ls /var/lib/systemd/linger
squeezelite​
$ cat /etc/passwd|grep squeezelite
squeezelite:x:965:965:Squeezelite headless streaming music client:/var/lib/squeezelite:/sbin/nologin

Give squeezelite a login:

$ cat /etc/passwd|grep squeezelite
squeezelite:x:965:965:Squeezelite headless streaming music client:/var/lib/squeezelite:/bin/bash​
$ sudo su - squeezelite
$ export XDG_RUNTIME_DIR=/run/user/$UID​
$ systemctl --user enable pipewire
$ systemctl --user enable pipewire-pulse.service # unsure if this is necessary, it's not enabled in my user login but is running
$ systemctl --user start pipewire-pulse.service pipewire.service
$ systemctl --user enable --now wireplumber.service
$ systemctl --user daemon-reload
$ systemctl --user status pipewire pipewire-pulse wireplumber
● pipewire.service - PipeWire Multimedia Service
     Loaded: loaded (/usr/lib/systemd/user/pipewire.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/user/pipewire.service.d
             └─00-uresourced.conf
             /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2026-03-15 18:07:19 GMT; 35min ago
 Invocation: c4143b87cc684c6a9a8a102f7031e861
TriggeredBy: ● pipewire.socket
   Main PID: 1394358 (pipewire)
      Tasks: 3 (limit: 37656)
     Memory: 4M (peak: 5.1M)
        CPU: 23ms
     CGroup: /user.slice/user-965.slice/user@965.service/session.slice/pipewire.service
             └─1394358 /usr/bin/pipewire

● pipewire-pulse.service - PipeWire PulseAudio
     Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2026-03-15 18:07:19 GMT; 35min ago
 Invocation: 54346fc7b9454995856e94dd883a001f
TriggeredBy: ● pipewire-pulse.socket
   Main PID: 1394360 (pipewire-pulse)
      Tasks: 3 (limit: 37656)
     Memory: 1.3M (peak: 2M)
        CPU: 12ms
     CGroup: /user.slice/user-965.slice/user@965.service/session.slice/pipewire-pulse.service
             └─1394360 /usr/bin/pipewire-pulse

● wireplumber.service - Multimedia Service Session Manager
     Loaded: loaded (/usr/lib/systemd/user/wireplumber.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2026-03-15 18:07:19 GMT; 35min ago
 Invocation: df283d8c92554d70a4cd5197ad6614a3
   Main PID: 1394359 (wireplumber)
      Tasks: 9 (limit: 37656)
     Memory: 7.2M (peak: 8.4M)
        CPU: 108ms
     CGroup: /user.slice/user-965.slice/user@965.service/session.slice/wireplumber.service
             └─1394359 /usr/bin/wireplumber

Remove squeezelite a login:

$ cat /etc/passwd|grep squeezelite
squeezelite:x:965:965:Squeezelite headless streaming music client:/var/lib/squeezelite:/sbin/nologin​

And, at the end of the day, this is the status of squeezelite.service:

$ sudo systemctl status squeezelite
× squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
     Active: failed (Result: exit-code) since Sun 2026-03-15 18:16:35 GMT; 3s ago
   Duration: 57ms
 Invocation: edbd9ccaaa5949bb81aa96c3853b2767
       Docs: man:squeezelite.service(7)
    Process: 1395413 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 1395413 (code=exited, status=1/FAILURE)
   Mem peak: 10.9M
        CPU: 77ms

Mar 15 18:16:35 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 15 18:16:35 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 15 18:16:35 morgansmachine squeezelite[1395413]: [18:16:35.130246] test_open:281 playback open error: Host is down
Mar 15 18:16:35 morgansmachine squeezelite[1395413]: [18:16:35.130308] output_init_common:401 unable to open output device: pipewire
Mar 15 18:16:35 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 15 18:16:35 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.

I found this that seemed relevant:

I’m all out of ideas - can anyone give me any pointers getting this running as a system service?

This is only required to be able be run systemd user session services.
You have a systemd system service.

Also not required for a system service that runs as a user.

Did you find docs for squeezelite?
Maybe email the maintainer of squeezelite?

@barryascott Yes, but the systemd system service has a system user & group (squeezelite:x:965:965) and requires pipewire which runs as a systemd user service and so requires that enabled and started under the systemd system user… Unless I can be convinced of an alternative way of running a pipewire service for system service squeezelite - see the Arch linux link.

But, it is required while logging into the squeezelite system user to enable systemd user pipewire service - I return the account to nologin after doing that.

Here’s a link to a discussion on the LMS forum:
https://forums.lyrion.org/forum/user-forums/3rd-party-software/1815740-squeezelite-systemd-squeezelite-service

Maintainer emailed, thx. M.

Then squeezelite needs to also run as a user service not a system service I would have thought.

Also I would have expected the maintainer that package squeezelite to handle the requirements.

The discussion on LMS seems to say that the service is expected to run under your user when you are logged in.

I tested this in a VM, it looks like a race condition, here’s a workaround:

sudo mkdir -p -Z /etc/systemd/system/squeezelite.service.d
sudo tee /etc/systemd/system/squeezelite.service.d/override.conf << EOF > /dev/null
[Service]
Restart=on-failure
RestartSec=5
EOF
sudo systemctl daemon-reload
sudo systemctl restart squeezelite.service

Thanks @vgaetera - is that a workaround before or after my mucking around… :roll_eyes:
(I suspect the former…)

I haven’t been able to reboot - too much going on. I ran systemctl daemon-reexec instead.
This is what I get from

:/var/lib$ journalctl --no-pager -b -u squeezelite.service
Mar 16 23:36:28 morgansmachine systemd[1]: Stopped squeezelite.service - Squeezelite headless streaming music client.
Mar 16 23:42:39 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 16 23:42:40 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 16 23:42:40 morgansmachine squeezelite[1592625]: [23:42:40.072381] test_open:281 playback open error: Host is down
Mar 16 23:42:40 morgansmachine squeezelite[1592625]: [23:42:40.072500] output_init_common:401 unable to open output device: default
Mar 16 23:42:40 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 16 23:42:40 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.
Mar 16 23:42:43 morgansmachine systemd[1]: squeezelite.service: Scheduled restart job, restart counter is at 1.
...
Mar 16 23:46:51 morgansmachine systemd[1]: squeezelite.service: Scheduled restart job, restart counter is at 77.
Mar 16 23:46:51 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 16 23:46:51 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 16 23:46:51 morgansmachine squeezelite[1594465]: [23:46:51.109114] test_open:281 playback open error: Host is down
Mar 16 23:46:51 morgansmachine squeezelite[1594465]: [23:46:51.109212] output_init_common:401 unable to open output device: default
Mar 16 23:46:51 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 16 23:46:51 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.
:/var/lib$

And

:/var/lib$ sudo systemctl status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Mon 2026-03-16 23:57:02 GMT; 2s ago
 Invocation: be6ac559f6b540f7a731e9e54022f681
       Docs: man:squeezelite.service(7)
    Process: 1596742 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 1596742 (code=exited, status=1/FAILURE)
   Mem peak: 11.2M
        CPU: 74ms
:/var/lib$

But

:~$ systemctl --user status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/user/squeezelite.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Mon 2026-03-16 23:53:10 GMT; 2s ago
 Invocation: e0d15f1597f245a398d545782e0f779e
       Docs: man:squeezelite.service(7)
    Process: 1595820 ExecStartPre=/usr/bin/mkdir -p .local/share/squeezelite (code=exited, status=0/SUCCESS)
   Main PID: 1595823 (squeezelite)
      Tasks: 7 (limit: 37656)
     Memory: 15.4M (peak: 16.9M)
        CPU: 102ms
     CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/squeezelite.service
             └─1595823 /usr/bin/squeezelite -N .local/share/squeezelite/player-name

Mar 16 23:53:10 morgansmachine systemd[14863]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 16 23:53:10 morgansmachine systemd[14863]: Started squeezelite.service - Squeezelite headless streaming music client.
:~$

Presumably you should run only one service type, either system or user, not both.
It locks the output device to the service type started first and the lock persists until reboot even if you stop the service.

Oh…
What NOT a waste of time.
I’ll confirm when I get back to the machine. Thx.

Not a waste of time because, I’ve gone through a complete reboot (a number of times) and there seems to be no change in behaviour. This is what $ journalctl --no-pager -b -u squeezelite.service, $ sudo systemctl status squeezelite and $ systemctl --user status squeezelite show me:-

$ systemctl --user status squeezelite
○ squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/home/readlegal/.config/systemd/user/squeezelite.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: inactive (dead)
       Docs: man:squeezelite.service(7)
:~$

And

:~$ top
...
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                      
  10907 sssd      20   0  302784  18976  15936 S   0.0   0.1   0:01.17 sssd_kcm                                                     
   9458 squeeze+  20   0   29980  15960  10856 S   0.0   0.0   0:00.21 systemd                                                      
   9485 squeeze+  20   0   16460   3176   1740 S   0.0   0.0   0:00.00 (sd-pam)                                                     
   8851 rtkit     21   1   20556   2928   2684 S   0.0   0.0   0:02.98 rtkit-daemon
...

So, nothing running under systemd users.

But, under systemd system:-

`sudo systemctl status squeezelite`
:~$ sudo systemctl status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-03-17 20:10:31 GMT; 1s ago
 Invocation: 137ce3337d5f4586aa65efa5b97b7adc
       Docs: man:squeezelite.service(7)
    Process: 141745 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 141745 (code=exited, status=1/FAILURE)
   Mem peak: 11.6M
        CPU: 74ms

Mar 17 20:10:31 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.
:~$ sudo systemctl status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-03-17 20:10:57 GMT; 143ms ago
 Invocation: 6f963dad3f9c4df1b668a45f0d80d3be
       Docs: man:squeezelite.service(7)
    Process: 141883 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 141883 (code=exited, status=1/FAILURE)
   Mem peak: 11.2M
        CPU: 84ms
:~$ sudo systemctl status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-03-17 20:11:16 GMT; 610ms ago
 Invocation: 23856145f4264908bc56e0ba7118a6bd
       Docs: man:squeezelite.service(7)
    Process: 141980 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 141980 (code=exited, status=1/FAILURE)
   Mem peak: 11.7M
        CPU: 72ms
:~$ sudo systemctl status squeezelite
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-03-17 20:11:26 GMT; 1s ago
 Invocation: 32b0fd0d6e484c1ba40560700f83c132
       Docs: man:squeezelite.service(7)
    Process: 142029 ExecStart=/usr/bin/squeezelite -N /var/lib/squeezelite/player-name $ARGS (code=exited, status=1/FAILURE)
   Main PID: 142029 (code=exited, status=1/FAILURE)
   Mem peak: 11.4M
        CPU: 71ms
:~$
`journalctl --no-pager -b -u squeezelite.service`
:~$ journalctl --no-pager -b -u squeezelite.service
Mar 17 16:33:58 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 17 16:33:58 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 17 16:33:59 morgansmachine squeezelite[8938]: [16:33:59.076185] test_open:281 playback open error: Host is down
Mar 17 16:33:59 morgansmachine squeezelite[8938]: [16:33:59.076280] output_init_common:401 unable to open output device: default
Mar 17 16:33:59 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 17 16:33:59 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.
Mar 17 16:34:02 morgansmachine systemd[1]: squeezelite.service: Scheduled restart job, restart counter is at 1.
...
Mar 17 20:21:56 morgansmachine systemd[1]: squeezelite.service: Scheduled restart job, restart counter is at 4208.
Mar 17 20:21:56 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 17 20:21:56 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
Mar 17 20:21:56 morgansmachine squeezelite[144829]: [20:21:56.933999] test_open:281 playback open error: Host is down
Mar 17 20:21:56 morgansmachine squeezelite[144829]: [20:21:56.934039] output_init_common:401 unable to open output device: default
Mar 17 20:21:56 morgansmachine systemd[1]: squeezelite.service: Main process exited, code=exited, status=1/FAILURE
Mar 17 20:21:56 morgansmachine systemd[1]: squeezelite.service: Failed with result 'exit-code'.
:~$

It’s still going round and round… (With your override.conf.)
And, it won’t be stopped.

It needs something sensible in /etc/sysconfig/squeezelite , like:

## Optional command line arguments passed to squeezelite(1) system service.
ARGS="-o sysdefault:CARD=PCH -U Master"
#ARGS=

(An ALSA device cf. pipewire. See here.)

Then, it works.
:~$ sudo systemctl status squeezelite.service
● squeezelite.service - Squeezelite headless streaming music client
     Loaded: loaded (/usr/lib/systemd/system/squeezelite.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /etc/systemd/system/squeezelite.service.d
             └─override.conf
     Active: active (running) since Tue 2026-03-17 22:44:18 GMT; 8s ago
 Invocation: 31b1033b6e3e4858a5127819f1864e37
       Docs: man:squeezelite.service(7)
   Main PID: 8662 (squeezelite)
      Tasks: 4 (limit: 37656)
     Memory: 14.2M (peak: 15.1M)
        CPU: 80ms
     CGroup: /system.slice/squeezelite.service
             └─8662 /usr/bin/squeezelite -N /var/lib/squeezelite/player-name -o sysdefault:CARD=PCH -U Master

Mar 17 22:44:18 morgansmachine systemd[1]: Starting squeezelite.service - Squeezelite headless streaming music client...
Mar 17 22:44:18 morgansmachine systemd[1]: Started squeezelite.service - Squeezelite headless streaming music client.
:~$
1 Like

@vgaetera However, running something sensible like the raw ALSA device seems to block - perhaps unsurprisingly - anything else from accessing that sound device. Which seems like a return to somehow getting pipewire running under a nologin system user. Any suggestions? The above Arch link is the most relevant information I’ve been able to find.