what does the --gui and --nogui option do in qvm-run? i can’t find an explanation to what “gui forwarding” means in qubes os.
qvm-run with --gui (the default) waits for the VM to become ready to launch graphical programs. With --nogui that’s not guaranteed to work if qvm-run has just started the VM: It might run the program too early in this case.
qubes-gui and qubes-guid processes All AppVM X applications connect to local (running in AppVM) Xorg servers that use the following “hardware” drivers: dummyqsb_drv - video driver, that paints onto a framebuffer located in RAM, not connected to real...
4 Likes
Also, if the VM has no guivm (headless, like stripped of its installation of X, terminal access only through “Open console in qube” / qvm-console-dispvm) then --no-gui is mandatory, every qvm-run call will stall and time out otherwise.
3 Likes
Atrate
September 7, 2025, 7:16pm
5
Exactly. This has been reported in this Github issue:
opened 03:51PM - 20 Feb 25 UTC
C: core
P: default
needs diagnosis
affects-4.2
### Qubes OS release
Qubes OS 4.2
### Brief summary
I have qubes with the `gu… i` feature disabled, but `qvm-run --gui` (default is to use GUI), waits indefinitely when I try to open a GUI application. It does not print stdout or stderr, but waits for the session first, therefore not even returning if the command failed.
### Steps to reproduce
1. `qvm-features disp-sys-usb gui ''`
2. `qvm-start disp-sys-usb`
3. Try to run commands that require a GUI
```.
$ qvm-run -p -- disp-sys-usb xterm
^C%
```
```
$ qvm-run -p --no-gui -- disp-sys-usb xterm
xterm: Xt error: Can't open display: :0
```
### Expected behavior
1. Don't wait for GUI when `gui` feature is disabled.
2. Exit when subprocess terminates
### Actual behavior
Waits for GUI even though it doesn't have one.
### Additional information
I don't how it should consider also `gui-emulated` or emulated VGA.
It also completely breaks the r4.3 upgrade tool if the UpdateVM has no GUI:
opened 06:08PM - 11 Aug 25 UTC
P: default
needs diagnosis
C: dist upgrade
affects-4.2
### Qubes OS release
Qubes OS 4.2
### Brief summary
Line 72 in `qubes-dist-up… grade-r4.3.sh`:
```
update_prechecks() {
echo "INFO: Please wait while running pre-checks..."
if qvm-check -q "$updatevm" 2>/dev/null; then
if ! qvm-run -q "$updatevm" "command -v dnf"; then
echo "ERROR: UpdateVM ($updatevm) should on a template that have 'dnf' installed - at least Fedora 37, Debian 11, or Whonix 16."
exit 1
fi
fi
}
```
The `qvm-run` call has an implied `--gui` flag, which causes it to hang indefinitely when the UpdateVM has the GUI feature disabled. Caused by: #9789
### Steps to reproduce
1. Try to upgrade to `r4.3-rc1` with the UpdateVM set to a Qube that has the `gui` feature set to `''` (e.g. `sys-firewall`, which many people disable the GUI for)
### Expected behavior
Works.
### Actual behavior
Hangs indefinitely on `INFO: Please wait while running pre-checks...`
### Additional information
_No response_
3 Likes