Is documentation for preloaded dispvms available?

Can you show the error? Dom0 journal:

sudo journalctl -xeu qubesd

You will need to scroll a bit. Will contain timestamps and qube names. Redact them if you want.

Mar 10 07:27:04 dom0 qubesd[3380]: INFO: vm.disp5514: Activating qube
Mar 10 07:27:04 dom0 runuser[19128]: pam_unix(runuser:session): session opened for user user(uid=1000) by (uid=0)
Mar 10 07:27:07 dom0 runuser[18996]: pam_unix(runuser:session): session closed for user user
Mar 10 07:27:07 dom0 qubesd[3380]: INFO: vm.disp8597: Preload startup waiting 'qubes.WaitForRunningSystem' with '60' seconds timeout
Mar 10 07:27:07 dom0 qubesd[3380]: WARNING: protocol error for call b'admin.vm.device.webcam.Attached'+b'' (b'dom0' → b'disp8597') with payload of 0 bytes
Mar 10 07:27:13 dom0 runuser[19128]: pam_unix(runuser:session): session closed for user user
Mar 10 07:27:13 dom0 qubesd[3380]: INFO: vm.disp5514: Preload startup waiting 'qubes.WaitForRunningSystem' with '60' seconds timeout
Mar 10 07:27:13 dom0 qubesd[3380]: WARNING: protocol error for call b'admin.vm.device.webcam.Attached'+b'' (b'dom0' → b'disp5514') with payload of 0 bytes
Mar 10 07:27:18 dom0 qubesd[3380]: ERROR: vm.disp8597: Start failed: Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed
Mar 10 07:27:21 dom0 qubesd[3380]: INFO: vm.fedora-dvm: Removing qube(s) from preloaded list because automatic cleanup was called: 'disp8597'
Mar 10 07:27:21 dom0 qubesd[3380]: INFO: Removing appmenus for 'disp8597' in 'dom0'
Mar 10 07:27:21 dom0 runuser[19386]: pam_unix(runuser:session): session opened for user user(uid=1000) by (uid=0)
Mar 10 07:27:22 dom0 runuser[19386]: pam_unix(runuser:session): session closed for user user
Mar 10 07:27:22 dom0 qubesd[3380]: INFO: vm.disp8597: Removing volume root: qubes_dom0/vm-disp8597-root
Mar 10 07:27:22 dom0 qubesd[3380]: INFO: vm.disp8597: Removing volume private: qubes_dom0/vm-disp8597-private
Mar 10 07:27:22 dom0 qubesd[3380]: INFO: vm.disp8597: Removing volume volatile: qubes_dom0/vm-disp8597-volatile
Mar 10 07:27:22 dom0 qubesd[3380]: INFO: vm.disp8597: Removing volume kernel: 6.12.64-1.fc41
Mar 10 07:27:22 dom0 qubesd[3380]: ERROR: Task exception was never retrieved
Mar 10 07:27:22 dom0 qubesd[3380]: future: <Task finished name='Task-182982' coro=<Emitter.fire_event_async() done, defined at /usr/lib/python3.13/site-packages/qubes/events.py:211> exception=QubesException("Error on call to 'qubes.WaitFo>
Mar 10 07:27:22 dom0 qubesd[3380]: Traceback (most recent call last):
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 507, in wait_operational_preload
Mar 10 07:27:22 dom0 qubesd[3380]:     await asyncio.wait_for(
Mar 10 07:27:22 dom0 qubesd[3380]:     ...<6 lines>...
Mar 10 07:27:22 dom0 qubesd[3380]:     )
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib64/python3.13/asyncio/tasks.py", line 507, in wait_for
Mar 10 07:27:22 dom0 qubesd[3380]:     return await fut
Mar 10 07:27:22 dom0 qubesd[3380]:            ^^^^^^^^^
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/qubesvm.py", line 1948, in run_for_stdio
Mar 10 07:27:22 dom0 qubesd[3380]:     raise subprocess.CalledProcessError(
Mar 10 07:27:22 dom0 qubesd[3380]:         p.returncode, args[0], *stdouterr
Mar 10 07:27:22 dom0 qubesd[3380]:     )
Mar 10 07:27:22 dom0 qubesd[3380]: subprocess.CalledProcessError: Command '$(PATH="/run/qubes-rpc:/usr/local/etc/qubes-rpc:/etc/qubes-rpc" command -v "qubes.WaitForRunningSystem")' returned non-zero exit status 1.
Mar 10 07:27:22 dom0 qubesd[3380]: During handling of the above exception, another exception occurred:
Mar 10 07:27:22 dom0 qubesd[3380]: Traceback (most recent call last):
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/events.py", line 243, in fire_event_async
Mar 10 07:27:22 dom0 qubesd[3380]:     effect = task.result()
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/mix/dvmtemplate.py", line 525, in on_domain_preload_dispvm_used
Mar 10 07:27:22 dom0 qubesd[3380]:     await asyncio.gather(
Mar 10 07:27:22 dom0 qubesd[3380]:     ...<4 lines>...
Mar 10 07:27:22 dom0 qubesd[3380]:     )
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 780, in from_appvm
Mar 10 07:27:22 dom0 qubesd[3380]:     dispvm = await cls.gen_disposable(appvm, preload=preload, **kwargs)
Mar 10 07:27:22 dom0 qubesd[3380]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 825, in gen_disposable
Mar 10 07:27:22 dom0 qubesd[3380]:     await dispvm.start()
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 988, in start
Mar 10 07:27:22 dom0 qubesd[3380]:     await super().start(**kwargs)
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/qubesvm.py", line 1553, in start
Mar 10 07:27:22 dom0 qubesd[3380]:     await self.fire_event_async(
Mar 10 07:27:22 dom0 qubesd[3380]:         "domain-start", start_guid=start_guid
Mar 10 07:27:22 dom0 qubesd[3380]:     )
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/events.py", line 243, in fire_event_async
Mar 10 07:27:22 dom0 qubesd[3380]:     effect = task.result()
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 568, in on_domain_started_dispvm
Mar 10 07:27:22 dom0 qubesd[3380]:     await earliest_task
Mar 10 07:27:22 dom0 qubesd[3380]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 525, in wait_operational_preload
Mar 10 07:27:22 dom0 qubesd[3380]:     raise qubes.exc.QubesException(
Mar 10 07:27:22 dom0 qubesd[3380]:     ...<3 lines>...
Mar 10 07:27:22 dom0 qubesd[3380]:     )
Mar 10 07:27:22 dom0 qubesd[3380]: qubes.exc.QubesException: Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed
Mar 10 07:27:24 dom0 qubesd[3380]: ERROR: vm.disp5514: Start failed: Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed
Mar 10 07:27:26 dom0 qubesd[3380]: INFO: vm.fedora-dvm: Removing qube(s) from preloaded list because automatic cleanup was called: 'disp5514'
Mar 10 07:27:26 dom0 qubesd[3380]: INFO: Removing appmenus for 'disp5514' in 'dom0'

Which shell did you set as default for this qube?

The code above is outdated, PR was merged: Use canonical name to Qrexec service by ben-grande Ā· Pull Request #769 Ā· QubesOS/qubes-core-admin Ā· GitHub

Included in 4.3.39: Commits Ā· QubesOS/qubes-core-admin Ā· GitHub

The version 4.3.42 is available in stable repos: Index of /r4.3/current/host/fc41/rpm/

In other words, please update dom0, the templates and try again.

Shell is /bin/bash.

Running dom0 update returned no new updates available.

Running update on fedora-42-xfce returned:

Updated packages:
chromium 145.0.7632.116-1.fc42 -> 145.0.7632.159-1.fc42
chromium-common 145.0.7632.116-1.fc42 -> 145.0.7632.159-1.fc42
libmad 0.16.4-5.fc42 -> 0.16.4-13.fc42
yt-dlp 2026.02.21-1.fc42 -> 2026.03.03-1.fc42
yt-dlp+default 2026.02.21-1.fc42 -> 2026.03.03-1.fc42
Removed packages:
None

On dom0:

rpm -qf /usr/lib/python3.13/site-packages/qubes
[user@dom0 ~]$ rpm -qf /usr/lib/python3.13/site-packages/qubes
qubes-core-dom0-4.3.42-1.fc41.noarch

Restart qubesd and try again to preload:

systemctl restart qubesd

Check journalctl logs then.

Mar 11 12:35:56 dom0 qubesd[34095]: INFO: vm.disp3002: Preload startup waiting 'qubes.WaitForRunningSystem' with '60' seconds timeout
Mar 11 12:35:57 dom0 lvm[2224]: WARNING: Thin pool qubes_dom0-vm--pool-tpool data is now 81.95% full.
Mar 11 12:35:57 dom0 qubesd[34095]: WARNING: protocol error for call b'admin.vm.device.webcam.Attached'+b'' (b'dom0' → b'disp3002') with payload of 0 bytes
Mar 11 12:35:59 dom0 qubesd[34095]: ERROR: vm.disp3002: Start failed: Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed
Mar 11 12:35:59 dom0 qrexec-policy-daemon[4485]: qrexec: qubes.Notifications+: disp3002 -> @default: allowed to dom0
Mar 11 12:35:59 dom0 kernel: xen-backend console-40-0: xenbus: device forcefully removed from xenstore
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-383 has been removed.
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-383 has been removed.
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-382 has been removed.
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-382 has been removed.
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-385 has been removed.
Mar 11 12:36:00 dom0 systemd-homed[3103]: block device /sys/devices/virtual/block/dm-385 has been removed.
Mar 11 12:36:01 dom0 qubesd[34095]: INFO: vm.fedora-dvm: Removing qube(s) from preloaded list because automatic cleanup was called: 'disp3002'
Mar 11 12:36:01 dom0 qubesd[34095]: INFO: Removing appmenus for 'disp3002' in 'dom0'
Mar 11 12:36:02 dom0 qubesd[34095]: INFO: vm.disp3002: Removing volume root: qubes_dom0/vm-disp3002-root
Mar 11 12:36:02 dom0 qubesd[34095]: INFO: vm.disp3002: Removing volume private: qubes_dom0/vm-disp3002-private
Mar 11 12:36:02 dom0 qubesd[34095]: INFO: vm.disp3002: Removing volume volatile: qubes_dom0/vm-disp3002-volatile
Mar 11 12:36:02 dom0 qubesd[34095]: INFO: vm.disp3002: Removing volume kernel: 6.12.64-1.fc41
Mar 11 12:36:02 dom0 qubesd[34095]: ERROR: Task exception was never retrieved
Mar 11 12:36:02 dom0 qubesd[34095]: future: <Task finished name='Task-175012' coro=<Emitter.fire_event_async() done, defined at /usr/lib/python3.13/site-packages/qubes/events.py:211> exception=QubesException("Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed")>
Mar 11 12:36:02 dom0 qubesd[34095]: Traceback (most recent call last):
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 507, in wait_operational_preload
Mar 11 12:36:02 dom0 qubesd[34095]:     await asyncio.wait_for(
Mar 11 12:36:02 dom0 qubesd[34095]:     ...<6 lines>...
Mar 11 12:36:02 dom0 qubesd[34095]:     )
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib64/python3.13/asyncio/tasks.py", line 507, in wait_for
Mar 11 12:36:02 dom0 qubesd[34095]:     return await fut
Mar 11 12:36:02 dom0 qubesd[34095]:            ^^^^^^^^^
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/qubesvm.py", line 1948, in run_for_stdio
Mar 11 12:36:02 dom0 qubesd[34095]:     raise subprocess.CalledProcessError(
Mar 11 12:36:02 dom0 qubesd[34095]:         p.returncode, args[0], *stdouterr
Mar 11 12:36:02 dom0 qubesd[34095]:     )
Mar 11 12:36:02 dom0 qubesd[34095]: subprocess.CalledProcessError: Command '$(PATH="/run/qubes-rpc:/usr/local/etc/qubes-rpc:/etc/qubes-rpc" command -v "qubes.WaitForRunningSystem")' returned non-zero exit status 1.
Mar 11 12:36:02 dom0 qubesd[34095]: During handling of the above exception, another exception occurred:
Mar 11 12:36:02 dom0 qubesd[34095]: Traceback (most recent call last):
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/events.py", line 243, in fire_event_async
Mar 11 12:36:02 dom0 qubesd[34095]:     effect = task.result()
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/mix/dvmtemplate.py", line 525, in on_domain_preload_dispvm_used
Mar 11 12:36:02 dom0 qubesd[34095]:     await asyncio.gather(
Mar 11 12:36:02 dom0 qubesd[34095]:     ...<4 lines>...
Mar 11 12:36:02 dom0 qubesd[34095]:     )
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 780, in from_appvm
Mar 11 12:36:02 dom0 qubesd[34095]:     dispvm = await cls.gen_disposable(appvm, preload=preload, **kwargs)
Mar 11 12:36:02 dom0 qubesd[34095]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 825, in gen_disposable
Mar 11 12:36:02 dom0 qubesd[34095]:     await dispvm.start()
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 988, in start
Mar 11 12:36:02 dom0 qubesd[34095]:     await super().start(**kwargs)
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/qubesvm.py", line 1553, in start
Mar 11 12:36:02 dom0 qubesd[34095]:     await self.fire_event_async(
Mar 11 12:36:02 dom0 qubesd[34095]:         "domain-start", start_guid=start_guid
Mar 11 12:36:02 dom0 qubesd[34095]:     )
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/events.py", line 243, in fire_event_async
Mar 11 12:36:02 dom0 qubesd[34095]:     effect = task.result()
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 568, in on_domain_started_dispvm
Mar 11 12:36:02 dom0 qubesd[34095]:     await earliest_task
Mar 11 12:36:02 dom0 qubesd[34095]:   File "/usr/lib/python3.13/site-packages/qubes/vm/dispvm.py", line 525, in wait_operational_preload
Mar 11 12:36:02 dom0 qubesd[34095]:     raise qubes.exc.QubesException(
Mar 11 12:36:02 dom0 qubesd[34095]:     ...<3 lines>...
Mar 11 12:36:02 dom0 qubesd[34095]:     )
Mar 11 12:36:02 dom0 qubesd[34095]: qubes.exc.QubesException: Error on call to 'qubes.WaitForRunningSystem' during preload startup. To debug, run the following on a new disposable of 'fedora-dvm': systemctl --failed

Can you use a different disposable template based on a different template? You can preload from individual disposable templates using ā€œVM Settings → Advancedā€.

On the template that is failing, run:

rpm -qf /etc/qubes-rpc/qubes.WaitForRunningSystem

From dom0:

qvm-run -p --dispvm=fedora-dvm --service qubes.WaitForRunningSystem
qvm-run -p --dispvm=fedora-dvm 'sh -x /etc/qubes-rpc/qubes.WaitForRunningSystem'

Starting a new DispVM from fedora-dvm:

[user@disp6517 ~]$ rpm -qf /etc/qubes-rpc/qubes.WaitForRunningSystem
qubes-core-agent-4.3.40-1.fc42.x86_64

From dom0:

[user@dom0 ~]$ qvm-run -p --dispvm=fedora-dvm --service qubes.WaitForRunningSystem
[user@dom0 ~]$ qvm-run -p --dispvm=fedora-dvm 'sh -x /etc/qubes-rpc/qubes.WaitForRunningSystem'
+ set -eu
+ systemctl --wait --quiet is-system-running

I don’t see any ā€œVM Settingsā€ in Qubes Global Config. Where is this?

It is a per qube setting, click on app menu, select a qube and click on settings, or qubes-vm-settings QUBE.

Ok. What I am going to document here, shouldn’t be used really, it is just for debugging. It will allow an arbitrary message from a qube to be logged to dom0 without sanitization, which is dangerous.

On the template of fedora-dvm, edit /etc/qubes-rpc/qubes.WaitForRunningSystem and add set -x after the hashbang. Save the file and shutdown the qube.

On /usr/lib/python3.13/site-packages/qubes/vm/dispvm.py, find def wait_operation_preload, find stdout= and stderr= and change from subprocess.DEVNULL to subprocess.PIPE. Later on `raise qubes.exc.QubesException, change the message to the following:

            raise qubes.exc.QubesException(
                "Error on call to '%s' during preload startup: %s, stderr=%r, stdout=%r. To debug, "
                "disable preloading from '%s' and run the following on a new "
                "disposable: %s" % (service, exc, exc.stderr, exc.stdout, self.template, debug_msg)
            )

Then, systemctl restart qubesd.

Request a disposable until you get a preloaded disposable, in th meantime, check the journal output:

sudo journalctl -fu qubesd

After we solve this issue, reinstall the qubesd package to return to a known good state:

sudo qubes-dom0-update --action=reinstall qubes-core-dom0

am I editing any files in dom0 or are all those edits in the template?

Sorry to not make it clear. Just /etc/qubes-rpc/qubes.WaitForRunningSystem is to be edited in the qube, the rest is in dom0.