(starting from a minimal template)
[dom0]# qubes-dom0-update qubes-template-fedora-26-minimal
Note: If you have doubts about a set of tools or package you want to install, start installing and testing it in an AppVM. You can then reproduce it later in your TemplateVM if you are satisfied. That is the template philosophy in QubesOS.
For more information on the uses of a minimal template read this page.
sudo pciutils vim-minimal less tcpdump telnet psmisc nmap nmap-ncat usbutils
Notes: nmap can be used to discover hosts on a network (nmap -sP [network]), especially if you are inside a Microsoft network, because your AppVM will be protected/NATted behind the Qubes firewall. (Microsoft / home networks make heavy use of autodiscovery technologies which require clients to be in the same local network (no firewall/no NAT), eg: your printer.)
Some recommendations here: check your current network using the Network manager applet (eg: 192.168.1.65). Then run nmap in your current AppVM/TemplateVM to search for the selected printer/equipment: nmap -sP 192.168.1.-. Don’t forget to temporarily allow traffic via the Qubes Firewall if you are doing this in a TemplateVM.
openssh keepassx openssl gnome-keyring man
Dependency note: keepassx rely on qt which takes ~30MB
NetworkManager NetworkManager-wifi network-manager-applet wireless-tools dbus-x11 tar tinyproxy iptables
which dconf dconf-editor
Notes: which is required for autostart scripts
Notes: dconf is required to remember the VM settings that are changed (the gsetting backend will be in memory only if gconf is not installed).
Search for wireless firmware matching your wireless card (to be launched in network VM)
lspci; dnf search firmware
ModemManager NetworkManager-wwan usb_modeswitch modem-manager-gui
Dependency note: modem-manager-gui relies on webkit-gtk and is optional (NetworkManager can handle the modem alone)
Search for a VPN package for your particular vpn solution then configure NetworkManager
dnf search NetworkManager [openvpn|openconnect|openswat|…]
Refer to this guide which includes instructions for failsafe anti-leak VPN configuration using CLI scripts. (An early discussion about OpenVPN configuration can be viewed here.) Required packages will be
iptables in addition to VPN software such as
system-config-printer system-config-printer-applet cups
Dependency Note: depends on python3 + python3 additional libraries which takes more than 40 M once installed.
Dependency Note: cups depends on ghostscript and require installing additional printing fonts (not documented here), so it can takes several dozen of MB
Don’t forget to restart your TemplateVM or only the cups service when you installed cups (systemctl start cups)
First you need to search for your printer. If you don’t know its name or IP, search for it using nmap: check your current network using the Network manager applet (eg: 192.168.1.65). Then run nmap in your current AppVM/TemplateVM to search for the selected printer/equipement: nmap -sP 192.168.1.-. Don’t forget to temporarily allow traffic via the Qubes Firewall if you are inside a TemplateVM.
Once you identified your printer, run system-config-printer GUI to install your printer
You may need to cancel the operation to install more adapted printer drivers (eg: if the driver cannot be found automatically). Use dnf search printername to find potential drivers (eg dnf search photosmart)
lxterminal dejavu-sans-mono-fonts dejavu-sans-fonts gnome-settings-daemon
Note: You need to install sans-mono fonts for the terminal or it will be unreadable (overlapping characters…), while the sans fonts are just to get nicer GUI menus.
Scite is a nice notepad that can also highlight scripts with very light dependencies
Meld allows easy comparison of two text files/ two configuration files.
Thunar is a light file manager usually used by xfce
thunar thunar-volman ntfs-3g
Dependency Note: xfce4 dependencies (but still quite light ~1.4M downloads)
pycairo package is needed for file’s contextual menu “Send to VM” to function (to actually popup dialog box and enter VM’s name where the file will be sent to).
pinentry-gtk package is responsible for pop-up dialog window where you enter password for your password protected gpg key. Install this package in the qube holding your password protected gpg keys. If you do not use password protected gpg keys, there is no need to install this package.
Managing GUI theme / appearance is often complex because when you do not want to depend on a specific desktop system.
For this reason, we need to customize themes for each GUI framework that our application depends on.
This often includes GTK2, GTK3 (which us a different configuration/themes than GTK2), Qt.
The appearance of Windows can only be changed in dom0, however, the appearance of all buttons, menus, icons, widgets are specific to each AppVM.
Choose theme packages for each framework. I recommend the following documentation THEMEPACKAGES
You can search for other themes using
dnf search theme gtk.
You can check your currently installed theme packages (to eventually remove them) using
rpm -qa | grep theme.
First you can get an insight of installed Gtk theme and see how it will appear using lxappearance.
I recommend not applying settings using lxappearance (do not click on apply) because it will create multiple configuration files.
To remove these files, follow cleanup notes.
rm ~/.gtkrc-2.0 rm ~/.icons/default/index.theme rm ~/.config/gtk-3.0/settings.ini rm ~/.config/Trolltech.conf
Cleaning the whole dconf settings is also possible by removing the following file. Please note that it will remove all preferences set for gnome application (not only the themes)
Note: lxappearance only has an effect on gtk3 themes so it won’t work to change gtk2 themes (used by Firefox, Thunderbird …). However, it is very lightweight and can be used to identify the name and look of themes you are interested in. Once you have the name, you can apply it using gsetting command line or gconf-editor.
Note: if you really want a GUI theme editor, you can install gnome-tweak-tools, but this tool has a lot of gnome dependencies (~150MB of dependencies). You can install it and uninstall it as soon as you change your theme.
The following programs can be used to see if theme has been correctly applied:
- GTK2 program: scite, thunderbird, firefox
- GTK3 program: lxterminal
- Qt program: keepassx
Note: testing in a TemplateVM will not work as expected because gnome-settings-daemon is not started in TemplateVM. so test your themes in an AppVM and then update the TemplateVM accordingly.
This can be done for gtk themes by creating dconf global settings. I recommend reading these articles:
Setup global config file:
Edit/Create the following file: /etc/dconf/db/qubes.d/10-global-theme-settings:
[org/gnome/desktop/interface] cursor-theme="Adwaita" gtk-theme="Clearlooks-Phenix" icon-theme="Adwaita" font-name="Cantarell 11" monospace-font-name="Monospace 11"
Generate global config database
Configure default user profile
Edit/Create the following file: /etc/dconf/profile/user:
It should be noted that the user dconf settings stored in ~/.config/dconf/user always takes precedence over the global dconf settings.
User dconf settings can be browsed using dconf-editor GUI.
If you want to force specific settings to be applied for all user (so in our case for all AppVMs depending on the template), you need to create locks:
Edit/Create the following file: /etc/dconf/db/qubes.d/locks/theme.lock:
Finally, regenerate the dconf database
Getting an uniform look for Qt & GTK is not achieved yet. A good source is on the following link UNIFORMTHEME
You installed packages of the theme you selected both for Qt, GTK2 and GTK3. (eg: Adwaita which is the default theme. I have not found another cross framework theme on fedora default packages).
You want to use the GTK theme you selected for Qt but there is no qt package. In this case QGtkStyle will take precedence and convert the style automatically. You can verify if it is enabled by searching for “style=GTK+” in /etc/xdg/Trolltech.conf. If style is changed to another name, it will be used instead of your GTK theme.
Note: check that ~/.config/Trolltech.conf in your AppVMs is not defining another “style=” because it will take precedence over your global Qt theme.