Audio qube

Thanks!

Also, any ways to run the same XFCE applet than the one by default in dom0 instead of pasystray?

I seem to be stuck at the same point, just without the sound issues in sys-audio.

From Clean install, I get to the point where it says:

Once this is done, you can restart your ‘sys-audio’ qube.
If everything has been configured correctly, you should see the active qube
configured to use ‘sys-audio’ in the ‘pavucontrol’ interface of ‘sys-audio’.

I’m following the “Recommended way”, and am super confused.

Playing audio out from the USB Audio device works fine in sys-audio.
Each of the (not sys-audio) volume control have “dummy output” listed.

I’ve tried running pactl load-module module-vchan-sink as per other forum guides within one of my Personal qubes, which gives me the Failure: no such entity error.

Have I missed something?

(p.s. while I do seem to be having issues, thank you @neowutran for this well-written guide :slight_smile: )

You can also check the Salt scripts from Qusal, it’s working out of the box:

what is the confusing thing ?

My main confusion is the fact that I end uo with this dummy output after getting to this step.

Ive tried restarting the device, checking for errors in the logs, manually configuing the xid then restarting pipewire, just cant seem to get it to work.

Whats more frustrating is, (ive got nothing on the device so i can), i did a blank reinstall of the latest Qubes, and out of the box the default Dom0 behaves exactly as you describe and how id expect, letting me output to devices as expected, i just cant output to my UBS headset.

I think the key thing im struggling to figure out is how to debug what went wrong, and correct it. Getting stuck with “Dummy Output”, no obvious errors or clear guidance on debugging is not fun. I dont expect you to baby us by any means, but at the same time a “if you get dummy outputs only, check youve done x step correctly” would be extremely helpful - (more helpful would be an official guide, but hey, lets do one step at a time :rofl: )

P.s. did spent the entirety of yesterday and today debugging this before posting - used about 10 different threads and asked a few different AI’s (not that i expected much from them)

Getting “dummy output” on other qubes means the communication between the qubes and audiovm is not working.
If you only modified things mentioned in the guide, I would guess you did something wrong at the step “Configuring Services” or “Configuring policy”.

Re-read those steps.
Additionally:

Check that you use the same audiovm name as me: “sys-audio”

I mention the path “/usr/lib/python3.11/site-packages/qubesadmin/tools/qvm_start_daemon.py”, it will be “/usr/lib/python3.12/site-packages/…” in more recent template, check the python version used on your system.


To debug, you probably want to see the output of “qvm-start-daemon” in sys-audio.
In sys-audio, kill the existing process “qvm-start-daemon”, and launch it manually

qvm-start-daemon --all --watch

You will get some informations on stdout

1 Like

I was able to follow the guide up until Disabling audio for qubes that doesn’t need it however, I don’t understand how to get the other qubes to use the sys-audio. They all have the sys-audio as their audiovm but they don’t seem to detect any audio sources. for the Policy I copied the entire document you linked on git-hub I wasn’t sure if I should have done that or needed to update all lines by hand.

sys-audio qvm-start-daemon --all --watch Results

[user@sys-audio ~]$ qvm-start-daemon --all --watch
app: Failed to handle event: None, connection-established, {}
Traceback (most recent call last):
File “/usr/lib/python3.11/site-packages/qubesadmin/base.py”, line 232, in getattr
property_str = self.qubesd_call(
^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/site-packages/qubesadmin/base.py”, line 76, in qubesd_call
return self.app.qubesd_call(dest, method, arg, payload,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3.11/site-packages/qubesadmin/app.py”, line 893, in qubesd_call
raise qubesadmin.exc.QubesDaemonAccessError(
qubesadmin.exc.QubesDaemonAccessError: Service call error: Request refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3.11/site-packages/qubesadmin/events/init.py”, line 259, in handle
handler(subject, event, **kwargs)
File “/usr/lib/python3.11/site-packages/qubesadmin/tools/qvm_start_daemon.py”, line 688, in on_connection_established
self.xid_cache[vm.name] = vm.xid, vm.stubdom_xid
^^^^^^^^^^^^^^
File “/usr/lib/python3.11/site-packages/qubesadmin/base.py”, line 239, in getattr
raise qubesadmin.exc.QubesPropertyAccessError(item)
qubesadmin.exc.QubesPropertyAccessError: Failed to access ‘stubdom_xid’ property
^C[user@sys-audio ~]$

Linux Personal Qube pavucontrol Response

[user@personal ~]$ qubesdb-read -w /qubes-audio-domain-xid
20
[user@personal ~]$ load-module module-vchan-sink domid=20
bash: load-module: command not found
[user@personal ~]$ pavucontrol

(pavucontrol:2381): Gdk-CRITICAL **: 13:05:58.542: gdk_atom_intern: assertion ‘atom_name != NULL’ failed

(pavucontrol:2381): Gdk-CRITICAL **: 13:05:58.542: gdk_atom_intern: assertion ‘atom_name != NULL’ failed

The error message you have indicate that the policy file have not be setup correctly.
In dom0, can you check the content of ‘/etc/qubes/policy.d/50-sys-audio.policy’ ?
sudo cat /etc/qubes/policy.d/50-sys-audio.policy

I think I’m getting the same error now (sorry for the delay, been otherwise occupied and only now getting back round to this)

Outputs:

[user@sys-audio ~]$ qvm-start-daemon --all --watch
Another GUI daemon process (with PID 1109) is already running
[user@sys-audio ~]$ 
user@personal:~$ qubesdb-read -w /qubes-audio-domain-xid
21
user@personal:~$ load-module module-vchan-sink domid=21
bash: load-module: command not found
user@personal:~$ pavucontrol

(pavucontrol:10097): Gdk-CRITICAL **: 22:00:32.352: gdk_atom_intern: assertion 'atom_name != NULL' failed

(pavucontrol:10097): Gdk-CRITICAL **: 22:00:32.353: gdk_atom_intern: assertion 'atom_name != NULL' failed

policy:

admin.Events                            *                               sys-audio       @adminvm                allow   target=dom0
admin.Events                            +domain-stopped                 sys-audio       @tag:audiovm-sys-audio  allow   target=dom0
admin.Events                            +domain-shutdown                sys-audio       @tag:audiovm-sys-audio  allow   target=dom0
admin.Events                            +domain-start                   sys-audio       @tag:audiovm-sys-audio  allow   target=dom0
admin.Events                            +connection-established         sys-audio       @tag:audiovm-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.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.feature.CheckWithTemplate      +audio                          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      +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
admin.vm.property.Get                   +stubdom_xid                    sys-audio       @tag:audiovm-sys-audio  allow   target=dom0

The only thing I can see personally is that I’ve spaced mine more than the one in your code to make it easier for me to read, but could this be causing a problem?

I wasn’t sure how to create the policy so I just copied it pasted into a document and moved it to dom0 maybe I need to give it permissions or the formatting was create wrong? Random S**** · GitHub

Seems to be some copy paste error ? target=dom050 should be target=dom0

1 Like

Can you show the content of “/usr/lib/python3.12/site-packages/qubesadmin/tools/qvm_start_daemon.py” in you “sys-audio” ?

Also, in your sys-audio, kill the running qvm-start-daemon process

sudo kill 1109

and restart it manually

qvm-start-daemon --all --watch

You will see interesting things

1 Like

Thank you so much! I re pasted and I updated the permissions (Its still not owned/in group root I dotn know if that matters) it fixed it. Now I am attempting to use the windows fix to pass audio to Nobara. I’m curious when you say attach the Mic to the Qube you want to record in does that mean it wont work in the sys-audio qube and I will need to change it each time I want to record in a different qube?

Could you give a little more detail on what you mean by this? I tried rerunning the exact same bash script and replacing stubdom-linux-rootfs with stubdom-linux-full-rootfs but that doesn’t seem to work it just opens the same init file.

I also noticed you mentioned these files could be overwritten by Xen updates is there a way to prevent that or make the process quicker next time? I assume it will just break if that happens and I will stop getting audio?

UPDATE:
After implementing the HVM portion I get the following error when attempting to start sys-net

[Dom0] Error starting Qube!

Start failed: internal error: libenlight failed to create new domain

'sys-net', see /var/log/libvirt/libxi/libxl-driver.log for details

I had to add qubes.skip_autostart to be able to get into qubes OS as it disabled my usb mouse and keyboard

So I got this error one:

[user@sys-audio ~]$ qvm-start-daemon --all --watch
sys-audio: Starting AUDIO
Loopback vchan connection not supported
libvchan_client_init_async_finish: Resource temporarily unavailable
^Casyncio: Loop <_UnixSelectorEventLoop running=False closed=True debug=False> that handles pid 8809 is closed
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7b5edcb3d440>
Traceback (most recent call last):
  File "/usr/lib64/python3.11/asyncio/base_subprocess.py", line 126, in __del__
    self.close()
  File "/usr/lib64/python3.11/asyncio/base_subprocess.py", line 104, in close
    proto.pipe.close()
  File "/usr/lib64/python3.11/asyncio/unix_events.py", line 566, in close
    self._close(None)
  File "/usr/lib64/python3.11/asyncio/unix_events.py", line 590, in _close
    self._loop.call_soon(self._call_connection_lost, exc)
  File "/usr/lib64/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib64/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is close

I also get a lot of this message when it is working:

personal: Starting AUDIO
Connection to qube established, connecting to PulseAudio daemon

Connection established.
Stream successfully created.
Buffer metrics: maxlength=4194304, tlength=25580, prebuf=22056, minreq=3528
Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'.
Connected to device alsa_output.pci-0000_00_07.0.analog-surround-51 (430, not suspended).
Stream successfully created.
Buffer metrics: maxlength=4194304, tlength=44100, prebuf=4294967295, minreq=4294967295
Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'.
Connected to device alsa_input.usb-Astro_Gaming_Astro_A50-00.mono-chat (341, not suspended).
Stream drain
tream drain
Stream started.
Cork requested and playback vchan empty. Draining playback stream.
Playback vchan empty and playback stream drained. Corking playback stream.
Stream uncork
Stream drain
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
Stream uncork
...
Stream uncork
Stream uncork
Stream started.
Stream underrun.
Stream started.

The error means you messed up either the file “/usr/share/qubes/templates/libvirt/xen.xml” in dom0
or you incorrectly patched the stubdom init file.
So check the guide and the content of thoses files.

And if you need help, paste the content of thoses files

The error message you have is weird. Do you have any special configuration ? what are you using as template for sys-audio ?

added a screenshot in the guide

I followed your guide, so nothing special.
Using Fedora as per the advice in your guide, Fedora-38-xfce is the one I cloned.
Is there any specific things you would like me to check?

I did have audio outputting for a period today, then when I paused the media playing audio, it never recovered. Just got the “Stream uncork” message constantly.

Result qvm-prefs audio-app
[jstevens@dom0 ~]$ qvm-prefs audio-app
audiovm               D  sys-audio
autostart             D  False
backup_timestamp      U
debug                 D  False
default_dispvm        D  default-dvm
default_user          D  user
gateway               D  
gateway6              D  
guivm                 D  dom0
icon                  D  templatevm-red
include_in_backups    D  True
installed_by_rpm      D  False
ip6                   D  
kernel                D  6.1.75-1.fc37
kernelopts            D  swiotlb=2048
keyboard_layout       D  gb++
klass                 D  AppVM
label                 -  red
mac                   D  00:16:3e:5e:6c:00
management_dispvm     D  default-mgmt-dvm
maxmem                D  4000
memory                D  400
name                  -  audio-app
netvm                 D  sys-firewall
provides_network      -  False
qid                   -  20
qrexec_timeout        D  60
shutdown_timeout      D  60
start_time            D  
stubdom_mem           U
stubdom_xid           D  -1
template              -  audio-template
template_for_dispvms  -  True
updateable            D  False
uuid                  -  c7051b28-f357-4883-944e-35fe2b0645c1
vcpus                 D  2
virt_mode             D  pvh
xid                   D  -1
Result qvm-prefs audio-template
[jstevens@dom0 ~]$ qvm-prefs audio-template
audiovm             D  sys-audio
autostart           D  False
backup_timestamp    U
debug               D  False
default_dispvm      D  default-dvm
default_user        D  user
gateway             D  
gateway6            D  
guivm               D  dom0
icon                D  templatevm-black
include_in_backups  D  True
installed_by_rpm    D  False
ip6                 D  
kernel              D  6.1.75-1.fc37
kernelopts          D  swiotlb=2048
keyboard_layout     D  gb++
klass               D  TemplateVM
label               -  black
mac                 D  00:16:3e:5e:6c:00
management_dispvm   D  default-mgmt-dvm
maxmem              D  4000
memory              D  400
name                -  audio-template
netvm               -  sys-firewall
provides_network    -  False
qid                 -  19
qrexec_timeout      D  60
shutdown_timeout    D  60
start_time          D  
stubdom_mem         U
stubdom_xid         D  -1
updateable          D  True
uuid                -  f8b3157c-c32c-45bc-8283-3aed254a11f7
vcpus               D  2
virt_mode           D  pvh
xid                 D  -1
Result qvm-prefs sys-audio
[jstevens@dom0 ~]$ qvm-prefs sys-audio
audiovm             -  sys-audio
auto_cleanup        D  False
autostart           -  True
backup_timestamp    U
debug               D  False
default_dispvm      D  audio-app
default_user        D  user
dispid              -  3195
gateway             D  
gateway6            D  
guivm               D  dom0
icon                D  dispvm-red
include_in_backups  D  True
installed_by_rpm    D  False
ip6                 D  
kernel              D  6.1.75-1.fc37
kernelopts          D  
keyboard_layout     D  gb++
klass               D  DispVM
label               -  red
mac                 D  00:16:3e:5e:6c:00
management_dispvm   D  default-mgmt-dvm
maxmem              -  0
memory              D  400
name                -  sys-audio
netvm               D  sys-firewall
provides_network    -  False
qid                 -  21
qrexec_timeout      D  60
shutdown_timeout    D  60
start_time          D  
stubdom_mem         U
stubdom_xid         D  -1
template            -  audio-app
updateable          D  False
uuid                -  509e1362-ebf7-4d94-93a4-45deb6534791
vcpus               D  2
virt_mode           -  hvm
xid                 D  -1

Only things unique to my setup will be the PCI devices, and USB devices I’m connecting. Anything else should be standard as per the guide

I assume when you say your home directory you mean my users’ directory inside the home folder? (I tried in the /Home/ directory as well). When I run the bash script you mention it creates 3 stubdom folders annd copies my user files twice and it opens a blank init file even though the real init file is 3 levels down. I have checked my syntax multiple times I’m not sure if I am doing something wrong.