with apologies

Restarting audio

· 2 min read · January 19, 2026 · #tech #linux #nixos #config

I run, at least for the time being, NixOS, generally from the main / unstable branch rather than a stable release. After a recent upgrade I found audio was not working, most likely because pipewire appeared to have stopped running. This is a jotting of the runes I invoked to restart it.1

First, check whether any suitable looking process seems to be running:

: mort@greyjay:~$; procs pipewire
 PID:▲ User │ TTY CPU MEM CPU Time │ Command
     [%] [%]          │
 6008  mort │     0.0 0.8 00:00:22 │ /nix/store/ka3w75gd28llnz2ns8p9svlhl16mxaxi-slack-4.47.59/lib/slac...
 6304  mort │     0.0 0.3 00:00:09 │ /proc/self/exe --type=utility --utility-sub-type=network.mojom.Net...
 7171  mort │     0.0 0.2 00:00:01 │ /proc/self/exe --type=utility --utility-sub-type=audio.mojom.Audio...
: mort@greyjay:~$; procs pulseaudio
 PID:▲ User │ TTY CPU MEM CPU Time │ Command
     [%] [%]          │

Then try to restart pipewire itself. First, as a user service:

: mort@greyjay:~$; systemctl --user restart pipewire
Failed to restart pipewire.service: Unit pipewire.service not found.

Doesn’t exist so retry as a system service:

: mort@greyjay:~$; systemctl restart pipewire
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to restart 'pipewire.service'.
Authenticating as: mort
Password:
==== AUTHENTICATION COMPLETE ====
Failed to restart pipewire.service: Unit pipewire.service is masked.

Bother. It’s masked. And unmasking doesn’t work due to NixOS using a read-only partition:

: mort@greyjay:~$; systemctl unmask pipewire
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ====
Authentication is required to manage system service or unit files.
Authenticating as: mort
Password:
==== AUTHENTICATION COMPLETE ====
Failed to unmask unit: File /etc/systemd/system/pipewire.service: Read-only file system

Hmm. Maybe it’s not just pipewire – what about wireplumber?

: mort@greyjay:~$; ll /etc/systemd/system/wireplumber.service
lrwxrwxrwx - root root 1970-01-01 00:00 /etc/systemd/system/wireplumber.service -> /dev/null

That’s a red-herring – this is a user service, so let’s look for our user units:

: mort@greyjay:~$; ll ~/.config/systemd/user/
drwxrwxr-x - mort users 2025-12-22 11:31 default.target.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 graphical-session-pre.target.wants/
drwxrwxr-x - mort users 2025-12-22 11:31 graphical-session.target.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 sockets.target.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 sway-session.target.wants/
lrwxrwxrwx - mort users 2025-12-22 11:31 emacs.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/emacs.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gammastep.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gammastep.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gnome-keyring.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gnome-keyring.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent-ssh.socket -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent-ssh.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent.socket -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 kanshi.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/kanshi.service
lrwxrwxrwx - mort users 2025-12-22 11:31 kbfs.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/kbfs.service
lrwxrwxrwx - mort users 2025-12-22 11:31 keybase.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/keybase.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire-pulse.service -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire-pulse.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire-pulse.socket -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire-pulse.socket
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire.service -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire.socket -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 sway-session.target -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/sway-session.target
lrwxrwxrwx - mort users 2025-12-22 11:31 swayidle.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/swayidle.service
lrwxrwxrwx - mort users 2025-12-22 11:31 swayosd.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/swayosd.service
lrwxrwxrwx - mort users 2025-12-22 11:31 tray.target -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/tray.target

Hmm. wireplumber is missing. Try enabling it:

: mort@greyjay:~$; systemctl --user enable wireplumber
Created symlink '/home/mort/.config/systemd/user/wireplumber.service' → '/nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service'.
Created symlink '/home/mort/.config/systemd/user/pipewire-session-manager.service' → '/home/mort/.config/systemd/user/wireplumber.service'.
Created symlink '/home/mort/.config/systemd/user/pipewire.service.wants/wireplumber.service' → '/nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service'.
Unit /nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service is added as a dependency to a non-existent unit pipewire.service.
Unit /nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service is added as a dependency to a non-existent unit pipewire.service.

Oho! That did something.

: mort@greyjay:~$; ll ~/.config/systemd/user/
drwxrwxr-x - mort users 2025-12-22 11:31 default.target.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 graphical-session-pre.target.wants/
drwxrwxr-x - mort users 2025-12-22 11:31 graphical-session.target.wants/
drwxr-xr-x - mort users 2025-12-22 14:54 pipewire.service.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 sockets.target.wants/
drwxr-xr-x - mort users 2025-12-22 11:31 sway-session.target.wants/
lrwxrwxrwx - mort users 2025-12-22 11:31 emacs.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/emacs.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gammastep.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gammastep.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gnome-keyring.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gnome-keyring.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent-ssh.socket -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent-ssh.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent.service
lrwxrwxrwx - mort users 2025-12-22 11:31 gpg-agent.socket -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/gpg-agent.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 kanshi.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/kanshi.service
lrwxrwxrwx - mort users 2025-12-22 11:31 kbfs.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/kbfs.service
lrwxrwxrwx - mort users 2025-12-22 11:31 keybase.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/keybase.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire-pulse.service -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire-pulse.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire-pulse.socket -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire-pulse.socket
lrwxrwxrwx - mort users 2025-12-22 14:54 pipewire-session-manager.service -> /home/mort/.config/systemd/user/wireplumber.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire.service -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire.service
lrwxrwxrwx - mort users 2025-04-11 15:08 pipewire.socket -> /nix/store/xir78j1r5bk42jjxsszjwfx93sjc0d93-pipewire-1.4.1/share/systemd/user/pipewire.socket
lrwxrwxrwx - mort users 2025-12-22 11:31 sway-session.target -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/sway-session.target
lrwxrwxrwx - mort users 2025-12-22 11:31 swayidle.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/swayidle.service
lrwxrwxrwx - mort users 2025-12-22 11:31 swayosd.service -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/swayosd.service
lrwxrwxrwx - mort users 2025-12-22 11:31 tray.target -> /nix/store/vgn3nh0sij9gazgf5cjq7j7bvnwr8bnk-home-manager-files/.config/systemd/user/tray.target
lrwxrwxrwx - mort users 2025-12-22 14:54 wireplumber.service -> /nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service

I also noticed that some of those symlinks were dangling, so I removed them:

: mort@greyjay:user$; rm pipewire-pulse.service pipewire-pulse.socket pipewire.service pipewire.socket
: mort@greyjay:user$; ll
drwxrwxr-x - mort users 2025-12-22 14:55 default.target.wants/
drwxr-xr-x - mort users 2025-12-22 14:55 graphical-session-pre.target.wants/
drwxrwxr-x - mort users 2025-12-22 14:55 graphical-session.target.wants/
drwxr-xr-x - mort users 2025-12-22 14:54 pipewire.service.wants/
drwxr-xr-x - mort users 2025-12-22 14:55 sockets.target.wants/
drwxr-xr-x - mort users 2025-12-22 14:55 sway-session.target.wants/
lrwxrwxrwx - mort users 2025-12-22 14:55 emacs.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/emacs.service
lrwxrwxrwx - mort users 2025-12-22 14:55 gammastep.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/gammastep.service
lrwxrwxrwx - mort users 2025-12-22 14:55 gnome-keyring.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/gnome-keyring.service
lrwxrwxrwx - mort users 2025-12-22 14:55 gpg-agent-ssh.socket -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/gpg-agent-ssh.socket
lrwxrwxrwx - mort users 2025-12-22 14:55 gpg-agent.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/gpg-agent.service
lrwxrwxrwx - mort users 2025-12-22 14:55 gpg-agent.socket -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/gpg-agent.socket
lrwxrwxrwx - mort users 2025-12-22 14:55 kanshi.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/kanshi.service
lrwxrwxrwx - mort users 2025-12-22 14:55 kbfs.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/kbfs.service
lrwxrwxrwx - mort users 2025-12-22 14:55 keybase.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/keybase.service
lrwxrwxrwx - mort users 2025-12-22 14:54 pipewire-session-manager.service -> /home/mort/.config/systemd/user/wireplumber.service
lrwxrwxrwx - mort users 2025-12-22 14:55 sway-session.target -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/sway-session.target
lrwxrwxrwx - mort users 2025-12-22 14:55 swayidle.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/swayidle.service
lrwxrwxrwx - mort users 2025-12-22 14:55 swayosd.service -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/swayosd.service
lrwxrwxrwx - mort users 2025-12-22 14:55 tray.target -> /nix/store/prhy3gb8fhy6yrjrpq98v6biy9zwg9y1-home-manager-files/.config/systemd/user/tray.target
lrwxrwxrwx - mort users 2025-12-22 14:54 wireplumber.service -> /nix/store/3jk8py96bwnn0sgl1r0dwr0vif4cvivw-wireplumber-0.5.12/share/systemd/user/wireplumber.service

Finally, check statuses and restart things as needed:

: mort@greyjay:user$; systemctl --user status pipewire
 pipewire.service - PipeWire Multimedia Service
     Loaded: loaded (/etc/systemd/user/pipewire.service; enabled; preset: ignored)
    Drop-In: /nix/store/6sqgdcfscsq254xdq93sv0hjjyv0dz1i-user-units/pipewire.service.d
             └─overrides.conf
     Active: active (running) since Mon 2025-12-22 14:57:29 GMT; 6s ago
 Invocation: 6c08e0e9e0de494aa8f7491011d8d514
TriggeredBy: ● pipewire.socket
   Main PID: 42345 (pipewire)
      Tasks: 4 (limit: 37987)
     Memory: 8M (peak: 8.2M)
        CPU: 50ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service
             └─42345 /nix/store/334afxah19b3hr6ll93pfxlcyhhh2vws-pipewire-1.4.9/bin/pipewire

Dec 22 14:57:29 greyjay systemd[3323]: Started PipeWire Multimedia Service.
: mort@greyjay:user$; systemctl --user restart pipewire-pulse
: mort@greyjay:user$; systemctl --user status pipewire-pulse
 pipewire-pulse.service - PipeWire PulseAudio
     Loaded: loaded (/etc/systemd/user/pipewire-pulse.service; enabled; preset: ignored)
    Drop-In: /nix/store/6sqgdcfscsq254xdq93sv0hjjyv0dz1i-user-units/pipewire-pulse.service.d
             └─overrides.conf
     Active: active (running) since Mon 2025-12-22 14:57:46 GMT; 4s ago
 Invocation: 46833e7c144a4b608ff829fe0c644594
TriggeredBy: ● pipewire-pulse.socket
   Main PID: 42442 (pipewire-pulse)
      Tasks: 3 (limit: 37987)
     Memory: 2.7M (peak: 3M)
        CPU: 24ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
             └─42442 /nix/store/334afxah19b3hr6ll93pfxlcyhhh2vws-pipewire-1.4.9/bin/pipewire-pulse

Dec 22 14:57:46 greyjay systemd[3323]: Started PipeWire PulseAudio.

That seemed to fix things anyway.

1

Note that this is pasted from my terminal so you may need my shell aliases if you just want to cut’n’paste, not that I recommend it particularly.