Whonix live mode



Certainly not impossible, but would at least require an initramfs hook. However, I’d stick to what it is in there by default. Every other script in there also uses those programs.


You could maybe use a fallback option for systemd-detect-virt in case it does not detect a hypervisor to automatically assume bare metal.

Ok. But how would you figure out the root disk? Read it from kernel options?

Or you get rid of it at all

How? Read it from kernel options? Why do we have to detect it by detecting the virtualizer anyhow? How would the system figure it out by itself later on? Can we use the same mechanism?

You could always parse the underlying stuff directly from /proc or /sys which more or less each virtualization detection tool does and virt-what even suggests in the man page.


More recent versions of the kernel can see very early in the boot process if the disk is write protected which could maye also be used instead. It is under /sys/block/vda/ro or similar path depending on the disk driver.

I like that much more than mounting and parsing /proc/mounts. Seems the much more appropriate way than custom parsing code.

I can try to contact upstream,

Yes, please! I am curious what they say. They might have some good comments.



I think the system uses whatever it sees defined as “root=” on the kernel commandline. If you make sure that the first disk is always the root disk with Whonix on it that you want to boot then this should also work. A non standard disk setup is probably an edge case. I’m going to test it in combination with /sys/block/*da/ro.


New script with check by the kernel if the disk is ro or rw. Works on KVM and VirtualBox.


set -e

case "${1}" in
                exit 0

output() {
   echo "live boot test: $@"

ro_test() {
   output "Testing for live boot."
   root_uuid=$(echo $ROOT | sed 's/.*=//')
   root_disk=$(blkid -U $root_uuid | sed 's/1//' | sed 's#/dev/##')
   ro_check=$(cat /sys/block/$root_disk/ro)

   if [ "$ro_check" = "0" ]; then
      output "Read-write disk detected. Assuming persistent mode."
   elif [ "$ro_check" = "1" ]; then
      output "Read-only disk detected. Assuming live mode."
      output "Write mode detection failed."

live_boot() {
   echo "root_uuid=$root_uuid" >> /scripts/local
   echo "BOOT=live" >> /scripts/local
   echo 'LIVE_BOOT_CMDLINE="root=/dev/disk/by-uuid/$root_uuid boot=live ip=frommedia plainroot union=overlay"' >> /scripts/local
   exit 0

true "Setting fallback read_write=error."


if [ "$read_write" = "error" ]; then
   output "Contents of /sys/block/<disk>/ro:"
   cat /sys/block/$root_disk/ro
   ## TODO: Should we exit 0 here or is non-zero more appropriate?
   exit 0

if [ "$read_write" = "false" ]; then

output "Proceeding persistent boot."

exit 0


Looks much better! (Although still untested by me but I trust you test and this will work. I would upload package containing this and then let users install it since the code is easily reviewed to be non-malicious so this can be opened up for wide testing.)

Remaining nitpicks:

  • set -x’ if some debug (grub) kernel boot parameter is set
  • when if [ "$read_write" = "error" ]; then matches we should still output output "Proceeding persistent boot."?
  • in live_boot before the exit 0 please add output "Proceeding live boot."?
  • Please use shellcheck. It has some false positives but adding the double quotes for the variables should be applied.




Uploaded to all stretch repositories.


persistent / love mode indicator systray - graphical indication on the desktop that system is running in live mode vs persistent mode


i am looking forward to playing with grub live mode. this may allow me to remove all the “immutible” configuration steps from the guide i work on. excellent work everyone.


Regarding https://github.com/Whonix/anon-meta-packages/pull/7
Meta package whonix-gateway-rpi… Nice. Why reference a lot of these packages individually such as console-setup? Can’t that be mostly meta packages for the most part?

I guess sdwdate-gui should not be a dependency of anon-shared-packages-dependencies. That can be considered a bug. Let’s move it to anon-shared-packages-recommended? Does that help?

I mean, if we have bugs there, I much rather do the short-term more effort proper bug fix way.

Whonix for arm64 / Raspberry Pi ( RPi )

https://www.whonix.org/wiki/Whonix_Live is too confusing. First users can pick:

Then for VirtualBox users can pick:

ro-mode-init method must be combined with read-only Method, otherwise:

it will always boot into persistent mode.

Too many combinations. Not all combinations are safe. Murphy’s law dictates that something will go wrong.

I guess the user only knows what platform they are using VirtualBox vs KVM and then likes to see one coherent block of instructions that has a safe result.

Maybe I am just confused by “For this option the VM disk needs to be set to read-only, otherwise it will always boot into persistent mode.” because you mean both read-only Method and Immutable Disk Method satisfy “needs to be set to read-only”?

Long Wiki Edits Thread

Imho, the recommended way would be to use read-only disks combined with ro-mode-init. This would be most secure and would set up live mode automatically. The problem is when a user forgets to set the disks to read only, in this case it would automatically boot into persistent mode. The other options, however, also require some kind of user interaction.



https://www.whonix.org/wiki/Whonix_Live made great progress! However, it shouldn’t list alternative methods actual steps. In my experience this mostly confuses users.

Also Follow the procedures above depending on your hypervisor is hard to follow for users including myself. Usability is about reducing complexity and mental workload. “Consciousness is a low RAM environment.”

Therefore split now:

That allowed to replace the mouthful

Recommended VirtualBox Configuration with a more standarized, easier VirtualBox.

Could you please make the following instructions standalone, i.e. not having these require to apply steps from * https://www.whonix.org/wiki/Whonix_Live?

Perhaps by putting the shared bits of instructions into wiki templates?

Added advantage, if we had wiki templates we could even add this to https://www.whonix.org/wiki/VirtualBox and/or https://www.whonix.org/wiki/KVM or so.

I consider all of above details. After my today’s edits https://www.whonix.org/wiki/Whonix_Live is now ready for wider publication since instruction are non-ambiguous, straight forward.

Long Wiki Edits Thread

Thanks, also to the other editors like @torjunkie and @0brand. It is always a difference when someone else who did not already test the setup dozens of times and where everything seems to be logic and straightforward, takes a look. I’m going to add the respective instructions to the two other wiki pages. Where can I read more about wiki templates?


A post was split to a new topic: How to use Wiki Templates?



Should this change https://www.whonix.org/w/index.php?title=Whonix_Live&oldid=39364&diff=cur be approved?


Minor fix. Also has to be changed for https://www.whonix.org/wiki/Whonix_Live/ro-mode-init but I only see it once in the editor? Template?
Also " The procedure of installing … now complete." --> " The procedure of installing … is now complete."


I suppose

VBoxManage setextradata vmname “VBoxInternal/Devices/lsilogicsas/0/LUN#0/AttachedDriver/Config/Readonly” 1

Is correct.


Not required.

(Otherwise please make the edit.)

I was also wondering about…

VBoxManage setextradata vmname “VBoxInternal/Devices/lsilogicsas/0/LUN#0/AttachedDriver/Config/Readonly”

Would it work adding a 0 at the end? Like…

VBoxManage setextradata vmname “VBoxInternal/Devices/lsilogicsas/0/LUN#0/AttachedDriver/Config/Readonly” 0

That would look a bit more consistent in the wiki.

At the bottom of that page you can see Templates used on this page:.

In this case:



No ReadOnly is the correct syntax. Using the other version won’t set the image to ro and virtualbox will complain and not boot.

When I first tested the stuff I also used “0” because it seemed to be logical, however, it also does not work. Using “nothing” is the correct syntax and works as expected.