Hello,
I am reaching out to seek assistance regarding an audio routing issue I am experiencing with the sys-audio AppVM in Qubes OS.
I have set up a sys-audio AppVM that is connected to a DAC (Digital-to-Analog Converter).
I followed all the instructions outlined here, with the difference of instead of attaching the entire PCI controller to sys-audio, I’ve only attached the USB device corresponding to the DAC.
When the DAC is powered on, audio streams from various AppVMs route correctly through sys-audio and play sound without issues. However, when I power off the DAC, I get no sound output from any AppVM that utilizes sys-audio, and the system defaults to the Dummy Output. Since sys-audio is using dom0 as the audiovm, I was expecting that once the DAC is switched off that sys-audio would default to dom0 and would output the sound back to the builtin speakers, but unfortunately that doesn’t happen. The problem is that sys-audio doesn’t route audio back to internal speakers and I don’t know what else to try.
This is my (quite permissive) qubes policy (50-sys-audio.policy):
# ----------------------------------------------------------------------
# Generic admin events – always allowed
admin.Events * sys-audio sys-audio allow target=dom0
admin.Events * sys-audio @adminvm allow target=dom0
admin.Events * sys-audio @tag:audiovm-sys-audio allow target=dom0
# Allow events that come from the USB device VM
admin.Events * sys-usb sys-usb allow target=dom0
admin.Events * sys-usb sys-audio allow target=dom0
admin.Events * sys-audio sys-audio allow target=dom0
# ----------------------------------------------------------------------
# USB device handling
# – query which USB devices are present (needed for hot‑plug)
admin.vm.device.usb.Available * sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.device.usb.Available * sys-audio sys-usb allow target=dom0
# optional reverse direction (covers rare back‑ends)
admin.vm.device.usb.Available * sys-usb sys-audio allow target=dom0
# – notify dom0 about a device being added/removed
admin.vm.device.usb.Change * sys-audio @tag:audiovm-sys-audio allow target=dom0
# ----------------------------------------------------------------------
# VM state / property queries
admin.vm.CurrentState * sys-audio sys-audio allow target=dom0
admin.vm.CurrentState * sys-audio @adminvm allow target=dom0
admin.vm.CurrentState * sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.listening * sys-audio sys-audio allow target=dom0
admin.vm.List * sys-audio @adminvm allow target=dom0
admin.vm.List * sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.property.Get +audiovm sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.property.Get +xid sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.property.Get +stubdom_xid sys-audio @tag:audiovm-sys-audio allow target=dom0
# ----------------------------------------------------------------------
# Feature checks (pipewire/audio stack)
#admin.vm.feature.CheckWithTemplate * sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.feature.CheckWithTemplate +audio-model sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.feature.CheckWithTemplate +audio sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.feature.CheckWithTemplate +gui sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.feature.CheckWithTemplate +supported-service.pipewire sys-audio @tag:audiovm-sys-audio allow target=dom0
admin.vm.feature.CheckWithTemplate +audio-low-latency sys-audio @tag:audiovm-sys-audio allow target=dom0
# ----------------------------------------------------------------------
# Full property dump (allowed for all audio VMs)
admin.vm.property.GetAll * sys-audio sys-audio allow target=dom0
admin.vm.property.GetAll * sys-audio @adminvm allow target=dom0
admin.vm.property.GetAll * sys-audio @tag:audiovm-sys-audio allow target=dom0
And this is what I see on sys-audio when I ran wpctl:
~$ wpctl status
PipeWire 'pipewire-0' [1.4.9, user@sys-audio, cookie:721664436]
└─ Clients:
34. WirePlumber [1.4.9, user@sys-audio, pid:1202]
42. WirePlumber [export] [1.4.9, user@sys-audio, pid:1202]
47. pipewire [1.4.9, user@sys-audio, pid:1288]
49. xdg-desktop-portal [1.4.9, user@sys-audio, pid:1469]
50. wpctl [1.4.9, user@sys-audio, pid:1525]
Audio
├─ Devices:
│
├─ Sinks:
│ * 48. Dummy Output [vol: 1.00]
│
├─ Sources:
│
├─ Filters:
│
└─ Streams:
Video
├─ Devices:
│
├─ Sinks:
│
├─ Sources:
│
├─ Filters:
│
└─ Streams:
Settings
└─ Default Configured Devices:
When I run some audio in sys-audio I got no sound:
~$ speaker-test -t wav -c 2
speaker-test 1.2.14
Playback device is default
Stream parameters are 48000Hz, S16_LE, 2 channels
WAV file(s)
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 64 to 1048576
Period size range from 32 to 524288
Periods = 4
was set period_size = 12000
was set buffer_size = 48000
0 - Front Left
1 - Front Right
Time per period = 2.268504
0 - Front Left
1 - Front Right
^CWrite error: -4,Interrupted system call
xrun_recovery failed: -4,Interrupted system call
Transfer failed: Interrupted system call
Any idea what I might be missing?
Thank you!