Ubuntu 26.04: Pipewire pw-play cannot play sound as root from within a script
https://askubuntu.com/questions/1567035/ubuntu-26-04-pipewire-pw-play-cannot-play-sound-as-root-from-within-a-script
What's working thanks to @daniel-t:
#!/bin/bash
sudo XDG_RUNTIME_DIR="/run/user/$(id -u admn)" pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga
# or
XDG_RUNTIME_DIR=/run/user/1000 pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga
exit;
OS: Ubuntu 26.04 Resolute
Desktop: MATE Desktop Environment 1.28.2
Installation: Fresh (Not upgraded from any previous version). Installed Ubuntu Server 26.04 and then installed MATE Desktop on it.
Note: Sound is working just fine. I can play any audio or video file through VLC just fine.
I can even play sound from a terminal with the following command just fine:
pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga
And still, I get this error:
error: pw_context_connect() failed: Host is down
When the same command is run from a script with sudo:
#!/bin/bash
sudo -u $USER pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga;
# or
pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga;
# or
sudo -u admn XDG_RUNTIME_DIR="/run/user/$(id -u admn)" pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga;
exit;
sudo /home/admn/Downloads/test.sh
Output:
error: pw_context_connect() failed: Host is down
Pipewire and related command status:
strace -ff pw-play -p /usr/share/sounds/Yaru/stereo/desktop-login.oga |& grep 'connect.*pipewire'
Note: This did play the sound.
Output:
[pid 5345] connect(14, {sa_family=AF_UNIX, sun_path="/run/user/1000/pipewire-0"}, 28) = 0
stat /run/user/$(id -u admn)/pipewire-0
Output:
stat: cannot stat '/run/user/1000/pipewire-0': No such file or directory (os error 2)
ps u -C pipewire
Output:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
admn 2307 0.0 0.1 104248 13652 ? S<sl 06:44 0:02 /usr/bin/pipewire
admn 2337 0.0 0.0 82224 5596 ? Ssl 06:44 0:00 /usr/bin/pipewire -c filter-chain.conf
pw-cli info 0
Output:
id: 0
permissions: r-xm-
type: PipeWire:Interface:Core/4
cookie: 3952953688
user-name: "admn"
host-name: "um26"
version: "1.6.2"
name: "pipewire-0"
* properties:
* config.name = "pipewire.conf"
* application.name = "pipewire"
* application.process.binary = "pipewire"
* application.language = "C.UTF-8"
* application.process.id = "2334"
* application.process.user = "admn"
* application.process.host = "um26"
* cpu.vm.name = "oracle"
* link.max-buffers = "16"
* core.daemon = "true"
* core.name = "pipewire-0"
* default.clock.min-quantum = "1024"
* cpu.max-align = "16"
* default.clock.rate = "48000"
* default.clock.quantum = "1024"
* default.clock.max-quantum = "2048"
* default.clock.quantum-limit = "8192"
* default.clock.quantum-floor = "4"
* default.video.width = "640"
* default.video.height = "480"
* default.video.rate.num = "25"
* default.video.rate.denom = "1"
* log.level = "2"
* clock.power-of-two-quantum = "true"
* mem.warn-mlock = "false"
* mem.allow-mlock = "true"
* settings.check-quantum = "false"
* settings.check-rate = "false"
* object.id = "0"
* object.serial = "0"
pw-cli
Output:
Welcome to PipeWire version 1.6.2. Type 'help' for usage.
>> remote 0 is named 'pipewire-0'
Error: "unsupported type PipeWire:Interface:SecurityContext"
Error: "unsupported type PipeWire:Interface:Profiler"
remote 0 node 55 changed
remote 0 node 55 changed
remote 0 port 34 changed
remote 0 port 47 changed
remote 0 port 46 changed
remote 0 port 45 changed
remote 0 node 55 changed
pipewire-0>> q
wpctl status
Output:
PipeWire 'pipewire-0' [1.6.2, admn@um26, cookie:3470822089]
└─ Clients:
33. pipewire [1.6.2, admn@um26, pid:2338]
35. WirePlumber [1.6.2, admn@um26, pid:2336]
40. WirePlumber [export] [1.6.2, admn@um26, pid:2336]
58. mate-settings-daemon [1.6.2, admn@um26, pid:3075]
59. marco [1.6.2, admn@um26, pid:3132]
60. ayatana-indicator-sound-service [1.6.2, admn@um26, pid:3922]
61. ayatana-indicator-sound-service [1.6.2, admn@um26, pid:3922]
62. Blueman [1.6.2, admn@um26, pid:3903]
63. xdg-desktop-portal [1.6.2, admn@um26, pid:3993]
64. mate-menu.py [1.6.2, admn@um26, pid:3799]
65. Terminal [1.6.2, admn@um26, pid:17192]
66. Indicator Applet Complete [1.6.2, admn@um26, pid:3805]
67. wnck-applet [1.6.2, admn@um26, pid:3801]
69. Rhythmbox [1.6.2, admn@um26, pid:14616]
70. Caja [1.6.2, admn@um26, pid:3792]
79. wpctl [1.6.2, admn@um26, pid:21044]
Audio
├─ Devices:
│ 48. Built-in Audio [alsa]
│
├─ Sinks:
│ * 55. Built-in Audio Analog Stereo [vol: 1.00]
│
├─ Sources:
│ * 56. Built-in Audio Analog Stereo [vol: 1.00]
│
├─ Filters:
│
└─ Streams:
Video
├─ Devices:
│
├─ Sinks:
│
├─ Sources:
│
├─ Filters:
│
└─ Streams:
Settings
└─ Default Configured Devices:
systemctl status --user
Output:
● um26
State: running
Units: 206 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 0 units
Since: Thu 2026-05-21 06:43:26 UTC; 2h 15min ago
systemd: 259.5-0ubuntu3
Tainted: unmerged-bin
CGroup: /user.slice/user-1000.slice/user@1000.service
├─app.slice
│ ├─dconf.service
│ │ └─3067 /usr/libexec/dconf-service
│ ├─evolution-addressbook-factory.service
│ │ └─4275 /usr/libexec/evolution-addressbook-factory
│ ├─evolution-calendar-factory.service
│ │ └─4127 /usr/libexec/evolution-calendar-factory
│ ├─evolution-source-registry.service
│ │ └─3953 /usr/libexec/evolution-source-registry
│ ├─gnome-keyring-daemon.service
│ │ └─3074 /usr/bin/gnome-keyring-daemon --foreground --components=pkcs11,secrets --control-directory=/run/user/1000/keyring
│ ├─mpris-proxy.service
│ │ └─2334 /usr/bin/mpris-proxy
│ ├─obex.service
│ │ └─4375 /usr/libexec/bluetooth/obexd
│ └─xdg-desktop-portal-gtk.service
│ └─4146 /usr/libexec/xdg-desktop-portal-gtk
├─init.scope
│ ├─2258 /usr/lib/systemd/systemd --user
│ └─2270 "(sd-pam)"
└─session.slice
├─at-spi-dbus-bus.service
│ ├─3010 /usr/libexec/at-spi-bus-launcher
│ ├─3017 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 11 --address=unix:path=/run/user/1000/at-spi/bus_0
│ └─3077 /usr/libexec/at-spi2-registryd --use-gnome-session
├─dbus.service
│ ├─2305 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
│ ├─3799 mate-menu
│ ├─3801 /usr/libexec/mate-panel/wnck-applet
│ ├─3803 /usr/lib/mate-applets/trashapplet
│ ├─3805 /usr/lib/mate-indicator-applet/mate-indicator-applet-complete
│ ├─3807 /usr/lib/mate-applets/mate-multiload-applet
│ └─3809 /usr/libexec/mate-panel/notification-area-applet
├─filter-chain.service
│ └─2337 /usr/bin/pipewire -c filter-chain.conf
├─gvfs-afc-volume-monitor.service
│ └─3552 /usr/libexec/gvfs-afc-volume-monitor
├─gvfs-daemon.service
│ ├─ 2996 /usr/libexec/gvfsd
│ ├─ 3002 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f
│ ├─ 3851 /usr/libexec/gvfsd-trash --spawner :1.15 /org/gtk/gvfs/exec_spaw/0
│ ├─ 6031 /usr/libexec/gvfsd-network --spawner :1.15 /org/gtk/gvfs/exec_spaw/1
│ ├─ 6048 /usr/libexec/gvfsd-dnssd --spawner :1.15 /org/gtk/gvfs/exec_spaw/2
│ └─17248 /usr/libexec/gvfsd-computer --spawner :1.15 /org/gtk/gvfs/exec_spaw/5
├─gvfs-goa-volume-monitor.service
│ └─3460 /usr/libexec/gvfs-goa-volume-monitor
├─gvfs-gphoto2-volume-monitor.service
│ └─3502 /usr/libexec/gvfs-gphoto2-volume-monitor
├─gvfs-metadata.service
│ └─3173 /usr/libexec/gvfsd-metadata
├─gvfs-mtp-volume-monitor.service
│ └─3603 /usr/libexec/gvfs-mtp-volume-monitor
├─gvfs-udisks2-volume-monitor.service
│ └─3373 /usr/libexec/gvfs-udisks2-volume-monitor
├─pipewire-pulse.service
│ └─2338 /usr/bin/pipewire-pulse
├─pipewire.service
│ └─2307 /usr/bin/pipewire
├─wireplumber.service
│ └─2336 /usr/bin/wireplumber
├─xdg-desktop-portal.service
│ └─3993 /usr/libexec/xdg-desktop-portal
├─xdg-document-portal.service
│ ├─4032 /usr/libexec/xdg-document-portal
│ └─4096 fusermount3 -o rw,nosuid,nodev,fsname=portal,auto_unmount,subtype=portal -- /run/user/1000/doc
└─xdg-permission-store.service
└─4016 /usr/libexec/xdg-permission-store
lines 23-76/76 (END)
Any help is greatly appreciated.