Sys-gui Customization: Minimal Fedora and Alternate Desktop Environments / Window Managers (DE/WMs)


  1. Start with latest Fedora template (works with Fedora, Fedora Minimal, and Fedora XFCE). In sys-gui template, install necessary packages and shutdown template:

    • GUIVM packages: gui-templ# dnf install qubes-manager qubes-linux-desktop-manager qubes-vm-guivm dummy-psu-module dummy-psu-receiver dummy-backlight-vm
      • AwesomeWM: gui-templ# dnf install awesome
      • i3WM: gui-templ# dnf install i3wm i3-settings-qubes
      • KDE: gui-templ# dnf install @kde-desktop-qubes
      • Any other Desktop Environment or Window Manager should work.
  2. Create sys-gui with the template you just created, and these modifications:

    • no NetVM
    • autostart on boot
    • allow fullscreen
    • and the services:
      • guivm
      • gui-vm-agent
      • dummy-psu
      • dummy-backlight
  3. In dom0, further modify sys-gui from command line:
    dom0$ qvm-prefs sys-gui guivm dom0
    dom0$ qvm-prefs sys-gui audiovm dom0
    dom0$ qvm-features sys-gui gui-secure-copy-sequence none
    dom0$ qvm-features sys-gui gui-secure-paste-sequence none

  4. In sys-gui, open a Xen console, login as user. In sys-gui terminal set XSESSION variable and create ~/.xinitrc. Replace <your de/wm> with the command to launch your DE/WM.
    sys-gui$ echo "exec <your de/wm>" | tee ~/.xinitrc 1> /dev/null
    sys-gui$ XSESSION=<your de/wm>

  5. In dom0 terminal, execute:
    dom0$ qubes-prefs default_guivm sys-gui

  6. Restart QubesOS and select GUIVM session in display manager menu.

Important Notes and Current Issues:


Anyone using this guide should be mindful that there may be small tweaks needed, and that this guide isn’t a guide on how to get your favorite window manager to work. This will get your packages installed and minimally working, but configuration, bells, and whistles aren’t covered. You should be able to get anything you want working just how you would if you were running this in a regular Fedora workstation, with the caveat that you are in an unprivileged virtual environment. Certain things, like accessing hardware directly, will not work, but qrexec policy can be used as a workaround.

As of this moment, there are still minor problems that persist:

  • sys-gui is labeled as dom0 in the window manager,
  • there is a several seconds’ wait with a black screen while the window manager loads, and
  • notifications for sys-gui are sent to dom0 (this is an upstream problem that cannot be fixed with just configuration).

I plan to expand this to be OS independent, but right now Debian is posing some problems that I need to diagnose. It will be more of a priority for me if this gets likes and constructive replies; however, my schedule is unpredictable and I may have to shelf this if things come up.


why is it necessary? What is it doing? :thinking:

This makes sure that sys-gui receives the sequence rather than dom0.
So, without this, dom0 would receive sys-gui’s clipboard, since that’s what’s focused in dom0, and the qubes are focused in sys-gui. When sys-gui doesn’t have the sequence, dom0 doesn’t receive it from sys-gui. In short, it’s required to ensure Qubes copy/paste works right.

It was included in the salt configs in /srv/formulas/base/virtual-machines-formula/qvm/sys-gui.sls from the Qubes team, so there may be other reasons as well.

1 Like