Whonix for KVM

From Whonix
Jump to navigation Jump to search
Documentation Previous page: Post Install Advice Index page: Documentation Next page: Qubes Whonix for KVM

About this KVM Page
Contributor maintained wiki page.
Support Status stable
Difficulty medium
Contributor HulaHooparchive.org iconarchive.today icon
Support Community support
only!
KVM virtualizerarchive.org iconarchive.today icon (unofficial [1]) logo

Using Whonix with KVM (Kernel Virtual Machine)

Info COMMUNITY SUPPORT ONLY : THIS WHOLE WIKI PAGE is only supported by the community. Whonix developers are very unlikely to provide free support for this content. See Community Support for further information, including implications and possible alternatives.

General

[edit]

What is KVM?

[edit]

For an openly developed, free and open-source software (FOSS), GPL licensed hypervisor that can run Whonix, [2] it is recommended to use Kernel Virtual Machine (KVM)archive.org iconarchive.today icon that comes with the GNU/Linux OS. KVM combined with the Virtual Machine Managerarchive.org iconarchive.today icon front-end should provide a familiar, intuitive and easy-to-use GUI. KVM uses libvirtarchive.org iconarchive.today icon.

For a detailed view on KVM's security merits read the audit reportarchive.org icon issued by an independent security auditing firm.

Why Use KVM Over VirtualBox?

[edit]

The VirtualBox developer team has made the decision to switch out the BIOS in their hypervisor. However, it now comes with one that requires compilation by a toolchain that Kicksecure logo does not meet the definition of Free SoftwareOnion network Logo according to the guidelines of the Free Software Foundation. This move is considered problematic for free and open source software projects like Debian, on which Whonix is based.

The issues with the Open Watcom License are explained in this threadarchive.org iconarchive.today icon on the Debian mailing list. More references can be found Kicksecure logo hereOnion network Logo. In summary, there are issues surrounding the contradictory language of the license, the assertion of patents against software that relies upon it, and the imposition of certain restrictions on software usage. For these reasons, those who care about running FOSS and appreciate its ethical views are recommended to avoid running VirtualBox; also see avoid non-freedom software.

Besides this licensing issue, a more tangible reason to avoid VirtualBox is the security practices of Oracle, the producer of the software. Events and news in recent years (like the Snowden leaks) demonstrate there is an urgent need for increased transparency and verifiable trust in the digital world. Oracle is infamous for its lack of transparency in disclosing the details of security bugs, as well as discouraging full and public disclosure by third parties. Security through obscurityarchive.org iconarchive.today icon is the flawed modus operandiarchive.org iconarchive.today icon at Oracle. [3]

Not going public with the details of vulnerabilities only leads to laziness and complacency on the part of the company that fields the affected products. One example is this historical 0day vulnerabilityarchive.org iconarchive.today icon reported privately to Oracle in 2008 by an independent security researcher. Over four years later, the vulnerability remained unfixedarchive.org iconarchive.today icon, demonstrating Oracle's history of failing to provide timely patches to customers so they can protect themselves.

On the VirtualBox bugtracker, ticket VirtualBox 5.2.18 is vulnerable to spectre/meltdown despite microcode being installed indicates Kicksecure logo non-responsivenessOnion network Logo and a lack of progress by upstream. Users must patiently wait for VirtualBox developers to fix this bug. [4]

VirtualBox also contains significant functionality that is only available as a proprietary extension, such as USB / PCI passthrough and RDP connectivity. Based on Oracle's unfriendly track record with the FOSS community in the past -- examples include OpenSolaris and OpenOffice -- it would be unsurprising if users were charged for these restricted features in the future, or if the project was abandoned due to insufficient monetization.

For the opposite viewpoint, see Why use VirtualBox over KVM?

First-time User?

[edit]

Whonix default admin password is: No password required. (Passwordless login.)

  • Default username: user
  • Default password: No password required. (Passwordless login.) [5]

Whonix first time users warning Warning:

  • If you do not know what metadata or a man-in-the-middle attack is.
  • If you think nobody can eavesdrop on your communications because you are using Tor.
  • If you have no idea how Whonix works.

Then read the Design and Goals, Whonix and Tor Limitations and Tips on Remaining Anonymous pages to decide whether Whonix is the right tool for you based on its limitations.

KVM Setup Instructions

[edit]

Install KVM

[edit]

Choose your host operating system.

Debian

Setup sudoers. Add the operating system user name to sudoers.

Become root.

su

Add the user account to the sudoer's group. Replace user with the actual operating system user name.

sudo adduser user sudo

Reboot so group changes take effect.

reboot

Update package lists.

sudo apt update

For Debian bookworm+ on Intel / AMD, install:

sudo apt install --no-install-recommends qemu-kvm qemu-system-x86 libvirt-daemon-system libvirt-clients virt-manager gir1.2-spiceclientgtk-3.0 dnsmasq-base qemu-utils iptables safe-rm xz-utils

For Debian bookworm+ on PowerPC, install:

sudo apt install --no-install-recommends qemu-system-ppc libvirt-daemon-system libvirt-clients virt-manager gir1.2-spiceclientgtk-3.0 dnsmasq-base qemu-utils iptables safe-rm xz-utils

Ubuntu

sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libguestfs-tools genisoimage virtinst libosinfo-bin virt-manager dnsmasq-base iptables safe-rm xz-utils

Add your user to KVM groups (1 of 2).

sudo adduser $USER libvirt

Add your user to KVM groups (2 of 2).

sudo adduser $USER libvirt-qemu

Arch Linux

TODO: Is it possible to install only dnsmasq-base without the dnsmasq systemd unit, or does Arch Linux keep the systemd unit disabled by default?

CRITIQUES: "safe-rm" and "xz-utils" are not Arch Linux packages. tar should pull in xz-utils if required. safe-rm has limited value.

sudo pacman -Syu qemu libvirt virt-manager qemu-full dnsmasq bridge-utils safe-rm xz-utils

sudo systemctl enable libvirtd

Fedora

Check System Requirements

As KVM requires a CPU with virtualization extensions, check whether the system has either Intel VT or AMD-V. If the following command prints nothing, the system does not support the required virtualization extensions.

egrep -E '^flags.*(vmx|svm)' /proc/cpuinfo

Install Dependencies

To install mandatory and default packages in the virtualization group, run:

sudo dnf install @virtualization xz-utils

Alternatively, to install mandatory, default, and optional packages, run:

sudo dnf group install --with-optional virtualization xz-utils

After installing packages, start the libvirtd service.

sudo systemctl start libvirtd

To start the service on boot, run:

sudo systemctl enable libvirtd

Verify that KVM kernel modules loaded properly. If this command lists kvm_intel or kvm_amd, KVM is properly configured.

lsmod | grep kvm

Edit the libvirtd Configuration

System administration is limited to the root user by default. To enable a regular user, run the following commands.

Open the /etc/libvirt/libvirtd.conf file for editing.

sudo nano /etc/libvirt/libvirtd.conf

Set the domain socket group ownership to libvirt.

unix_sock_group = "libvirt"

Adjust the Unix socket permissions for the R/W socket.

unix_sock_rw_perms = "0770"

Save and exit.

To administer libvirt as a regular user, add the user to the libvirt group. [6]

sudo usermod -a -G libvirt $(whoami)

You must log out and log back in to apply the changes.

Other Distributions

The qemu-kvm and libvirt-bin packages are necessary. virt-manager is also required to use a graphical user interface (which most users want). tar, xz-utils are required to extract the Whonix images. This software can most likely be installed using the usual distribution's package manager.

If any of the following errors appear when later using virsh define:

error: Failed to define domain from Whonix-Gateway_kvm.xml error: internal error Unknown controller type 'pci

Whonix-Gateway_kvm.xml:24: element pm: Relax-NG validity error : Element domain has extra content: pm Whonix-Gateway_kvm.xml fails to validate

Relax-NG validity error : Extra element devices in interleave Whonix-Gateway_kvm.xml:24: element devices: Relax-NG validity error : Element domain failed to validate content Whonix-Gateway_kvm.xml fails to validate

Then a more recent version of libvirt and KVM is likely needed.

Readers are welcome to add detailed instructions for other distributions here!

Addgroup

[edit]

In order to manage virtual machines as a regular (non-root) user, that user must be added to the libvirt and kvm groups.

  • Debian (based) / Ubuntu:
    • The following commands work in Debian and assume the simple scenario where KVM is used by the currently logged-in user. For older Ubuntu versions, note that group names vary and libvirt may be called libvirtd instead. For Ubuntu 20.04, libvirt works.
    • sudo adduser "$(whoami)" libvirt
    • sudo adduser "$(whoami)" kvm
    • [7]
  • Arch Linux:
    • sudo gpasswd -a $USER libvirt
    • sudo gpasswd -a $USER kvm
  • Other Distributions: If another distribution is in use, refer to the distribution's manual. For example, Arch users should consult the Arch Linux libvirt wiki pagearchive.org iconarchive.today icon.

Restart libvirtd

[edit]

Note: Restarting libvirtd is required after:

  • KVM is installed.
  • Users are added to groups.

sudo systemctl restart libvirtd

It may be necessary to reboot the computer on some systems.

Network Start

[edit]

Info These steps unrelated to Whonix, but are helpful when running other VMs.

Ensure KVM's / QEMU's default networking is enabled and has started. [8] [9]

sudo virsh -c qemu:///system net-autostart default

sudo virsh -c qemu:///system net-start default

Build from Scratch

[edit]

Advanced users are encouraged to build Whonix images for high security assurance.

Information

[edit]

It is strongly recommended to read and apply the steps outlined in this section. Applying a known and tested configuration provides better convenience and security.

Be sure to use the qcow2 images provided by the Whonix project instead of rolling your own [10] because they contain important performance optimizations. [11] The only exception is if images were created from source. [12]

If problems are encountered with free disk space, using a file system that supports sparse files is recommended. Also refer to the following forum discussionarchive.org iconarchive.today icon.

If Whonix libvirt images already exist, then consider a Cleanup first.

For simplicity, the Whonix images should be downloaded and stored in the home folder (/home/<your user name>) so the following commands can be copied/pasted without changes.

Download Whonix

[edit]

By downloading, you acknowledge that you have read, understood and agreed to our Terms of Service and License Agreement.

FREE

Symbol representing GUI

GUI

stable Xfce

Optional: Digital signature verification.

Version (stable): 17.4.4.6

Only experienced users: This step is only useful and recommended for very experienced users. All other user please skip this step.

  • Digital signatures are a tool enhancing download security. They are commonly used across the internet and nothing special to worry about.
  • Optional, not required: Digital signatures are optional and not mandatory for using Whonix, but an extra security measure for advanced users. If you've never used them before, it might be overwhelming to look into them at this stage. Just ignore them for now.
  • Learn more: Curious? If you are interested in becoming more familiar with advanced computer security concepts, you can learn more about digital signatures here digital software signatures.

Choose your verification method below. This step requires that you have already downloaded Whonix Xfce.

testers Xfce

Optional: Digital signature verification.

Version (testers): 17.4.4.6

Only experienced users: This step is only useful and recommended for very experienced users. All other user please skip this step.

  • Digital signatures are a tool enhancing download security. They are commonly used across the internet and nothing special to worry about.
  • Optional, not required: Digital signatures are optional and not mandatory for using Whonix, but an extra security measure for advanced users. If you've never used them before, it might be overwhelming to look into them at this stage. Just ignore them for now.
  • Learn more: Curious? If you are interested in becoming more familiar with advanced computer security concepts, you can learn more about digital signatures here digital software signatures.

Choose your verification method below. This step requires that you have already downloaded Whonix Xfce.
Symbol representing CLI

CLI

stable CLI

Optional: Digital signature verification.

Version (stable): 17.4.4.6

Only experienced users: This step is only useful and recommended for very experienced users. All other user please skip this step.

  • Digital signatures are a tool enhancing download security. They are commonly used across the internet and nothing special to worry about.
  • Optional, not required: Digital signatures are optional and not mandatory for using Whonix, but an extra security measure for advanced users. If you've never used them before, it might be overwhelming to look into them at this stage. Just ignore them for now.
  • Learn more: Curious? If you are interested in becoming more familiar with advanced computer security concepts, you can learn more about digital signatures here digital software signatures.

Choose your verification method below. This step requires that you have already downloaded Whonix CLI.

testers CLI

Optional: Digital signature verification.

Version (testers): 17.4.4.6

Only experienced users: This step is only useful and recommended for very experienced users. All other user please skip this step.

  • Digital signatures are a tool enhancing download security. They are commonly used across the internet and nothing special to worry about.
  • Optional, not required: Digital signatures are optional and not mandatory for using Whonix, but an extra security measure for advanced users. If you've never used them before, it might be overwhelming to look into them at this stage. Just ignore them for now.
  • Learn more: Curious? If you are interested in becoming more familiar with advanced computer security concepts, you can learn more about digital signatures here digital software signatures.

Choose your verification method below. This step requires that you have already downloaded Whonix CLI.

Note: Save your download to your usual ~/Downloads folder.

Decompress

[edit]

1. Change directory.

The decompression command below needs to be run from within the folder where you downloaded the archive (most likely in ~/Downloads or ~/ (home) folder).

Note: Adjust the folder if you stored the archive elsewhere.

cd ~/Downloads

2. Do not use unxz! Extract the images using GNU tar.

3. Make sure the xz-utils package is installed on your system. [13]

If you followed the installation instructions above, this should already be the case.

4. Decompress.

tar -xvf Whonix*.libvirt.xz

5. Wait.

Please be aware that the extraction process may take an exceptionally long time to complete. It is recommended to allow the terminal to run uninterrupted after executing the command to ensure successful decompression.

6. Done.

License Agreement

[edit]

Read the Whonix binary license agreement via one of the following resources:

  • this online link; or
  • open it with a text editor; or
  • use more.

more WHONIX_BINARY_LICENSE_AGREEMENT

Press Enter to scroll down.

Indicate either A) acceptance, or B) refusal.

A) In the case of acceptance:

touch WHONIX_BINARY_LICENSE_AGREEMENT_accepted

B) In the case of denial:

touch WHONIX_BINARY_LICENSE_AGREEMENT_denied

You are welcome to attempt negotiations regarding any element of these terms by contacting us.

By proceeding with installation, you acknowledge that you have read, understood and agreed to our Terms of Service and License Agreement.

VM Settings Modification

[edit]

Optional.

Select Before VM Import or After VM Import.

Before VM Import

This section describes XML modifications before importing a virtual machine.

Modifying a machine's XML file provides more fine-grained control over its settings than what is exposed through the virt-manager GUI. Unless you are knowledgeable about this process, editing configuration defaults is neither recommended nor necessary.

Open file Whonix-Gateway*.xml in a text editor of your choice as a regular, non-root user.

If you are using a graphical environment, run. mousepad Whonix-Gateway*.xml

If you are using a terminal, run. nano Whonix-Gateway*.xml

Open file Whonix-Workstation*.xml in a text editor of your choice as a regular, non-root user.

If you are using a graphical environment, run. mousepad Whonix-Workstation*.xml

If you are using a terminal, run. nano Whonix-Workstation*.xml

After VM Import

For virtual machines that were already imported.

Choose either option A) or B).

A) With an Editor

1. Choose your favorite editor.

Optional.

Configure your preferred editor to make changes. The relevant software must already be installed, such as kwrite, leafpad, kate, vi, nano, vim and so on. This is done by setting the VISUAL environment variable.

export VISUAL=kwrite

2. Edit.

Use the virsh command to open the configuration file.

Whonix-Gateway

sudo -E virsh -c qemu:///system edit Whonix-Gateway

Whonix-Workstation

sudo -E virsh -c qemu:///system edit Whonix-Workstation

3. Save.

4. Done.

Editing an imported machine's XML configuration is now complete.

B) Using virt-manager

In more recent versions of virt-manager, a second option is available:

Virtual Machine Manager -> Edit -> Preferences -> General -> Enable XML Editing

Under the Details view for a VM, a new XML tab appears in the GUI, allowing direct editing and saving from the VM viewer.

Importing Whonix VM Templates

[edit]

The first step after extracting the archive is to import the supplied XML files. They serve as a description for libvirtarchive.org iconarchive.today icon and define the properties of the Whonix VMs and the networking they should use.

1. Add the virtual networks. This step only needs to be done once, not with every upgrade.

If the definition of a Whonix network fails because the virtual bridge "virbrX" already exists, edit the Whonix_external*.xml and Whonix_internal*.xml files and change the name to one that does not exist, for example "virbr3" (all existing bridge adapters can be listed with "sudo brctl show").

sudo virsh -c qemu:///system net-define Whonix_external*.xml

sudo virsh -c qemu:///system net-define Whonix_internal*.xml

2. Activate the virtual networks.

sudo virsh -c qemu:///system net-autostart Whonix-External

sudo virsh -c qemu:///system net-start Whonix-External

sudo virsh -c qemu:///system net-autostart Whonix-Internal

sudo virsh -c qemu:///system net-start Whonix-Internal

3. Import the Whonix Gateway and Workstation images.

sudo virsh -c qemu:///system define Whonix-Gateway*.xml

sudo virsh -c qemu:///system define Whonix-Workstation*.xml

Image File Installation

[edit]

The XML files are configured to point to the default storage location of /var/lib/libvirt/images. The image files can be moved or copied depending on storage constraints.

Notes:

  • Changing the default location may cause conflicts with SELinux, which will prevent the machines from booting.
  • Administrative rights (sudo) are required because the copy or move operation targets a privileged system location.

The following steps move or copy the images so the machines can boot.

Either move or copy.

Moving Whonix Image Files

Move.

sudo mv Whonix-Gateway*.qcow2 /var/lib/libvirt/images/Whonix-Gateway.qcow2

sudo mv Whonix-Workstation*.qcow2 /var/lib/libvirt/images/Whonix-Workstation.qcow2

Copying Whonix Image Files

Copy.

Whonix disk images are Kicksecure logo sparse filesOnion network Logo, meaning they expand as data is written rather than allocating their entire size (100GB) outright. Sparse files require special commands when copied to ensure they retain this property; otherwise they will occupy the full disk space.

sudo cp --sparse=always Whonix-Gateway*.qcow2 /var/lib/libvirt/images/Whonix-Gateway.qcow2

sudo cp --sparse=always Whonix-Workstation*.qcow2 /var/lib/libvirt/images/Whonix-Workstation.qcow2

Manipulating QCOW2 Images

[edit]

Use qemu-img to interact with KVM disk images. This tool can resize virtual disks, convert them to other formats, and more. It is neither necessary nor recommended to modify the official images, so proceed cautiously and only if the procedure is well understood.

For more commands, refer to the qemu-img manualarchive.org iconarchive.today icon.

Encrypted Containers

[edit]

It is possible to run image files from encrypted containers. sVirt protections are confirmed to be in effect for image files stored at alternative locations.

Change the permissions on the container mount point directory so Virtual Machine Manager can access the image. In ZuluCrypt, containers are mounted under /run/media/private/user: [14]

sudo chmod og+xr /run/media/private/user/$container_name

After this, in the KVM XML configuration for both the Gateway and the Workstation, you must edit the XML and change the source file tag to: source file="/run/media/private/user/Whonix-Gateway.qcow2".

This ensures that the VM can open and run.

Cleanup

[edit]

After importing Whonix, it is recommended to delete the archives (.libvirt.xz files) and the temporarily extracted folders, or move them into a custom location. This helps avoid conflicts and confusion if a new version of Whonix is later downloaded.

To delete the archives and temporary folders, run:

Note: This may not work on some Linux distributions where safe-rm is unavailable. In that case, use trash-put (if the trash-cli package is available) or rm (always available) instead.

safe-rm Whonix*

safe-rm -r WHONIX*

Start

[edit]

If Virtual Machine Manager is familiar, there is nothing special about starting Whonix VMs compared to other VMs. First start Whonix-Gateway, then start Whonix-Workstation.

Using Whonix-Gateway with Xfce Desktop vs CLI Mode

[edit]

To start the desktop environment, the Whonix-Gateway virtual machine must be assigned at least 1 GB of RAM. Otherwise, it will only boot in CLI mode. To disable startup of the included desktop environment regardless of RAM allocation, configure the RAM Adjusted Desktop Starter package settings.

Graphical User Interface (GUI)

[edit]

Start Virtual Machine Manager:

Start MenuApplicationsSystemVirtual Machine Manager

Start Whonix-Gateway:

click on Whonix-Gatewayclick openclick the play symbol

Repeat the same steps for Whonix-Workstation.

Command Line Interface (CLI)

[edit]

The following instructions were re-tested in September 2024.

1. Open a terminal inside the VM that should be accessed through CLI.

This is required to set up the serial console VM settings.

2. Install the package:

Install package(s) serial-console-enable following these instructions

1 Platform specific notice.

2 Kicksecure logo Update the package lists and upgrade the systemOnion network Logo.

sudo apt update && sudo apt full-upgrade

3 Install the serial-console-enable package(s).

Using apt command line Kicksecure logo --no-install-recommends optionOnion network Logo is in most cases optional.

sudo apt install --no-install-recommends serial-console-enable

4 Platform specific notice.

  • Non-Qubes-Whonix: No special notice.
  • Qubes-Whonix: Shut down Template and restart App Qubes based on it as per Kicksecure logo Qubes Template ModificationOnion network Logo.

5 Done.

The procedure of installing package(s) serial-console-enable is complete.

3. Shut down the VM.

4. Open a terminal on the host.

5. To start Whonix-Gateway, run:

sudo virsh start Whonix-Gateway

To start Whonix-Workstation, run:

sudo virsh start Whonix-Workstation

6. To interact with Whonix-Workstation via serial console, run:

sudo virsh console Whonix-Workstation

7. To exit the console session, press Ctrl + ] (Control and closing square bracket). This will return you to your host terminal while leaving the VM running.

8. Done.

Forum discussion: https://forums.whonix.org/t/how-do-i-enter-the-whonix-shell-from-cli/7271archive.org iconarchive.today icon

Adjust Display Resolution

[edit]

Start MenuDisplaySelect resolution [15]

Alternatively:

GUI ConsoleViewScale DisplayCheck: Always + Auto resize VM with window.

Note: For the setting to take effect, a reboot is required in every new session while the VM's GUI console is open and maximized.

After Installing

[edit]

Read and apply the Post Installation Security Advice.

Uninstall

[edit]

If you want to remove Whonix KVM VMs, the Whonix network, and Whonix images, click on Expand on the right.

1. Power off the VM you want to shut down. [16]

sudo virsh -c qemu:///system destroy Whonix-Gateway

sudo virsh -c qemu:///system destroy Whonix-Workstation

2. Remove the KVM VM settings.

sudo virsh -c qemu:///system undefine Whonix-Gateway

sudo virsh -c qemu:///system undefine Whonix-Workstation

3. Shut down the KVM network Whonix.

Warning: Whonix 14 and earlier versions used the network names "external" and "internal". This means the command must be changed accordingly. Try virsh -c qemu:///system net-list to list them all.

sudo virsh -c qemu:///system net-destroy Whonix-External sudo virsh -c qemu:///system net-destroy Whonix-Internal

4. Remove the KVM network Whonix.

Warning: Whonix 14 and earlier versions used the network names "external" and "internal". This means the command must be changed accordingly. Try sudo virsh -c qemu:///system net-list to list them all.

sudo virsh -c qemu:///system net-undefine Whonix-External sudo virsh -c qemu:///system net-undefine Whonix-Internal

5. Delete the images.

Note: All data will be lost unless it is backed up first.

sudo safe-rm /var/lib/libvirt/images/Whonix-Gateway.qcow2

sudo safe-rm /var/lib/libvirt/images/Whonix-Workstation.qcow2

KVM Upgrade Instructions

[edit]

It is strongly recommended to uninstall older Whonix versions and always use the stable release. Note that Whonix also supports in-place APT upgrades.

  1. Move your data out of the VM using shared folders.
  2. Perform the Cleanup steps.
  3. Install the new images.

Optional

[edit]

Fullscreen Mode

[edit]
  • To enter fullscreen mode, click:

  • To exit fullscreen mode, move your mouse to the top middle of the screen and click:

Multiple Whonix-Gateway

[edit]

See: Multiple Whonix-Gateway.

Testing Upcoming Versions

[edit]

Download the test images from the latest folder listed herearchive.org iconarchive.today icon. Apply the Multiple Whonix-Gateway KVM steps to run Whonix versions side by side, with the following differences:

  1. Rename the test Whonix images to something unique, preferably by appending the version number to the filename.
  2. Edit the XML templates and change the VM names.
  3. Import the images by following the Importing Whonix installation steps. Keep in mind the full names of the new images must be used, and do not import the network templates.

Convert Libvirt Templates to QEMU Commands

[edit]

1. Export the VM template as a file:

sudo virsh dumpxml Whonix-Gateway > Whonix-Gateway.xml

2. Convert the XML file to a QEMU command:

sudo virsh domxml-to-native qemu-argv Whonix-Gateway.xml > Whonix-Gateway.args

3. Repeat the steps for the Whonix-Workstation. Replace Whonix-Gateway with Whonix-Workstation in the commands above.

Magic SysRq Keys

[edit]

Magic SysRq keys are useful when the guest becomes unresponsive, particularly in cases where VMs are running headless and a GUI console is not available to force them to shut down from the host. [17]

Example command to shut down the Whonix Workstation from a host console. The O at the end of KEY_O can be substituted with any other supported letterarchive.org iconarchive.today icon listed in the kernel documentation. See also Kicksecure logo SysRqOnion network Logo.

sudo virsh send-key Whonix-Workstation KEY_LEFTALT KEY_SYSRQ KEY_O

DHCP

[edit]

Libvirt provides built-in DHCP functionality via a custom installation of the minimalist Dnsmasq DNS/DHCP daemon. [18] This is useful when running multiple Workstations concurrently that are attached to the same Gateway, and for custom Workstations such as Android x86.

For privacy and traffic-leak prevention, Dnsmasq does not resolve DNS as implemented in Libvirt. [19] [20] DNS is not explicitly enabled for guests unless it is added to a network’s configuration. [21] [22] Even when DNS is enabled, the way Libvirt uses it does not increase the host's attack surface (for example, by using raw sockets). Likewise, DHCP does not increase the attack surface since it is bound to a specific NIC in this case. [23] Attempting to edit the Dnsmasq configuration files directly will fail, as settings are rewritten and enforced through Libvirt by design. [24]

1. Edit the network configuration file:

sudo nano /etc/network/interfaces.d/30_non-qubes-whonix

2. Modify the configuration.

Comment out:

auto eth0 iface eth0 inet static address 10.152.152.11 netmask 255.255.192.0 gateway 10.152.152.10

Comment in:

auto eth0 iface eth0 inet dhcp

Save the file.

3. Edit the internal network settings:

sudo virsh net-edit Whonix-Internal

<ip address='10.152.152.0' netmask='255.255.192.0'>
    <dhcp>
      <range start='10.152.128.1' end='10.152.191.254'/>
    </dhcp>
</ip>

4. Restart the internal network:

sudo virsh net-destroy Whonix-Internal

sudo virsh -c qemu:///system net-start Whonix-Internal

5. Use sudo ifconfig to confirm that dynamic IP assignment is functional.

6. Optional: Configure a static IP address.

Libvirt also allows pairing a static IP from the DHCP server to a VM with a specific MAC address, which is useful if services in the Workstation depend on predictable IPs. See the host attributearchive.org iconarchive.today icon under the dhcp element.

7. Install a DHCP client on the Workstation.

sudo apt install isc-dhcp-client

8. Reboot.

reboot

9. Done.

Snapshot Migration

[edit]

If the VM has snapshots that you want to preserve, the snapshot XML files of the source VM should be dumped with the following commands. [25]

1. List the snapshot names of the VM:

sudo virsh snapshot-list --name $dom

2. Dump each snapshot you want to back up:

sudo virsh snapshot-dumpxml $dom $name > file.xml

3. Restore snapshots at the destination:

sudo virsh snapshot-create --redefine $dom file.xml

4. Optional: Identify the current snapshot.

On the source VM, run:

sudo virsh snapshot-current --name $dom

On the destination VM, run:

sudo virsh snapshot-current $dom $name

Nested KVM Virtualization

[edit]

It is possible to create nested KVM VMs on KVM hosts. Run the following commands as root.

Check the current setting on the host. If the result is [Y], then nested virtualization is enabled.

sudo cat /sys/module/kvm_intel/parameters/nested

For AMD systems, use kvm_amd instead:

sudo cat /sys/module/kvm_amd/parameters/nested

If the result is [N], enable nested virtualization with the following command and then reboot the system.

For Intel systems:

echo 'options kvm_intel nested=1' | sudo tee -a /etc/modprobe.d/qemu-system-x86.conf

For AMD systems:

echo 'options kvm_amd nested=1' | sudo tee -a /etc/modprobe.d/qemu-system-x86.conf

Host CPU instructions that include the svm and vmx extensions are passed through to the Workstation by default.

Compressing Disk Images

[edit]

Some users find it easier to move sparse image files after compressing them into a tarball.

To re-compress files, run:

tar -Sczvf whonix.tar.gz <multiple file names separated by spaces>

Adding vCPUs

[edit]

The pinning parameter cpuset='1' must be removed from the vcpu tag in the XML settings to allow adding more cores to a VM; otherwise, performance issues and lockups may occur. CPU pinning is used to safeguard processes in other VMs that run cryptographic operations from side-channel attacks in case of a vulnerability in a cryptographic library. [26]

To add more vCPUs, increase the number between the opening and closing vcpu tags. Alternatively, use the hardware Details pane in Virtual Machine Manager.

If preserving CPU pinning while increasing the core count is desired, pin the vCPUs to different numbered ones compared to other sensitive VMs. Map them in a 1:1 ratio to avoid overcommitting cores, which can lead to performance problems.

3D Graphics Acceleration

[edit]

Having video issues? See Videos instead.

Enabling 3D acceleration is discouraged because it increases the attack surface. This is a general KVM issue and is not specific to Whonix.

(Advanced users, see: Dev/KVM#Virgl3D)

1. Ensure that your host GPU drivers are installed and functional. If your host lacks a dedicated GPU and relies on software rendering (CPU), install libgl1-mesa-dri and mesa-utils on the host (if it is Debian-based) to verify OpenGL functionality and enable software-based OpenGL rendering:

sudo apt install libgl1-mesa-dri mesa-utils

2. Modify the VM settings before or after installation, as required:

sudo virsh edit Whonix-Workstation

3. Locate the following section in the XML and apply the necessary changes:

  • <listen type='none'/>  : SPICE does not support TLS + OpenGL with remote connections, so it must be enabled locally.
  • <gl enable='yes'/>  : Enable OpenGL.
  • <acceleration accel3d='yes'/>  : Enable 3D acceleration.

Here is a full example of the relevant XML sections:

    <graphics type='spice'>
      <listen type='none'/>
      <clipboard copypaste='yes'/>
      <filetransfer enable='no'/>
      <gl enable='yes'/>
    </graphics>
    <audio id='1' type='spice'/>
    <video>
      <model type='virtio' heads='1' primary='yes'>
        <acceleration accel3d='yes'/>
      </model>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>

4. Restart your VMs if they are running.

5. Notes:

6. Done.

3D Graphics Acceleration - Testing

[edit]

3D Graphics Acceleration - Testing - Direct Rendering Manager

[edit]

Source: Arch Linux Wiki QEMU, virtio sectionarchive.org iconarchive.today icon

sudo dmesg | grep -i drm

[drm] pci: virtio-vga detected
[drm] virgl 3d acceleration enabled

Note: DRM here refers to the Direct Rendering Managerarchive.org iconarchive.today icon. This is unrelated to Digital Restrictions Managementarchive.org iconarchive.today icon.

3D Graphics Acceleration - Functionality Test

[edit]

Install package(s) mesa-utils following these instructions

1 Platform specific notice.

2 Kicksecure logo Update the package lists and upgrade the systemOnion network Logo.

sudo apt update && sudo apt full-upgrade

3 Install the mesa-utils package(s).

Using apt command line Kicksecure logo --no-install-recommends optionOnion network Logo is in most cases optional.

sudo apt install --no-install-recommends mesa-utils

4 Platform specific notice.

  • Non-Qubes-Whonix: No special notice.
  • Qubes-Whonix: Shut down Template and restart App Qubes based on it as per Kicksecure logo Qubes Template ModificationOnion network Logo.

5 Done.

The procedure of installing package(s) mesa-utils is complete.

Run:

glxinfo | grep rendering

The expected output is [27]:

direct rendering: Yes

3D Graphics Acceleration - Troubleshooting

[edit]

The following errors are common when dealing with 3D acceleration, especially on older hardware or when configurations are incomplete. Use these examples as references when troubleshooting.

Case 1: OpenGL not found or not installed on the host (common if there is no dedicated GPU):

Error starting domain: internal error: QEMU unexpectedly closed the monitor (vm='Whonix-Workstation'): 2024-09-04T04:29:19.732050Z qemu-system-x86_64: -device {"driver":"virtio-vga-gl","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"}: opengl is not available
...
libvirt.libvirtError: internal error: QEMU unexpectedly closed the monitor (vm='Whonix-Workstation'): ... opengl is not available

Case 2: Host lacks a dedicated GPU and uses an outdated CPU (GLSL version mismatch):

Error starting domain: internal error: QEMU unexpectedly closed the monitor (vm='Whonix-Workstation'): qemu_gl_create_compile_shader: compile vertex error
0:1(10): error: GLSL ES 3.00 is not supported. Supported versions are: 1.10, 1.20, and 1.00 ES
...
libvirt.libvirtError: internal error: QEMU unexpectedly closed the monitor (vm='Whonix-Workstation'): qemu_gl_create_compile_shader: compile vertex error
0:1(10): error: GLSL ES 3.00 is not supported. Supported versions are: 1.10, 1.20, and 1.00 ES

Case 3: TLS enabled for remote SPICE together with 3D acceleration/OpenGL (unsupported combination):

Error starting domain: internal error: process exited while connecting to monitor: 2024-09-04T04:34:37.668627Z qemu-system-x86_64: SPICE GL support is local-only for now and incompatible with -spice port/tls-port
...
libvirt.libvirtError: internal error: process exited while connecting to monitor: ... SPICE GL support is local-only for now and incompatible with -spice port/tls-port

Mouse Smoothness

[edit]

This setting can improve mouse movement.

Untested

As per Domain XML format: Input devicesarchive.org iconarchive.today icon.

1. Perform VM Settings Modification.

2. Look for:

<devices>

3. Below it, append the following:

<input type='tablet' bus='virtio'/>

Forum discussion: https://forums.whonix.org/t/p-s2-mouse-movement-in-cutom-debian-workstation/19985archive.org iconarchive.today icon

Shared Folder

[edit]

A shared folder allows you to access the same directory from both the host operating system (OS) and the virtual machine (VM).

This guide explains how to configure and use shared folders in Whonix.

Warning: Deleting files within the shared folder will move them to a hidden sub-directory called .Trash-1000. Make sure you reveal it and promptly delete it on the host to avoid data leakage across different VM sessions.

Follow these steps to move data between the guest and host. It is recommended to create or assign a unique directory per snapshot to keep shared content from different security domains separate.

X Special Notice: Upgrade Required

Update your system first. [28]

Sysmaint Notice

sysmaint notice Platform specific.

  • Whonix:
    • If using user-sysmaint-split: The user needs to boot into the sysmaint session. For details and instructions on how to do that, see user-sysmaint-split. (user-sysmaint-split is the default since Kicksecure logo build versionOnion network Logo 17.3.9.9.)
    • If using Kicksecure logo unrestricted admin modeOnion network Logo: This sysmaint notice is not applicable. Continue with the steps below.
  • Qubes-Whonix:

In System Maintenance Panel, press Install Updates or upgrade using the command line:

sudo apt update && sudo apt dist-upgrade

1. Ensure the virtual machine is powered down.

2. Host folder preparation: On the host operating system, create a folder to be shared with the virtual machine (VM). For example, on a Linux host:

Note: Replace account user with your actual account.

mkdir /home/user/shared

3. Adjust permissions on the host to allow read and write access to the folder with chmod:

Note: Replace account user with your actual account.

chmod 777 /home/user/shared

4. Click virt-manager → double-click on VM → ViewDetailsAdd Hardware.

5. Click the Filesystem device in the list of devices on the left side of the window.

6. Choose the following settings.

  • Driver: virtio-9p
  • Source path: /home/user/shared
    • Note: Replace account user with your actual account.
  • Target Path: shared
    • Note: This field must contain the word shared, regardless of the folder name. This is because this identifier is used to mount the shared folder in Whonix.

7. Ensure Export filesystem as readonly mount is unchecked. [29]

8. Click Finish.

9. Click ViewConsole, then click the play button in the toolbar to start the VM.

10. Done.

The shared folder will be accessible as /mnt/shared. [30] The folder can be opened using a file manager such as Thunar. To open it using the command line, run:

cd /mnt/shared

Mandatory Access Control

[edit]

Note: If your system is configured with a Mandatory Access Control framework, it might be necessary to configure exceptions to allow guests to communicate with the shared folder on the host.

Tests with AppArmor have shown it operates transparently with shared folders, without manual exception configuration.

On the host, chmod must be applied to the shared folder contents to access the files.

Note: Replace account user with your actual account.

sudo chmod 777 -R /home/user/shared

If SELinux is disabled, everything should work. If SELinux is enabled, a policy must be added for files under the shared folder on the host. SELinux will not allow sharing until the folder is labeled svirt_image_t. To achieve this, add the following policy on the host using semanage.

Note: These steps must be re-applied every time files are transferred. [31] [32]

sudo semanage fcontext -a -t svirt_image_t "/home/user/shared(/.*)?"

restorecon -vR /home/user/shared

Setting execute permission on the user folder itself may be necessary for the guest to start without a permission error:

sudo chmod 701 /home/user

Alternatively, set execute permission only for virt-manager. The name libvirt-qemu may vary depending on the distribution:

sudo setfacl -m u:libvirt-qemu:x /home/user

If you are using the command line instead of virt-manager to edit the VM’s device settings, add the following section to the XML:

<filesystem type='mount' accessmode='mapped'>
    <source dir='/home/user/shared'/>
    <target dir='shared'/>
</filesystem>

Shared Folder in Live Mode

[edit]

A shared folder is a folder that is shared between the host operating system (OS) and the virtual machine (VM).

In Live Mode, the shared folder will not be mounted by default. (This behavior was implemented starting from version 17.4.4.6 and might be subject to change in a future version.) [33]

To enable the shared folder with read and write access in live mode, follow the instructions below.

1 Instructions from the above chapter must be applied first.

Option-specific:

  • If you are using Kicksecure (or a derivative such as Whonix), follow the steps below.
  • If you are using other operating systems or the generic method, this is not applicable. [34]

2 Sysmaint Notice

sysmaint notice Platform specific.

  • Whonix:
    • If using user-sysmaint-split: The user needs to boot into the sysmaint session. For details and instructions on how to do that, see user-sysmaint-split. (user-sysmaint-split is the default since Kicksecure logo build versionOnion network Logo 17.3.9.9.)
    • If using Kicksecure logo unrestricted admin modeOnion network Logo: This sysmaint notice is not applicable. Continue with the steps below.
  • Qubes-Whonix:

3 Open file /usr/lib/systemd/system/mnt-shared-kvm.service.d/50_user.conf in an editor with root rights.

Select your platform.

Non-Qubes-Whonix

See Kicksecure logo Open File with Root RightsOnion network Logo for detailed instructions on why using sudoedit improves security and how to use it.

Note: Mousepad (or the chosen text editor) must be closed before running the sudoedit command.

sudoedit /usr/lib/systemd/system/mnt-shared-kvm.service.d/50_user.conf

Qubes-Whonix

Notes:

  • When using Qubes-Whonix, this must be done inside the Template.

sudoedit /usr/lib/systemd/system/mnt-shared-kvm.service.d/50_user.conf

  • After applying this change, shut down the Template.
  • All App Qubes based on the Template need to be restarted if they were already running.
  • This is a general procedure required for Qubes and is unspecific to Qubes-Whonix.

Others and Alternatives

Notes:

  • This is just an example. Other tools could achieve the same goal.
  • If this example does not work for you, or if you are not using Whonix, please refer to Open File with Root Rights.

sudoedit /usr/lib/systemd/system/mnt-shared-kvm.service.d/50_user.conf

4 Paste:

[Unit] ConditionKernelCommandLine=

5 Save.

6 Reboot.

7 Done.

The shared folder should now also be available with read-write access after booting into live mode.

Forum discussion: Shared folder blank running in live mode after updatearchive.org iconarchive.today icon

USB Passthrough

[edit]

Warning: Only connect USB devices to Whonix-Workstation when it is in a clean, trusted state! The only safe and recommended way to move files out of a VM is through Shared Folders.

Warning: This isolation method is not foolproof for sandboxing untrusted USB devices. A sophisticated attacker could tweak a BadUSB payload to crash the guest, causing the host to take control of the device and parse malicious code.

Libvirt supports passing through a computer's integrated webcam or other USB devices. [35] [36] Debian contributors have disabled USB auto-redirection by default to prevent accidental passthrough of trusted USB devices to untrusted guests. [37] [38] These changes must be temporarily reverted. Once finished, restore safe defaults by following the steps in reverse order.

Limitations: These steps apply to USB storage devices only. Portable devices such as phones and tablets are problematic and may not be successfully auto-redirected.

The USB drive will only remain isolated while Whonix-Workstation is running. Do not close the VM GUI window or the device will be reassigned to the host. The VM window must be in focus (either mouse grabbed or fullscreen mode is safest) when plugging in the device. The VM window may be minimized after the device is detected in the guest. It is unnecessary to wait for the VM to fully boot.

1. Edit the libvirt glib-2.0 schema.

sudo nano /usr/share/glib-2.0/schemas/10_virt-manager.gschema.override

2. Change the default contents.

[org.virt-manager.virt-manager.console]
auto-redirect=false

Should be changed to:

[org.virt-manager.virt-manager.console]

3. Recompile the schemas so changes take effect. [39]

sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

4. Close all instances of Libvirt/Virtual Machine Manager and restart them.

5. Adjust VM settings.

1. In the Details pane, change the Controller USB device model:

Hypervisor DefaultUSB 2

2. While Whonix-Workstation is turned off, add four USB Redirection devices (or as many as the host has USB ports).

Whonix-Workstation viewer windowViewDetailsAdd HardwareUSB Redirection

3. Start Whonix-Workstation and select the device to passthrough:

Whonix-Workstation viewer windowFileRedirect USBChoose: Webcam (or other USB Device)

Note: This step must be performed on demand, as passthrough is not permanent across reboots. This prevents accidental passthrough when the VM is in an untrusted state.

6. Boot Whonix-Workstation and connect the USB thumb drive.

7. Done.

The thumb drive should now be visible in the guest only.

Enable Microphone Input

[edit]

Microphone input to guests can be useful for VoIP and similar applications, but it also introduces risks. It is good practice to disable the microphone on the host system in sound settings whenever it is not in active use.

By default, the shipped configuration includes only a speaker (without a microphone) to prevent malware inside the VM from eavesdropping on the user.

To enable microphone input for specific guests, edit the VM configuration and change:

<codec type='output'/><codec type='micro'/>

Creating Multiple Internal Networks

[edit]

Open the Whonix network XML file and change the name attribute to something different from the internal network that is currently running.

For example: Whonix-Internal2, Whonix-Internal3, and so on.

The default network name in use is Whonix-Internal.

Alternative Configurations

[edit]

Libvirt supports a variety of containment mechanisms. Currently supported mechanisms include KVM on the x86_64 platform and QEMU, but more configurations may be added in the future.

If hardware virtualization extensions are available, it is recommended to always use KVM.

To use another configuration, import its XML file with virsh.

How to Leave KVM when no X11 is Running

[edit]

In the hypothetical situation where a user becomes "trapped" in a virtual console inside a VM without a graphical desktop environment (X Window System) (for example, after running sudo service lightdm stop), it is still possible to switch back to the host.

In other words, if the graphical desktop environment crashes or is terminated, the user may be left with a black VM window. It is possible to exit this state.

The emulated tablet device normally prevents the mouse from being captured by the guest, but if it happens, use the following key combination:

Press Ctrl_L+Alt_L

Todo: Re-test these instructions with Wayland.

Setting up gdb to work with qemu-kvm via libvirt

[edit]

To debug a Linux kernel running as a KVM guest, the -s parameter must be specified for the qemu-kvm command line. When using libvirt and virt-manager to manage virtual machines (instead of invoking KVM directly), this requires editing the VM’s XML configuration so that -s is passed to qemu-kvm.

1. Open the XML configuration.

sudo virsh edit $guestvm

Here, $guestvm is the name of the VM managed by virt-manager. This opens the XML configuration in your editor.

2. Edit the XML configuration.

Change the first line from:

<domain type='kvm'>

To:

<domain type='kvm' xmlns:qemu='https://libvirt.org/schemas/domain/qemu/1.0'>

Add the following under the <domain> level:

<qemu:commandline>
  <qemu:arg value='-s'/>
</qemu:commandline>

3. Save the XML configuration.

After saving and quitting the editor, the new configuration will take effect. When the VM is started, a local TCP port (1234 by default) will be available for remote debugging with gdb.

4. Connect to the local TCP port.

From gdb running on the host machine, use:

target remote localhost:1234

Source: [40]

Unsafe Features

[edit]

The features below have serious security implications and should not be used. This applies to all hypervisors in general.

LVM Storage

[edit]

QCOW2 virtual disk images are the recommended and default storage format for KVM. LVM or any other storage mechanism must be avoided for security and privacy. LVM misconfiguration has serious security consequences and exposes the host filesystem to the processes running on the guest. [41]

In the event a virtual disk is no longer used -- where the low-level view of the storage can be controlled -- data created by VMs can easily be recovered and exfiltrated by malicious forensics tools run in a VM at a later time. This is extremely dangerous and can expose all kinds of information originally created in a VM of higher trust level. This leads to deanonymization, past session linking and theft of sensitive information and keys. [42] This setting is disabled in cloud tenancy environments.

HugePages

[edit]

THP/Hugepages aid rowhammer attacks [43] and memory de-duplication attacks (see KSM below) and therefore must be disabled for the guest and on the host. Research suggests that Debian hosts do not enable this feature and it is also disabled in cloud tenancy environments.

Memory Ballooning

[edit]

Memory ballooning can potentially be abused by malicious guests to mount rowhammer attacks on the host. [44]

Clipboard Sharing

[edit]

Clipboard sharing allows you to copy and paste text between the host and a virtual machine (VM).

This documentation explains the status of clipboard sharing in Whonix and its derivatives such as Whonix.

Info Version-specific notice:

For Clipboard Sharing Security Considerations, please press Learn More on the right side.

You may wish to leave clipboard sharing disabled for the following reasons:

  • To prevent the accidental copying of a link to a website that was visited anonymously to the non-anonymous host browser (or vice versa).
  • To stop malware in Whonix Workstation from pilfering sensitive info from the clipboard.

Clipboard sharing is disabled in Whonix 18 and higher due to security concerns. If you wish to enable it:

1. Open the VM configuration file for editing.

2. Locate the following setting.

<clipboard copypaste='no'/>

3. Change it to:

<clipboard copypaste='yes'/>

4. Save the file and restart the VM.

5. In the VM, install the xclip and wl-clipboard packages:

sudo apt install xclip wl-clipboard

6. Done.

Note that clipboard sharing will not work transparently with most apps due to limitations imposed by Wayland. The clipboard will be synced with Xwayland transparently, but the Wayland compositor will not see this. Therefore, the clipboard must be manually synced between Xwayland and Wayland.

To transfer Xwayland's clipboard to Wayland (for transferring text from host to guest):

1. Open a terminal window in the guest.

2. Run:

DISPLAY=:0 xclip -o | wl-copy --type text/plain

3. Done.

To transfer Wayland's clipboard to Xwayland (for transferring text from guest to host):

1. Open a terminal window in the guest.

2. Run:

wl-paste | DISPLAY=:0 xclip -selection clipboard

3. Done.

KSM

[edit]

KSM is a memory de-deuplication feature that conserves memory by combining identical pages across VM RAM, but it is not enabled by default. Enabling this feature is dangerous because it allows cross-VM snooping by a malicious process. [45] It is capable of inferring what programs/pages are being visited outside the VM. [46] This feature is disabled in cloud tenancy environments and can also allow attackers to modify/steal APT keys and source lists of the host. [47]

File-system Dedupe

[edit]

Similar to KSM memory dedupe, filesystem dedupe introduces data leaks that violate hypervisor boundaries. The presence of certain files can be confirmed. These may develop into more advanced attacks on security in the future just like KSM related attacks have. ZFS and Btrfs have dedupe features but they are not enabled by default and should be avoided for high security environments. [48]

Device Passthrough

[edit]

Both USB and PCI device passthrough permit advanced attackers to flash the firmware of those devices and infect the host or other VMs. [49]

XML Settings

[edit]

For more information on settings, please refer to the Libvirt manualarchive.org iconarchive.today icon.

Troubleshooting

[edit]

Videos

[edit]

Enabling 3D Graphics Acceleration may not be required for watching videos (e.g. YouTube).

By adding vCPUs, a VM can play videos smoothly without 3D acceleration. [50]

Request operation not valid: blkio device weight is valid only for bfq or cfq scheduler

[edit]
Error starting domain: Request operation not valid: blkio device weight is valid only for bfq or cfq scheduler

As of March 2019, the blkio throttling feature appears missing/unsupported on some Linux distributions (e.g. Arch Linux, Ubuntu 20.04). This causes VM startup failures. [51]

Workaround: remove the feature from the VM config.

1. Edit the configuration file.

sudo virsh edit Whonix-Gateway

2. Remove the following setting.

 <blkiotune>
    <weight>250</weight>
 </blkiotune>

3. Save.

4. Repeat steps 1 to 3 for Whonix-Workstation.

5. Save and start the VMs.

6. Done.

  • The pvspinlock feature may also be unsupported; removing it resolved the issue in some cases.

Forum discussion: Issues starting VMs in KVM (blkio device weight error)archive.org iconarchive.today icon

cannot set CPU affinity on process 1994: invalid argument

[edit]

Example error:

libvirt.libvirtError: cannot set CPU affinity on process 1994: invalid argument

Or: [52]

Domain startup error: could not match processor to process 6962: Invalid argument

Longer log:

Traceback (most recent call last):
File “/usr/share/virt-manager/virtManager/asyncjob.py”, line 75, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File “/usr/share/virt-manager/virtManager/asyncjob.py”, line 111, in tmpcb
callback(*args, **kwargs)
File “/usr/share/virt-manager/virtManager/libvirtobject.py”, line 66, in newfn
ret = fn(self, *args, **kwargs)
File “/usr/share/virt-manager/virtManager/domain.py”, line 1400, in startup
self._backend.create()
File “/usr/lib/python3/dist-packages/libvirt.py”, line 1080, in create
if ret == -1: raise libvirtError (‘virDomainCreate() failed’, dom=self)
libvirt.libvirtError: cannot set CPU affinity on process 1994: invalid argument

This occurs because cpuset='1' is the default to reduce the risk of side-channel attacks on cryptographic operations. However, some older hardware is incompatible.

Solution:

1. Edit the VM settings.

2. Remove:

cpuset='1'

3. Save and restart the VM.

4. Done.

Arch Linux Users

[edit]

See: Request operation not valid: blkio device weight is valid only for bfq or cfq scheduler

Ubuntu Users Users

[edit]

See: Request operation not valid: blkio device weight is valid only for bfq or cfq scheduler

Reboot Checklist

[edit]
  • Did you reboot after installing KVM?
  • Did you reboot after adding your Linux user account to the required Linux user groups?

Include this info in support requests.

Unable to connect to libvirt

[edit]

Error:

Unable to connect to libvirt.

Verify that the 'libvirtd' daemon is running.

Libvirt URI is: qemu:///system

Make sure you added the groups and rebooted.

Unable to open a connection to the libvirt management daemon

[edit]

Error:

Unable to open a connection to the libvirt management daemon.

Libvirt URI is: qemu:///system

Verify that:
- The 'libvirtd' daemon has been started

Check services:

sudo service qemu-system-x86 restart ; echo $? sudo service libvirt-bin restart ; echo $? sudo service libvirt-guests restart ; echo $?

Expected output:

0
[ ok ] Restarting libvirt management daemon: /usr/sbin/libvirtd.
0

Running guests on default URI: no running guests.
0

If this does not help, it may be a permissions problem.

hda-duplex not supported in this QEMU binary

[edit]
  • Potential cause: User is in libvirt group but not kvm.
  • Alternative potential fix: Change the sound model.

From:

<sound model='ich6'>

To:

<sound model='ac97'>

process exited while connecting to monitor: ioctl(KVM_CREATE_VM) failed

[edit]

Error:

Error starting domain: internal error: process exited while connecting to monitor: ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy
failed to initialize KVM: Device or resource busy

Cause: Another hypervisor (e.g. VirtualBox) is running. Two hypervisors cannot run concurrently.

error: unsupported configuration: spice graphics are not supported with this QEMU

[edit]

See: https://forums.whonix.org/t/error-s-when-importing-vm-templates-kvm/19464archive.org iconarchive.today icon

Fix:

sudo apt install qemu-system

Permissions Check

[edit]

ls -la /var/run/libvirt/libvirt-sock

VT-x / SVM Errors

[edit]

Example error messages:

  • invalid argument: could not find capabilities for domaintype=kvm
  • invalid argument: could not get preferred machine for /usr/bin/qemu-system-x86_64 type=kvm

These errors occur when the host's hardware virtualization extensions are not available for KVM. Possible reasons include:

  • A) Another hypervisor is running on the system.
  • B) An anti-virus suite is blocking virtualization.
  • C) Virtualization support is not present or not enabled in the machine BIOS.

Solution:

1. Enter the BIOS/UEFI setup menu of your machine. For general guidance, see: How to Change BIOS Settingsarchive.org iconarchive.today icon.

2. Enable hardware virtualization. This may be listed under different names depending on your system:

  • VT-x
  • AMD-V
  • Virtualization
  • SVM mode
  • MIT (sometimes under Advanced Core settings)

3. Save changes.

4. Reboot.

5. Done.

Potential workaround if hardware virtualization is unavailable: QEMU

VT-x vs VT-d

[edit]

Add Version Numbers to Support Request

[edit]

If you encounter problems, always include the versions of the key virtualization packages in your support request. On Debian-based systems, you can check the versions of **libvirt-bin**, **qemu-kvm**, and **virt-manager** with:

dpkg-query --show --showformat='${Package} ${Version} \n' libvirt-bin qemu-kvm virt-manager

Check Groups

[edit]

Run the following commands to verify your user and group memberships.

whoami

The output should be your Linux account user name (for example, user). It should not be root.

groups

The output should include both the libvirt and kvm groups. [53]

If these groups are missing, ensure you have added groups and then rebooted the system.

Sound

[edit]

No audio inside VM? Try unmuting and increasing the volume.

https://forums.whonix.org/t/no-audio-in-whonix-kvm/17642archive.org iconarchive.today icon

Testing with a Debian VM

[edit]

Before diving into issues related to Whonix, it's a good idea to first ensure that the underlying platform and software are functioning correctly.

  1. Start by testing the KVM host software as if you've never encountered Whonix. This will give you a baseline.
  2. As a next step, try using a VM that isn't based on Whonix. A good candidate would be Debian bookworm.
  3. If you continue to face issues with the Debian VM, it indicates that the problem isn't specific to Whonix. Such issues that are unspecific to Whonix should be tackled according to these guidelines:

Support

[edit]

Whonix KVM maintainer availability is mostly limited to the User Help Forum.

Questions on Telegram, Matrix, IRC, Reddit, or similar platforms will most likely not receive attention from the Whonix KVM maintainer.

See also Support.

User Help Forum

[edit]

Whonix KVM User Help Forumarchive.org iconarchive.today icon

Alternative Guides

[edit]

For alternative installation guides contributed by community members, see: Minimalized Installation.

Known Issues

[edit]

Host VPNs

[edit]

Potential solution: → #Development Help Wanted

Intel 3rd/4th Gen CPUs

[edit]

Performance is markedly degraded on 3rd and 4th generation Intel CPUs, as reported by a user on the forums and confirmed. Therefore, these should be avoided. [54]

Development

[edit]

Development Help Wanted

[edit]

Footnotes

[edit]

  1. re-creation
  2. There are also Download other platforms.
  3. What is "security through obscurity"archive.org icon:

    The basis of STO has always been to run your system on a "need to know" basis. If a person doesn't know how to do something which could impact system security, then s/he isn't dangerous. ... Nowadays there is also a greater need for the ordinary user to know details of how your system works than ever before, and STO falls down as a result. Many users today have advanced knowledge of how their operating system works, and because of their experience will be able to guess at the bits of knowledge that they didn't "need to know". This bypasses the whole basis of STO, and makes your security useless.

  4. https://forums.virtualbox.org/viewtopic.php?f=7&t=89395archive.org iconarchive.today icon
  5. Kicksecure logo Rationale for Change from Default Password changeme to Empty Default PasswordOnion network Logo
  6. Otherwise the sudo password is required every time virtual-manager is started.
  7. By default, Debian does not use sudo, so groups can be added using usermod. If your user is foo, the following commands will work. usermod -a -G libvirt foo And: usermod -a -G kvm foo
  8. https://forums.whonix.org/t/kvm-networking-broken/644archive.org iconarchive.today icon
  9. https://wiki.debian.org/KVM#Troubleshootingarchive.org iconarchive.today icon
  10. Manually converting images from .ova to .qcow2 is no longer recommended, since .qcow images can be downloaded from the Whonix project.
  11. As per build-steps.d/4400_convert-raw-to-qcow2archive.org iconarchive.today icon , these are "-o cluster_size=2M" and "-o preallocation=metadata".
  12. Because the same performance optimizations are present.
  13. https://forums.whonix.org/t/tar-child-xz-cannot-exec-no-such-file-or-directory-install-xz-utils-package/16708/7archive.org iconarchive.today icon
  14. https://forums.whonix.org/t/cant-use-var-lib-libvirt-images-for-whonix-images-what-to-do-about-apparmor/7192/3archive.org iconarchive.today icon
  15. https://forums.whonix.org/t/no-auto-resize-with-qxl-driver/7145/3archive.org iconarchive.today icon
  16. The command line can also be used to ensure the VM has been shut down.
  17. https://dustymabe.com/2012/04/21/send-magic-sysrq-to-a-kvm-guest-using-virsh/archive.org iconarchive.today icon
  18. https://forums.whonix.org/t/safer-dhcp-implementation-resolved/7499/7archive.org iconarchive.today icon
  19. https://wiki.libvirt.org/page/Libvirtd_and_dnsmasqarchive.org iconarchive.today icon:

    On Linux host servers, libvirtd uses dnsmasq to service the virtual networks, such as the default network. A new instance of dnsmasq is started for each virtual network, only accessible to guests in that specific network.

  20. Dnsmasq is visible to an nmap scan from the Workstation but little else. Manual test: a DNS request was sent with the following result:
        dig microsoft.com @10.152.152.0
    
        ; <<>> DiG 9.11.5-P4-3-Debian <<>> microsoft.com @10.152.152.0
        ;; global options: +cmd
        ;; connection timed out; no servers could be reached
    
  21. https://fabianlee.org/2018/10/22/kvm-using-dnsmasq-for-libvirt-dns-resolution/archive.org iconarchive.today icon
  22. https://www.cyberciti.biz/faq/linux-kvm-libvirt-dnsmasq-dhcp-static-ip-address-configuration-for-guest-os/archive.org iconarchive.today icon
  23. https://unix.stackexchange.com/questions/256061/is-libvirt-dnsmasq-exposed-to-the-network-if-i-run-fedora-without-a-firewallarchive.org iconarchive.today icon:

    So I can see an open TCP port. However it responds as if it’s “tcpwrapped”. That implies if you connect over a different interface from virbr0, dnsmasq closes the connection without reading any data. So data you send to it doesn’t matter; it can’t e.g. exploit a classic buffer overflow.

  24. https://serverfault.com/questions/840163/custom-dnsmasq-or-custom-options-with-libvrtarchive.org iconarchive.today icon
  25. https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm/648871#648871archive.org iconarchive.today icon
  26. https://wiki.debian.org/Mesa#A3D_accelerationarchive.org iconarchive.today icon
  27. This is due to a bug in /usr/libexec/vm-config-dist/mount-sharedarchive.org iconarchive.today icon that has been fixed in all repositories.
  28. If you do not wish to write to the folder from within the VM, you are free to enable this setting.
  29. This is hardcoded in /usr/libexec/vm-config-dist/mount-sharedarchive.org iconarchive.today icon.
  30. https://nts.strzibny.name/how-to-set-up-shared-folders-in-virt-manager/archive.org iconarchive.today icon
  31. https://unix.stackexchange.com/questions/60799/selinux-interfering-with-host-guest-file-sharing-using-kvmarchive.org iconarchive.today icon
  32. grub-live:
    • /usr/lib/systemd/system/mnt-shared-vbox.service.d/30_grub-live.conf
    • /usr/lib/systemd/system/mnt-shared-kvm.service.d/30_grub-live.conf
  33. Because these systems do not use the mnt-shared-kvm.service systemd unit by Whonix.
  34. https://bugzilla.redhat.com/show_bug.cgi?id=1135488archive.org iconarchive.today icon
  35. https://askubuntu.com/questions/564708/qemu-kvm-virt-manager-passthrough-of-usb-webcam-to-windows-7-enterprise-createsarchive.org iconarchive.today icon
  36. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765016archive.org iconarchive.today icon
  37. https://salsa.debian.org/libvirt-team/virt-manager/-/commit/d81fd3c3af1abde1fa0e2bf3b79643f36836f45barchive.org iconarchive.today icon
  38. https://docs.gtk.org/gio/archive.org iconarchive.today icon
  39. https://gymnasmata.wordpress.com/2010/12/02/setting-up-gdb-to-work-with-qemu-kvm-via-libvirt/archive.org iconarchive.today icon
  40. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-adding_storage_devices_to_guests-adding_hard_drives_and_other_block_devices_to_a_guestarchive.org iconarchive.today icon
  41. https://arxiv.org/pdf/1507.06955v1.pdfarchive.org iconarchive.today icon
  42. h ttps://www.whonix.org/pipermail/whonix-devel/2016-September/000746.html
  43. Dedup Est Machina: Memory Deduplication as an Advanced Exploitation Vectorarchive.org iconarchive.today icon
  44. https://web.archive.org/web/20130210040731/https://staff.aist.go.jp/c.artho/papers/EuroSec2011-suzaki.pdfarchive.org icon
  45. https://mjg59.dreamwidth.org/55638.htmlarchive.org iconarchive.today icon
  46. https://docs.openstack.org/security-guide/compute/hardening-the-virtualization-layers.html#physical-hardware-pci-passthrougharchive.org iconarchive.today icon
  47. https://forums.whonix.org/t/desktop-renders-slowly-despite-high-resource-spec/19727/18archive.org iconarchive.today icon
  48. https://forums.whonix.org/t/problem-starting-whonix-14-after-upgrade-unable-to-write-to-sys-fs-cgroup-blkio-machine-slice-machine-qemu/6999/5archive.org iconarchive.today icon
  49. https://forums.whonix.org/t/i-cannot-start-the-workstation-in-kvm/21868archive.org iconarchive.today icon
  50. If you used su or sudo su (i.e. switched to the root account) before running: sudo adduser "$(whoami)" libvirt sudo adduser "$(whoami)" kvm then it will fail because $(whoami) will expand to root, not your regular account name. This means the required groups will not be added to your user account.
  51. https://forums.whonix.org/t/poor-performance/13385/6archive.org iconarchive.today icon
Notification image

We believe security software like Whonix needs to remain open source and independent. Would you help sustain and grow the project? Learn more about our 13 year success story and maybe DONATE!