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.