diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fb3c2a96b..ede0d1236 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,9 +1,8 @@
-Contributing to `qubes-doc`
-===========================
+# Contributing to `qubes-doc`
Thank you for your interest in contributing to `qubes-doc`, the Qubes OS
Project's dedicated documentation repository! Please take a moment to read our
-[Documentation Guidelines](https://www.qubes-os.org/doc/doc-guidelines/) before you begin writing. These guidelines are
-important to maintaining high quality documentation, and following them will
-increase the likelihood that your contribution will be accepted.
-
+[Documentation Guidelines](https://www.qubes-os.org/doc/doc-guidelines/) before
+you begin writing. These guidelines are important to maintaining high quality
+documentation, and following them will increase the likelihood that your
+contribution will be accepted.
diff --git a/README.md b/README.md
index 48fcaba8e..c31a58ee0 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,11 @@
-Qubes OS Documentation
-======================
+# Qubes OS Documentation
Canonical URL: https://www.qubes-os.org/doc/
-All [Qubes OS Project](https://github.com/QubesOS) documentation pages are stored as plain text
-files in this dedicated repository. By cloning and regularly pulling from
-this repo, users can maintain their own up-to-date offline copy of all
-Qubes documentation rather than relying solely on the Web.
+All [Qubes OS Project](https://github.com/QubesOS) documentation pages are
+stored as plain text files in this dedicated repository. By cloning and
+regularly pulling from this repo, users can maintain their own up-to-date
+offline copy of all Qubes documentation rather than relying solely on the Web.
For more information about the documentation, including how to contribute,
please see the [Documentation Guidelines](https://www.qubes-os.org/doc/doc-guidelines/).
-
diff --git a/developer/building/development-workflow.md b/developer/building/development-workflow.md
index 53646679f..ecfc20304 100644
--- a/developer/building/development-workflow.md
+++ b/developer/building/development-workflow.md
@@ -10,7 +10,6 @@ ref: 66
title: Development Workflow
---
-
A workflow for developing Qubes OS+
First things first, setup [QubesBuilder](/doc/qubes-builder/). This guide
@@ -537,4 +536,3 @@ Usage: add this line to `/etc/apt/sources.list` on test machine (adjust host and
~~~
deb http://local-test.lan/linux-deb/r3.1 jessie-unstable main
~~~
-
diff --git a/developer/building/qubes-builder-details.md b/developer/building/qubes-builder-details.md
index d6fdb259a..8b5c8c8a8 100644
--- a/developer/building/qubes-builder-details.md
+++ b/developer/building/qubes-builder-details.md
@@ -10,7 +10,6 @@ ref: 65
title: Qubes Builder Details
---
-
Components Makefile.builder file
--------------------------------
diff --git a/developer/building/qubes-iso-building.md b/developer/building/qubes-iso-building.md
index 0455e6e6d..f30b7b26f 100644
--- a/developer/building/qubes-iso-building.md
+++ b/developer/building/qubes-iso-building.md
@@ -12,7 +12,6 @@ ref: 63
title: Qubes ISO Building
---
-
Build Environment
-----------------
diff --git a/developer/building/qubes-template-configs.md b/developer/building/qubes-template-configs.md
index 7c97b775f..446fa39fb 100644
--- a/developer/building/qubes-template-configs.md
+++ b/developer/building/qubes-template-configs.md
@@ -3,5 +3,6 @@ lang: en
layout: doc
permalink: /doc/qubes-template-configs/
redirect_to: https://github.com/QubesOS/qubes-template-configs
+ref: 248
title: Qubes Template Configs
---
diff --git a/developer/code/code-signing.md b/developer/code/code-signing.md
index 09492c2b9..236c6aac4 100644
--- a/developer/code/code-signing.md
+++ b/developer/code/code-signing.md
@@ -6,7 +6,6 @@ ref: 51
title: Code Signing
---
-
All contributions to the Qubes OS [source code](/doc/source-code/) must be cryptographically signed by the author's PGP key.
## Generating a Key
@@ -202,4 +201,3 @@ Please upload it.
If you're submitting a patch by emailing the [developer mailing list](/support/#qubes-devel), simply sign your email with your PGP key.
One good way to do this is with a program like [Enigmail](https://www.enigmail.net/).
Enigmail is a security addon for the Mozilla Thunderbird email client that allows you to easily digitally encrypt and sign your emails.
-
diff --git a/developer/code/coding-style.md b/developer/code/coding-style.md
index ac7fdf23b..4f2013c59 100644
--- a/developer/code/coding-style.md
+++ b/developer/code/coding-style.md
@@ -11,7 +11,6 @@ ref: 53
title: Coding Style
---
-
Rationale
---------
diff --git a/developer/code/license.md b/developer/code/license.md
index 91325bf42..95d71c233 100644
--- a/developer/code/license.md
+++ b/developer/code/license.md
@@ -10,7 +10,14 @@ ref: 52
title: Software License
---
+Qubes OS is a compilation of software packages, each under its own license. The
+compilation is made available under the GNU General Public License version 2
+(GPLv2).
-Qubes is a compilation of software packages, each under its own license. The compilation is made available under the GNU General Public License version 2.
+The source code of Qubes OS is contained in repositories under the
+[@QubesOS](https://github.com/QubesOS) account on GitHub. This source code is
+made available under GPLv2, unless there is a `LICENSE` file in the root of the
+containing repository that specifies a different license.
-The full text of the GPL v2 license can be found [here](https://www.gnu.org/licenses/gpl-2.0.html).
+The full text of the GPLv2 license can be found
+[here](https://www.gnu.org/licenses/gpl-2.0.html).
diff --git a/developer/code/source-code.md b/developer/code/source-code.md
index 05ee47d07..7098ace7f 100644
--- a/developer/code/source-code.md
+++ b/developer/code/source-code.md
@@ -10,7 +10,6 @@ ref: 54
title: Source Code
---
-
All the Qubes code is kept in Git repositories. We have divided the project into
several components, each of which has its own separate repository, for example:
@@ -81,4 +80,3 @@ method you choose, you must [sign your code](/doc/code-signing/) before it can b
name and email, so that *your* name will be used as a commit's author.
5. Send your patch to `qubes-devel`. Start the message subject with
`[PATCH]`.
-
diff --git a/developer/debugging/automated-tests.md b/developer/debugging/automated-tests.md
index ab69aa623..e4a7e6747 100644
--- a/developer/debugging/automated-tests.md
+++ b/developer/debugging/automated-tests.md
@@ -9,7 +9,6 @@ ref: 45
title: Automated Tests
---
-
## Unit and Integration Tests
Starting with Qubes R3 we use [python unittest](https://docs.python.org/3/library/unittest.html) to perform automatic tests of Qubes OS.
@@ -114,7 +113,7 @@ vm_qrexec_gui/TC_20_DispVM_fedora-21/test_030_edit_file
Example test run:
-
+
Tests are also compatible with nose2 test runner, so you can use this instead:
@@ -260,4 +259,3 @@ In practice, however, either Xen or QEMU crashes when this is attempted.
Nonetheless, PV works well, which is sufficient for automated installation testing.
Thanks to an anonymous donor, our openQA system is hosted in a datacenter on hardware that meets these requirements.
-
diff --git a/developer/debugging/mount-lvm-image.md b/developer/debugging/mount-lvm-image.md
index 745975780..d484b5a73 100644
--- a/developer/debugging/mount-lvm-image.md
+++ b/developer/debugging/mount-lvm-image.md
@@ -6,7 +6,6 @@ ref: 46
title: How to Mount LVM Images
---
-
You want to read your LVM image (e.g., there is a problem where you can't start any VMs except dom0).
1: make the image available for qubesdb.
@@ -53,4 +52,3 @@ From the GUI, or from the command line:
# References
Please consult this issue's [comment](https://github.com/QubesOS/qubes-issues/issues/4687#issuecomment-451626625).
-
diff --git a/developer/debugging/profiling.md b/developer/debugging/profiling.md
index 0724f4b99..230351de7 100644
--- a/developer/debugging/profiling.md
+++ b/developer/debugging/profiling.md
@@ -10,7 +10,6 @@ ref: 48
title: Python Profiling
---
-
This is a python profiling primer.
For the purpose of this document, `qubes-dev` is name of the domain used for postprocessing profiling stats.
@@ -94,6 +93,6 @@ make REMOTE=example.com:public_html/qubes/profiling/ upload
This example is from `qubes-manager` (`qubesmanager/main.py`).
-
+
It is apparent that the problem is around `get_disk_usage`, which calls something via `subprocess.call`. It does this 15 times, probably once per VM.
diff --git a/developer/debugging/safe-remote-ttys.md b/developer/debugging/safe-remote-ttys.md
index 89286b7f5..bd71d96c4 100644
--- a/developer/debugging/safe-remote-ttys.md
+++ b/developer/debugging/safe-remote-ttys.md
@@ -8,7 +8,6 @@ ref: 49
title: Safe Remote Dom0 Terminals
---
-
If you do not have working graphics in Dom0, then using a terminal can be quite annoying!
This was the case for the author while trying to debug PCI-passthrough of a machine's primary (only) GPU.
diff --git a/developer/debugging/test-bench.md b/developer/debugging/test-bench.md
index bc21ea3fd..5ec3fee57 100644
--- a/developer/debugging/test-bench.md
+++ b/developer/debugging/test-bench.md
@@ -10,62 +10,75 @@ ref: 44
title: How to Set Up a Test Bench
---
-
This guide shows how to set up simple test bench that automatically test your code you're about to push. It is written especially for `core3` branch of `core-admin.git` repo, but some ideas are universal.
We will set up a spare machine (bare metal, not a virtual) that will be hosting our experimental Dom0. We will communicate with it via Ethernet and SSH. This tutorial assumes you are familiar with [QubesBuilder](/doc/qubes-builder/) and you have it set up and running flawlessly.
-## Setting up the machine
+> **Notice:**
+> This setup intentionally weakens some security properties in the testing system. So make sure you understand the risks and use exclusively for testing.
-First, do a clean install from ISO you built or grabbed elsewhere.
+## Setting up the Machine
-You have to fix network, because it is intentionally broken. This script should reenable your network card without depending on anything else.
+### Install ISO
+First, do a clean install from the `.iso` [you built](/doc/qubes-iso-building/) or grabbed elsewhere (for example [here](https://qubes-os.discourse.group/t/qubesos-4-1-alpha-signed-weekly-builds/3601))
-```bash
-#!/bin/sh
+### Enabling Network Access in Dom0
-# adjust this for your NIC (run lspci)
-BDF=0000:02:00.0
-
-prog=$(basename $0)
-
-pciunbind() {
- local path
- path=/sys/bus/pci/devices/${1}/driver/unbind
- if ! [ -w ${path} ]; then
- echo "${prog}: Device ${1} not bound"
- return 1
- fi
- echo -n ${1} >${path}
-}
-
-pcibind() {
- local path
- path=/sys/bus/pci/drivers/${2}/bind
- if ! [ -w ${path} ]; then
- echo "${prog}: Driver ${2} not found"
- return 1
- fi
- echo ${1} >${path}
-}
-
-pciunbind ${BDF}
-pcibind ${BDF} e1000e
-
-dhclient
-```
+Internet access is intentionally disabled by default in dom0. But to ease the deployment process we will give it access. The following steps should be done in `dom0`.
-TODO: describe how to run this at every startup
+> **Note:** the following assume you have only one network card. If you have two, pick one and leave the other attached to `sys-net`.
-Now configure your DHCP server so your testbench gets static IP and connect your machine to your local network. You should ensure that your testbench can reach the Internet.
+1. Remove the network card (PCI device) from `sys-net`
+2. Restart your computer (for the removal to take effect)
+3. The following script should enable your network card in dom0. *Be sure to adjust the script's variables to suit your needs.* You'll need to run this at every startup (TODO: describe how to run this at every startup).
-Install `openssh-server` on your testbench:
+ ```bash
+ #!/bin/sh
-~~~
-yum install openssh-server
-~~~
+ # adjust this for your NIC (run lspci)
+ BDF=0000:02:00.0
+
+ # adjust this for your network driver
+ DRIVER=e1000e
-Ensure that sudo works without password from your user account (it should by default).
+ prog=$(basename $0)
+
+ pciunbind() {
+ local path
+ path=/sys/bus/pci/devices/${1}/driver/unbind
+ if ! [ -w ${path} ]; then
+ echo "${prog}: Device ${1} not bound"
+ return 1
+ fi
+ echo -n ${1} >${path}
+ }
+
+ pcibind() {
+ local path
+ path=/sys/bus/pci/drivers/${2}/bind
+ if ! [ -w ${path} ]; then
+ echo "${prog}: Driver ${2} not found"
+ return 1
+ fi
+ echo ${1} >${path}
+ }
+
+ pciunbind ${BDF}
+ pcibind ${BDF} ${DRIVER}
+
+ sleep 1
+ dhclient
+ ```
+
+4. Configure your DHCP server so your testbench gets static IP and connect your machine to your local network. You should ensure that your testbench can reach the Internet.
+
+5. Install `openssh-server` on your testbench.
+
+ ~~~
+ sudo dnf --setopt=reposdir=/etc/yum.repos.d install openssh-server
+ ~~~
+
+> **Note:** If you want to install additional software in dom0 and your only network card was assigned to dom0, then _instead_ of the usual `sudo qubes-dom0-update ` now you run `sudo dnf --setopt=reposdir=/etc/yum.repos.d install `.
## Development VM
@@ -87,7 +100,9 @@ Host testbench
HostName 192.168.123.45
~~~
-Then connect to your testbench and paste newly generated `id_ecdsa.pub` to `.ssh/authorized_keys` on testbench so you can log in without entering password every time.
+#### Passwordless SSH Login
+
+To log to your testbench without entering password every time, copy your newly generated public key (`id_ecdsa.pub`) to `~/.ssh/authorized_keys` on your testbench. You can do this easily by running this command on `qubes-dev`: `ssh-copy-id -i ~/.ssh/id_ecdsa.pub user@192.168.123.45` (substituting with the actual username address of your testbench).
### Scripting
@@ -116,7 +131,7 @@ fi
set -e
ssh testbench mkdir -p "${TMPDIR}"
-scp "${@}" testbench:"${TMPDIR}"
+scp "${@}" testbench:"${TMPDIR}" || echo "check if you have 'scp' installed on your testbench"
while [ $# -gt 0 ]; do
ssh testbench sudo rpm -i --replacepkgs --replacefiles "${TMPDIR}/$(basename ${1})"
diff --git a/developer/debugging/vm-interface.md b/developer/debugging/vm-interface.md
index 5d7e64921..741e52c78 100644
--- a/developer/debugging/vm-interface.md
+++ b/developer/debugging/vm-interface.md
@@ -11,7 +11,6 @@ ref: 47
title: VM Configuration Interface
---
-
Qubes VM have some settings set by dom0 based on VM settings. There are multiple configuration channels, which includes:
- QubesDB
diff --git a/developer/debugging/windows-debugging.md b/developer/debugging/windows-debugging.md
index 8ab71f110..cc81c2c44 100644
--- a/developer/debugging/windows-debugging.md
+++ b/developer/debugging/windows-debugging.md
@@ -10,7 +10,6 @@ ref: 50
title: Windows Debugging
---
-
Debugging Windows code can be tricky in a virtualized environment. The guide below assumes Xen hypervisor and Windows 7 VMs.
User-mode debugging is usually straightforward if it can be done on one machine. Just duplicate your normal debugging environment in the VM.
diff --git a/developer/general/doc-guidelines.md b/developer/general/doc-guidelines.md
index abadd2b6e..628a7b99f 100644
--- a/developer/general/doc-guidelines.md
+++ b/developer/general/doc-guidelines.md
@@ -10,190 +10,283 @@ ref: 30
title: Documentation Guidelines
---
+All Qubes OS documentation pages are stored as plain text files in the
+dedicated [qubes-doc](https://github.com/QubesOS/qubes-doc) repository. By
+cloning and regularly pulling from this repo, users can maintain their own
+up-to-date offline copy of all Qubes documentation rather than relying solely
+on the web.
-All Qubes OS documentation pages are stored as plain text files in the dedicated [qubes-doc](https://github.com/QubesOS/qubes-doc) repository.
-By cloning and regularly pulling from this repo, users can maintain their own up-to-date offline copy of all Qubes documentation rather than relying solely on the web.
-
-The documentation is a community effort. Volunteers work hard trying to keep everything accurate and comprehensive.
-If you notice a problem or some way it can be improved, please [edit the documentation](#how-to-contribute)!
+The documentation is a community effort. Volunteers work hard trying to keep
+everything accurate and comprehensive. If you notice a problem or some way it
+can be improved, please [edit the documentation](#how-to-contribute)!
## Security
*Also see: [Should I trust this website?](/faq/#should-i-trust-this-website)*
-All pull requests (PRs) against [qubes-doc](https://github.com/QubesOS/qubes-doc) must pass review prior to be merged, except in the case of [external documentation](/doc/#external-documentation) (see [#4693](https://github.com/QubesOS/qubes-issues/issues/4693)).
-This process is designed to ensure that contributed text is accurate and non-malicious.
-This process is a best effort that should provide a reasonable degree of assurance, but it is not foolproof.
-For example, all text characters are checked for ANSI escape sequences.
-However, binaries, such as images, are simply checked to ensure they appear or function the way they should when the website is rendered.
-They are not further analyzed in an attempt to determine whether they are malicious.
-
-Once a pull request passes review, the reviewer should add a signed comment stating, "Passed review as of ``" (or similar).
-The documentation maintainer then verifies that the pull request is mechanically sound (no merge conflicts, broken links, ANSI escapes, etc.).
-If so, the documentation maintainer then merges the pull request, adds a PGP-signed tag to the latest commit (usually the merge commit), then pushes to the remote.
-In cases in which another reviewer is not required, the documentation maintainer may review the pull request (in which case no signed comment is necessary, since it would be redundant with the signed tag).
+All pull requests (PRs) against
+[qubes-doc](https://github.com/QubesOS/qubes-doc) must pass review prior to be
+merged, except in the case of [external
+documentation](/doc/#external-documentation) (see
+[#4693](https://github.com/QubesOS/qubes-issues/issues/4693)). This process is
+designed to ensure that contributed text is accurate and non-malicious. This
+process is a best effort that should provide a reasonable degree of assurance,
+but it is not foolproof. For example, all text characters are checked for ANSI
+escape sequences. However, binaries, such as images, are simply checked to
+ensure they appear or function the way they should when the website is
+rendered. They are not further analyzed in an attempt to determine whether they
+are malicious.
+
+Once a pull request passes review, the reviewer should add a signed comment
+stating, "Passed review as of ``" (or similar). The
+documentation maintainer then verifies that the pull request is mechanically
+sound (no merge conflicts, broken links, ANSI escapes, etc.). If so, the
+documentation maintainer then merges the pull request, adds a PGP-signed tag to
+the latest commit (usually the merge commit), then pushes to the remote. In
+cases in which another reviewer is not required, the documentation maintainer
+may review the pull request (in which case no signed comment is necessary,
+since it would be redundant with the signed tag).
## Questions, problems, and improvements
-If you have a question about something you read in the documentation, please send it to the appropriate [mailing list](/support/).
-If you see that something in the documentation should be fixed or improved, please [contribute](#how-to-contribute) the change yourself.
-To report an issue with the documentation, please follow our standard [issue reporting guidelines](/doc/reporting-bugs/).
-(If you report an issue with the documentation, you will likely be asked to address it, unless there is a clear indication in your report that you are not willing or able to do so.)
+If you have a question about something you read in the documentation, please
+send it to the appropriate [mailing list](/support/). If you see that something
+in the documentation should be fixed or improved, please
+[contribute](#how-to-contribute) the change yourself. To report an issue with
+the documentation, please follow our standard [issue reporting
+guidelines](/doc/issue-tracking/). (If you report an issue with the
+documentation, you will likely be asked to address it, unless there is a clear
+indication in your report that you are not willing or able to do so.)
## How to contribute
-Editing the documentation is easy, so if you see that a change should be made, please contribute it!
+Editing the documentation is easy, so if you see that a change should be made,
+please contribute it!
A few notes before we get started:
-* Since Qubes is a security-oriented project, every documentation change will be reviewed before it's accepted.
- This allows us to maintain quality control and protect our users.
-* We don't want you to spend time and effort on a contribution that we can't accept.
- If your contribution would take a lot of time, please [file an issue](/doc/reporting-bugs/) for it first so that we can make sure we're on the same page before significant works begins.
-* Alternatively, you may already have written content that doesn't conform to these guidelines, but you'd be willing to modify it so that it does.
- In this case, you can still submit it by following the instructions below.
- Just make a note in your pull request (PR) that you're aware of the changes that need to be made and that you're just asking for the content to be reviewed before you spend time making those changes.
-
-As mentioned above, we keep all the documentation in a dedicated [Git repository](https://github.com/QubesOS/qubes-doc) hosted on [GitHub](https://github.com/).
-Thanks to GitHub's interface, you can edit the documentation even if you don't know Git at all!
-The only thing you need is a GitHub account, which is free.
-
-(**Note:** If you're already familiar with GitHub or wish to work from the command line, you can skip the rest of this section.
-All you need to do to contribute is to [fork and clone](https://guides.github.com/activities/forking/) the [qubes-doc](https://github.com/QubesOS/qubes-doc) repo, make your changes, then [submit a pull request](https://help.github.com/articles/using-pull-requests/).)
-
-Ok, let's start.
-Every documentation page has an "Edit this page" button.
-It may be on the side (in the desktop layout):
-
-[](/attachment/wiki/doc-edit/03-button2.png)
+* Since Qubes is a security-oriented project, every documentation change will
+ be reviewed before it's accepted. This allows us to maintain quality control
+ and protect our users.
+* We don't want you to spend time and effort on a contribution that we can't
+ accept. If your contribution would take a lot of time, please [file an
+ issue](/doc/issue-tracking/) for it first so that we can make sure we're on
+ the same page before significant works begins.
+* Alternatively, you may already have written content that doesn't conform to
+ these guidelines, but you'd be willing to modify it so that it does. In this
+ case, you can still submit it by following the instructions below. Just make
+ a note in your pull request (PR) that you're aware of the changes that need
+ to be made and that you're just asking for the content to be reviewed before
+ you spend time making those changes.
+
+As mentioned above, we keep all the documentation in a dedicated [Git
+repository](https://github.com/QubesOS/qubes-doc) hosted on
+[GitHub](https://github.com/). Thanks to GitHub's interface, you can edit the
+documentation even if you don't know Git at all! The only thing you need is a
+GitHub account, which is free.
+
+(**Note:** If you're already familiar with GitHub or wish to work from the
+command line, you can skip the rest of this section. All you need to do to
+contribute is to [fork and
+clone](https://guides.github.com/activities/forking/) the
+[qubes-doc](https://github.com/QubesOS/qubes-doc) repo, make your changes, then
+[submit a pull
+request](https://help.github.com/articles/using-pull-requests/).)
+
+Ok, let's start. Every documentation page has an "Edit this page" button. It
+may be on the side (in the desktop layout):
+
+[](/attachment/doc/03-button2.png)
Or at the bottom (in the mobile layout):
-[](/attachment/wiki/doc-edit/02-button1.png)
+[](/attachment/doc/02-button1.png)
-When you click on it, you'll be prompted for your GitHub username and password (if you aren't already logged in).
-You can also create an account from here.
+When you click on it, you'll be prompted for your GitHub username and password
+(if you aren't already logged in). You can also create an account from here.
-[](/attachment/wiki/doc-edit/04-sign-in.png)
+[](/attachment/doc/04-sign-in.png)
-If this is your first contribution to the documentation, you need to "fork" the repository (make your own copy). It's easy --- just click the big green button on the next page.
-This step is only needed the first time you make a contribution.
+If this is your first contribution to the documentation, you need to "fork" the
+repository (make your own copy). It's easy --- just click the big green button
+on the next page. This step is only needed the first time you make a
+contribution.
-[](/attachment/wiki/doc-edit/05-fork.png)
+[](/attachment/doc/05-fork.png)
-Now you can make your modifications.
-You can also preview the changes to see how they'll be formatted by clicking the "Preview changes" tab.
-If you want to add images, please see [How to add images](#how-to-add-images).
-If you're making formatting changes, please [render the site locally](https://github.com/QubesOS/qubesos.github.io#instructions) to verify that everything looks correct before submitting any changes.
+Now you can make your modifications. You can also preview the changes to see
+how they'll be formatted by clicking the "Preview changes" tab. If you want to
+add images, please see [How to add images](#how-to-add-images). If you're
+making formatting changes, please [render the site
+locally](https://github.com/QubesOS/qubesos.github.io#instructions) to verify
+that everything looks correct before submitting any changes.
-[](/attachment/wiki/doc-edit/06-edit.png)
+[](/attachment/doc/06-edit.png)
-Once you're finished, describe your changes at the bottom and click "Propose file change".
+Once you're finished, describe your changes at the bottom and click "Propose
+file change".
-[](/attachment/wiki/doc-edit/07-commit-msg.png)
+[](/attachment/doc/07-commit-msg.png)
-After that, you'll see exactly what modifications you've made.
-At this stage, those changes are still in your own copy of the documentation ("fork").
-If everything looks good, send those changes to us by pressing the "Create pull request" button.
+After that, you'll see exactly what modifications you've made. At this stage,
+those changes are still in your own copy of the documentation ("fork"). If
+everything looks good, send those changes to us by pressing the "Create pull
+request" button.
-[](/attachment/wiki/doc-edit/08-review-changes.png)
+[](/attachment/doc/08-review-changes.png)
-You will be able to adjust the pull request message and title there.
-In most cases, the defaults are ok, so you can just confirm by pressing the "Create pull request" button again.
+You will be able to adjust the pull request message and title there. In most
+cases, the defaults are ok, so you can just confirm by pressing the "Create
+pull request" button again.
-[](/attachment/wiki/doc-edit/09-create-pull-request.png)
+[](/attachment/doc/09-create-pull-request.png)
-If any of your changes should be reflected in the [documentation index (a.k.a. table of contents)](/doc/) --- for example, if you're adding a new page, changing the title of an existing page, or removing a page --- please see [How to edit the documentation index](#how-to-edit-the-documentation-index).
+If any of your changes should be reflected in the [documentation index (a.k.a.
+table of contents)](/doc/) --- for example, if you're adding a new page,
+changing the title of an existing page, or removing a page --- please see [How
+to edit the documentation index](#how-to-edit-the-documentation-index).
-That's all!
-We will review your changes.
-If everything looks good, we'll pull them into the official documentation.
-Otherwise, we may have some questions for you, which we'll post in a comment on your pull request.
-(GitHub will automatically notify you if we do.)
-If, for some reason, we can't accept your pull request, we'll post a comment explaining why we can't.
+That's all! We will review your changes. If everything looks good, we'll pull
+them into the official documentation. Otherwise, we may have some questions for
+you, which we'll post in a comment on your pull request. (GitHub will
+automatically notify you if we do.) If, for some reason, we can't accept your
+pull request, we'll post a comment explaining why we can't.
-[](/attachment/wiki/doc-edit/10-done.png)
+[](/attachment/doc/10-done.png)
## How to edit the documentation index
-The source file for the [documentation index (a.k.a. table of contents)](/doc/) lives here:
+The source file for the [documentation index (a.k.a. table of contents)](/doc/)
+lives here:
-
+
-Editing this file will change what appears on the documentation index.
-If your pull request (PR) adds, removes, or edits anything that should be reflected in the documentation index, please make sure you also submit an associated pull request against this file.
+Editing this file will change what appears on the documentation index. If your
+pull request (PR) adds, removes, or edits anything that should be reflected in
+the documentation index, please make sure you also submit an associated pull
+request against this file.
## How to add images
-To add an image to a page, use the following syntax in the main document.
-This will make the image a hyperlink to the image file, allowing the reader to click on the image in order to view the image by itself.
+To add an image to a page, use the following syntax in the main document. This
+will make the image a hyperlink to the image file, allowing the reader to click
+on the image in order to view the image by itself.
```
-[](/attachment/wiki/page-title/image-filename.png)
+[](/attachment/doc/image.png)
```
-Then, submit your image(s) in a separate pull request to the [qubes-attachment](https://github.com/QubesOS/qubes-attachment) repository using the same path and filename.
-This is the only permitted way to include images.
-Do not link to images on other websites.
+Then, submit your image(s) in a separate pull request to the
+[qubes-attachment](https://github.com/QubesOS/qubes-attachment) repository
+using the same path and filename. This is the only permitted way to include
+images. Do not link to images on other websites.
## Organizational guidelines
### Do not duplicate documentation
-Duplicating documentation is almost always a bad idea.
-There are many reasons for this.
-The main one is that almost all documentation has to be updated as some point.
-When similar documentation appears in more than one place, it is very easy for it to get updated in one place but not the others (perhaps because the person updating it doesn't realize it's in more than once place).
-When this happens, the documentation as a whole is now inconsistent, and the outdated documentation becomes a trap, especially for novice users.
-Such traps are often more harmful than if the documentation never existed in the first place.
-The solution is to **link** to existing documentation rather than duplicating it.
-There are some exceptions to this policy (e.g., information that is certain not to change for a very long time), but they are rare.
+Duplicating documentation is almost always a bad idea. There are many reasons
+for this. The main one is that almost all documentation has to be updated as
+some point. When similar documentation appears in more than one place, it is
+very easy for it to get updated in one place but not the others (perhaps
+because the person updating it doesn't realize it's in more than once place).
+When this happens, the documentation as a whole is now inconsistent, and the
+outdated documentation becomes a trap, especially for novice users. Such traps
+are often more harmful than if the documentation never existed in the first
+place. The solution is to **link** to existing documentation rather than
+duplicating it. There are some exceptions to this policy (e.g., information
+that is certain not to change for a very long time), but they are rare.
### Core vs. external documentation
-Core documentation resides in the [Qubes OS Project's official repositories](https://github.com/QubesOS/), mainly in [qubes-doc](https://github.com/QubesOS/qubes-doc).
-External documentation can be anywhere else (such as forums, community websites, and blogs), but there is an especially large collection in the [Qubes Community](https://github.com/Qubes-Community) project.
-External documentation should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc).
-If you've written a piece of documentation that is not appropriate for [qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit it to the [Qubes Community](https://github.com/Qubes-Community) project instead.
-However, *linking* to external documentation from [qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine.
-Indeed, the maintainers of the [Qubes Community](https://github.com/Qubes-Community) project should regularly submit PRs against the documentation index (see [How to edit the documentation index](#how-to-edit-the-documentation-index)) to add and update Qubes Community links in the "External Documentation" section of the documentation table of contents.
-
-The main difference between **core** (or **official**) and **external** (or **community** or **unofficial**) documentation is whether it documents software that is officially written and maintained by the Qubes OS Project.
-The purpose of this distinction is to keep the core docs maintainable and high-quality by limiting them to the software output by the Qubes OS Project.
-In other words, we take responsibility for documenting all of the software we put out into the world, but it doesn't make sense for us to take on the responsibility of documenting or maintaining documentation for anything else.
-For example, Qubes OS may use a popular Linux distribution for an official [TemplateVM](/doc/templates/).
-However, it would not make sense for a comparatively small project like ours, with modest funding and a lean workforce, to attempt to document software belonging to a large, richly-funded project with an army of paid and volunteer contributors, especially when they probably already have documentation of their own.
-This is particularly true when it comes to Linux in general.
-Although many users who are new to Qubes are also new to Linux, it makes absolutely no sense for our comparatively tiny project to try to document Linux in general when there is already a plethora of documentation out there.
-
-Many contributors do not realize that there is a significant amount of work involved in *maintaining* documentation after it has been written.
-They may wish to write documentation and submit it to the core docs, but they see only their own writing process and fail to consider that it will have to be kept up-to-date and consistent with the rest of the docs for years afterward.
-Submissions to the core docs also have to go through a review process to ensure accuracy before being merged (see [security](#security)), which takes up valuable time from the team.
-We aim to maintain high quality standards for the core docs (style and mechanics, formatting), which also takes up a lot of time.
-If the documentation involves anything external to the Qubes OS Project (such as a website, platform, program, protocol, framework, practice, or even a reference to a version number), the documentation is likely to become outdated when that external thing changes.
-It's also important to periodically review and update this documentation, especially when a new Qubes release comes out.
-Periodically, there may be technical or policy changes that affect all the core documentation.
-The more documentation there is relative to maintainers, the harder all of this will be.
-Since there are many more people who are willing to write documentation than to maintain it, these individually small incremental additions amount to a significant maintenance burden for the project.
-
-On the positive side, we consider the existence of community documentation to be a sign of a healthy ecosystem, and this is quite common in the software world.
-The community is better positioned to write and maintain documentation that applies, combines, and simplifies the official documentation, e.g., tutorials that explain how to install and use various programs in Qubes, how to create custom VM setups, and introductory tutorials that teach basic Linux concepts and commands in the context of Qubes.
-In addition, just because the Qubes OS Project has officially written and maintains some flexible framework, such as `qrexec`, it does not make sense to include every tutorial that says "here's how to do something cool with `qrexec`" in the core docs.
-Such tutorials generally also belong in the community documentation.
-
-See [#4693](https://github.com/QubesOS/qubes-issues/issues/4693) for more background information.
+Core documentation resides in the [Qubes OS Project's official
+repositories](https://github.com/QubesOS/), mainly in
+[qubes-doc](https://github.com/QubesOS/qubes-doc). External documentation can
+be anywhere else (such as forums, community websites, and blogs), but there is
+an especially large collection in the [Qubes
+Community](https://github.com/Qubes-Community) project. External documentation
+should not be submitted to [qubes-doc](https://github.com/QubesOS/qubes-doc).
+If you've written a piece of documentation that is not appropriate for
+[qubes-doc](https://github.com/QubesOS/qubes-doc), we encourage you to submit
+it to the [Qubes Community](https://github.com/Qubes-Community) project
+instead. However, *linking* to external documentation from
+[qubes-doc](https://github.com/QubesOS/qubes-doc) is perfectly fine. Indeed,
+the maintainers of the [Qubes Community](https://github.com/Qubes-Community)
+project should regularly submit PRs against the documentation index (see [How
+to edit the documentation index](#how-to-edit-the-documentation-index)) to add
+and update Qubes Community links in the "External Documentation" section of the
+documentation table of contents.
+
+The main difference between **core** (or **official**) and **external** (or
+**community** or **unofficial**) documentation is whether it documents software
+that is officially written and maintained by the Qubes OS Project. The purpose
+of this distinction is to keep the core docs maintainable and high-quality by
+limiting them to the software output by the Qubes OS Project. In other words,
+we take responsibility for documenting all of the software we put out into the
+world, but it doesn't make sense for us to take on the responsibility of
+documenting or maintaining documentation for anything else. For example, Qubes
+OS may use a popular Linux distribution for an official
+[TemplateVM](/doc/templates/). However, it would not make sense for a
+comparatively small project like ours, with modest funding and a lean
+workforce, to attempt to document software belonging to a large, richly-funded
+project with an army of paid and volunteer contributors, especially when they
+probably already have documentation of their own. This is particularly true
+when it comes to Linux in general. Although many users who are new to Qubes are
+also new to Linux, it makes absolutely no sense for our comparatively tiny
+project to try to document Linux in general when there is already a plethora of
+documentation out there.
+
+Many contributors do not realize that there is a significant amount of work
+involved in *maintaining* documentation after it has been written. They may
+wish to write documentation and submit it to the core docs, but they see only
+their own writing process and fail to consider that it will have to be kept
+up-to-date and consistent with the rest of the docs for years afterward.
+Submissions to the core docs also have to go through a review process to ensure
+accuracy before being merged (see [security](#security)), which takes up
+valuable time from the team. We aim to maintain high quality standards for the
+core docs (style and mechanics, formatting), which also takes up a lot of time.
+If the documentation involves anything external to the Qubes OS Project (such
+as a website, platform, program, protocol, framework, practice, or even a
+reference to a version number), the documentation is likely to become outdated
+when that external thing changes. It's also important to periodically review
+and update this documentation, especially when a new Qubes release comes out.
+Periodically, there may be technical or policy changes that affect all the core
+documentation. The more documentation there is relative to maintainers, the
+harder all of this will be. Since there are many more people who are willing to
+write documentation than to maintain it, these individually small incremental
+additions amount to a significant maintenance burden for the project.
+
+On the positive side, we consider the existence of community documentation to
+be a sign of a healthy ecosystem, and this is quite common in the software
+world. The community is better positioned to write and maintain documentation
+that applies, combines, and simplifies the official documentation, e.g.,
+tutorials that explain how to install and use various programs in Qubes, how to
+create custom VM setups, and introductory tutorials that teach basic Linux
+concepts and commands in the context of Qubes. In addition, just because the
+Qubes OS Project has officially written and maintains some flexible framework,
+such as `qrexec`, it does not make sense to include every tutorial that says
+"here's how to do something cool with `qrexec`" in the core docs. Such
+tutorials generally also belong in the community documentation.
+
+See [#4693](https://github.com/QubesOS/qubes-issues/issues/4693) for more
+background information.
### Version-specific documentation
-*See [#5308](https://github.com/QubesOS/qubes-issues/issues/5308) for potential changes to this policy.*
+*See [#5308](https://github.com/QubesOS/qubes-issues/issues/5308) for potential
+changes to this policy.*
-We maintain only one set of documentation for Qubes OS.
-We do not maintain a different set of documentation for each version of Qubes.
-Our single set of Qubes OS documentation is updated on a continual, rolling basis.
-Our first priority is to document all **current, stable releases** of Qubes.
-Our second priority is to document the next, upcoming release (if any) that is currently in the beta or release candidate stage.
+We maintain only one set of documentation for Qubes OS. We do not maintain a
+different set of documentation for each version of Qubes. Our single set of
+Qubes OS documentation is updated on a continual, rolling basis. Our first
+priority is to document all **current, stable releases** of Qubes. Our second
+priority is to document the next, upcoming release (if any) that is currently
+in the beta or release candidate stage.
-In cases where a documentation page covers functionality that differs considerably between Qubes OS versions, the page should be subdivided into clearly-labeled sections that cover the different functionality in different versions:
+In cases where a documentation page covers functionality that differs
+considerably between Qubes OS versions, the page should be subdivided into
+clearly-labeled sections that cover the different functionality in different
+versions:
#### Incorrect Example
@@ -256,119 +349,215 @@ general `qubes-baz` command:
Once you foo, make sure to close the baz before fooing the next bar.
```
-Subdividing the page into clearly-labeled sections for each version has several benefits:
-
-* It preserves good content for older (but still supported) versions.
- Many documentation contributors are also people who prefer to use the latest version.
- Many of them are tempted to *replace* existing content that applies to an older, supported version with content that applies only to the latest version.
- This is somewhat understandable.
- Since they only use the latest version, they may be focused on their own experience, and they may even regard the older version as deprecated, even when it's actually still supported.
- However, allowing this replacement of content would do a great disservice to those who still rely on the older, supported version.
- In many cases, these users value the stability and reliability of the older, supported version.
- With the older, supported version, there has been more time to fix bugs and make improvements in both the software and the documentation.
- Consequently, much of the documentation content for this version may have gone through several rounds of editing, review, and revision.
- It would be a tragedy for this content to vanish while the very set of users who most prize stability and reliability are depending on it.
-* It's easy for readers to quickly find the information they're looking for, since they can go directly to the section that applies to their version.
-* It's hard for readers to miss information they need, since it's all in one place.
- In the incorrect example, information that the reader needs could be in any paragraph in the entire document, and there's no way to tell without reading the entire page.
- In the correct example, the reader can simply skim the headings in order to know which parts of the page need to be read and which can be safely ignored.
- The fact that some content is repeated in the two version-specific sections is not a problem, since no reader has to read the same thing twice.
- Moreover, as one version gets updated, it's likely that the documentation for that version will also be updated.
- Therefore, content that is initially duplicated between version-specific sections will not necessarily stay that way, and this is a good thing:
- We want the documentation for a version that *doesn't* change to stay the same, and we want the documentation for a version that *does* change to change along with the software.
-* It's easy for documentation contributors and maintainers to know which file to edit and update, since there's only one page for all Qubes OS versions.
- Initially creating the new headings and duplicating content that applies to both is only a one-time cost for each page, and many pages don't even require this treatment, since they apply to all currently-supported Qubes OS versions.
-
-By contrast, an alternative approach, such as segregating the documentation into two different branches, would mean that contributions that apply to both Qubes versions would only end up in one branch, unless someone remembered to manually submit the same thing to the other branch and actually made the effort to do so.
-Most of the time, this wouldn't happen.
-When it did, it would mean a second pull request that would have to be reviewed.
-Over time, the different branches would diverge in non-version-specific content.
-Good general content that was submitted only to one branch would effectively disappear once that version was deprecated.
-(Even if it were still on the website, no one would look at it, since it would explicitly be in the subdirectory of a deprecated version, and there would be a motivation to remove it from the website so that search results wouldn't be populated with out-of-date information.)
-
-For further discussion about version-specific documentation in Qubes, see [here](https://groups.google.com/d/topic/qubes-users/H9BZX4K9Ptk/discussion).
+Subdividing the page into clearly-labeled sections for each version has several
+benefits:
+
+* It preserves good content for older (but still supported) versions. Many
+ documentation contributors are also people who prefer to use the latest
+ version. Many of them are tempted to *replace* existing content that applies
+ to an older, supported version with content that applies only to the latest
+ version. This is somewhat understandable. Since they only use the latest
+ version, they may be focused on their own experience, and they may even
+ regard the older version as deprecated, even when it's actually still
+ supported. However, allowing this replacement of content would do a great
+ disservice to those who still rely on the older, supported version. In many
+ cases, these users value the stability and reliability of the older,
+ supported version. With the older, supported version, there has been more
+ time to fix bugs and make improvements in both the software and the
+ documentation. Consequently, much of the documentation content for this
+ version may have gone through several rounds of editing, review, and
+ revision. It would be a tragedy for this content to vanish while the very set
+ of users who most prize stability and reliability are depending on it.
+* It's easy for readers to quickly find the information they're looking for,
+ since they can go directly to the section that applies to their version.
+* It's hard for readers to miss information they need, since it's all in one
+ place. In the incorrect example, information that the reader needs could be
+ in any paragraph in the entire document, and there's no way to tell without
+ reading the entire page. In the correct example, the reader can simply skim
+ the headings in order to know which parts of the page need to be read and
+ which can be safely ignored. The fact that some content is repeated in the
+ two version-specific sections is not a problem, since no reader has to read
+ the same thing twice. Moreover, as one version gets updated, it's likely that
+ the documentation for that version will also be updated. Therefore, content
+ that is initially duplicated between version-specific sections will not
+ necessarily stay that way, and this is a good thing: We want the
+ documentation for a version that *doesn't* change to stay the same, and we
+ want the documentation for a version that *does* change to change along with
+ the software.
+* It's easy for documentation contributors and maintainers to know which file
+ to edit and update, since there's only one page for all Qubes OS versions.
+ Initially creating the new headings and duplicating content that applies to
+ both is only a one-time cost for each page, and many pages don't even require
+ this treatment, since they apply to all currently-supported Qubes OS
+ versions.
+
+By contrast, an alternative approach, such as segregating the documentation
+into two different branches, would mean that contributions that apply to both
+Qubes versions would only end up in one branch, unless someone remembered to
+manually submit the same thing to the other branch and actually made the effort
+to do so. Most of the time, this wouldn't happen. When it did, it would mean a
+second pull request that would have to be reviewed. Over time, the different
+branches would diverge in non-version-specific content. Good general content
+that was submitted only to one branch would effectively disappear once that
+version was deprecated. (Even if it were still on the website, no one would
+look at it, since it would explicitly be in the subdirectory of a deprecated
+version, and there would be a motivation to remove it from the website so that
+search results wouldn't be populated with out-of-date information.)
+
+For further discussion about version-specific documentation in Qubes, see
+[here](https://groups.google.com/d/topic/qubes-users/H9BZX4K9Ptk/discussion).
## Style guidelines
-* Familiarize yourself with the terms defined in the [glossary](/doc/glossary/). Use these
- terms consistently and accurately throughout your writing.
- * Syntactically distinguish variables in commands.
- For example, this is ambiguous:
+* Familiarize yourself with the terms defined in the
+ [glossary](/doc/glossary/). Use these terms consistently and accurately
+ throughout your writing.
+* Syntactically distinguish variables in commands. For example, this is
+ ambiguous:
- $ qvm-run --dispvm=dvm-template --service qubes.StartApp+xterm
+ $ qvm-run --dispvm=dvm-template --service qubes.StartApp+xterm
- It should instead be:
+ It should instead be:
- $ qvm-run --dispvm= --service qubes.StartApp+xterm
+ $ qvm-run --dispvm= --service qubes.StartApp+xterm
- Note that we syntactically distinguish variables in three ways:
- 1. Surrounding them in angled brackets (`< >`)
- 2. Using underscores (`_`) between words
- 3. Using all capital letters
+ Note that we syntactically distinguish variables in three ways:
+ 1. Surrounding them in angled brackets (`< >`)
+ 2. Using underscores (`_`) between words
+ 3. Using all capital letters
## Markdown conventions
-All the documentation is written in Markdown for maximum accessibility.
-When making contributions, please try to observe the following style conventions:
-
- * Use spaces instead of tabs.
- * Do not write HTML inside Markdown documents (except in rare, unavoidable cases, such as alerts).
- In particular, never include HTML or CSS for styling, formatting, or white space control.
- That belongs in the (S)CSS files instead.
- * Link only to images in [qubes-attachment](https://github.com/QubesOS/qubes-attachment) (see [instructions above](#how-to-add-images)).
- Do not link to images on other websites.
- * In order to enable offline browsing and automatic onion redirection, always use relative (rather than absolute) links, e.g., `/doc/doc-guidelines/` instead of `https://www.qubes-os.org/doc/doc-guidelines/`.
- Examples of exceptions:
- * The signed plain text portions of [QSBs](/security/bulletins/) and [Canaries](/security/canaries/)
- * URLs that appear inside code blocks (e.g., in comments and document templates)
- * Files like `README.md` and `CONTRIBUTING.md`
- * Insert a newline at, and only at, the end of each sentence, except when the text will be reproduced outside of the Qubes website repo (see previous item for examples).
- * Rationale: This practice results in one sentence per line, which is most appropriate for source that consists primarily of natural language text.
- It results in the most useful diffs and facilitates translation into other languages while mostly preserving source readability.
-* If appropriate, make numerals in numbered lists match between Markdown source and HTML output.
- * Rationale: In the event that a user is required to read the Markdown source directly, this will make it easier to follow, e.g., numbered steps in a set of instructions.
-* Use hanging indentations
- where appropriate.
-* Do not use `h1` headings (single `#` or `======` underline). These are automatically generated from the `title:` line in the YAML frontmatter.
+All the documentation is written in Markdown for maximum accessibility. When
+making contributions, please try to observe the following style conventions:
+
+* Use spaces instead of tabs.
+* Do not write HTML inside Markdown documents (except in rare, unavoidable
+ cases, such as alerts). In particular, never include HTML or CSS for styling,
+ formatting, or white space control. That belongs in the (S)CSS files instead.
+* Link only to images in
+ [qubes-attachment](https://github.com/QubesOS/qubes-attachment) (see
+ [instructions above](#how-to-add-images)). Do not link to images on other
+ websites.
+* In order to enable offline browsing and automatic onion redirection, always
+ use relative (rather than absolute) links, e.g., `/doc/doc-guidelines/`
+ instead of `https://www.qubes-os.org/doc/doc-guidelines/`. Examples of
+ exceptions:
+ * The signed plain text portions of [QSBs](/security/qsb/) and
+ [Canaries](/security/canary/)
+ * URLs that appear inside code blocks (e.g., in comments and document
+ templates)
+ * Files like `README.md` and `CONTRIBUTING.md`
+* Hard wrap Markdown lines at 80 characters, unless the line can't be broken
+ (e.g., code or a URL).
+* If appropriate, make numerals in numbered lists match between Markdown source
+ and HTML output.
+ * Rationale: In the event that a user is required to read the Markdown source
+ directly, this will make it easier to follow, e.g., numbered steps in a set
+ of instructions.
+* Use hanging indentations where appropriate.
+* Do not use `h1` headings (single `#` or `======` underline). These are
+ automatically generated from the `title:` line in the YAML frontmatter.
* Use Atx-style headings: , `##h 2`, `### h3`, etc.
-* When writing code blocks, use [syntax highlighting](https://github.github.com/gfm/#info-string) where [possible](https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers) and use `[...]` for anything omitted.
+* When writing code blocks, use [syntax
+ highlighting](https://github.github.com/gfm/#info-string) where
+ [possible](https://github.com/jneen/rouge/wiki/List-of-supported-languages-and-lexers)
+ and use `[...]` for anything omitted.
* When providing command line examples:
- * Tell the reader where to open a terminal (dom0 or a specific domU), and show the command along with its output (if any) in a code block, e.g.:
-
- ~~~markdown
- Open a terminal in dom0 and run:
- ```shell_session
- $ cd test
- $ echo Hello
- Hello
- ```
- ~~~
-
- * Precede each command with the appropriate command prompt:
- At a minimum, the prompt should contain a trailing `#` (for the user `root`) or `$` (for other users) on Linux systems and `>` on Windows systems, respectively.
- * Don't try to add comments inside the code block.
- For example, *don't* do this:
-
- ~~~markdown
- Open a terminal in dom0 and run:
- ```shell_session
- # Navigate to the new directory
- $ cd test
- # Generate a greeting
- $ echo Hello
- Hello
- ```
- ~~~
-
- The `#` symbol preceding each comment is ambiguous with a root command prompt.
- Instead, put your comments *outside* of the code block in normal prose.
-* Use non-reference-style links like `[website](https://example.com/)`.
- Do *not* use reference links like `[website][example]`, `[website][]` or `[website]`.
-
-([This](https://daringfireball.net/projects/markdown/) is a great source for learning about Markdown.)
+ * Tell the reader where to open a terminal (dom0 or a specific domU), and
+ show the command along with its output (if any) in a code block, e.g.:
+
+ ~~~markdown
+ Open a terminal in dom0 and run:
+ ```shell_session
+ $ cd test
+ $ echo Hello
+ Hello
+ ```
+ ~~~
+
+ * Precede each command with the appropriate command prompt: At a minimum, the
+ prompt should contain a trailing `#` (for the user `root`) or `$` (for
+ other users) on Linux systems and `>` on Windows systems, respectively.
+ * Don't try to add comments inside the code block. For example, *don't* do
+ this:
+
+ ~~~markdown
+ Open a terminal in dom0 and run:
+ ```shell_session
+ # Navigate to the new directory
+ $ cd test
+ # Generate a greeting
+ $ echo Hello
+ Hello
+ ```
+ ~~~
+
+ The `#` symbol preceding each comment is ambiguous with a root command
+ prompt. Instead, put your comments *outside* of the code block in normal
+ prose.
+* Use non-reference-style links like `[website](https://example.com/)`. Do
+ *not* use reference links like `[website][example]`, `[website][]` or
+ `[website]`.
+
+([This](https://daringfireball.net/projects/markdown/) is a great source for
+learning about Markdown.)
+
+## Coding conventions
+
+These conventions apply to the website as a whole, including everything written
+in HTML, CSS, YAML, and Liquid. These conventions are intended to keep the
+codebase consistent when multiple collaborators are working on it. They should
+be understood as a practical set of rules for maintaining order in this
+specific codebase rather than as a statement of what is objectively right or
+good.
+
+* Always use spaces. Never use tabs.
+* Indent by exactly two (2) spaces.
+* Whenever you add an opening tag, indent the following line. (Exception: If
+ you open and close the tag on the same line, do not indent the following
+ line.)
+* Indent Liquid the same way as HTML.
+* In general, the starting columns of every adjacent pair of lines should be no
+ more than two spaces apart (example below).
+* No blank or empty lines. (Hint: When you feel you need one, add a comment on
+ that line instead.)
+* Use comments to indicate the purposes of different blocks of code. This makes
+ the file easier to understand and navigate.
+* Use descriptive variable names. Never use one or two letter variable names.
+ Avoid uncommon abbreviations and made-up words.
+* In general, make it easy for others to read your code. Your future self will
+ thank you, and so will your collaborators!
+* [Don't Repeat Yourself
+ (DRY)!](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) Instead of
+ repeating the same block of code multiple times, abstract it out into a
+ separate file and `include` that file where you need it.
+
+### Indentation example
+
+Here's an example that follows the indentation rules:
+
+{% raw %}
+```html
+
+
+
+ {% for item in secs.htmlsections[0].columns %}
+
{{ item.title }}
+ {% endfor %}
+
+ {% for canary in site.data.sec-canary reversed %}
+
+```
+{% endraw %}
## Git conventions
-Please try to write good commit messages, according to the
-[instructions in our coding style guidelines](/doc/coding-style/#commit-message-guidelines).
-
+Please try to write good commit messages, according to the [instructions in our
+coding style guidelines](/doc/coding-style/#commit-message-guidelines).
diff --git a/developer/general/gsoc.md b/developer/general/gsoc.md
index c007b52cc..c99e5580c 100644
--- a/developer/general/gsoc.md
+++ b/developer/general/gsoc.md
@@ -1,6 +1,6 @@
---
lang: en
-layout: sidebar
+layout: doc
permalink: /gsoc/
redirect_from:
- /GSoC/
@@ -586,4 +586,3 @@ would override all the user changes there). More details:
----
We adapted some of the language here about GSoC from the [KDE GSoC page](https://community.kde.org/GSoC).
-
diff --git a/developer/general/gsod.md b/developer/general/gsod.md
index b8b4c7d86..76e40c76e 100644
--- a/developer/general/gsod.md
+++ b/developer/general/gsod.md
@@ -1,12 +1,11 @@
---
lang: en
-layout: sidebar
+layout: doc
permalink: /gsod/
ref: 242
title: Google Season of Docs
---
-
Thank you for your interest in participating in the [2021 Google Season of Docs](https://developers.google.com/season-of-docs/) program with the [Qubes OS team](/team/). You can read more about the Google Season of Docs in the official [guides](https://developers.google.com/season-of-docs/docs/) and [FAQ](https://developers.google.com/season-of-docs/docs/faq).
## 2021 Project Idea
@@ -111,7 +110,7 @@ This could be helped by writing a consolidated guide with a clear list of sympto
**Project**: Improve Getting Started page
-**Brief explanation**: The [Getting Started page](https://www.qubes-os.org/getting-started/) is the place a new user would go to understand better how to use Qubes. It is currently has old screenshots not using the default desktop environment and could have much better flow. In addition, this improved page content may end up being served more directly to the user via the [offline documentation](https://github.com/QubesOS/qubes-issues/issues/1019) or the firstboot guide.
+**Brief explanation**: The [Getting Started page](https://www.qubes-os.org/doc/how-to-get-started/) is the place a new user would go to understand better how to use Qubes. It is currently has old screenshots not using the default desktop environment and could have much better flow. In addition, this improved page content may end up being served more directly to the user via the [offline documentation](https://github.com/QubesOS/qubes-issues/issues/1019) or the firstboot guide.
**Expected results**:
@@ -145,4 +144,3 @@ Fixing this last point may require very close cooperation with developers, as th
- [Markdown](https://daringfireball.net/projects/markdown/)
**Mentor**: [Marek Marczykowski-Górecki](/team/)
-
diff --git a/developer/general/join.md b/developer/general/join.md
index 577a25085..3e5e036a1 100644
--- a/developer/general/join.md
+++ b/developer/general/join.md
@@ -1,12 +1,11 @@
---
lang: en
-layout: sidebar
+layout: doc
permalink: /join/
ref: 26
title: Join
---
-
The Qubes OS Project does not currently have any open positions.
This page will be updated when open positions become available.
In the meantime, there are many different ways you can [contribute to the Qubes OS project](/doc/contributing/).
diff --git a/developer/general/package-contributions.md b/developer/general/package-contributions.md
index 0b45862c5..c15cae1af 100644
--- a/developer/general/package-contributions.md
+++ b/developer/general/package-contributions.md
@@ -6,7 +6,6 @@ ref: 29
title: Package Contributions
---
-
_This page is for developers who wish to contribute packages.
If you want to install contributed packages, please see [installing contributed packages](/doc/installing-contributed-packages/)._
@@ -101,4 +100,3 @@ As the maintainer of the package, it is your privilege and responsibility to:
If you do not wish to be the maintainer of your package, please let us know.
If you do not act on your maintainer duties for a given package for an extended period of time and after at least one reminder, we will assume that you no longer wish to be the maintainer for that package.
-
diff --git a/developer/general/research.md b/developer/general/research.md
deleted file mode 100644
index 937af9296..000000000
--- a/developer/general/research.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-lang: en
-layout: default
-permalink: /research/
-redirect_from:
-- /doc/qubes-research/
-- /en/doc/qubes-research/
-- /doc/QubesResearch/
-- /wiki/QubesResearch/
-ref: 139
-title: Research
----
-
-Here are links to various research papers, projects, and blog posts that relate
-to Qubes OS.
diff --git a/developer/general/usability-ux.md b/developer/general/usability-ux.md
index 212322992..75748bccc 100644
--- a/developer/general/usability-ux.md
+++ b/developer/general/usability-ux.md
@@ -6,7 +6,6 @@ ref: 31
title: Usability & UX
---
-
Software that is too complicated to use, is often unused. Because we want as many people as possible to benefit from its unique security properties, the usability and user experience of Qubes OS is an utmost priority!
We ask anyone developing for Qubes OS to please read through this guide to better understand the user experience we strive to achieve. We also ask them to review [our style guide](/doc/style-guide/) for other design related information.
diff --git a/developer/releases/1_0/release-notes.md b/developer/releases/1_0/release-notes.md
index 4f46a77c1..9681a3e65 100644
--- a/developer/releases/1_0/release-notes.md
+++ b/developer/releases/1_0/release-notes.md
@@ -8,7 +8,6 @@ ref: 18
title: Qubes R1.0 Release Notes
---
-
Detailed release notes in [this blog post](https://blog.invisiblethings.org/2012/09/03/introducing-qubes-10.html).
## Known issues
diff --git a/developer/releases/2_0/release-notes.md b/developer/releases/2_0/release-notes.md
index 09d959536..a6e30028a 100644
--- a/developer/releases/2_0/release-notes.md
+++ b/developer/releases/2_0/release-notes.md
@@ -8,7 +8,6 @@ ref: 25
title: Qubes R2.0 Release Notes
---
-
Detailed release notes in [this blog post](https://blog.invisiblethings.org/2014/09/26/announcing-qubes-os-release-2.html)
## New features since 1.0
diff --git a/developer/releases/3_0/schedule.md b/developer/releases/3_0/schedule.md
index 30111df58..512ee3ab9 100644
--- a/developer/releases/3_0/schedule.md
+++ b/developer/releases/3_0/schedule.md
@@ -8,7 +8,6 @@ ref: 20
title: Qubes R3.0 Release Schedule
---
-
| Date | Stage |
| -----------:| ------------------------------------- |
| 5 Sep 2015 | current-testing freeze before 3.0-rc3 |
diff --git a/developer/releases/3_1/release-notes.md b/developer/releases/3_1/release-notes.md
index 1b0bafcde..35d1bcd4b 100644
--- a/developer/releases/3_1/release-notes.md
+++ b/developer/releases/3_1/release-notes.md
@@ -6,7 +6,6 @@ ref: 16
title: Qubes R3.1 release notes
---
-
## New features since 3.0
* Management Stack based of Salt Stack in dom0 - [documentation](/doc/salt/)
@@ -64,4 +63,3 @@ for migrating of all of the user VMs.
Alternatively you can [upgrade to R3.0
using](/doc/releases/3.0/release-notes/#upgrading) first, then follow the
instructions above. This will be time consuming process.
-
diff --git a/developer/releases/3_1/schedule.md b/developer/releases/3_1/schedule.md
index dda8869d7..144818182 100644
--- a/developer/releases/3_1/schedule.md
+++ b/developer/releases/3_1/schedule.md
@@ -8,7 +8,6 @@ ref: 17
title: Qubes R3.1 Release Schedule
---
-
This schedule is based on [Version Scheme](/doc/version-scheme/#release-schedule).
| Date | Stage |
diff --git a/developer/releases/3_2/release-notes.md b/developer/releases/3_2/release-notes.md
index 37eca3299..547dff271 100644
--- a/developer/releases/3_2/release-notes.md
+++ b/developer/releases/3_2/release-notes.md
@@ -6,7 +6,6 @@ ref: 21
title: Qubes R3.2 release notes
---
-
## New features since 3.1
* Management Stack extended to support in-VM configuration - [documentation](/doc/salt/)
@@ -60,4 +59,3 @@ for migrating of all of the user VMs.
Alternatively you can [upgrade to R3.1 using](/doc/releases/3.1/release-notes/#upgrading) first, then follow
the instructions above. This will be time consuming process.
-
diff --git a/developer/releases/3_2/schedule.md b/developer/releases/3_2/schedule.md
index 945fefa6e..ed769eeca 100644
--- a/developer/releases/3_2/schedule.md
+++ b/developer/releases/3_2/schedule.md
@@ -8,7 +8,6 @@ ref: 22
title: Qubes R3.2 Release Schedule
---
-
This schedule is based on [Version Scheme](/doc/version-scheme/#release-schedule).
| Date | Stage |
diff --git a/developer/releases/4_0/release-notes.md b/developer/releases/4_0/release-notes.md
index b2ed70e61..b80a1959d 100644
--- a/developer/releases/4_0/release-notes.md
+++ b/developer/releases/4_0/release-notes.md
@@ -6,7 +6,6 @@ ref: 23
title: Qubes R4.0 release notes
---
-
New features since 3.2
----------------------
@@ -106,4 +105,3 @@ There is no in-place upgrade path from earlier Qubes versions. The only
supported option to upgrade to Qubes R4.0 is to install it from scratch and use
[qubes backup and restore tools](/doc/backup-restore/) for migrating of all of the user VMs.
We also provide [detailed instruction](/doc/upgrade-to-r4.0/) for this procedure.
-
diff --git a/developer/releases/4_0/schedule.md b/developer/releases/4_0/schedule.md
index fb8035fb9..98d4c1df1 100644
--- a/developer/releases/4_0/schedule.md
+++ b/developer/releases/4_0/schedule.md
@@ -8,7 +8,6 @@ ref: 24
title: Qubes R4.0 Release Schedule
---
-
This schedule is based on [Version Scheme](/doc/version-scheme/#release-schedule).
| Date | Stage |
diff --git a/developer/releases/notes.md b/developer/releases/notes.md
index 71c1bd2c9..8059bf696 100644
--- a/developer/releases/notes.md
+++ b/developer/releases/notes.md
@@ -6,7 +6,6 @@ ref: 13
title: Release Notes
---
-
* [Qubes R1.0 release notes](/doc/releases/1.0/release-notes/)
* [Qubes R2.0 release notes](/doc/releases/2.0/release-notes/)
* [Qubes R3.0 release notes](/doc/releases/3.0/release-notes/)
diff --git a/developer/releases/schedules.md b/developer/releases/schedules.md
index afcd82e94..d2af2d6ef 100644
--- a/developer/releases/schedules.md
+++ b/developer/releases/schedules.md
@@ -6,7 +6,6 @@ ref: 15
title: Release Schedules
---
-
* [Qubes R3.0 release schedule](/doc/releases/3.0/schedule/)
* [Qubes R3.1 release schedule](/doc/releases/3.1/schedule/)
* [Qubes R3.2 release schedule](/doc/releases/3.2/schedule/)
diff --git a/developer/releases/todo.md b/developer/releases/todo.md
index d3144959e..98179d89e 100644
--- a/developer/releases/todo.md
+++ b/developer/releases/todo.md
@@ -8,7 +8,6 @@ ref: 14
title: Release Checklist
---
-
*the checklist is probably unfinished*
On -rc1
diff --git a/user/downloading-installing-upgrading/version-scheme.md b/developer/releases/version-scheme.md
similarity index 99%
rename from user/downloading-installing-upgrading/version-scheme.md
rename to developer/releases/version-scheme.md
index b07697813..da4ccf042 100644
--- a/user/downloading-installing-upgrading/version-scheme.md
+++ b/developer/releases/version-scheme.md
@@ -10,7 +10,6 @@ ref: 151
title: Version Scheme
---
-
Beginning with R3 release, we change (and formalise) the versioning scheme.
From now on, it will be as follows.
@@ -84,7 +83,7 @@ should be another RC. If, based on remaining issues, the Committee decides to
release final, then the Committee agrees upon the release date, which should be
no later than a week after.
-
+
Bug priorities
--------------
@@ -155,4 +154,3 @@ Check installed version
If you want to know which version you are running, for example to report
an issue, you can either check in the Qubes Manager menu under About / Qubes OS or in the file /etc/qubes-release in dom0. For the latter you can use a command like `cat /etc/qubes-release` in a dom0 terminal.
-
diff --git a/developer/services/admin-api-table.md b/developer/services/admin-api-table.md
new file mode 100644
index 000000000..d5426419a
--- /dev/null
+++ b/developer/services/admin-api-table.md
@@ -0,0 +1,11 @@
+---
+lang: en
+layout: fullscreen
+permalink: /doc/admin-api/table/
+ref: 249
+title: Admin API Table
+---
+
+This page displays the fullscreen table from [Admin API](/doc/admin-api/).
+
+{% include admin-api-table.md %}
diff --git a/developer/services/admin-api.md b/developer/services/admin-api.md
index 66e00b704..036782822 100644
--- a/developer/services/admin-api.md
+++ b/developer/services/admin-api.md
@@ -1,8 +1,9 @@
---
lang: en
-layout: doc-full
+layout: doc
permalink: /doc/admin-api/
redirect_from:
+- /doc/qubes-admin-api/
- /doc/mgmt/
- /doc/mgmt1/
- /doc/mgmt-architecture/
@@ -11,6 +12,8 @@ ref: 36
title: Admin API
---
+_You may also be interested in the article
+[Introducing the Qubes Admin API](/news/2017/06/27/qubes-admin-api/)._
## Goals
@@ -37,7 +40,7 @@ TBD
## Components
-
+
A central entity in the Qubes Admin API system is a `qubesd` daemon, which
holds information about all domains in the system and mediates all actions (like
@@ -58,93 +61,11 @@ yet documented.
The API should be implemented as a set of qrexec calls. This is to make it easy
to set the policy using current mechanism.
-| call | dest | argument | inside | return | note |
-| ------------------------------------- | --------- | --------- | ----------------------------------------- | --------------------------------------------------------- | ---- |
-| `admin.vmclass.List` | `dom0` | - | - | `\n` |
-| `admin.vm.List` | `dom0|` | - | - | ` class= state=\n` |
-| `admin.vm.Create.` | `dom0` | template | `name= label=
Ready to get started with Qubes? Here's what you need to know after
installing.
-
- Getting Started
+
+ How to Get Started
diff --git a/introduction/issue-tracking.md b/introduction/issue-tracking.md
new file mode 100644
index 000000000..3fa3863a8
--- /dev/null
+++ b/introduction/issue-tracking.md
@@ -0,0 +1,356 @@
+---
+lang: en
+layout: doc
+permalink: /doc/issue-tracking/
+redirect_from:
+- /doc/reporting-bugs/
+- /en/doc/reporting-bugs/
+- /doc/BugReportingGuide/
+- /wiki/BugReportingGuide/
+- /reporting-bugs/
+- /bug/
+- /bugs/
+- /bug-report/
+- /bug-reports/
+ref: 121
+title: Issue Tracking
+---
+
+We use [GitHub Issues](https://docs.github.com/en/issues) as our [issue
+tracking system](https://en.wikipedia.org/wiki/Issue_tracking_system). All
+issues pertaining to the Qubes OS Project (including auxiliary infrastructure
+such as this website) are tracked in
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues).
+
+## How to open a new issue
+
+First, let's make sure the issue tracker is the right place.
+
+### I would like to report a security vulnerability
+
+Please see [Reporting Security Issues in Qubes
+OS](/security/#reporting-security-issues-in-qubes-os).
+
+### I need help, have a question, or want to discuss something
+
+Please see [Help, Support, Mailing Lists, and Forum](/support/).
+
+### I see something that should be changed in the documentation
+
+We encourage you to submit the change yourself! Please see the [Documentation
+Guidelines](/doc/doc-guidelines/) for instructions on how to do so. If it's
+something you can't do yourself, please proceed to the next section.
+
+### I still want to open an issue
+
+1. Carefully read our issue tracking [guidelines](#guidelines). If your issue
+ would violate any of the guidelines, **stop**. Please do not submit it.
+2. [Search through the existing issues](#search-tips), both open and closed, to
+ see if your issue already exists. If it does, **stop**. [Do not open a
+ duplicate.](/doc/issue-tracking/#new-issues-should-not-be-duplicates-of-existing-issues)
+ Instead, comment on the existing issue.
+3. Go [here](https://github.com/QubesOS/qubes-issues/issues/new/choose).
+4. Select the [type](#type) of issue you want to open.
+5. Enter a descriptive title.
+6. Do not delete the provided issue template. Fill out every applicable
+ section.
+7. Make sure to mention any relevant documentation and other issues you've
+ already seen. We don't know what you've seen unless you tell us. If you
+ don't list it, we'll assume you haven't seen it.
+8. If any sections of the issue template are *truly* not applicable, you may
+ remove them, **except for the documentation and related issues sections**.
+9. Submit your issue.
+10. Respond to any questions the official team asks. For example, you may be
+ asked to provide specific logs or other additional information.
+
+Eventually, your issue may be closed. See [how issues get
+closed](/doc/issue-tracking/#how-issues-get-closed) for details about when,
+why, and how this occurs.
+
+## Labels, Milestones, and Projects
+
+Labels, milestones, and projects are features of GitHub's issue tracking system
+that we use to keep
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) organized.
+
+### Labels
+
+Only Qubes team members have permission to modify
+[labels](https://github.com/QubesOS/qubes-issues/labels) and
+[milestones](https://github.com/QubesOS/qubes-issues/milestones). Many labels
+and milestones have descriptions on them that can be viewed either in their
+respective lists or by hovering over them. Let's go over some of the most
+important ones.
+
+#### Type
+
+There are three **types**: `T: bug`, `T: enhancement`, and `T: task`.
+
+- `T: bug` --- Type: bug report. A problem or defect resulting in unintended
+ behavior in something that exists.
+- `T: enhancement` --- Type: enhancement. A new feature that does not yet exist
+ **or** improvement of existing functionality.
+- `T: task` --- Type: task. An action item that is neither a bug nor an
+ enhancement.
+
+Every open issue should have **exactly one** type. An open issue should not
+have more than one type, and it should not lack a type entirely. Bug reports
+are for things that already exist. If something doesn't exist yet, but you
+think it should exist, then `T: enhancement`. If something already exists and
+could be improved in some way, `T: enhancement` is appropriate. `T: task` is
+for issues that fall under under neither `T: bug` nor `T: enhancement`.
+
+#### Priority
+
+There are several **priority** levels ranging from `P: minor` to `P: blocker`
+(see [here](https://github.com/QubesOS/qubes-issues/labels?q=P%3A) for the full
+list). Every open issue should have **exactly one** priority. An open issue
+should not have more than one priority, and it should not lack a priority
+entirely.
+
+#### Component
+
+There are many **component** labels, each beginning with `C:` (see
+[here](https://github.com/QubesOS/qubes-issues/labels?page=2&q=C%3A) for the
+full list). Every open issue should have **at least one** component. An open
+issue may have more than one component, but it should not lack a component
+entirely. When no other component applies, use `C: other`.
+
+### Milestones
+
+The issue tracker has several
+[milestones](https://github.com/QubesOS/qubes-issues/milestones). Every issue
+should be assigned to **exactly one** milestone. The issue tracker does not
+allow assigning an issue to more than one milestone. If an issue is already
+assigned to a milestone, assigning it to a different one will *replace* the
+existing milestone assignment. No open issue should lack a milestone
+assignment.
+
+Most milestones correspond to specific Qubes OS releases. A bug report assigned
+to a release milestone indicates an alleged bug *in* that Qubes OS release. A
+task or enhancement assigned to a release milestone indicates that the goal is
+to implement or do that thing *in* or *for* that Qubes OS release.
+
+The `TBD` (To Be Determined) milestone is for enhancements or tasks that will
+be specific to a Qubes OS release but have yet to be assigned to a specific
+release milestone. Bug reports should never be assigned to this milestone,
+because every bug is a problem or defect in something that already exists.
+
+The `Ongoing` milestone is for issues that are independent of the Qubes OS
+release cycle, including (but not limited to) website, documentation, and
+project management issues. These are issues that will never be assigned to a
+specific Qubes OS release milestone.
+
+### Projects
+
+The issue tracker has several
+[projects](https://github.com/QubesOS/qubes-issues/projects). A project is a
+way to create a group of multiple related issues. This is the preferred method
+of grouping issues, whereas trying to use normal issues as "meta-issues" or
+"epics" is discouraged.
+
+## Search Tips
+
+[Search both open and closed
+issues.](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue)
+For example, you may be experiencing a bug that was just fixed, in which case
+the report for that bug is probably closed. In this case, it would be useful to
+view [all bug reports, both open and closed, with the most recently updated
+sorted to the
+top](https://github.com/QubesOS/qubes-issues/issues?q=label%3Abug+sort%3Aupdated-desc).
+
+[Search using labels.](https://github.com/QubesOS/qubes-issues/labels) For
+example, you can search issues by priority
+([blocker](https://github.com/QubesOS/qubes-issues/labels/P%3A%20blocker),
+[critical](https://github.com/QubesOS/qubes-issues/labels/P%3A%20critical),
+[major](https://github.com/QubesOS/qubes-issues/labels/P%3A%20major), etc.) and
+by component
+([core](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+core%22),
+[manager/widget](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22C%3A+manager%2Fwidget%22+),
+[Xen](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+Xen%22),
+etc.).
+
+You can also try searching by
+[milestone](https://github.com/QubesOS/qubes-issues/milestones) and by
+[project](https://github.com/QubesOS/qubes-issues/projects).
+
+## Guidelines
+
+### The issue tracker is not a discussion forum
+
+The issue tracker is a tool to help the developers be more productive and
+efficient in their work. It is not a place for discussion. If you wish to
+discuss something in the issue tracker, please do so on the forum or mailing
+lists (see [Help, Support, Mailing Lists, and Forum](/support/)). You can
+simply link to the relevant issue in your discussion post.
+
+This guideline is important for keeping issues focused on *actionable
+information*, which helps the developers to stay focused on their work. When
+developers come back to an issue to work on it, we do not want them to have to
+sift through a large number of unnecessary comments before they can get
+started. In many cases, an issue that gets "too big" essentially becomes more
+trouble than it's worth, and no developer will touch it (also see [every issue
+must be about a single, actionable
+thing](#every-issue-must-be-about-a-single-actionable-thing)). In these cases,
+we sometimes have to close the issue and open a new one. This is a waste of
+energy for everyone involved, so we ask that everyone help to avoid repeating
+this pattern.
+
+### Do not submit questions
+
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is not the place
+to ask questions. This includes, but is not limited to, troubleshooting
+questions and questions about how to do things with Qubes. Instead, see [Help,
+Support, Mailing Lists, and Forum](/support/) for appropriate place to ask
+questions. By contrast,
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is meant for
+tracking more general bugs, enhancements, and tasks that affect a broad range
+of Qubes users.
+
+### Use the issue template
+
+When you open a new issue, an issue template is provided for you. Please use
+it. Do not delete it. The issue template is carefully designed to elicit
+important information. Without this information, the issue is likely to be
+incomplete. (If certain sections are not applicable, you may remove them, but
+please do so only sparingly and only if they are *truly* not applicable.)
+
+It is also important to note the placement and content of the HTML comments in
+the issue template. These help us to have issues with a consistent format.
+
+### Every issue must be about a single, actionable thing
+
+If your issue is not actionable, please see [Help, Support, Mailing Lists, and
+Forum](/support/) for the appropriate place to post it. If your issue would be
+about more than one thing, file them as separate issues instead. This means we
+should generally not try to use a single issue as a "meta" or "epic" issue that
+exists only to group, contain, or track other issues. Instead, when there is a
+need to group multiple related issues together, use
+[projects](https://github.com/QubesOS/qubes-issues/projects).
+
+This guideline is extremely important for making the issue tracker a useful
+tool for the developers. When an issue is too big and composite, it becomes
+intractable and drastically increases the likelihood that nothing will get
+done. Such issues also tend to encourage an excessive amount of general
+discussion that is simply not appropriate for a technical issue tracker (see
+[the issue tracker is not a discussion
+forum](#the-issue-tracker-is-not-a-discussion-forum)).
+
+### New issues should not be duplicates of existing issues
+
+Before you submit an issue, check to see whether it has already been reported.
+Search through the existing issues -- both open and closed -- by typing your
+key words in the **Filters** box. If you find an issue that seems to be similar
+to yours, read through it. If you find an issue that is the same as or subsumes
+yours, leave a comment on the existing issue rather than filing a new one, even
+if the existing issue is closed. If an issue affects more than one Qubes
+version, we usually keep only one issue for all versions. The Qubes team will
+see your comment and reopen the issue, if appropriate. For example, you can
+leave a comment with additional information to help the maintainer debug it.
+Adding a comment will subscribe you to email notifications, which can be
+helpful in getting important updates regarding the issue. If you don't have
+anything to add but still want to receive email updates, you can click the
+"Subscribe" button at the side or bottom of the comments.
+
+### Every issue must be of a single type
+
+Every issue must be exactly one of the following types: a bug report (`bug`), a
+feature or improvement request (`enhancement`), or a task (`task`). Do not file
+multi-typed issues. Instead, file multiple issues of distinct types. The Qubes
+team will classify your issue according to its type.
+
+### New issues should include all relevant information
+
+When you file a new issue, you should be sure to include the version of Qubes
+you're using, as well as versions of related software packages ([how to copy
+information out of dom0](/doc/how-to-copy-from-dom0/)). If your issue is
+related to hardware, provide as many details as possible about the hardware. A
+great way to do this is by [generating and submitting a Hardware Compatibility
+List (HCL) report](/doc/hcl/#generating-and-submitting-new-reports), then
+linking to it in your issue. You may also need to use command-line tools such
+as `lspci`. If you're reporting a bug in a package that is in a
+[testing](/doc/testing/) repository, please reference the appropriate issue in
+the [updates-status](https://github.com/QubesOS/updates-status/issues)
+repository. Project maintainers really appreciate thorough explanations. It
+usually helps them address the problem more quickly, so everyone wins!
+
+### There are no guarantees that your issue will be addressed
+
+Keep in mind that
+[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is an issue
+tracker, not a support system. Creating a new issue is simply a way for you to
+submit an item for the Qubes team's consideration. It is up to the Qubes team
+to decide whether or how to address your issue, which may include closing the
+issue without taking any action on it. Even if your issue is kept open,
+however, you should not expect it to be addressed within any particular time
+frame, or at all. At the time of this writing, there are well over one thousand
+open issues in [qubes-issues](https://github.com/QubesOS/qubes-issues/issues).
+The Qubes team has its own roadmap and priorities, which will govern the manner
+and order in which open issues are addressed.
+
+## How issues get closed
+
+If the Qubes developers make a code change that resolves an issue, then the
+issue will typically be [closed from the relevant commit or merged pull request
+(PR)](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-issues/linking-a-pull-request-to-an-issue).
+
+### Bug reports
+
+In the case of bugs, the package containing the change will move to the
+appropriate [testing](/doc/testing/) repository, then to the appropriate stable
+repository. If you so choose, you can test the fix while it's in the
+[testing](/doc/testing/) repository, or you can wait for it to land in the
+stable repository. If, after testing the fix, you find that it does not really
+fix the reported bug, please leave a comment on the issue explaining the
+situation. When you do, we will receive a notification and respond on the issue
+or reopen it (or both). Please **do not** create a duplicate issue or attempt
+to contact the developers individually about a problem.
+
+### Resolution
+
+In other cases, an issue may be closed with a specific resolution, such as `R:
+invalid`, `R: duplicate`, or `R: won't fix`. Each of these labels has a
+description that explains the label. We'll also leave a comment explaining why
+we're closing the issue with one of these specific resolutions. If the issue is
+closed without one of these specific resolutions, then it means, by default,
+that the reported bug was fixed or the requested enhancement was implemented.
+
+### Backports
+
+Issues in GitHub can only be open or closed, but, when it comes to bugs that
+affect multiple versions of Qubes OS, there are several possible states:
+
+1. Not fixed yet
+2. Fix developed but not yet committed (PR open)
+3. Fix committed (PR merged), but update not yet pushed to any repo
+4. Update pushed to testing repo for the most recent development version
+5. Update pushed to stable repo for the most recent development version
+6. Update backported to stable version(s) and pushed to the testing repo
+7. Update pushed to stable repo of stable version(s)
+
+We close issues at step 3. Then, as updates are released, the issue
+automatically gets the appropriate `current-testing` (`rX.Y-*-cur-test`) and
+`stable` (`rX.Y-*-stable`) labels. Based on these labels, it's possible to
+select issues waiting for step 6 (see [issues by
+release](https://github.com/QubesOS/qubes-issues#issues-by-release)).
+
+Therefore, if you see that an issue is closed, but the fix is not yet available
+to you, be aware that it may be at an intermediate stage of this process
+between issue closure and the update being available in whichever repos you
+have enabled in whichever version of Qubes you're using.
+
+In order to assist with this, we have a label called [backport
+pending](https://github.com/QubesOS/qubes-issues/labels/backport%20pending),
+which means, "The fix has been released for the testing release but is pending
+backport to the stable release." Our infrastructure will attempt to apply this
+label automatically, when appropriate, but it is not perfect, and the
+developers may be need to adjust it manually.
+
+## See also
+
+- [Help, Support, Mailing Lists, and Forum](/support/)
+- [Testing New Releases and Updates](/doc/testing/)
+- [How to Contribute](/doc/contributing/)
+- [Contributing Code](/doc/contributing/#contributing-code)
+- [Package Contributions](/doc/package-contributions/)
+- [Documentation Guidelines](/doc/doc-guidelines/)
diff --git a/introduction/privacy.md b/introduction/privacy.md
new file mode 100644
index 000000000..8c949e888
--- /dev/null
+++ b/introduction/privacy.md
@@ -0,0 +1,97 @@
+---
+lang: en
+layout: doc
+permalink: /privacy/
+redirect_from:
+- /en/privacy/
+- /doc/privacy/
+- /wiki/privacy/
+ref: 243
+title: Privacy Policy
+---
+
+The short version is that we try to respect your privacy as much as possible.
+We absolutely do not sell any user data. In fact, we go out of our way to help
+you keep your data private from everyone, including us. For example, from the
+moment you [install Qubes OS](/doc/installation-guide/), we offer to set up
+[Whonix](https://www.whonix.org/) so that all of your updates are routed
+through [Tor](https://www.torproject.org/).
+
+## Website
+
+For the legally-required boilerplate, see [Website Privacy
+Policy](/website-privacy-policy/).
+
+This is just a static website generated with Jekyll and hosted from GitHub
+Pages. We try to use as little JavaScript as possible. We host all resources
+locally (no third-party CDNs) so that you only have to connect to one domain.
+This site should be easy to browse using Tor Browser and with scripts blocked.
+We also have an [onion
+service](http://qubesosfasa4zl44o4tws22di6kepyzfeqv3tg4e3ztknltfxqrymdad.onion/)
+(access is not logged). We even go out of our way to make it easy to download
+[this website's git repo](https://github.com/QubesOS/qubesos.github.io),
+including all the website source code, so that you can host this entire site
+from your own local machine offline. Better yet, we've specifically written all
+of the [documentation](/doc/) in Markdown so that the plain text can be enjoyed
+from the comfort of your terminal. Here's the
+[repo](https://github.com/QubesOS/qubes-doc). (By the way, Git tags on our
+repos are PGP-signed so you can [verify](/doc/verifying-signatures) the
+authenticity of the content.) Obviously, we don't use any ads or trackers, but
+this is still a public website, so man-in-the-middle attacks and such are
+always a possibility. Please be careful. See [FAQ: Should I trust this
+website?](/faq/#should-i-trust-this-website)
+
+## Update Servers and Repositories
+
+We provide repositories at and
+.
+
+We collect and store standard server access and error logs, which include IP
+addresses. We use this data for generating [Qubes userbase
+statistics](/statistics/) and for incident response.
+
+The data is retained for up to three months so that we can re-calculate the
+previous two months' statistics in case anything goes wrong. After that, the
+data is deleted. We never sell the data to anyone or share it with any third
+party.
+
+If you would like to hide your IP address from us, we strongly encourage it and
+are happy to help you do so! Simply choose the Whonix option to route all of
+your updates over Tor when [installing Qubes OS](/doc/installation-guide/).
+
+## Onion Services
+
+We provide an [onion
+service](http://www.qubesosfasa4zl44o4tws22di6kepyzfeqv3tg4e3ztknltfxqrymdad.onion)
+for the website and onion service mirrors of the repositories. Access to these
+servers is not logged.
+
+## Mirrors
+
+There are also other third-party mirrors hosted by volunteers. These are used
+both for [ISO downloads](/downloads/#mirrors) and
+[updates](#update-servers-and-repositories). We have no control over what data
+these mirrors collect or with whom they share it. Please see the privacy policy
+of each respective mirror operator.
+
+## Qubes OS
+
+We have specifically designed Qubes OS so that it is not possible to collect
+any data directly from Qubes OS installations. In other words, Qubes OS does
+not have the ability to "phone home" and is intentionally architected to forbid
+that from happening. This is mainly because we have ensured that dom0 has no
+network access.
+
+We don't want the ability to collect any data directly from Qubes OS
+installations, because if anyone has that power, then the system is not secure.
+We use Qubes OS ourselves as a daily driver for our work and personal
+lives, so our interests are aligned with yours. We want privacy too!
+Thankfully, Qubes OS is free and open-source software, so you don't have to
+take our word for it.
+
+Of course, third-party software (including other operating systems) running
+inside of Qubes OS may not be as privacy-respecting, so please be mindful of
+what you install. We have no control over such third-party software.
+
+For more information, please see [FAQ: How does Qubes OS provide
+privacy?](/faq/#how-does-qubes-os-provide-privacy)
diff --git a/introduction/reporting-bugs.md b/introduction/reporting-bugs.md
deleted file mode 100644
index a6a2fda2d..000000000
--- a/introduction/reporting-bugs.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /doc/reporting-bugs/
-redirect_from:
-- /en/doc/reporting-bugs/
-- /doc/BugReportingGuide/
-- /wiki/BugReportingGuide/
-- /reporting-bugs/
-- /bug/
-- /bugs/
-- /bug-report/
-- /bug-reports/
-ref: 121
-title: Reporting Bugs and Other Issues
----
-
-All issues pertaining to the Qubes OS Project (including auxiliary infrastructure such as the [website](/)) are tracked in [qubes-issues](https://github.com/QubesOS/qubes-issues/issues), our GitHub issue tracker.
-If you're looking for help, please see [Help, Support, Mailing Lists, and Forum](/support/).
-
-## Important ##
-
-- **To disclose a security issue confidentially, please see the [Security](/security/) page.**
-- **In all other cases, please do not email individual developers about issues.**
-- **Please note that many issues can be resolved by reading the [documentation](/doc/).**
-- **If you see something that should be changed in the documentation, [submit a change](/doc/doc-guidelines/).**
-
-## Search Tips ##
-
-[Search both open and closed issues.](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue)
-For example, you may be experiencing a bug that was just fixed, in which case the report for that bug is probably closed.
-In this case, it would be useful to view [all bug reports, both open and closed, with the most recently updated sorted to the top](https://github.com/QubesOS/qubes-issues/issues?q=label%3Abug+sort%3Aupdated-desc).
-
-[Search using labels.](https://github.com/QubesOS/qubes-issues/labels)
-For example, you can search issues by priority ([blocker](https://github.com/QubesOS/qubes-issues/labels/P%3A%20blocker), [critical](https://github.com/QubesOS/qubes-issues/labels/P%3A%20critical), [major](https://github.com/QubesOS/qubes-issues/labels/P%3A%20major), etc.) and by component ([core](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+core%22), [manager/widget](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22C%3A+manager%2Fwidget%22+), [Xen](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22C%3A+Xen%22), etc.).
-
-Only Qubes team members can apply labels.
-Every issue must have exactly one **type** (`T: bug`, `T: enhancement`, or `T: task`), exactly one **priority** (e.g., `P: major`), and at least one **component** (e.g., `C: core`).
-Issues may have additional labels, if applicable (e.g., `crypto`, `ux`).
-
-## Issue tracker guidelines ##
-
-### The issue tracker is not a discussion forum ###
-
-The issue tracker is a tool to help the developers be more productive and efficient in their work.
-It is not a place for discussion.
-If you wish to discuss something in the issue tracker, please do so on the forum or mailing lists (see [Help, Support, Mailing Lists, and Forum](/support/)).
-You can simply link to the relevant issue in your discussion post.
-
-This guideline is important for keeping issues focused on *actionable information*, which helps the developers to stay focused on their work.
-When developers come back to an issue to work on it, we do not want them to have to sift through a large number of unnecessary comments before they can get started.
-In many cases, an issue that gets "too big" essentially becomes more trouble than it's worth, and no developer will touch it (also see [every issue must be about a single, actionable thing](#every-issue-must-be-about-a-single-actionable-thing)).
-In these cases, we sometimes have to close the issue and open a new one.
-This is a waste of energy for everyone involved, so we ask that everyone help to avoid repeating this pattern.
-
-### Do not submit questions ###
-
-[qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is not the place to ask questions.
-This includes, but is not limited to, troubleshooting questions and questions about how to do things with Qubes.
-Instead, see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate place to ask questions.
-By contrast, [qubes-issues](https://github.com/QubesOS/qubes-issues/issues) is meant for tracking more general bugs, enhancements, and tasks that affect a broad range of Qubes users.
-
-### Use the issue template ###
-
-When you open a new issue, an issue template is provided for you.
-Please use it.
-Do not delete it.
-The issue template is carefully designed to elicit important information.
-Without this information, the issue is likely to be incomplete.
-(If certain sections are not applicable, you may remove them, but please do so only sparingly and only if they are *truly* not applicable.)
-
-It is also important to note the placement and content of the HTML comments in the issue template.
-These help us to have issues with a consistent format.
-
-### Every issue must be about a single, actionable thing ###
-
-If your issue is not actionable, please see [Help, Support, Mailing Lists, and Forum](/support/) for the appropriate place to post it.
-If your issue would be about more than one thing, file them as separate issues instead.
-This means we should generally not try to use a single issue as a "meta" or "epic" issue that exists only to group, contain, or track other issues.
-Instead, when there is a need to group multiple related issues together, use [projects](https://github.com/QubesOS/qubes-issues/projects).
-
-This guideline is extremely important for making the issue tracker a useful tool for the developers.
-When an issue is too big and composite, it becomes intractable and drastically increases the likelihood that nothing will get done.
-Such issues also tend to encourage an excessive amount of general discussion that is simply not appropriate for a technical issue tracker (see [the issue tracker is not a discussion forum](#the-issue-tracker-is-not-a-discussion-forum)).
-
-### New issues should not be duplicates of existing issues ###
-
-Before you submit an issue, check to see whether it has already been reported.
-Search through the existing issues -- both open and closed -- by typing your key words in the **Filters** box.
-If you find an issue that seems to be similar to yours, read through it.
-If you find an issue that is the same as or subsumes yours, leave a comment on the existing issue rather than filing a new one, even if the existing issue is closed.
-If an issue affects more than one Qubes version, we usually keep only one issue for all versions.
-The Qubes team will see your comment and reopen the issue, if appropriate.
-For example, you can leave a comment with additional information to help the maintainer debug it.
-Adding a comment will subscribe you to email notifications, which can be helpful in getting important updates regarding the issue.
-If you don't have anything to add but still want to receive email updates, you can click the "Subscribe" button at the side or bottom of the comments.
-
-### Every issue must be of a single type ###
-
-Every issue must be exactly one of the following types: a bug report (`bug`), a feature or improvement request (`enhancement`), or a task (`task`).
-Do not file multi-typed issues.
-Instead, file multiple issues of distinct types.
-The Qubes team will classify your issue according to its type.
-
-### New issues should include all relevant information ###
-
-When you file a new issue, you should be sure to include the version of Qubes you're using, as well as versions of related software packages ([how to copy information out of dom0](/doc/how-to-copy-from-dom0/)).
-If your issue is related to hardware, provide as many details as possible about the hardware.
-A great way to do this is by [generating and submitting a Hardware Compatibility List (HCL) report](/doc/hcl/#generating-and-submitting-new-reports), then linking to it in your issue.
-You may also need to use command-line tools such as `lspci`.
-If you're reporting a bug in a package that is in a [testing](/doc/testing/) repository, please reference the appropriate issue in the [updates-status](https://github.com/QubesOS/updates-status/issues) repository.
-Project maintainers really appreciate thorough explanations.
-It usually helps them address the problem more quickly, so everyone wins!
-
-### There are no guarantees that your issue will be addressed ###
-
-Keep in mind that `qubes-issues` is an issue tracker, not a support system.
-Creating a new issue is simply a way for you to submit an item for the Qubes team's consideration.
-It is up to the Qubes team to decide whether or how to address your issue, which may include closing the issue without taking any action on it.
-Even if your issue is kept open, however, you should not expect it to be addressed within any particular time frame, or at all.
-At the time of this writing, there are well over one thousand open issues in `qubes-issues`.
-The Qubes team has its own roadmap and priorities, which will govern the manner and order in which open issues are addressed.
-
-## Following up afterward ##
-
-If the Qubes developers make a code change that resolves your issue, then your GitHub issue will typically be closed from the relevant patch message.
-After that, the package containing the fix will move to the appropriate [testing](/doc/testing/) repository, then to the appropriate stable repository.
-If you so choose, you can test the fix while it's in the [testing](/doc/testing/) repository, or you can wait for it to land in the stable repository.
-If, after testing the fix, you find that it does not really fix your bug, please leave a comment on your issue explaining the situation.
-When you do, we will receive a notification and respond on your issue or reopen it (or both).
-Please **do not** create a duplicate issue or attempt to contact the developers individually about your problem.
-
-In other cases, your issue may be closed with a specific resolution, such as `R: invalid`, `R: duplicate`, or `R: won't fix`.
-Each of these labels has a description that explains the label.
-We'll also leave a comment explaining why we're closing the issue with one of these specific resolutions.
-If the issue is closed without one of these specific resolutions, then it means, by default, that your reported bug was fixed or your requested enhancement was implemented.
-
-## See also ##
-
-- [Help, Support, Mailing Lists, and Forum](/support/)
-- [Testing New Releases and Updates](/doc/testing/)
-- [How to Contribute](/doc/contributing/)
-- [Contributing Code](/doc/contributing/#contributing-code)
-- [Package Contributions](/doc/package-contributions/)
-- [Documentation Guidelines](/doc/doc-guidelines/)
-
diff --git a/introduction/screenshots.md b/introduction/screenshots.md
index d8d807577..1f4b04d0f 100644
--- a/introduction/screenshots.md
+++ b/introduction/screenshots.md
@@ -1,6 +1,6 @@
---
lang: en
-layout: default
+layout: site
permalink: /screenshots/
redirect_from:
- /media/
@@ -10,91 +10,90 @@ ref: 123
title: Screenshots
---
-
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-desktop.png)
+[](/attachment/doc/r4.0-xfce-desktop.png)
The default desktop environment is Xfce4.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-start-menu.png)
+[](/attachment/doc/r4.0-xfce-start-menu.png)
Starting applications from different domains (AppVMs) is very easy.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-three-domains-at-work.png)
+[](/attachment/doc/r4.0-xfce-three-domains-at-work.png)
In this example, the word processor runs in the “work” domain, which has been assigned the “blue” label. It is fully isolated from other domains, such as the “untrusted” domain (assigned the “red” label -- “Watch out!”, “Danger!”) used for random Web browsing, news reading, as well as from the "work-web" domain (assigned the "yellow" label), which is used for work-related Web browsing that is not security critical. Apps from different domains run in different AppVMs and have different X servers, filesystems, etc. Notice the different color frames (labels) and VM names in the titlebars. These are drawn by the trusted Window Manager running in Dom0, and apps running in domains cannot fake them:
* * * * *
-[](/attachment/wiki/QubesScreenshots/r2b3-windows-seamless-1.png)
+[](/attachment/doc/r2b3-windows-seamless-1.png)
Qubes Release 2 can also run Windows AppVMs in seamless mode, integrated onto the common Qubes trusted desktop, just like Linux AppVMs! The seamless GUI integration has been introduced in Qubes R2 Beta 3. This requires [Qubes Windows Tools](https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-tools.md) to be installed in the Windows VMs first.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r2b3-windows-seamless-filecopy.png)
+[](/attachment/doc/r2b3-windows-seamless-filecopy.png)
Windows AppVMs are fully integrated with the rest of the Qubes OS system, which includes things such as secure, policy governed, inter-VM file copy, clipboard, and generally our whole elastic qrexec infrastructure for secure inter-VM RPC! Starting with Qubes R2 Beta 3 we also support HVM-based templates allowing to instantly create many Windows AppVMs with shared "root filesystem" from the Template VM (but one should ensure their license allows for such instantiation of the OS in the template). Just like with Linux AppVMs!
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-programmers-desktop.png)
+[](/attachment/doc/r4.0-xfce-programmers-desktop.png)
Here we see Xfce4.14 Window Manager running in Dom0 (instead of KDE as on previous versions). Qubes supports customized Xfce4 in dom0 beginning with R2 Beta 2!
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-password-prompt.png)
+[](/attachment/doc/r4.0-password-prompt.png)
It is always clearly visible to which domain a given window belongs. Here it’s immediately clear that the passphrase-prompting window belongs to some domain with the “blue” label. When we look at the titlebar, we see “[qubes]”, which is the name of the actual domain. Theoretically, the untrusted application (here, the red Tor Browser running in a DisposableVM) beneath the prompt window could draw a similar looking window within its contents. In practice, this would be very hard, because it doesn’t know, e.g., the exact decoration style that is in use. However, if this is a concern, the user can simply try to move the more trusted window onto some empty space on the desktop such that no other window is present beneath it. Or, better yet, use the Expose-like effect (available via a hot-key). A malicious application from an untrusted domain cannot spoof the whole desktop because the trusted Window Manager will never let any domain “own” the whole screen. Its titlebar will always be visible.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-tray-icons.png)
+[](/attachment/doc/r4.0-xfce-tray-icons.png)
Qubes is all about seamless integration from the user’s point of view. Here you can see how it virtualizes tray icons from other domains. Notice the network icon is in red. This icon is in fact managed by the Network Manager running in a separate NetVM.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-manager-and-sysnet-network-prompt.png)
+[](/attachment/doc/r4.0-manager-and-sysnet-network-prompt.png)
All the networking runs in a special, unprivileged NetVM. (Notice the red frame around the Network Manager dialog box on the screen above.) This means that in the event that your network card driver, Wi-Fi stack, or DHCP client is compromised, the integrity of the rest of the system will not be affected! This feature requires Intel VT-d or AMD IOMMU hardware (e.g., Core i5/i7 systems)
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-software-update.png)
+[](/attachment/doc/r4.0-software-update.png)
Qubes lets you update all the software in all the domains all at once, in a centralized way. This is possible thanks to Qubes' unique TemplateVM technology. Note that the user is not required to shut down any AppVMs (domains) for the update process. This can be done later, at a convenient moment, and separately for each AppVM.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-copy-paste.png)
+[](/attachment/doc/r4.0-copy-paste.png)
Qubes supports secure copy-and-paste operations between AppVMs. Only the user can initiate a copy or paste operation using a special key combination (Ctrl-Shift-C/V). Other AppVMs have no access to the clipboard buffer, so they cannot steal data from the clipboard. Only the user decides which AppVM should be given access to the clipboard. (This is done by selecting the destination AppVM’s window and pressing the Ctrl-Shift-V combination.)
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-copy-to-other-appvm-1.png) [](/attachment/wiki/QubesScreenshots/r4.0-copy-to-other-appvm-2.png)
+[](/attachment/doc/r4.0-copy-to-other-appvm-1.png) [](/attachment/doc/r4.0-copy-to-other-appvm-2.png)
Qubes also supports secure file copying between AppVMs.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-open-in-dispvm-1.png) [](/attachment/wiki/QubesScreenshots/r4.0-open-in-dispvm-2.png)
+[](/attachment/doc/r4.0-open-in-dispvm-1.png) [](/attachment/doc/r4.0-open-in-dispvm-2.png)
Qubes' unique DisposableVMs (DispVMs) allow the user to open any file in a disposable VM in a matter of seconds! A file can be edited in a disposable VM, and any changes are projected back onto the original file. Currently, there is no way to mark files to be automatically opened in a disposable VM (one needs to right-click on the file and choose the "View in DisposableVM" or "Edit in DisposableVM" option), but this is planned for the R2 Beta 3 release.
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-convert-to-trusted-pdf-1.png) [](/attachment/wiki/QubesScreenshots/r4.1-converting-pdf.png)
+[](/attachment/doc/r4.0-convert-to-trusted-pdf-1.png) [](/attachment/doc/r4.1-converting-pdf.png)
Qubes provides an advanced infrastructure for programming inter-VM services, such as a PDF converter for untrusted files (which is described in [this article](https://blog.invisiblethings.org/2013/02/21/converting-untrusted-pdfs-into-trusted.html)).
* * * * *
-[](/attachment/wiki/QubesScreenshots/r4.0-manager-firewall.png)
+[](/attachment/doc/r4.0-manager-firewall.png)
Qubes provides a dedicated firewall that itself runs in an isolated FirewallVM.
@@ -102,6 +101,6 @@ Qubes provides a dedicated firewall that itself runs in an isolated FirewallVM.
And some more screenshots:
-[](/attachment/wiki/QubesScreenshots/r4.0-xfce-red-and-green-terminals.png)
+[](/attachment/doc/r4.0-xfce-red-and-green-terminals.png)
-[](/attachment/wiki/QubesScreenshots/r2b3-windows-seamless-2.png)
+[](/attachment/doc/r2b3-windows-seamless-2.png)
diff --git a/introduction/statistics.md b/introduction/statistics.md
index a1a6f6ca5..851a0e12a 100644
--- a/introduction/statistics.md
+++ b/introduction/statistics.md
@@ -1,6 +1,6 @@
---
lang: en
-layout: default
+layout: site
permalink: /statistics/
redirect_from:
- /counter/
@@ -51,24 +51,7 @@ For this purpose, we count an IP address as belonging to a Tor exit node if ther
### What kinds of data do you collect about Qubes users?
-We collect:
-
-- The IPv4 addresses that connect to the Qubes update servers
-- The number of requests from each IPv4 address
-- Standard server access and error logs
-
-We do not collect any other kinds of data about Qubes users.
-
-### How long is data about users retained?
-
-The data is retained for up to two months so that we can re-calculate the previous month's statistics in case anything goes wrong.
-After that, the data is deleted.
-
-### What do you do with data about users?
-
-We use it to create the statistics graph you see on this page.
-Nothing more.
-We do not sell or give this data to anyone.
+Please see our [Privacy Policy](/privacy/).
### Where can I find the raw data and source code?
@@ -76,4 +59,3 @@ The raw data is available [here](https://tools.qubes-os.org/counter/stats.json).
(This does not include any personally-identifying user data.)
Please note that the format of this data is not documented and may change any time if the developers feel the need to include something else.
The source code is available [here](https://github.com/woju/qubes-stats).
-
diff --git a/introduction/support.md b/introduction/support.md
index 8300ac399..2c41f123c 100644
--- a/introduction/support.md
+++ b/introduction/support.md
@@ -1,6 +1,6 @@
---
lang: en
-layout: sidebar
+layout: doc
permalink: /support/
redirect_from:
- /help/
@@ -15,66 +15,134 @@ ref: 122
title: Help, Support, Mailing Lists, and Forum
---
-Help and support for Qubes OS is available from the [documentation](/doc/), the
-[mailing lists](#mailing-lists), and our [forum](#forum) which are explained below. The Qubes OS
-Project does not offer paid support services.
+The Qubes community is here to help! Since Qubes is a security-oriented
+operating system, we want to make sure you [stay safe](#staying-safe) as you
+get the support you need, and we want to make sure our community remains a
+friendly place by ensuring we all follow the [Code of
+Conduct](/code-of-conduct/).
-Before asking for help, please check the [troubleshooting](/doc/#troubleshooting) section, the [FAQ](/faq/), and the rest of the [documentation](/doc/).
-Your question may already be answered there.
+## How to get help and support
-If you're looking for known issues or would like to file a bug report, please
-see the [issue tracker](/doc/reporting-bugs/). These issues are constantly being updated and may
-contain workarounds for problems that you're experiencing, so it's worth
-[searching the issue tracker](/doc/reporting-bugs/#search-tips) as a first step. However, please note that
-[the issue tracker is not a discussion forum](/doc/reporting-bugs/#the-issue-tracker-is-not-a-discussion-forum).
+First, let's see what kind of help you need.
+
+### I would like to report a security vulnerability
+
+That sounds more like you helping us! Thanks! Please see [Reporting Security
+Issues in Qubes OS](/security/#reporting-security-issues-in-qubes-os).
+
+### I have a problem or a question
+
+No worries! Here's how we recommend proceeding:
+
+1. Check the [documentation](/doc/). There may already be a page about it.
+ Specifically, check out the [How-to Guides](/doc/#how-to-guides) and
+ [Troubleshooting](/doc/#troubleshooting) sections.
+
+2. Search the [FAQ](/faq/). Your question might already be answered.
+
+3. Try [searching the issue tracker](/doc/issue-tracking/#search-tips). There
+ may already be an open **or closed** issue about your problem. The issue
+ tracker is constantly being updated with known bugs and may contain
+ workarounds for problems you're experiencing. If there any pinned issues at
+ the top, make sure to check them first!
+
+4. Try [searching the Qubes Forum](https://qubes-os.discourse.group/). There
+ may already be a matching topic.
+
+5. Try [searching the `qubes-users`
+ archives](https://www.mail-archive.com/qubes-users@googlegroups.com/). There
+ may have already been a relevant thread.
+
+### I didn't find a solution or an answer!
+
+Sorry to hear that! In that case, we recommend asking for help on the [Qubes
+Forum](https://qubes-os.discourse.group/) or on the [`qubes-users` mailing
+list](#qubes-users). Choose the venue you prefer, but please don't ask on both
+at the same time! Before you ask, please review our [discussion
+guidelines](#discussion-guidelines) and StackOverflow's advice on [how to ask
+good questions](https://stackoverflow.com/help/how-to-ask). Don't forget to
+[stay safe](#staying-safe)!
+
+### I don't need support, but I think I found a bug
+
+We'd be grateful if you reported it (but please make sure no one else has
+already reported it first)! Please see [Issue Tracking](/doc/issue-tracking/)
+for details.
+
+### I don't need support, but I'd like to request a feature
+
+No promises, but we'd be happy to consider it! Please see [Issue
+Tracking](/doc/issue-tracking/) for details.
+
+### I just want to discuss Qubes!
+
+Great! Head on over to the [Qubes Forum](https://qubes-os.discourse.group/) or
+the [`qubes-users` mailing list](#qubes-users).
+
+### How can I get involved and contribute?
+
+Thank you for asking! Please see [How to Contribute](/doc/contributing/) for
+all the ways you can do so.
## Staying safe
The Qubes mailing lists and forum are open to the public. The contents are
crawled by search engines and archived by third-party services outside of our
-control. Please do not send or post anything that you are not comfortable seeing
-discussed in public. If confidentiality is a concern, please use PGP encryption
-in an off-list email.
+control. Please do not send or post anything that you are not comfortable
+seeing discussed in public. If confidentiality is a concern, please use PGP
+encryption in an off-list email.
The Qubes community includes people from all walks of life and from around the
world. Individuals differ in areas of experience and technical expertise. You
-will come into contact with others whose views and agendas differ from your own.
-Everyone is free to write what they please, as long as it doesn't violate our
-[Code of Conduct](/code-of-conduct/). Be friendly and open, but do not believe everything you
-read. Use good judgment, and be especially careful when following instructions
-(e.g., copying commands) given by others on the lists.
-
-All official announcements from the [Qubes team](/team/) to a mailing list will be
-signed by the PGP key belonging to the team member who sends the announcement.
-However, anyone on a mailing list can choose to sign their messages, so the
-presence of a PGP signature does not indicate authority. How, then, should you
-sort the good advice from the bad?
- This is up to each individual to decide, but it helps to know that many members
-of our community have proven themselves knowledgeable through their
-[contributions](/doc/contributing/) to the project. Typically, these individuals sign their messages
-with the same key as (or another key authenticated by) the one they use to
-[sign their contributions](/doc/code-signing/).
+will come into contact with others whose views and agendas differ from your
+own. Everyone is free to write what they please, as long as it doesn't violate
+our [Code of Conduct](/code-of-conduct/). Be friendly and open, but do not
+believe everything you read. Use good judgment, and be especially careful when
+following instructions (e.g., copying commands) given by others on the lists.
+
+It's always possible that a bad actor could try to impersonate any member of
+the [Qubes team](/team/) anywhere on the Internet. Please don't assume that
+someone who claims to be an official Qubes team member really is one without an
+appropriate form of authentication, such as a [verified PGP-signed
+message](/security/verifying-signatures/). (But bear in mind that anyone can
+generate a key with any name on it and use it to PGP-sign a message, so the
+mere presence of a PGP signature does not indicate authority. Successful
+[verification](/security/verifying-signatures/) is what counts.) All official
+[news](/news/) can be authenticated by [verifying the
+signatures](/security/verifying-signatures/) on the relevant tags or commits in
+the [qubes-posts](https://github.com/QubesOS/qubes-posts) repository.
+
+Given that there may be impostors and others trying to lead you astray, how
+should you sort the good advice from the bad? This is up to each individual to
+decide, but it helps to know that many members of our community have proven
+themselves knowledgeable through their [contributions](/doc/contributing/) to
+the project. Often, these individuals sign their messages with the same key as
+(or another key authenticated by) the one they use to [sign their
+contributions](/doc/code-signing/).
For example, you might find it easier to trust advice from someone who has a
-proven track record of [contributing software packages](/doc/package-contributions/) or [contributing to the
-documentation](/doc/doc-guidelines/). It's unlikely that individuals who have worked hard to build
-good reputations for themselves through their contributions over the years would
-risk giving malicious advice in signed messages to public mailing lists. Since
-every contribution to the Qubes OS Project is publicly visible and
-cryptographically signed, anyone would be in a position to [verify](/security/verifying-signatures/) that these
-came from the same keyholder.
+proven track record of [contributing software
+packages](/doc/package-contributions/) or [contributing to the
+documentation](/doc/doc-guidelines/). It's unlikely that individuals who have
+worked hard to build good reputations for themselves through their
+contributions over the years would risk giving malicious advice in signed
+messages to public mailing lists. Since every contribution to the Qubes OS
+Project is publicly visible and cryptographically signed, anyone would be in a
+position to [verify](/security/verifying-signatures/) that these came from the
+same keyholder.
## Discussion guidelines
Qubes discussions mainly take place on `qubes-users`, `qubes-devel`, and our
-[forum](#forum), all of which are explained below. Most questions should be directed to
-`qubes-users` or the [forum](#forum). **Please do not send questions to individual
-Qubes developers.** By sending a message to the appropriate mailing list, you
-are not only giving others a chance to help you, but you may also be helping
-others by starting a public discussion about a shared problem or interest.
-
-These are open venues where people freely come together to discuss Qubes
-and voluntarily help each other out of mutual interest and good will. They are
+[forum](#forum), all of which are explained below. Most questions should be
+directed to `qubes-users` or the [forum](#forum). **Please do not send
+questions to individual Qubes developers.** By sending a message to the
+appropriate mailing list, you are not only giving others a chance to help you,
+but you may also be helping others by starting a public discussion about a
+shared problem or interest.
+
+These are open venues where people freely come together to discuss Qubes and
+voluntarily help each other out of mutual interest and good will. They are
*not* your personal, paid support service. **No one owes you a reply.** No one
here is responsible for solving your problems for you. Nonetheless, there are
many things you can do to make it more likely that you will receive a reply.
@@ -85,38 +153,38 @@ guidelines.
### Be polite and respectful
-Remember, no one here is under any obligation
-to reply to you. Think about your readers. Most of them are coming home after
-a long, hard day at work. The last thing they need is someone's temper
-tantrum. If you are rude and disrespectful, you are very
-likely to be ignored.
+Remember, no one here is under any obligation to reply to you. Think about your
+readers. Most of them are coming home after a long, hard day at work. The last
+thing they need is someone's temper tantrum. If you are rude and disrespectful,
+you are very likely to be ignored.
### Be concise
-Include only essential information. Most of your readers lead
-busy lives and have precious little time. We *want* to spend some of that
-time helping you, if we can. But if you ramble, it will be easier to skip
-over you and help someone else who gets right to the point.
+Include only essential information. Most of your readers lead busy lives and
+have precious little time. We *want* to spend some of that time helping you, if
+we can. But if you ramble, it will be easier to skip over you and help someone
+else who gets right to the point.
### Help us help you
-Tell us what you've already tried, and which
-documentation pages you've already read. Put yourself in your readers' shoes.
-What essential information would they require in order to be able to help
-you? Make sure to include that information in your message. A great way to
-provide your hardware details is by [generating and submitting a Hardware
-Compatibility List (HCL) report](/doc/hcl/#generating-and-submitting-new-reports), then linking to it in your
-message. [Ask questions the smart way.](http://www.catb.org/esr/faqs/smart-questions.html)
+Tell us what you've already tried, and which documentation pages you've already
+read. Put yourself in your readers' shoes. What essential information would
+they require in order to be able to help you? Make sure to include that
+information in your message. A great way to provide your hardware details is by
+[generating and submitting a Hardware Compatibility List (HCL)
+report](/doc/hcl/#generating-and-submitting-new-reports), then linking to it in
+your message. [Ask questions the smart
+way.](http://www.catb.org/esr/faqs/smart-questions.html)
### Be patient
-Do not "bump" a thread more than once every three days *at
-most*. If it seems like your messages to the mailing lists are consistently
-being ignored, make sure you're following the guidelines explained on this
-page. If you're already doing so but still not getting any replies, then it's
-likely that no one who knows the answer has had time to reply yet. Remember
-that the devs are very busy working on Qubes. They usually only have a chance
-to answer questions on the mailing lists once every several days.
+Do not "bump" a thread more than once every three days *at most*. If it seems
+like your messages to the mailing lists are consistently being ignored, make
+sure you're following the guidelines explained on this page. If you're already
+doing so but still not getting any replies, then it's likely that no one who
+knows the answer has had time to reply yet. Remember that the devs are very
+busy working on Qubes. They usually only have a chance to answer questions on
+the mailing lists once every several days.
### Be a good community member
@@ -132,17 +200,19 @@ to earn the good will of others. This does not mean that you will not receive
help. On the contrary, we are fortunate to have such a helpful and
understanding community that many of them spend hours of their personal time
helping complete strangers, including many who post anonymously. (Given the
-integration of Qubes with [Whonix](/doc/whonix/), we understand better than most the
-complexities of privacy and anonymity, and we know that many users have no
-other choice but to post anonymously.) You can read our project's [Code of
-Conduct](/code-of-conduct/) for more information.
+integration of Qubes with [Whonix](/doc/whonix/), we understand better than
+most the complexities of privacy and anonymity, and we know that many users
+have no other choice but to post anonymously.) You can read our project's [Code
+of Conduct](/code-of-conduct/) for more information.
### Report issues and submit changes in the right places
-The mailing lists and [forum](#forum) are good places to ask questions and discuss
-things. However, if you're submitting a more formal report, we'd prefer that
-you submit it to our [issue tracker](/doc/reporting-bugs/) so that it doesn't get overlooked.
-(However, please remember that [the issue tracker is not a discussion forum](/doc/reporting-bugs/#the-issue-tracker-is-not-a-discussion-forum).)
+The mailing lists and [forum](#forum) are good places to ask questions and
+discuss things. However, if you're submitting a more formal report, we'd prefer
+that you submit it to our [issue tracker](/doc/issue-tracking/) so that it
+doesn't get overlooked. (However, please remember that [the issue tracker is
+not a discussion
+forum](/doc/issue-tracking/#the-issue-tracker-is-not-a-discussion-forum).)
Likewise, if you see that something in the documentation should be changed,
don't simply point it out in a discussion venue. Instead, [submit the
change](/doc/doc-guidelines/).
@@ -150,9 +220,11 @@ change](/doc/doc-guidelines/).
### Moderation
The moderation team aims to enforce our [Code of Conduct](/code-of-conduct/).
-Beyond this, users should not expect any specific action from the moderation team.
-Specifically, users should not request that posts or messages be deleted or edited by a moderator.
-Users are reminded that, in most venues, anything posted will be sent out as an email to other others, and these emails cannot be deleted from others' inboxes.
+Beyond this, users should not expect any specific action from the moderation
+team. Specifically, users should not request that posts or messages be deleted
+or edited by a moderator. Users are reminded that, in most venues, anything
+posted will be sent out as an email to other others, and these emails cannot be
+deleted from others' inboxes.
### Specific mailing list rules and notes
@@ -163,11 +235,14 @@ which list is correct for your message.
#### Do not top-post
-[Top-posting](https://en.wikipedia.org/wiki/Posting_style#Top-posting) is placing your reply above the quoted message to which you're
-replying. Please refrain from doing this. Instead, either [interleave](https://en.wikipedia.org/wiki/Posting_style#Interleaved_style) your
-reply by placing parts of your message immediately below each quoted portion
-to which it is replying, or [bottom-post](https://en.wikipedia.org/wiki/Posting_style#Bottom-posting) by placing your entire reply below
-the quoted message to which you're replying.
+[Top-posting](https://en.wikipedia.org/wiki/Posting_style#Top-posting) is
+placing your reply above the quoted message to which you're replying. Please
+refrain from doing this. Instead, either
+[interleave](https://en.wikipedia.org/wiki/Posting_style#Interleaved_style)
+your reply by placing parts of your message immediately below each quoted
+portion to which it is replying, or
+[bottom-post](https://en.wikipedia.org/wiki/Posting_style#Bottom-posting) by
+placing your entire reply below the quoted message to which you're replying.
#### Use proper subject lines
@@ -178,79 +253,89 @@ in installer.")
#### Do not send duplicates
-If your message is not successfully sent to the list, it probably got caught
-in the spam filter. We check the spam filter regularly, so please be patient,
-and your message should be approved (and your email address added to the
-whitelist) within a few days.
+If your message is not successfully sent to the list, it probably got caught in
+the spam filter. We check the spam filter regularly, so please be patient, and
+your message should be approved (and your email address added to the whitelist)
+within a few days.
#### Keep the list CCed
-Keep the mailing list CCed throughout the conversation unless there's a
-special need for privacy (in which case, use PGP encryption). This increases
-the likelihood that a greater quantity of useful information will be
-available to everyone in the future.
+Keep the mailing list CCed throughout the conversation unless there's a special
+need for privacy (in which case, use PGP encryption). This increases the
+likelihood that a greater quantity of useful information will be available to
+everyone in the future.
#### Quote appropriately
-If you're replying to a thread (whether your own or
-someone else's), you should make sure to quote enough from previous messages
-in the thread so that people reading your message can understand the context
-without having to find and read earlier messages from that thread. Each reply
-should continue the conversation and, ideally, be readable as a conversation
-in itself. Do not quote advertisements in signatures or inline PGP signature
-blocks. (Quoting the latter interferes with the ability of programs like
-Enigmail to properly quote replies thereafter).
+If you're replying to a thread (whether your own or someone else's), you should
+make sure to quote enough from previous messages in the thread so that people
+reading your message can understand the context without having to find and read
+earlier messages from that thread. Each reply should continue the conversation
+and, ideally, be readable as a conversation in itself. Do not quote
+advertisements in signatures or inline PGP signature blocks. (Quoting the
+latter interferes with the ability of programs like Enigmail to properly quote
+replies thereafter).
#### English not required
-If you do not speak English, you should feel free to post in your own
-language. However, bear in mind that most members of the list can only read
-English. You may wish to include an automated translation in your message out
-of consideration for those readers. If you choose to write in English, please
-do not apologize for doing so poorly, as it is unnecessary. We understand and
-will ask for clarification if needed.
+If you do not speak English, you should feel free to post in your own language.
+However, bear in mind that most members of the list can only read English. You
+may wish to include an automated translation in your message out of
+consideration for those readers. If you choose to write in English, please do
+not apologize for doing so poorly, as it is unnecessary. We understand and will
+ask for clarification if needed.
#### Suggestions
-While we're generally open to hearing suggestions for new features, please
-note that we already have a pretty well defined [roadmap](https://github.com/QubesOS/qubes-issues/milestones), and it's rather
-unlikely that we will change our schedule in order to accommodate your
-request. If there's a particular feature you'd like to see in Qubes, a much
-more effective way to make it happen is to contribute a patch that implements
-it. We happily accept such contributions, provided they meet our standards.
-Please note, however, that it's always a good idea to field a discussion of
-your idea on the `qubes-devel` list before putting in a lot of hard work on
-something that we may not be able or willing to accept.
+While we're generally open to hearing suggestions for new features, please note
+that we already have a pretty well defined
+[roadmap](https://github.com/QubesOS/qubes-issues/milestones), and it's rather
+unlikely that we will change our schedule in order to accommodate your request.
+If there's a particular feature you'd like to see in Qubes, a much more
+effective way to make it happen is to contribute a patch that implements it. We
+happily accept such contributions, provided they meet our standards. Please
+note, however, that it's always a good idea to field a discussion of your idea
+on the `qubes-devel` list before putting in a lot of hard work on something
+that we may not be able or willing to accept.
#### Google Groups
While the mailing lists are implemented as Google Group web forums, a Google
account is in no way required, expected, or encouraged. Many discussants
(including most members of the Qubes team) treat these lists as conventional
-[mailing lists](https://en.wikipedia.org/wiki/Electronic_mailing_list), interacting with them solely through plain text email
-with [MUAs](https://en.wikipedia.org/wiki/Email_client) like [Thunderbird](https://www.thunderbird.net/) and [Mutt](http://www.mutt.org/). The Google Groups service is just
-free infrastructure, and we [distrust the infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure). This is why, for
-example, we encourage discussants to use [Split GPG](/doc/split-gpg/) to sign all of their
-messages to the lists, but we do not endorse the use of these Google Groups
-as web forums. For that, we have a separate, dedicated [forum](#forum).
+[mailing lists](https://en.wikipedia.org/wiki/Electronic_mailing_list),
+interacting with them solely through plain text email with
+[MUAs](https://en.wikipedia.org/wiki/Email_client) like
+[Thunderbird](https://www.thunderbird.net/) and [Mutt](http://www.mutt.org/).
+The Google Groups service is just free infrastructure, and we [distrust the
+infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure). This
+is why, for example, we encourage discussants to use [Split
+GPG](/doc/split-gpg/) to sign all of their messages to the lists, but we do not
+endorse the use of these Google Groups as web forums. For that, we have a
+separate, dedicated [forum](#forum).
## Mailing lists
-This section covers each of our individual [mailing lists](https://en.wikipedia.org/wiki/Electronic_mailing_list), with
-details about the purpose of each list and how to use it.
+This section covers each of our individual [mailing
+lists](https://en.wikipedia.org/wiki/Electronic_mailing_list), with details
+about the purpose of each list and how to use it. A Google account is **not**
+required for any of these mailing lists.
### qubes-announce
This is a read-only list for those who wish to receive only very important,
infrequent messages. Only the core Qubes team can post to this list. Only
-[Qubes Security Bulletins (QSBs)](/security/bulletins/), new stable releases, and end-of-life
-notices are announced here.
+[Qubes Security Bulletins (QSBs)](/security/qsb/), new stable releases,
+and end-of-life notices are announced here.
To subscribe, send a blank email to
-`qubes-announce+subscribe@googlegroups.com`. (Note: A Google account is *not*
+`qubes-announce+subscribe@googlegroups.com`. (Note: A Google account is **not**
required. Any email address will work.) To unsubscribe, send a blank email to
-`qubes-announce+unsubscribe@googlegroups.com`. This list also has an optional
-[Google Groups web interface](https://groups.google.com/group/qubes-announce).
+`qubes-announce+unsubscribe@googlegroups.com`. This list also has a
+[traditional mail
+archive](https://www.mail-archive.com/qubes-announce@googlegroups.com/) and an
+optional [Google Groups web
+interface](https://groups.google.com/group/qubes-announce).
### qubes-users
@@ -267,7 +352,8 @@ lists before sending a question. In addition, please make sure that you have
read and understood the following basic documentation prior to posting to the
list:
-* The [Installation Guide](/doc/installation-guide/), [System Requirements](/doc/system-requirements/), and [HCL](/doc/hcl/) (for problems
+* The [Installation Guide](/doc/installation-guide/), [System
+ Requirements](/doc/system-requirements/), and [HCL](/doc/hcl/) (for problems
related to installing Qubes OS)
* The [User FAQ](/faq/#users)
* The [documentation](/doc/) (for questions about how to use Qubes OS)
@@ -276,18 +362,21 @@ You don't have to subscribe in order to post to this list. However, subscribing
makes your messages less likely to be marked as spam and allows you to receive
messages sent directly to the list. To subscribe to the list, send a blank
email to `qubes-users+subscribe@googlegroups.com`. (Note: A Google account is
-*not* required. Any email address will work.) To post a message to the list,
+**not** required. Any email address will work.) To post a message to the list,
address your email to `qubes-users@googlegroups.com`. If your post does not
appear immediately, please allow time for moderation to occur. To unsubscribe,
send a blank email to `qubes-users+unsubscribe@googlegroups.com`. This list
-also has an optional [Google Groups web interface](https://groups.google.com/group/qubes-users) and
-[traditional mail archive](https://www.mail-archive.com/qubes-users@googlegroups.com/).
+also has a [traditional mail
+archive](https://www.mail-archive.com/qubes-users@googlegroups.com/) and an
+optional [Google Groups web
+interface](https://groups.google.com/group/qubes-users).
### qubes-devel
-This list is primarily intended for people who are interested in contributing to
-Qubes or who are willing to learn more about its architecture and
-implementation. Examples of topics and questions suitable for this list include:
+This list is primarily intended for people who are interested in contributing
+to Qubes or who are willing to learn more about its architecture and
+implementation. Examples of topics and questions suitable for this list
+include:
* Questions about why we made certain architecture or implementation decisions.
* For example: "Why did you implement XYZ this way and not the other way?"
@@ -299,61 +388,76 @@ implementation. Examples of topics and questions suitable for this list include:
You must be subscribed in order to post to this list. To subscribe, send a
blank email to `qubes-devel+subscribe@googlegroups.com`. (Note: A Google
-account is *not* required. Any email address will work.) To post a message to
+account is **not** required. Any email address will work.) To post a message to
the list, address your email to `qubes-devel@googlegroups.com`. If your post
does not appear immediately, please allow time for moderation to occur. To
unsubscribe, send a blank email to `qubes-devel+unsubscribe@googlegroups.com`.
-This list also has an optional [Google Groups web interface](https://groups.google.com/group/qubes-devel)
-and [traditional mail archive](https://www.mail-archive.com/qubes-devel@googlegroups.com/).
+This list also has a [traditional mail
+archive](https://www.mail-archive.com/qubes-devel@googlegroups.com/) and an
+optional [Google Groups web
+interface](https://groups.google.com/group/qubes-devel).
### qubes-project
-This list is for non-technical discussion and coordination around the
-Qubes OS project.
+This list is for non-technical discussion and coordination around the Qubes OS
+project.
Examples of topics or question suitable for this list include:
* Participation (talks, workshops, etc.) at upcoming events
* Project funding applications and strategies
* FOSS governance discussions
-* Most Github issues tagged "[business](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3Abusiness)"
+* Most Github issues tagged
+ [business](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3Abusiness)
+ or
+ [project management](https://github.com/QubesOS/qubes-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22project+management%22)
You don't have to subscribe in order to post to this list. However, subscribing
makes your messages less likely to be marked as spam and allows you to receive
messages sent directly to the list. To subscribe, send a blank email to
-`qubes-project+subscribe@googlegroups.com`. (Note: A Google account is *not*
+`qubes-project+subscribe@googlegroups.com`. (Note: A Google account is **not**
required. Any email address will work.) To post a message to the list, address
your email to `qubes-project@googlegroups.com`. If your post does not appear
immediately, please allow time for moderation to occur. To unsubscribe, send a
blank email to `qubes-project+unsubscribe@googlegroups.com`. This list also
-also has an optional [Google Groups web interface](https://groups.google.com/group/qubes-project).
+also has a [traditional mail
+archive](https://www.mail-archive.com/qubes-project@googlegroups.com/) and an
+optional [Google Groups web
+interface](https://groups.google.com/group/qubes-project).
### qubes-translation
-This list is for discussion around the localization and translation of Qubes OS,
-its documentation, and the website.
+This list is for discussion around the localization and translation of Qubes
+OS, its documentation, and the website.
Examples of topics or question suitable for this list include:
-* Questions about or issues with [Transifex](https://www.transifex.com/), the translation platform we use
+* Questions about or issues with [Transifex](https://www.transifex.com/), the
+ translation platform we use
* Who is managing localization for a given language
-* Most Github issues tagged "[localization](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3Alocalization)"
+* Most Github issues tagged
+ [localization](https://github.com/QubesOS/qubes-issues/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3Alocalization)
You don't have to subscribe in order to post to this list. However, subscribing
makes your messages less likely to be marked as spam and allows you to receive
messages sent directly to the list. To subscribe, send a blank email to
`qubes-translation+subscribe@googlegroups.com`. (Note: A Google account is
-*not* required. Any email address will work.) To post a message to the list,
+**not** required. Any email address will work.) To post a message to the list,
address your email to `qubes-translation@googlegroups.com`. If your post does
not appear immediately, please allow time for moderation to occur. To
unsubscribe, send a blank email to
`qubes-translation+unsubscribe@googlegroups.com`. This list also has an
-optional [Google Groups web interface](https://groups.google.com/group/qubes-translation).
+optional [Google Groups web
+interface](https://groups.google.com/group/qubes-translation).
## Forum
-The official [Qubes Forum](https://qubes-os.discourse.group) is a place where you can ask questions, get help, share tips and experiences, and more! For a long time, members of our community have sought a privacy-respecting forum experience with modern features that traditional mailing lists do not support. The open-source [Discourse](https://www.discourse.org/) platform fills this need for us, as it does for many other open-source projects. Thanks
-to their generous [free hosting for open source projects](https://blog.discourse.org/2018/11/free-hosting-for-open-source-v2/), we're pleased to be able to create this space for our community.
+The official [Qubes Forum](https://qubes-os.discourse.group) is a place where
+you can ask questions, get help, share tips and experiences, and more! For a
+long time, members of our community have sought a privacy-respecting forum
+experience with modern features that traditional mailing lists do not support.
+The open-source [Discourse](https://www.discourse.org/) platform fills this
+need for us, as it does for many other open-source projects.
### Why was this forum created?
@@ -363,7 +467,8 @@ privacy implications and user experience were unacceptable for many members of
our community, especially with the recent addition of a sign-in requirement to
view threads. Many of you value the lower barrier to entry, organization,
ease-of-use, and modern social features that today's forums support. Moreover,
-Discourse [features email integration](https://qubes-os.discourse.group/t/using-the-forum-via-email/533/1)
+Discourse [features email
+integration](https://qubes-os.discourse.group/t/using-the-forum-via-email/533/1)
for those who still prefer the traditional mailing list format.
### How is this different from our mailing lists?
@@ -382,34 +487,47 @@ decide where and how you want to join the conversation.
### Does this split the community?
Many open-source projects (such as Fedora and Debian) have both mailing lists
-and forums (and additional discussion venues). In fact, Qubes already had
-non-mailing-list discussion venues such as [IRC](#unofficial-chat-channels) and [Reddit](https://www.reddit.com/r/Qubes/) before this forum
-was introduced. We believe that this additional venue fosters the continued
-growth of community participation and improves everyone's experience. In
-addition, we fully expect that many community members -- especially the most
-active ones -- will choose to participate in both venues. (Again, for those who
-still prefer interacting via email, [Discourse supports that too](https://qubes-os.discourse.group/t/using-the-forum-via-email/533/1)!)
-
+and forums (and additional discussion venues). In fact, the Qubes OS Project
+already had non-mailing-list discussion venues such as
+[Reddit](https://www.reddit.com/r/Qubes/) before this forum was introduced. We
+believe that this additional venue fosters the continued growth of community
+participation and improves everyone's experience. In addition, we fully expect
+that many community members -- especially the most active ones -- will choose
+to participate in both venues. (Again, for those who still prefer interacting
+via email, [Discourse supports that
+too](https://qubes-os.discourse.group/t/using-the-forum-via-email/533/1)!)
-## Social media ##
+## Social media
-The Qubes OS Project has a presence on several social media platforms, including:
+The Qubes OS Project has a presence on several social media platforms,
+including:
* [Twitter](https://twitter.com/QubesOS)
* [Reddit](https://www.reddit.com/r/Qubes/)
* [Facebook](https://www.facebook.com/QubesOS/)
* [LinkedIn](https://www.linkedin.com/company/qubes-os/)
-Generally speaking, these are not intended to be primary support venues.
-(Those would be [qubes-users](#qubes-users) and the [forum](#forum).)
-Rather, these are primarily intended to be a way to more widely disseminate items published on the [news](/news/) page.
-If you use one of these platforms, you may find it convenient to follow the Qubes OS Project there as a way of receiving Qubes news.
+Generally speaking, these are not intended to be primary support venues. (Those
+would be [qubes-users](#qubes-users) and the [forum](#forum).) Rather, these
+are primarily intended to be a way to more widely disseminate items published
+on the [news](/news/) page. If you use one of these platforms, you may find it
+convenient to follow the Qubes OS Project there as a way of receiving Qubes
+news.
+
+## Unofficial venues
-## Unofficial chat channels
+If you find another venue on the Internet that is not listed here, it is
+**unofficial**, which means that the Qubes team does **not** monitor or
+moderate it. Please be especially careful in unofficial venues.
-The following unofficial chat channels are maintained by the community:
+(Note: If a Qubes team member discovers the venue and decides to pop in, that
+should not be taken as a commitment to monitor or moderate the venue. It still
+remains unofficial. Also, please make sure someone claiming to be a Qubes team
+member really is one. It could be an impostor!)
+
+For example, here are some unofficial chat channels we know about that are
+maintained by the community:
* Matrix, Qubes-related:
* Matrix, strictly Qubes:
* `#qubes` channel on libera.chat via traditional IRC clients
-
diff --git a/introduction/video-tours.html b/introduction/video-tours.html
deleted file mode 100644
index 422e5854a..000000000
--- a/introduction/video-tours.html
+++ /dev/null
@@ -1,113 +0,0 @@
----
-lang: en
-layout: default
-permalink: /video-tours/
-ref: 226
-title: Video Tours
----
-
-
-
-
-
Micah Lee presents "Qubes OS: The Operating System That Can Protect You Even If You Get Hacked"
This French series by Paf LeGeek provides a guide to Qubes OS across six videos. You can use the menu links to browse to specific videos in the series.
diff --git a/introduction/video-tours.md b/introduction/video-tours.md
new file mode 100644
index 000000000..375404a3c
--- /dev/null
+++ b/introduction/video-tours.md
@@ -0,0 +1,21 @@
+---
+lang: en
+layout: site
+permalink: /video-tours/
+ref: 226
+title: Video Tours
+---
+
+## Micah Lee presents "Qubes OS: The Operating System That Can Protect You Even If You Get Hacked"
+
+[Micah Lee](https://micahflee.com/), a long-time Qubes [advocate](/experts/), presented [Qubes OS: The Operating System That Can Protect You Even If You Get Hacked](https://www.hope.net/schedule.html#-qubes-os-the-operating-system-that-can-protect-you-even-if-you-get-hacked-) at the [Circle of HOPE](https://www.hope.net/index.html) conference, which took place July 20-22, 2018 in New York City.
+
+
diff --git a/project-security/bulletins-template.md b/project-security/bulletins-template.md
deleted file mode 100644
index 3ea80b72a..000000000
--- a/project-security/bulletins-template.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /security/bulletins/template/
-redirect_from:
-- /doc/security-bulletins/template/
-ref: 209
-title: Security Bulletin Template
----
-
-~~~
-Dear Qubes Community,
-
-We have just published Qubes Security Bulletin (QSB) #:
-.
-The text of this QSB is reproduced below. This QSB and its accompanying
-signatures will always be available in the Qubes Security Pack (qubes-secpack).
-
-View QSB # in the qubes-secpack:
-
-`-``.txt>
-
-Learn about the qubes-secpack, including how to obtain, verify, and read it:
-
-
-
-View all past QSBs:
-
-
-
-View in the XSA Tracker:
-
-`>
-
-```
- ---===[ Qubes Security Bulletin #]===---
-
-
-
-
-
-Summary
-=======
-
-[...]
-
-Description
-===========
-
-[...]
-
-Impact
-======
-
-[...]
-
-Discussion
-==========
-
-[...]
-
-Patching
-========
-
-[...]
-
-Credits
-=======
-
-[...]
-
-References
-==========
-
-[...]
-
---
-The Qubes Security Team
-https://www.qubes-os.org/security/
-```
-
-~~~
diff --git a/project-security/bulletins.md b/project-security/bulletins.md
deleted file mode 100644
index 7c8cfd12c..000000000
--- a/project-security/bulletins.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /security/bulletins/
-redirect_from:
-- /doc/security-bulletins/
-- /en/doc/security-bulletins/
-- /doc/SecurityBulletins/
-- /wiki/SecurityBulletins/
-- /trac/wiki/SecurityBulletins/
-ref: 218
-title: Qubes Security Bulletins (QSBs)
----
-
-
-A **Qubes Security Bulletin (QSB)** is a security announcement issued by the [Qubes Security Team](/security/#the-qubes-security-team) through the [Qubes Security Pack](/security/pack/).
-A QSB typically provides a summary and impact analysis of one or more recently-discovered software vulnerabilities, including details about patching to address them.
-
-## Full list
diff --git a/project-security/canaries.md b/project-security/canaries.md
deleted file mode 100644
index aa51f6833..000000000
--- a/project-security/canaries.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /security/canaries/
-redirect_from:
-- /doc/canaries/
-ref: 208
-title: Qubes Canaries
----
-
-
-A **Qubes Canary** is a security announcement periodically issued by the [Qubes Security Team](/security/#the-qubes-security-team) through the [Qubes Security Pack](/security/pack/) consisting of several statements to the effect that the signers of the canary have not been compromised.
-The idea is that, as long as signed canaries including such statements continue to be published, all is well.
-However, if the canaries should suddenly cease, if one or more signers begin declining to sign them, or if the included statements change significantly without plausible explanation, then this may indicate that something has gone wrong.
-
-The name originates from the practice in which miners would bring caged canaries into coal mines.
-If the level of methane gas in the mine reached a dangerous level, the canary would die, indicating to miners that they should evacuate.
-See [Wikipedia: warrant canary](https://en.wikipedia.org/wiki/Warrant_canary) for more information, but bear in mind that Qubes Canaries are not strictly limited to legal warrants.
-
-## Full list
diff --git a/project-security/canary-checklist.md b/project-security/canary-checklist.md
index e92b19015..c98c5033d 100644
--- a/project-security/canary-checklist.md
+++ b/project-security/canary-checklist.md
@@ -1,12 +1,13 @@
---
lang: en
layout: doc
-permalink: /security/canaries/checklist/
+permalink: /security/canary/checklist/
+redirect_from:
+- /security/canaries/checklist/
ref: 216
-title: Canary Checklist
+title: Qubes Canary Checklist
---
-
## Preparation
* Draft canary and push to private repository
@@ -15,7 +16,9 @@ title: Canary Checklist
## Announcement
* Push canary to public repository
-* Publish a [news post](/news/) using the [Canary Template](/security/canaries/template/)
-* Send the content of the news post to the appropriate [mailing lists](/support/)
+* Publish a [news post](/news/) using the [Canary
+ Template](/security/canary/template/)
+* Send the content of the news post to the appropriate [mailing
+ lists](/support/)
* Share link to news post on social media
* Set a reminder for the next canary
diff --git a/project-security/canary-template.md b/project-security/canary-template.md
index 653fad9a3..4963f41db 100644
--- a/project-security/canary-template.md
+++ b/project-security/canary-template.md
@@ -1,61 +1,12 @@
---
lang: en
layout: doc
-permalink: /security/canaries/template/
+permalink: /security/canary/template/
redirect_from:
+- /security/canaries/template/
- /doc/canaries/template/
+redirect_to:
+- https://github.com/QubesOS/qubes-secpack/blob/master/canaries/canary-template.txt
ref: 212
-title: Canary Template
+title: Qubes Canary Template
---
-
-
-~~~
-Dear Qubes community,
-
-We have just published Qubes Canary #. The text of this canary is
-reproduced below. This canary and its accompanying signatures will always be
-available in the Qubes Security Pack (qubes-secpack).
-
-View Canary # in the qubes-secpack:
-
-`-``.txt>
-
-Learn about the qubes-secpack, including how to obtain, verify, and read it:
-
-
-
-View all past canaries:
-
-
-
-```
- ---===[ Qubes Canary # ]===---
-
-
-Statements
------------
-
-[...]
-
-Special announcements
-----------------------
-
-[...]
-
-Disclaimers and notes
-----------------------
-
-[...]
-
-Proof of freshness
--------------------
-
-[...]
-
-Footnotes
-----------
-
-[...]
-```
-
-~~~
diff --git a/project-security/canary.md b/project-security/canary.md
new file mode 100644
index 000000000..71cd17e29
--- /dev/null
+++ b/project-security/canary.md
@@ -0,0 +1,29 @@
+---
+lang: en
+layout: doc
+permalink: /security/canary/
+redirect_from:
+- /security/canaries/
+- /doc/canaries/
+ref: 208
+title: Qubes Canaries
+---
+
+A **Qubes Canary** is a security announcement periodically issued by the [Qubes
+Security Team](/security/#qubes-security-team) through the [Qubes Security
+Pack](/security/pack/) consisting of several statements to the effect that the
+signers of the canary have not been compromised. The idea is that, as long as
+signed canaries including such statements continue to be published, all is
+well. However, if the canaries should suddenly cease, if one or more signers
+begin declining to sign them, or if the included statements change
+significantly without plausible explanation, then this may indicate that
+something has gone wrong.
+
+The name originates from the practice in which miners would bring caged
+canaries into coal mines. If the level of methane gas in the mine reached a
+dangerous level, the canary would die, indicating to miners that they should
+evacuate. See [Wikipedia: warrant
+canary](https://en.wikipedia.org/wiki/Warrant_canary) for more information, but
+bear in mind that Qubes Canaries are not strictly limited to legal warrants.
+
+## Full list
diff --git a/project-security/pgp-keys.md b/project-security/pgp-keys.md
index e237ec22e..2e20da7a0 100644
--- a/project-security/pgp-keys.md
+++ b/project-security/pgp-keys.md
@@ -3,5 +3,6 @@ lang: en
layout: doc
permalink: /security/pgp-keys/
redirect_to: https://keys.qubes-os.org/keys/
+ref: 250
title: PGP keys
---
diff --git a/project-security/bulletins-checklist.md b/project-security/qsb-checklist.md
similarity index 57%
rename from project-security/bulletins-checklist.md
rename to project-security/qsb-checklist.md
index 4b2fba124..a4c2f65e9 100644
--- a/project-security/bulletins-checklist.md
+++ b/project-security/qsb-checklist.md
@@ -1,14 +1,14 @@
---
lang: en
layout: doc
-permalink: /security/bulletins/checklist/
+permalink: /security/qsb/checklist/
redirect_from:
+- /security/bulletins/checklist/
- /doc/security-bulletins/checklist/
ref: 215
-title: Security Bulletin Checklist
+title: Qubes Security Bulletin (QSB) Checklist
---
-
## Preparation
* Draft QSB and push to private repository
@@ -19,6 +19,8 @@ title: Security Bulletin Checklist
* Upload packages to `security-testing` and `current-testing` repositories
* Push QSB to public repository
-* Publish a [news post](/news/) using the [QSB Template](/security/bulletins/template/)
-* Send the content of the news post to the appropriate [mailing lists](/support/)
+* Publish a [news post](/news/) using the [QSB
+ Template](/security/qsb/template/)
+* Send the content of the news post to the appropriate [mailing
+ lists](/support/)
* Share link to news post on social media
diff --git a/project-security/qsb-template.md b/project-security/qsb-template.md
new file mode 100644
index 000000000..1a56022c3
--- /dev/null
+++ b/project-security/qsb-template.md
@@ -0,0 +1,12 @@
+---
+lang: en
+layout: doc
+permalink: /security/qsb/template/
+redirect_from:
+- /security/bulletins/template/
+- /doc/security-bulletins/template/
+redirect_to:
+- https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-template.txt
+ref: 209
+title: Qubes Security Bulletin (QSB) Template
+---
diff --git a/project-security/qsb.md b/project-security/qsb.md
new file mode 100644
index 000000000..b9105aac8
--- /dev/null
+++ b/project-security/qsb.md
@@ -0,0 +1,22 @@
+---
+lang: en
+layout: doc
+permalink: /security/qsb/
+redirect_from:
+- /security/bulletins/
+- /doc/security-bulletins/
+- /en/doc/security-bulletins/
+- /doc/SecurityBulletins/
+- /wiki/SecurityBulletins/
+- /trac/wiki/SecurityBulletins/
+ref: 218
+title: Qubes Security Bulletins (QSBs)
+---
+
+A **Qubes Security Bulletin (QSB)** is a security announcement issued by the
+[Qubes Security Team](/security/#qubes-security-team) through the [Qubes
+Security Pack](/security/pack/). A QSB typically provides a summary and impact
+analysis of one or more recently-discovered software vulnerabilities, including
+details about patching to address them.
+
+## Full list
diff --git a/project-security/security-pack.md b/project-security/security-pack.md
index e890d613c..ea5d513ae 100644
--- a/project-security/security-pack.md
+++ b/project-security/security-pack.md
@@ -18,13 +18,14 @@ ref: 213
title: Qubes Security Pack (qubes-secpack)
---
+The **Qubes Security Pack** (`qubes-secpack`) is a Git repository that
+contains:
-The **Qubes Security Pack** (`qubes-secpack`) is a Git repository that contains:
-
-* [Qubes PGP keys](https://keys.qubes-os.org/keys/)
-* [Qubes Security Bulletins (QSBs)](/security/bulletins/)
-* [Qubes Canaries](https://github.com/QubesOS/qubes-secpack/tree/master/canaries)
+* [Qubes Security Bulletins (QSBs)](/security/qsb/)
+* [Qubes Canaries](/security/canary/)
+* [Signed Qubes ISO digests](/security/verifying-signatures/#how-to-verify-qubes-iso-digests)
* [Qubes fund information](https://github.com/QubesOS/qubes-secpack/tree/master/fund)
+* [Qubes PGP keys](https://keys.qubes-os.org/keys/)
* Security-related information and announcements (e.g., key revocations)
While `qubes-secpack` itself is independent of any particular host, its current
@@ -32,7 +33,6 @@ official location is:
-
## How to obtain, verify, and read
The following example demonstrates one method of obtaining the `qubes-secpack`,
@@ -270,4 +270,3 @@ Qubes binaries :/
implement multiple signature scheme for distributed binaries.
```
-
diff --git a/project-security/security.md b/project-security/security.md
index cde20737f..10b61f0b6 100644
--- a/project-security/security.md
+++ b/project-security/security.md
@@ -16,13 +16,14 @@ ref: 217
title: Qubes OS Project Security Center
---
-This page provides a central hub for topics pertaining to the security of the Qubes OS Project.
-For topics pertaining to software security *within* Qubes OS, see [Security in Qubes](/doc/#security-in-qubes).
-The following is a list of important project security pages:
+This page provides a central hub for topics pertaining to the security of the
+Qubes OS Project. For topics pertaining to software security *within* Qubes OS,
+see [Security in Qubes](/doc/#security-in-qubes). The following is a list of
+important project security pages:
- [Qubes Security Pack (`qubes-secpack`)](/security/pack/)
-- [Qubes Security Bulletins (QSBs)](/security/bulletins/)
-- [Qubes Canaries](/security/canaries/)
+- [Qubes Security Bulletins (QSBs)](/security/qsb/)
+- [Qubes Canaries](/security/canary/)
- [Xen Security Advisory (XSA) Tracker](/security/xsa/)
- [Verifying signatures](/security/verifying-signatures/)
- [PGP keys](https://keys.qubes-os.org/keys/)
@@ -30,27 +31,43 @@ The following is a list of important project security pages:
## Reporting Security Issues in Qubes OS
-If you believe you have found a security issue affecting Qubes OS, either directly or indirectly (e.g. the issue affects Xen in a configuration that is used in Qubes OS), then we would be more than happy to hear from you!
-We promise to treat any reported issue seriously and, if the investigation confirms that it affects Qubes, to patch it within a reasonable time and release a public [Qubes Security Bulletin](/security/bulletins/) that describes the issue, discusses the potential impact of the vulnerability, references applicable patches or workarounds, and credits the discoverer.
+If you believe you have found a security issue affecting Qubes OS, either
+directly or indirectly (e.g., the issue affects Xen in a configuration that is
+used in Qubes OS), then we would be more than happy to hear from you! Please
+send a [PGP-encrypted](#security-team-pgp-key) email to the [Qubes Security
+Team](#qubes-security-team). We promise to take all reported issues seriously.
+If our investigation confirms that an issue affects Qubes, we will patch it
+within a reasonable time and release a public [Qubes Security Bulletin
+(QSB)](/security/qsb/) that describes the issue, discusses the potential impact
+of the vulnerability, references applicable patches or workarounds, and credits
+the discoverer.
## Security Updates
-Qubes security updates are obtained by [Updating Qubes OS](/doc/updating-qubes-os/).
+Qubes security updates are obtained by [updating Qubes
+OS](/doc/how-to-update/).
-## The Qubes Security Team
+## Qubes Security Team
-The Qubes Security Team (QST) is the subset of the [Qubes Team](/team/) that is responsible for ensuring the security of Qubes OS and the Qubes OS Project.
-In particular, the QST is responsible for:
+The **Qubes Security Team (QST)** is the subset of the [Core Qubes
+Team](/team/#core-team) that is responsible for ensuring the security of Qubes OS
+and the Qubes OS Project. In particular, the QST is responsible for:
-- Responding to [reported security issues](#reporting-security-issues-in-qubes-os)
+- Responding to [reported security
+ issues](#reporting-security-issues-in-qubes-os)
- Evaluating whether [XSAs](/security/xsa/) affect the security of Qubes OS
-- Writing, applying, and/or distributing security patches to fix vulnerabilities in Qubes OS
-- Writing, signing, and publishing [Security Bulletins](/security/bulletins/)
-- Writing, signing, and publishing [Canaries](/security/canaries/)
-- Generating, safeguarding, and using the project's [PGP Keys](https://keys.qubes-os.org/keys/)
-
-As a security-oriented operating system, the QST is fundamentally important to Qubes, and every Qubes user implicitly trusts the members of the QST by virtue of the actions listed above.
-The Qubes Security Team can be contacted via email at the following address:
+- Writing, applying, and/or distributing security patches to fix
+ vulnerabilities in Qubes OS
+- Writing, signing, and publishing [Qubes Security Bulletins
+ (QSBs)](/security/qsb/)
+- Writing, signing, and publishing [Qubes Canaries](/security/canary/)
+- Generating, safeguarding, and using the project's [PGP
+ keys](https://keys.qubes-os.org/keys/)
+
+As a security-oriented operating system, the QST is fundamentally important to
+Qubes, and every Qubes user implicitly trusts the members of the QST by virtue
+of the actions listed above. The Qubes Security Team can be contacted via email
+at the following address:
```
security at qubes-os dot org
@@ -58,13 +75,15 @@ security at qubes-os dot org
### Security Team PGP Key
-Please use the [Security Team PGP Key](https://keys.qubes-os.org/keys/qubes-os-security-team-key.asc) to encrypt all emails sent to this address.
-This key is signed by the [Qubes Master Signing Key](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc).
-Please see [Why and How to Verify Signatures](/security/verifying-signatures/) for information about how to verify these keys.
+Please use the [Security Team PGP
+Key](https://keys.qubes-os.org/keys/qubes-os-security-team-key.asc) to encrypt
+all emails sent to this address. This key is signed by the [Qubes Master
+Signing Key](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc).
+Please see [Verify Signatures](/security/verifying-signatures/) for information
+about how to authenticate these keys.
### Members of the Security Team
- [Marek Marczykowski-Górecki](/team/#marek-marczykowski-górecki)
- [Simon Gaiser (aka HW42)](/team/#simon-gaiser-aka-hw42)
- [Joanna Rutkowska](/team/#joanna-rutkowska) ([emeritus, canaries only](/news/2018/11/05/qubes-security-team-update/))
-
diff --git a/project-security/verifying-signatures.md b/project-security/verifying-signatures.md
index c7485320d..cae3b045e 100644
--- a/project-security/verifying-signatures.md
+++ b/project-security/verifying-signatures.md
@@ -11,71 +11,106 @@ ref: 211
title: Verifying Signatures
---
-
## What Digital Signatures Can and Cannot Prove
-Most people --- even programmers --- are confused about the basic concepts underlying digital signatures.
-Therefore, most people should read this section, even if it looks trivial at first sight.
-
-Digital signatures can prove both **authenticity** and **integrity** to a reasonable degree of certainty.
-**Authenticity** ensures that a given file was indeed created by the person who signed it (i.e., that it was not forged by a third party).
-**Integrity** ensures that the contents of the file have not been tampered with (i.e., that a third party has not undetectably altered its contents *en route*).
-
-Digital signatures **cannot** prove any other property, e.g., that the signed file is not malicious.
-In fact, there is nothing that could stop someone from signing a malicious program (and it happens from time to time in reality).
-
-The point is that we must decide who we will trust (e.g., Linus Torvalds, Microsoft, or the Qubes Project) and assume that if a given file was signed by a trusted party, then it should not be malicious or negligently buggy.
-The decision of whether to trust any given party is beyond the scope of digital signatures.
-It's more of a sociological and political decision.
-
-Once we make the decision to trust certain parties, digital signatures are useful, because they make it possible for us to limit our trust only to those few parties we choose and not to worry about all the bad things that can happen between us and them, e.g., server compromises (qubes-os.org will surely be compromised one day, so [don't blindly trust the live version of this site](/faq/#should-i-trust-this-website)), dishonest IT staff at the hosting company, dishonest staff at the ISPs, Wi-Fi attacks, etc.
-We call this philosophy [Distrusting the Infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure).
-
-By verifying all the files we download that purport to be authored by a party we've chosen to trust, we eliminate concerns about the bad things discussed above, since we can easily detect whether any files have been tampered with (and subsequently choose to refrain from executing, installing, or opening them).
-
-However, for digital signatures to make any sense, we must ensure that the public keys we use for signature verification are indeed the original ones.
-Anybody can generate a GPG key pair that purports to belong to "The Qubes Project," but of course only the key pair that we (i.e., the Qubes developers) generated is the legitimate one.
-The next section explains how to verify the validity of the Qubes signing keys in the process of verifying a Qubes ISO.
-(However, the same general principles apply to all cases in which you may wish to verify a PGP signature, such as [verifying repos](#how-to-verify-qubes-repos), not just verifying ISOs.)
+Most people --- even programmers --- are confused about the basic concepts
+underlying digital signatures. Therefore, most people should read this section,
+even if it looks trivial at first sight.
+
+Digital signatures can prove both **authenticity** and **integrity** to a
+reasonable degree of certainty. **Authenticity** ensures that a given file was
+indeed created by the person who signed it (i.e., that it was not forged by a
+third party). **Integrity** ensures that the contents of the file have not been
+tampered with (i.e., that a third party has not undetectably altered its
+contents *en route*).
+
+Digital signatures **cannot** prove any other property, e.g., that the signed
+file is not malicious. In fact, there is nothing that could stop someone from
+signing a malicious program (and it happens from time to time in reality).
+
+The point is that we must decide who we will trust (e.g., Linus Torvalds,
+Microsoft, or the Qubes Project) and assume that if a given file was signed by
+a trusted party, then it should not be malicious or negligently buggy. The
+decision of whether to trust any given party is beyond the scope of digital
+signatures. It's more of a sociological and political decision.
+
+Once we make the decision to trust certain parties, digital signatures are
+useful, because they make it possible for us to limit our trust only to those
+few parties we choose and not to worry about all the bad things that can happen
+between us and them, e.g., server compromises (qubes-os.org will surely be
+compromised one day, so [don't blindly trust the live version of this
+site](/faq/#should-i-trust-this-website)), dishonest IT staff at the hosting
+company, dishonest staff at the ISPs, Wi-Fi attacks, etc. We call this
+philosophy [Distrusting the
+Infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure).
+
+By verifying all the files we download that purport to be authored by a party
+we've chosen to trust, we eliminate concerns about the bad things discussed
+above, since we can easily detect whether any files have been tampered with
+(and subsequently choose to refrain from executing, installing, or opening
+them).
+
+However, for digital signatures to make any sense, we must ensure that the
+public keys we use for signature verification are indeed the original ones.
+Anybody can generate a GPG key pair that purports to belong to "The Qubes
+Project," but of course only the key pair that we (i.e., the Qubes developers)
+generated is the legitimate one. The next section explains how to verify the
+validity of the Qubes signing keys in the process of verifying a Qubes ISO.
+(However, the same general principles apply to all cases in which you may wish
+to verify a PGP signature, such as [verifying
+repos](#how-to-verify-qubes-repos), not just verifying ISOs.)
## How to Verify Qubes ISO Signatures
-This section will guide you through the process of verifying a Qubes ISO by checking its PGP signature.
-There are three basic steps in this process:
+This section will guide you through the process of verifying a Qubes ISO by
+checking its PGP signature. There are three basic steps in this process:
-1. [Get the Qubes Master Signing Key and verify its authenticity](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)
+1. [Get the Qubes Master Signing Key and verify its
+ authenticity](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)
2. [Get the Release Signing Key](#2-get-the-release-signing-key)
3. [Verify your Qubes ISO](#3-verify-your-qubes-iso)
-If you run into any problems, please consult the [Troubleshooting FAQ](#troubleshooting-faq) below.
+If you run into any problems, please consult the [Troubleshooting
+FAQ](#troubleshooting-faq) below.
### Preparation
-Before we begin, you'll need a program that can verify PGP signatures.
-Any such program will do, but here are some examples for popular operating systems:
+Before we begin, you'll need a program that can verify PGP signatures. Any such
+program will do, but here are some examples for popular operating systems:
-**Windows:** [Gpg4win](https://gpg4win.org/download.html) ([documentation](https://www.gpg4win.org/documentation.html)).
-Use the Windows command line (`cmd.exe`) to enter commands.
+**Windows:** [Gpg4win](https://gpg4win.org/download.html)
+([documentation](https://www.gpg4win.org/documentation.html)). Use the Windows
+command line (`cmd.exe`) to enter commands.
-**Mac:** [GPG Suite](https://gpgtools.org/) ([documentation](https://gpgtools.tenderapp.com/kb)).
-Open a terminal to enter commands.
+**Mac:** [GPG Suite](https://gpgtools.org/)
+([documentation](https://gpgtools.tenderapp.com/kb)). Open a terminal to enter
+commands.
-**Linux:** `gpg2` from your package manager or from [gnupg.org](https://gnupg.org/download/index.html) ([documentation](https://www.gnupg.org/documentation/)).
-Open a terminal to enter commands.
+**Linux:** `gpg2` from your package manager or from
+[gnupg.org](https://gnupg.org/download/index.html)
+([documentation](https://www.gnupg.org/documentation/)). Open a terminal to
+enter commands.
-The commands below will use `gpg2`, but if that doesn't work for you, try `gpg` instead.
-If that still doesn't work, please consult the documentation for your specific program (see links above).
+The commands below will use `gpg2`, but if that doesn't work for you, try `gpg`
+instead. If that still doesn't work, please consult the documentation for your
+specific program (see links above).
### 1. Get the Qubes Master Signing Key and verify its authenticity
-Every file published by the Qubes Project (ISO, RPM, TGZ files and Git repositories) is digitally signed by one of the developer keys or Release Signing Keys.
-Each such key is signed by the [Qubes Master Signing Key](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc) (`0xDDFA1A3E36879494`).
-The developer signing keys are set to expire after one year, while the Qubes Master Signing Key and Release Signing Keys have no expiration date.
-This Qubes Master Signing Key was generated on and is kept only on a dedicated, air-gapped "vault" machine, and the private portion will (hopefully) never leave this isolated machine.
+Every file published by the Qubes Project (ISO, RPM, TGZ files and Git
+repositories) is digitally signed by one of the developer keys or Release
+Signing Keys. Each such key is signed by the [Qubes Master Signing
+Key](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc)
+(`0xDDFA1A3E36879494`). The developer signing keys are set to expire after one
+year, while the Qubes Master Signing Key and Release Signing Keys have no
+expiration date. This Qubes Master Signing Key was generated on and is kept
+only on a dedicated, air-gapped "vault" machine, and the private portion will
+(hopefully) never leave this isolated machine.
There are several ways to get the Qubes Master Signing Key.
-- If you have access to an existing Qubes installation, it's available in every VM ([except dom0](https://github.com/QubesOS/qubes-issues/issues/2544)):
+- If you have access to an existing Qubes installation, it's available in every
+ VM ([except dom0](https://github.com/QubesOS/qubes-issues/issues/2544)):
```shell_session
$ gpg2 --import /usr/share/qubes/qubes-master-key.asc
@@ -95,33 +130,47 @@ There are several ways to get the Qubes Master Signing Key.
$ gpg2 --fetch-keys https://keys.qubes-os.org/keys/qubes-master-signing-key.asc
```
-- Download it as a [file](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc), then import it with GPG:
+- Download it as a
+ [file](https://keys.qubes-os.org/keys/qubes-master-signing-key.asc), then
+ import it with GPG:
```shell_session
$ gpg2 --import ./qubes-master-signing-key.asc
```
-- Get it from a public [keyserver](https://en.wikipedia.org/wiki/Key_server_%28cryptographic%29#Keyserver_examples) (specified on first use with `--keyserver ` along with keyserver options to include key signatures), e.g.:
+- Get it from a public
+ [keyserver](https://en.wikipedia.org/wiki/Key_server_%28cryptographic%29#Keyserver_examples)
+ (specified on first use with `--keyserver ` along with keyserver options
+ to include key signatures), e.g.:
```shell_session
$ gpg2 --keyserver-options no-self-sigs-only,no-import-clean --keyserver hkp://pool.sks-keyservers.net:11371 --recv-keys 0x427F11FD0FAA4B080123F01CDDFA1A3E36879494
```
-The Qubes Master Signing Key is also available in the [Qubes Security Pack](/security/pack/) and in the archives of the project's [developer](https://groups.google.com/d/msg/qubes-devel/RqR9WPxICwg/kaQwknZPDHkJ) and [user](https://groups.google.com/d/msg/qubes-users/CLnB5uFu_YQ/ZjObBpz0S9UJ) [mailing lists](/support/).
-
-Once you have obtained the Qubes Master Signing Key, you must verify that it is authentic rather than a forgery.
-Anyone can create a PGP key with the name "Qubes Master Signing Key," so you cannot rely on the name alone.
-You also should not rely on any single website, not even over HTTPS.
-
-So, what *should* you do?
-One option is to use the PGP [Web of Trust](https://en.wikipedia.org/wiki/Web_of_trust).
-In addition, some operating systems include the means to acquire the Qubes Master Signing Key in a secure way.
-For example, on Fedora, `dnf install distribution-gpg-keys` will get you the Qubes Master Signing Key along with several other Qubes keys.
-On Debian, your keyring may already contain the necessary keys.
-
-Another option is to rely on the key's fingerprint.
-Every PGP key has a fingerprint that uniquely identifies it among all PGP keys (viewable with `gpg2 --fingerprint `).
-Therefore, if you know the genuine Qubes Master Signing Key fingerprint, then you always have an easy way to confirm whether any purported copy of it is authentic, simply by comparing the fingerprints.
+The Qubes Master Signing Key is also available in the [Qubes Security
+Pack](/security/pack/) and in the archives of the project's
+[developer](https://groups.google.com/d/msg/qubes-devel/RqR9WPxICwg/kaQwknZPDHkJ)
+and
+[user](https://groups.google.com/d/msg/qubes-users/CLnB5uFu_YQ/ZjObBpz0S9UJ)
+[mailing lists](/support/).
+
+Once you have obtained the Qubes Master Signing Key, you must verify that it is
+authentic rather than a forgery. Anyone can create a PGP key with the name
+"Qubes Master Signing Key," so you cannot rely on the name alone. You also
+should not rely on any single website, not even over HTTPS.
+
+So, what *should* you do? One option is to use the PGP [Web of
+Trust](https://en.wikipedia.org/wiki/Web_of_trust). In addition, some operating
+systems include the means to acquire the Qubes Master Signing Key in a secure
+way. For example, on Fedora, `dnf install distribution-gpg-keys` will get you
+the Qubes Master Signing Key along with several other Qubes keys. On Debian,
+your keyring may already contain the necessary keys.
+
+Another option is to rely on the key's fingerprint. Every PGP key has a
+fingerprint that uniquely identifies it among all PGP keys (viewable with `gpg2
+--fingerprint `). Therefore, if you know the genuine Qubes Master
+Signing Key fingerprint, then you always have an easy way to confirm whether
+any purported copy of it is authentic, simply by comparing the fingerprints.
For example, here is the Qubes Master Signing Key fingerprint:
@@ -131,27 +180,45 @@ pub 4096R/36879494 2010-04-01
uid Qubes Master Signing Key
```
-But how do you know that this is the real fingerprint?
-After all, [this website could be compromised](/faq/#should-i-trust-this-website), so the fingerprint you see here may not be genuine.
-That's why we strongly suggest obtaining the fingerprint from *multiple, independent sources in several different ways*.
+But how do you know that this is the real fingerprint? After all, [this website
+could be compromised](/faq/#should-i-trust-this-website), so the fingerprint
+you see here may not be genuine. That's why we strongly suggest obtaining the
+fingerprint from *multiple, independent sources in several different ways*.
Here are some ideas for how to do that:
-- Check the fingerprint on various websites (e.g., [mailing lists](https://groups.google.com/g/qubes-devel/c/RqR9WPxICwg/m/kaQwknZPDHkJ), [discussion forums](https://qubes-os.discourse.group/t/there-is-no-way-to-validate-qubes-master-signing-key/1441/9?u=adw), [social](https://twitter.com/rootkovska/status/496976187491876864) [media](https://www.reddit.com/r/Qubes/comments/5bme9n/fingerprint_verification/), [personal websites](https://andrewdavidwong.com/fingerprints.txt)).
+- Check the fingerprint on various websites (e.g., [mailing
+ lists](https://groups.google.com/g/qubes-devel/c/RqR9WPxICwg/m/kaQwknZPDHkJ),
+ [discussion
+ forums](https://qubes-os.discourse.group/t/there-is-no-way-to-validate-qubes-master-signing-key/1441/9?u=adw),
+ [social](https://twitter.com/rootkovska/status/496976187491876864)
+ [media](https://www.reddit.com/r/Qubes/comments/5bme9n/fingerprint_verification/),
+ [personal websites](https://andrewdavidwong.com/fingerprints.txt)).
- Check against PDFs, photographs, and videos in which the fingerprint appears
- (e.g., [slides from a talk](https://hyperelliptic.org/PSC/slides/psc2015_qubesos.pdf), on a [T-shirt](https://twitter.com/legind/status/813847907858337793/photo/2), or in the [recording of a presentation](https://youtu.be/S0TVw7U3MkE?t=2563)).
-- Download old Qubes ISOs from different sources and check the included Qubes Master Signing Key.
-- Ask people to post the fingerprint on various mailing lists, forums, and chat rooms.
+ (e.g., [slides from a
+ talk](https://hyperelliptic.org/PSC/slides/psc2015_qubesos.pdf), on a
+ [T-shirt](https://twitter.com/legind/status/813847907858337793/photo/2), or
+ in the [recording of a presentation](https://youtu.be/S0TVw7U3MkE?t=2563)).
+- Download old Qubes ISOs from different sources and check the included Qubes
+ Master Signing Key.
+- Ask people to post the fingerprint on various mailing lists, forums, and chat
+ rooms.
- Repeat the above over Tor.
- Repeat the above over various VPNs and proxy servers.
- Repeat the above on different networks (work, school, internet cafe, etc.).
-- Text, email, call, video chat, snail mail, or meet up with people you know to confirm the fingerprint.
+- Text, email, call, video chat, snail mail, or meet up with people you know to
+ confirm the fingerprint.
- Repeat the above from different computers and devices.
-Once you've obtained the fingerprint from enough independent sources in enough different ways that you feel confident that you know the genuine fingerprint, keep it in a safe place.
-Every time you need to check whether a key claiming to be the Qubes Master Signing Key is authentic, compare that key's fingerprint to your trusted copy and confirm they match.
+Once you've obtained the fingerprint from enough independent sources in enough
+different ways that you feel confident that you know the genuine fingerprint,
+keep it in a safe place. Every time you need to check whether a key claiming to
+be the Qubes Master Signing Key is authentic, compare that key's fingerprint to
+your trusted copy and confirm they match.
-Now that you've imported the authentic Qubes Master Signing Key, set its trust level to "ultimate" so that it can be used to automatically verify all the keys signed by the Qubes Master Signing Key (in particular, Release Signing Keys).
+Now that you've imported the authentic Qubes Master Signing Key, set its trust
+level to "ultimate" so that it can be used to automatically verify all the keys
+signed by the Qubes Master Signing Key (in particular, Release Signing Keys).
```
$ gpg2 --edit-key 0x427F11FD0FAA4B080123F01CDDFA1A3E36879494
@@ -194,11 +261,16 @@ unless you restart the program.
gpg> q
```
-Now, when you import any of the legitimate Qubes developer keys and Release Signing Keys used to sign ISOs, RPMs, TGZs, Git tags, and Git commits, they will already be trusted in virtue of being signed by the Qubes Master Signing Key.
+Now, when you import any of the legitimate Qubes developer keys and Release
+Signing Keys used to sign ISOs, RPMs, TGZs, Git tags, and Git commits, they
+will already be trusted in virtue of being signed by the Qubes Master Signing
+Key.
-Before proceeding to the next step, make sure the Qubes Master Signing Key is in your keyring with the correct trust level.
-(Note: We have already verified the authenticity of the key, so this final check is not about security.
-Rather, it's just a sanity check to make sure that we've imported the key into our keyring correctly.)
+Before proceeding to the next step, make sure the Qubes Master Signing Key is
+in your keyring with the correct trust level. (Note: We have already verified
+the authenticity of the key, so this final check is not about security. Rather,
+it's just a sanity check to make sure that we've imported the key into our
+keyring correctly.)
```
$ gpg2 -k "Qubes Master Signing Key"
@@ -207,17 +279,23 @@ pub rsa4096 2010-04-01 [SC]
uid [ultimate] Qubes Master Signing Key
```
-If you don't see the Qubes Master Signing Key here with a trust level of "ultimate," go back and follow the instructions in this section carefully.
+If you don't see the Qubes Master Signing Key here with a trust level of
+"ultimate," go back and follow the instructions in this section carefully.
### 2. Get the Release Signing Key
-The filename of the Release Signing Key for your version is usually `qubes-release-X-signing-key.asc`, where `X` is the major version number of your Qubes release.
-There are several ways to get the Release Signing Key for your Qubes release.
+The filename of the Release Signing Key for your version is usually
+`qubes-release-X-signing-key.asc`, where `X` is the major version number of
+your Qubes release. There are several ways to get the Release Signing Key for
+your Qubes release.
-- If you have access to an existing Qubes installation, the release keys are available in dom0 in `/etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-*`.
- These can be [copied](/doc/how-to-copy-from-dom0/#copying-from-dom0) into other VMs for further use.
- In addition, every other VM contains the release key corresponding to that installation's release in `/etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-*`.
- If you wish to use one of these keys, make sure to import it into your keyring, e.g.:
+- If you have access to an existing Qubes installation, the release keys are
+ available in dom0 in `/etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-*`. These can be
+ [copied](/doc/how-to-copy-from-dom0/#copying-from-dom0) into other VMs for
+ further use. In addition, every other VM contains the release key
+ corresponding to that installation's release in
+ `/etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-*`. If you wish to use one of these keys,
+ make sure to import it into your keyring, e.g.:
```
$ gpg2 --import /etc/pki/rpm-gpg/RPM-GPG-KEY-qubes-*
@@ -229,10 +307,12 @@ There are several ways to get the Release Signing Key for your Qubes release.
$ gpg2 --keyserver-options no-self-sigs-only,no-import-clean --fetch-keys https://keys.qubes-os.org/keys/qubes-release-X-signing-key.asc
```
-- Download it as a file.
- You can find the Release Signing Key for your Qubes version on the [Downloads](/downloads/) page.
- You can also download all the currently used developers' signing keys, Release Signing Keys, and the Qubes Master Signing Key from the [Qubes Security Pack](/security/pack/) and the [Qubes OS Keyserver](https://keys.qubes-os.org/keys/).
- Once you've downloaded your Release Signing Key, import it with GPG:
+- Download it as a file. You can find the Release Signing Key for your Qubes
+ version on the [Downloads](/downloads/) page. You can also download all the
+ currently used developers' signing keys, Release Signing Keys, and the Qubes
+ Master Signing Key from the [Qubes Security Pack](/security/pack/) and the
+ [Qubes OS Keyserver](https://keys.qubes-os.org/keys/). Once you've downloaded
+ your Release Signing Key, import it with GPG:
```shell_session
$ gpg2 --keyserver-options no-self-sigs-only,no-import-clean --import ./qubes-release-X-signing-key.asc
@@ -251,13 +331,16 @@ sig! DDFA1A3E36879494 2017-03-08 Qubes Master Signing Key
gpg: 2 good signatures
```
-This is just an example, so the output you receive will not look exactly the same.
-What matters is the line that shows that this key is signed by the Qubes Master Signing Key with a `sig!` prefix.
-This verifies the authenticity of the Release Signing Key.
-Note that the `!` flag after the `sig` tag is important because it means that the key signature is valid.
-A `sig-` prefix would indicate a bad signature and `sig%` would mean that gpg encountered an error while verifying the signature.
-It is not necessary to independently verify the authenticity of the Release Signing Key, since you already verified the authenticity of the Qubes Master Signing Key.
-Before proceeding to the next step, make sure the Release Signing Key is in your keyring:
+This is just an example, so the output you receive will not look exactly the
+same. What matters is the line that shows that this key is signed by the Qubes
+Master Signing Key with a `sig!` prefix. This verifies the authenticity of the
+Release Signing Key. Note that the `!` flag after the `sig` tag is important
+because it means that the key signature is valid. A `sig-` prefix would
+indicate a bad signature and `sig%` would mean that gpg encountered an error
+while verifying the signature. It is not necessary to independently verify the
+authenticity of the Release Signing Key, since you already verified the
+authenticity of the Qubes Master Signing Key. Before proceeding to the next
+step, make sure the Release Signing Key is in your keyring:
```
$ gpg2 -k "Qubes OS Release"
@@ -266,17 +349,20 @@ pub rsa4096 2017-03-06 [SC]
uid [ full ] Qubes OS Release X Signing Key
```
-If you don't see the correct Release Signing Key here, go back and follow the instructions in this section carefully.
+If you don't see the correct Release Signing Key here, go back and follow the
+instructions in this section carefully.
### 3. Verify your Qubes ISO
-Every Qubes ISO is released with a detached PGP signature file, which you can find on the [Downloads](/downloads/) page alongside the ISO.
-If the filename of your ISO is `Qubes-RX-x86_64.iso`, then the name of the signature file for that ISO is `Qubes-RX-x86_64.iso.asc`, where `X` is a specific version of Qubes.
-The signature filename is always the same as the ISO filename followed by `.asc`.
+Every Qubes ISO is released with a detached PGP signature file, which you can
+find on the [Downloads](/downloads/) page alongside the ISO. If the filename of
+your ISO is `Qubes-RX-x86_64.iso`, then the name of the signature file for that
+ISO is `Qubes-RX-x86_64.iso.asc`, where `X` is a specific version of Qubes. The
+signature filename is always the same as the ISO filename followed by `.asc`.
-Download both the ISO and its signature file.
-Put both of them in the same directory, then navigate to that directory.
-Now, you can verify the ISO by executing this GPG command in the directory that contains both files:
+Download both the ISO and its signature file. Put both of them in the same
+directory, then navigate to that directory. Now, you can verify the ISO by
+executing this GPG command in the directory that contains both files:
```shell_session
$ gpg2 -v --verify Qubes-RX-x86_64.iso.asc Qubes-RX-x86_64.iso
@@ -287,22 +373,28 @@ gpg: Good signature from "Qubes OS Release X Signing Key"
gpg: binary signature, digest algorithm SHA256
```
-This is just an example, so the output you receive will not look exactly the same.
-What matters is the line that says `Good signature from "Qubes OS Release X Signing Key"`.
-This confirms that the signature on the ISO is good.
+This is just an example, so the output you receive will not look exactly the
+same. What matters is the line that says `Good signature from "Qubes OS Release
+X Signing Key"`. This confirms that the signature on the ISO is good.
## How to Verify Qubes ISO Digests
Each Qubes ISO is also accompanied by a plain text file ending in `.DIGESTS`.
-This file contains the output of running several different cryptographic hash functions on the ISO in order to obtain alphanumeric outputs known as "digests" or "hash values."
-These hash values are provided as an alternative verification method to PGP signatures (though the digest file is itself also PGP-signed --- see below).
-If you've already verified the signatures on the ISO directly, then verifying digests is not necessary.
-You can find the `.DIGESTS` for your ISO on the [Downloads](/downloads/) page, and you can always find all the digest files for every Qubes ISO in the [Qubes Security Pack](/security/pack/).
-
-If the filename of your ISO is `Qubes-RX-x86_64.iso`, then the name of the digest file for that ISO is `Qubes-RX-x86_64.iso.DIGESTS`, where `X` is a specific version of Qubes.
-The digest filename is always the same as the ISO filename followed by `.DIGESTS`.
-Since the digest file is a plain text file, you can open it with any text editor.
-Inside, you should find text that looks similar to this:
+This file contains the output of running several different cryptographic hash
+functions on the ISO in order to obtain alphanumeric outputs known as "digests"
+or "hash values." These hash values are provided as an alternative verification
+method to PGP signatures (though the digest file is itself also PGP-signed ---
+see below). If you've already verified the signatures on the ISO directly, then
+verifying digests is not necessary. You can find the `.DIGESTS` for your ISO on
+the [Downloads](/downloads/) page, and you can always find all the digest files
+for every Qubes ISO in the [Qubes Security Pack](/security/pack/).
+
+If the filename of your ISO is `Qubes-RX-x86_64.iso`, then the name of the
+digest file for that ISO is `Qubes-RX-x86_64.iso.DIGESTS`, where `X` is a
+specific version of Qubes. The digest filename is always the same as the ISO
+filename followed by `.DIGESTS`. Since the digest file is a plain text file,
+you can open it with any text editor. Inside, you should find text that looks
+similar to this:
```
-----BEGIN PGP SIGNED MESSAGE-----
@@ -331,9 +423,10 @@ g8JqGYYptgkxjQdX3YAy9VDsCJ/6EkFc2lkQHbgZxjXqyrEMbgeSXtMltZ7cCqw1
-----END PGP SIGNATURE-----
```
-Four digests have been computed for this ISO.
-The hash functions used, in order from top to bottom, are MD5, SHA1, SHA256, and SHA512.
-One way to verify that the ISO you downloaded matches any of these hash values is by using the respective `*sum` programs:
+Four digests have been computed for this ISO. The hash functions used, in order
+from top to bottom, are MD5, SHA1, SHA256, and SHA512. One way to verify that
+the ISO you downloaded matches any of these hash values is by using the
+respective `*sum` programs:
```shell_session
$ md5sum -c Qubes-RX-x86_64.iso.DIGESTS
@@ -350,13 +443,16 @@ Qubes-RX-x86_64.iso: OK
sha512sum: WARNING: 23 lines are improperly formatted
```
-The `OK` response tells us that the hash value for that particular hash function matches.
-The program also warns us that there are 23 improperly formatted lines, but this is to be expected.
-This is because each file contains lines for several different hash values (as mentioned above), but each `*sum` program verifies only the line for its own hash function.
-In addition, there are lines for the PGP signature that the `*sum` programs do not know how to read.
-Therefore, it is safe to ignore these warning lines.
+The `OK` response tells us that the hash value for that particular hash
+function matches. The program also warns us that there are 23 improperly
+formatted lines, but this is to be expected. This is because each file contains
+lines for several different hash values (as mentioned above), but each `*sum`
+program verifies only the line for its own hash function. In addition, there
+are lines for the PGP signature that the `*sum` programs do not know how to
+read. Therefore, it is safe to ignore these warning lines.
-Another way is to use `openssl` to compute each hash value, then compare them to the contents of the digest file.:
+Another way is to use `openssl` to compute each hash value, then compare them
+to the contents of the digest file.:
```shell_session
$ openssl dgst -md5 Qubes-RX-x86_64.iso
@@ -371,11 +467,15 @@ SHA512(Qubes-RX-x86_64.iso)= de1eb2e76bdb48559906f6fe344027ece20658d4a7f04ba00d4
(Notice that the outputs match the values from the digest file.)
-However, it is possible that an attacker replaced `Qubes-RX-x86_64.iso` with a malicious ISO, computed the hash values for that malicious ISO, and replaced the values in `Qubes-RX-x86_64.iso.DIGESTS` with his own set of values.
+However, it is possible that an attacker replaced `Qubes-RX-x86_64.iso` with a
+malicious ISO, computed the hash values for that malicious ISO, and replaced
+the values in `Qubes-RX-x86_64.iso.DIGESTS` with his own set of values.
Therefore, we should also verify the authenticity of the listed hash values.
-Since `Qubes-RX-x86_64.iso.DIGESTS` is a clearsigned PGP file, we can use GPG to verify it from the command line:
+Since `Qubes-RX-x86_64.iso.DIGESTS` is a clearsigned PGP file, we can use GPG
+to verify it from the command line:
-1. [Get the Qubes Master Signing Key and verify its authenticity](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)
+1. [Get the Qubes Master Signing Key and verify its
+ authenticity](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)
2. [Get the Release Signing Key](#2-get-the-release-signing-key)
3. Verify the signature in the digest file:
@@ -390,16 +490,22 @@ Since `Qubes-RX-x86_64.iso.DIGESTS` is a clearsigned PGP file, we can use GPG to
gpg: textmode signature, digest algorithm SHA256
```
-The signature is good.
-If our copy of the `Qubes OS Release X Signing Key` is being validated by the authentic Qubes Master Signing Key (see [above](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)), we can be confident that these hash values came from the Qubes devs.
+The signature is good. If our copy of the `Qubes OS Release X Signing Key` is
+being validated by the authentic Qubes Master Signing Key (see
+[above](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)), we
+can be confident that these hash values came from the Qubes devs.
## How to Verify Qubes Repos
-Whenever you use one of the [Qubes repositories](https://github.com/QubesOS), you should verify the PGP signature in a tag on the latest commit or on the latest commit itself.
-(One or both may be present, but only one is required.)
-If there is no trusted signed tag or commit on top, any commits after the latest trusted signed tag or commit should **not** be trusted.
-If you come across a repo with any unsigned commits, you should not add any of your own signed tags or commits on top of them unless you personally vouch for the trustworthiness of the unsigned commits.
-Instead, ask the person who pushed the unsigned commits to sign them.
+Whenever you use one of the [Qubes repositories](https://github.com/QubesOS),
+you should verify the PGP signature in a tag on the latest commit or on the
+latest commit itself. (One or both may be present, but only one is required.)
+If there is no trusted signed tag or commit on top, any commits after the
+latest trusted signed tag or commit should **not** be trusted. If you come
+across a repo with any unsigned commits, you should not add any of your own
+signed tags or commits on top of them unless you personally vouch for the
+trustworthiness of the unsigned commits. Instead, ask the person who pushed the
+unsigned commits to sign them.
To verify a signature on a Git tag:
@@ -425,89 +531,118 @@ or
$ git verify-commit
```
-You should always perform this verification on a trusted local machine with properly validated keys (which are available in the [Qubes Security Pack](/security/pack/)) rather than relying on a third party, such as GitHub.
-While the GitHub interface may claim that a commit has a verified signature from a member of the Qubes team, this is only trustworthy if GitHub has performed the signature check correctly, the account identity is authentic, the user's key has not been replaced by an admin, GitHub's servers have not been compromised, and so on.
-Since there's no way for you to be certain that all such conditions hold, you're much better off verifying signatures yourself.
+You should always perform this verification on a trusted local machine with
+properly validated keys (which are available in the [Qubes Security
+Pack](/security/pack/)) rather than relying on a third party, such as GitHub.
+While the GitHub interface may claim that a commit has a verified signature
+from a member of the Qubes team, this is only trustworthy if GitHub has
+performed the signature check correctly, the account identity is authentic, the
+user's key has not been replaced by an admin, GitHub's servers have not been
+compromised, and so on. Since there's no way for you to be certain that all
+such conditions hold, you're much better off verifying signatures yourself.
-Also see: [Distrusting the Infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure)
+Also see: [Distrusting the
+Infrastructure](/faq/#what-does-it-mean-to-distrust-the-infrastructure)
## Troubleshooting FAQ
### Why am I getting "Can't check signature: public key not found"?
-You don't have the correct [Release Signing Key](#2-get-the-release-signing-key).
+You don't have the correct [Release Signing
+Key](#2-get-the-release-signing-key).
### Why am I getting "BAD signature from 'Qubes OS Release X Signing Key'"?
The problem could be one or more of the following:
-- You're trying to verify the wrong file(s).
- Read this page again carefully.
-- You're using the wrong GPG command.
- Follow the examples in [Verify your Qubes ISO](#3-verify-your-qubes-iso) carefully.
-- The ISO or [signature file](#3-verify-your-qubes-iso) is bad (e.g., incomplete or corrupt download).
- Try downloading the signature file again from a different source, then try verifying again.
- If you still get the same result, try downloading the ISO again from a different source, then try verifying again.
+- You're trying to verify the wrong file(s). Read this page again carefully.
+- You're using the wrong GPG command. Follow the examples in [Verify your Qubes
+ ISO](#3-verify-your-qubes-iso) carefully.
+- The ISO or [signature file](#3-verify-your-qubes-iso) is bad (e.g.,
+ incomplete or corrupt download). Try downloading the signature file again
+ from a different source, then try verifying again. If you still get the same
+ result, try downloading the ISO again from a different source, then try
+ verifying again.
### Why am I getting "bash: gpg2: command not found"?
-You don't have `gpg2` installed.
-Please install it using the method appropriate for your environment (e.g., via your package manager).
+You don't have `gpg2` installed. Please install it using the method appropriate
+for your environment (e.g., via your package manager).
### Why am I getting "No such file or directory"?
-Your working directory does not contain the required files.
-Go back and follow the instructions more carefully, making sure that you put all required files in the same directory *and* navigate to that directory.
+Your working directory does not contain the required files. Go back and follow
+the instructions more carefully, making sure that you put all required files in
+the same directory *and* navigate to that directory.
-### Why am I getting "can't open signed data `Qubes-RX-x86_64.iso' / can't hash datafile: file open error"?
+### Why am I getting "can't open signed data `Qubes-RX-x86_64.iso' / can't hash
+datafile: file open error"?
The correct ISO is not in your working directory.
-### Why am I getting "can't open `Qubes-RX-x86_64.iso.asc' / verify signatures failed: file open error"?
+### Why am I getting "can't open `Qubes-RX-x86_64.iso.asc' / verify signatures
+failed: file open error"?
-The correct [signature file](#3-verify-your-qubes-iso) is not in your working directory.
+The correct [signature file](#3-verify-your-qubes-iso) is not in your working
+directory.
### Why am I getting "no valid OpenPGP data found"?
-Either you don't have the correct [signature file](#3-verify-your-qubes-iso), or you inverted the arguments to `gpg2`.
-([The signature file goes first.](#3-verify-your-qubes-iso))
+Either you don't have the correct [signature file](#3-verify-your-qubes-iso),
+or you inverted the arguments to `gpg2`. ([The signature file goes
+first.](#3-verify-your-qubes-iso))
-### Why am I getting "WARNING: This key is not certified with a trusted signature! There is no indication that the signature belongs to the owner."?
+### Why am I getting "WARNING: This key is not certified with a trusted
+signature! There is no indication that the signature belongs to the owner."?
-Either you don't have the [Qubes Master Signing Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity), or you didn't [set its trust level correctly](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity).
+Either you don't have the [Qubes Master Signing
+Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity), or you
+didn't [set its trust level
+correctly](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity).
### Why am I getting "X signature not checked due to a missing key"?
-You don't have the keys that created those signatures in your keyring.
-For present purposes, you don't need them as long as you have the [Qubes Master Signing Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity) and the [Release Signing Key](#2-get-the-release-signing-key) for your Qubes version.
+You don't have the keys that created those signatures in your keyring. For
+present purposes, you don't need them as long as you have the [Qubes Master
+Signing Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity)
+and the [Release Signing Key](#2-get-the-release-signing-key) for your Qubes
+version.
-### Why am I seeing additional signatures on a key with "[User ID not found]" or from a revoked key?
+### Why am I seeing additional signatures on a key with "[User ID not found]"
+or from a revoked key?
-This is just a basic part of how OpenPGP works.
-Anyone can sign anyone else's public key and upload the signed public key to keyservers.
-Everyone is also free to revoke their own keys at any time (assuming they possess or can create a revocation certificate).
-This has no impact on verifying Qubes ISOs, code, or keys.
+This is just a basic part of how OpenPGP works. Anyone can sign anyone else's
+public key and upload the signed public key to keyservers. Everyone is also
+free to revoke their own keys at any time (assuming they possess or can create
+a revocation certificate). This has no impact on verifying Qubes ISOs, code, or
+keys.
### Why am I getting "verify signatures failed: unexpected data"?
-You're not verifying against the correct [signature file](#3-verify-your-qubes-iso).
+You're not verifying against the correct [signature
+file](#3-verify-your-qubes-iso).
### Why am I getting "not a detached signature"?
-You're not verifying against the correct [signature file](#3-verify-your-qubes-iso).
+You're not verifying against the correct [signature
+file](#3-verify-your-qubes-iso).
### Why am I getting "CRC error; [...] no signature found [...]"?
-You're not verifying against the correct [signature file](#3-verify-your-qubes-iso), or the signature file has been modified.
-Try downloading it again or from a different source.
+You're not verifying against the correct [signature
+file](#3-verify-your-qubes-iso), or the signature file has been modified. Try
+downloading it again or from a different source.
-### Do I have to verify the ISO against both the [signature file](#3-verify-your-qubes-iso) and the [digest file](#how-to-verify-qubes-iso-digests)?
+### Do I have to verify the ISO against both the [signature
+file](#3-verify-your-qubes-iso) and the [digest
+file](#how-to-verify-qubes-iso-digests)?
No, either method is sufficient by itself.
### Why am I getting "no properly formatted X checksum lines found"?
-You're not checking the correct [digest file](#how-to-verify-qubes-iso-digests).
+You're not checking the correct [digest
+file](#how-to-verify-qubes-iso-digests).
### Why am I getting "WARNING: X lines are improperly formatted"?
@@ -519,9 +654,13 @@ The correct ISO is not in your working directory.
### I have another problem that isn't mentioned here.
-Carefully read this page again to be certain that you didn't skip any steps.
-In particular, make sure you have the [Qubes Master Signing Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity), the [Release Signing Key](#2-get-the-release-signing-key), *and* the [signature file](#3-verify-your-qubes-iso) and/or [digest file](#how-to-verify-qubes-iso-digests) all for the *correct* Qubes OS version.
-If your question is about GPG, please see the [GPG documentation](https://www.gnupg.org/documentation/).
-Still have question?
-Please see [Help, Support, Mailing Lists, and Forum](/support/) for places where you can ask!
-
+Carefully read this page again to be certain that you didn't skip any steps. In
+particular, make sure you have the [Qubes Master Signing
+Key](#1-get-the-qubes-master-signing-key-and-verify-its-authenticity), the
+[Release Signing Key](#2-get-the-release-signing-key), *and* the [signature
+file](#3-verify-your-qubes-iso) and/or [digest
+file](#how-to-verify-qubes-iso-digests) all for the *correct* Qubes OS version.
+If your question is about GPG, please see the [GPG
+documentation](https://www.gnupg.org/documentation/). Still have question?
+Please see [Help, Support, Mailing Lists, and Forum](/support/) for places
+where you can ask!
diff --git a/project-security/xsa.md b/project-security/xsa.md
index 0d7c843e7..b14ae38b1 100644
--- a/project-security/xsa.md
+++ b/project-security/xsa.md
@@ -6,25 +6,37 @@ ref: 214
title: Xen Security Advisory (XSA) Tracker
---
+This tracker shows whether Qubes OS is affected by any given [Xen Security
+Advisory (XSA)](https://xenbits.xen.org/xsa/). Shortly after a new XSA is
+published, we will add a new row to this tracker. Whenever Qubes is
+significantly affected by an XSA, a [Qubes Security Bulletin
+(QSB)](/security/qsb/) is published, and a link to that QSB is added to
+the row for the associated XSA.
-This tracker shows whether Qubes OS is affected by any given [Xen Security Advisory (XSA)](https://xenbits.xen.org/xsa/).
-Shortly after a new XSA is published, we will add a new row to this tracker.
-Whenever Qubes is significantly affected by an XSA, a [Qubes Security Bulletin (QSB)](/security/bulletins/) is published, and a link to that QSB is added to the row for the associated XSA.
-
-Under the "Is Qubes Affected?" column, there are two possible values: **Yes** or **No**.
+Under the "Is Qubes Affected?" column, there are two possible values: **Yes**
+or **No**.
* **Yes** means that the *security* of Qubes OS *is* affected.
* **No** means that the *security* of Qubes OS is *not* affected.
-Important Notes
----------------
+## Important Notes
-* For the purpose of this tracker, we do *not* classify mere [denial-of-service (DoS) attacks](https://en.wikipedia.org/wiki/Denial-of-service_attack) as affecting the *security* of Qubes OS.
- Therefore, if an XSA pertains *only* to DoS attacks against Qubes, the value in the "Is Qubes Affected?" column will be **No**.
-* For simplicity, we use the present tense ("is affected") throughout this page, but this does **not** necessarily mean that up-to-date Qubes installations are *currently* affected by any particular XSA.
- In fact, it is extremely unlikely that any up-to-date Qubes installations are vulnerable to any XSAs on this page, since patches are almost always published concurrently with QSBs.
- Please read the QSB (if any) for each XSA for patching details.
-* Embargoed XSAs are excluded from this tracker until they are publicly released, since the [Xen Security Policy](https://www.xenproject.org/security-policy.html) does not permit us to state whether Qubes is affected prior to the embargo date.
-* Unused and withdrawn XSA numbers are included in the tracker for the sake of completeness, but they are excluded from the [Statistics](#statistics) section for the sake of accuracy.
+* For the purpose of this tracker, we do *not* classify mere [denial-of-service
+ (DoS) attacks](https://en.wikipedia.org/wiki/Denial-of-service_attack) as
+ affecting the *security* of Qubes OS. Therefore, if an XSA pertains *only* to
+ DoS attacks against Qubes, the value in the "Is Qubes Affected?" column will
+ be **No**.
+* For simplicity, we use the present tense ("is affected") throughout this
+ page, but this does **not** necessarily mean that up-to-date Qubes
+ installations are *currently* affected by any particular XSA. In fact, it is
+ extremely unlikely that any up-to-date Qubes installations are vulnerable to
+ any XSAs on this page, since patches are almost always published concurrently
+ with QSBs. Please read the QSB (if any) for each XSA for patching details.
+* Embargoed XSAs are excluded from this tracker until they are publicly
+ released, since the [Xen Security
+ Policy](https://www.xenproject.org/security-policy.html) does not permit us
+ to state whether Qubes is affected prior to the embargo date.
+* Unused and withdrawn XSA numbers are included in the tracker for the sake of
+ completeness, but they are excluded from the [Statistics](#statistics)
+ section for the sake of accuracy.
* All dates are in UTC.
-
diff --git a/user/advanced-topics/awesome.md b/user/advanced-topics/awesomewm.md
similarity index 73%
rename from user/advanced-topics/awesome.md
rename to user/advanced-topics/awesomewm.md
index b75a8b5a8..28f969da1 100644
--- a/user/advanced-topics/awesome.md
+++ b/user/advanced-topics/awesomewm.md
@@ -1,14 +1,14 @@
---
lang: en
layout: doc
-permalink: /doc/awesome/
+permalink: /doc/awesomewm/
redirect_from:
+- /doc/awesome/
- /en/doc/awesome/
ref: 179
-title: awesome (window manager)
+title: AwesomeWM (window manager)
---
-
## Qubes-specific features
* support for the Qubes OS window colors
@@ -17,17 +17,17 @@ title: awesome (window manager)
## Installation
-awesome can be installed with the standard dom0 installation mechanisms.
+AwesomeWM can be installed with the standard dom0 installation mechanisms.
```shell_session
$ sudo qubes-dom0-update awesome
```
-That's it. After logging out, you can select awesome in the login manager.
+That's it. After logging out, you can select AwesomeWM in the login manager.
## Development
-To [contribute code](/doc/contributing/) you may clone the awesome repository as follows:
+To [contribute code](/doc/contributing/) you may clone the AwesomeWM repository as follows:
```shell_session
$ git clone https://github.com/QubesOS/qubes-desktop-linux-awesome
@@ -39,17 +39,17 @@ The repository attempts to follow the upstream Fedora repository.
## Common customizations
-This section focuses on Qubes-specific customizations. For generic awesome customizations you might want to have a look at the [awesome website](https://awesomewm.org).
+This section focuses on Qubes-specific customizations. For generic AwesomeWM customizations you might want to have a look at the [AwesomeWM website](https://awesomewm.org).
-Customizations for awesome are usually done at `~/.config/awesome/rc.lua`. The default file can be found at `/etc/xdg/awesome/rc.lua`.
+Customizations for AwesomeWM are usually done at `~/.config/awesome/rc.lua`. The default file can be found at `/etc/xdg/awesome/rc.lua`.
### Application menu
-Starting from Qubes 4.0 application menu entries specific to awesome can be put into `~/.config/awesome/xdg-menu/` following the freedesktop standard. The folder might have to be created.
+Starting from Qubes 4.0 application menu entries specific to AwesomeWM can be put into `~/.config/awesome/xdg-menu/` following the freedesktop standard. The folder might have to be created.
### Focus steal hardening
-The default Qubes OS awesome installation comes with the defaults set by the awesome developers for focus changes. Some users may want more tight control over window focus changes - especially since focus changes can have security implications when sensitive data is provided to an incorrect application or even qube.
+The default Qubes OS AwesomeWM installation comes with the defaults set by the AwesomeWM developers for focus changes. Some users may want more tight control over window focus changes - especially since focus changes can have security implications when sensitive data is provided to an incorrect application or even qube.
#### Definition
@@ -79,13 +79,13 @@ Users may want to adjust their definitions and respective implementations accord
#### Implementation
-The implementation may be specific to the awesome version you're running. This guide refers to awesome version 3.5.9 which is available to Qubes 4.0 users.
+The implementation may be specific to the AwesomeWM version you're running. This guide refers to AwesomeWM version 3.5.9 which is available to Qubes 4.0 users.
Please keep in mind that this guide may not be conclusive. Your mileage may vary.
##### Change the autofocus implementation
-The line `require("awful.autofocus")` in your _rc.lua_ implements various focus-related features for your awesome instance.
+The line `require("awful.autofocus")` in your _rc.lua_ implements various focus-related features for your AwesomeWM instance.
In order to customise these, you can copy the file `/usr/share/awesome/lib/awful/autofocus.lua` to e.g. `~/.config/awesome/autofocus_custom.lua` and replace the line above with `require("autofocus_custom")`.
@@ -130,7 +130,7 @@ end
function clear_focus()
--unfortunately this doesn't work at the moment
--cf. https://github.com/awesomeWM/awesome/issues/164
- --(Qubes uses an older awesome version that doesn't have the fix yet)
+ --(Qubes uses an older AwesomeWM version that doesn't have the fix yet)
--client.focus = nil
end
@@ -177,9 +177,9 @@ These enable _sloppy focus_ aka focus changes on mouse movements (without clicki
##### Ignore requests from applications to the window manager
-Handling of such requests is currently mostly implemented by awesome in the file `/usr/share/awesome/lib/awful/ewmh.lua`. You can either comment out the respective `client.connect_singal()` lines in that file (it will change back after each awesome update though) or disconnect the signals in your _rc.lua_.
+Handling of such requests is currently mostly implemented by AwesomeWM in the file `/usr/share/awesome/lib/awful/ewmh.lua`. You can either comment out the respective `client.connect_singal()` lines in that file (it will change back after each AwesomeWM update though) or disconnect the signals in your _rc.lua_.
-As of awesome 3.5.9 this however is apparently only possible for signals connected to global functions, i.e. currently only the below signals can be disconnected in the _rc.lua_:
+As of AwesomeWM 3.5.9 this however is apparently only possible for signals connected to global functions, i.e. currently only the below signals can be disconnected in the _rc.lua_:
```lua
local ewmh = require("awful.ewmh")
@@ -188,4 +188,4 @@ client.disconnect_signal("request::activate", ewmh.activate)
client.disconnect_signal("request::tag", ewmh.tag)
```
-The signal names may change across awesome versions.
+The signal names may change across AwesomeWM versions.
diff --git a/user/advanced-topics/bind-dirs.md b/user/advanced-topics/bind-dirs.md
index 15380f24a..67ca82b0c 100644
--- a/user/advanced-topics/bind-dirs.md
+++ b/user/advanced-topics/bind-dirs.md
@@ -8,26 +8,25 @@ ref: 186
title: How to Make Any File Persistent (bind-dirs)
---
-
## What are bind-dirs? ##
With [bind-dirs](https://github.com/QubesOS/qubes-core-agent-linux/blob/master/vm-systemd/bind-dirs.sh)
-any arbitrary files or folders can be made persistent in TemplateBasedVMs.
+any arbitrary files or folders can be made persistent in app qubes.
## What is it useful for? ##
-In a TemplateBasedVM all of the file system comes from the template except `/home`, `/usr/local`, and `/rw`.
-This means that changes in the rest of the filesystem are lost when the TemplateBasedVM is shutdown.
+In an app qube all of the file system comes from the template except `/home`, `/usr/local`, and `/rw`.
+This means that changes in the rest of the filesystem are lost when the app qube is shutdown.
bind-dirs provides a mechanism whereby files usually taken from the template can be persisted across reboots.
For example, in Whonix, [Tor's data dir `/var/lib/tor` has been made persistent in the TemplateBased ProxyVM sys-whonix](https://github.com/Whonix/qubes-whonix/blob/8438d13d75822e9ea800b9eb6024063f476636ff/usr/lib/qubes-bind-dirs.d/40_qubes-whonix.conf#L5)
-In this way sys-whonix can benefit from the Tor anonymity feature 'persistent Tor entry guards' but does not have to be a StandaloneVM.
+In this way sys-whonix can benefit from the Tor anonymity feature 'persistent Tor entry guards' but does not have to be a standalone.
## How to use bind-dirs.sh? ##
In this example, we want to make `/var/lib/tor` persistent.
-Inside the TemplateBasedVM.
+Inside the app qube.
1. Make sure folder `/rw/config/qubes-bind-dirs.d` exists.
@@ -45,7 +44,7 @@ Inside the TemplateBasedVM.
4. Save.
-5. Reboot the TemplateBasedVM.
+5. Reboot the app qube.
6. Done.
@@ -67,17 +66,17 @@ binds+=( '/etc/tor/torrc' )
## How does it work? ##
-bind-dirs.sh is called at startup of a TemplateBasedVM, and configuration files in the above configuration folders are parsed to build a bash array.
+bind-dirs.sh is called at startup of an app qube, and configuration files in the above configuration folders are parsed to build a bash array.
Files or folders identified in the array are copied to `/rw/bind-dirs` if they do not already exist there, and are then bind mounted over the original files/folders.
-Creation of the files and folders in `/rw/bind-dirs` should be automatic the first time the TemplateBasedVM is restarted after configuration.
+Creation of the files and folders in `/rw/bind-dirs` should be automatic the first time the app qube is restarted after configuration.
If you want to circumvent this process, you can create the relevant file structure under `/rw/bind-dirs` and make any changes at the same time that you perform the configuration, before reboot.
Note that you must create the full folder structure under `/rw/bind-dirs` - e.g you would have to create `/rw/bind-dirs/var/lib/tor`
## Limitations ##
-* Files that exist in the TemplateVM root image cannot be deleted in the TemplateBasedVMs root image using bind-dirs.sh.
+* Files that exist in the template root image cannot be deleted in the app qubes root image using bind-dirs.sh.
* Re-running `sudo /usr/lib/qubes/init/bind-dirs.sh` without a previous `sudo /usr/lib/qubes/init/bind-dirs.sh umount` does not work.
* Running `sudo /usr/lib/qubes/init/bind-dirs.sh umount` after boot (before shutdown) is probably not sane and nothing can be done about that.
* Many editors create a temporary file and copy it over the original file. If you have bind mounted an individual file this will break the mount.
@@ -102,5 +101,4 @@ binds=( "${binds[@]/'/var/lib/tor'}" )
## Discussion ##
-[TemplateBasedVMs: make selected files and folders located in the root image persistent- review bind-dirs.sh](https://groups.google.com/forum/#!topic/qubes-devel/tcYQ4eV-XX4/discussion)
-
+[app qubes: make selected files and folders located in the root image persistent- review bind-dirs.sh](https://groups.google.com/forum/#!topic/qubes-devel/tcYQ4eV-XX4/discussion)
diff --git a/user/advanced-topics/config-files.md b/user/advanced-topics/config-files.md
index 1fbd0fe92..7ab46faa4 100644
--- a/user/advanced-topics/config-files.md
+++ b/user/advanced-topics/config-files.md
@@ -11,7 +11,6 @@ ref: 180
title: Config Files
---
-
Qubes-specific VM config files
------------------------------
@@ -36,7 +35,7 @@ The scripts here all run as root.
- `/rw/config/qubes-ip-change-hook` - script runs in NetVM after every external IP change and on "hardware" link status change.
-- In ProxyVMs (or AppVMs with `qubes-firewall` service enabled), scripts placed in the following directories will be executed in the listed order followed by `qubes-firewall-user-script` at start up.
+- In ProxyVMs (or app qubes with `qubes-firewall` service enabled), scripts placed in the following directories will be executed in the listed order followed by `qubes-firewall-user-script` at start up.
Good place to write custom firewall rules.
~~~
@@ -49,7 +48,7 @@ The scripts here all run as root.
The file is used only in a VM with PCI devices attached.
Intended for use with problematic device drivers.
-- In NetVMs/ProxyVMs, scripts placed in `/rw/config/network-hooks.d` will be ran when configuring Qubes interfaces. For each script, the `command`, `vif`, `vif_type` and `ip` is passed as arguments (see `/etc/xen/scripts/vif-route-qubes`). For example, consider a PV AppVM `work` with IP `10.137.0.100` and `sys-firewall` as NetVM. Assuming it's Xen domain id is arbitrary `12` then, the following script located at `/rw/config/network-hooks.d/hook-100.sh` in `sys-firewall`:
+- In NetVMs/ProxyVMs, scripts placed in `/rw/config/network-hooks.d` will be ran when configuring Qubes interfaces. For each script, the `command`, `vif`, `vif_type` and `ip` is passed as arguments (see `/etc/xen/scripts/vif-route-qubes`). For example, consider a PV app qube `work` with IP `10.137.0.100` and `sys-firewall` as NetVM. Assuming it's Xen domain id is arbitrary `12` then, the following script located at `/rw/config/network-hooks.d/hook-100.sh` in `sys-firewall`:
~~~
#!/bin/bash
@@ -75,7 +74,7 @@ The scripts here all run as root.
Note that scripts need to be executable (`chmod +x`) to be used.
-Also, take a look at [bind-dirs](/doc/bind-dirs) for instructions on how to easily modify arbitrary system files in an AppVM and have those changes persist.
+Also, take a look at [bind-dirs](/doc/bind-dirs) for instructions on how to easily modify arbitrary system files in an app qube and have those changes persist.
GUI and audio configuration in dom0
-----------------------------------
diff --git a/user/advanced-topics/disposablevm-customization.md b/user/advanced-topics/disposable-customization.md
similarity index 59%
rename from user/advanced-topics/disposablevm-customization.md
rename to user/advanced-topics/disposable-customization.md
index 19ef47e1a..2368ef670 100644
--- a/user/advanced-topics/disposablevm-customization.md
+++ b/user/advanced-topics/disposable-customization.md
@@ -1,29 +1,29 @@
---
lang: en
layout: doc
-permalink: /doc/disposablevm-customization/
+permalink: /doc/disposable-customization/
redirect_from:
+- /doc/disposablevm-customization/
- /doc/dispvm-customization/
- /en/doc/dispvm-customization/
- /doc/DispVMCustomization/
- /doc/UserDoc/DispVMCustomization/
- /wiki/UserDoc/DispVMCustomization/
ref: 174
-title: DisposableVM Customization
+title: Disposable Customization
---
-
## Introduction
-A [DisposableVM](/doc/disposablevm) can be based on any [TemplateBasedVM](/doc/glossary/#templatebasedvm).
-You can also choose to use different [DisposableVM Templates](/doc/glossary/#disposablevm-template) for different DisposableVMs.
-To prepare an AppVM to be a DisposableVM Template, you need to set `template_for_dispvms` property, for example:
+A [disposable](/doc/disposable/) can be based on any [app qube](/doc/glossary/#app-qube).
+You can also choose to use different [disposable templates](/doc/glossary/#disposable-template) for different disposables.
+To prepare an app qube to be a disposable template, you need to set `template_for_dispvms` property, for example:
```shell_session
[user@dom0 ~]$ qvm-prefs fedora-26-dvm template_for_dispvms True
```
-Additionally, if you want to have menu entries for starting applications in DisposableVM based on this AppVM (instead of in the AppVM itself), you can achieve it with `appmenus-dispvm` feature:
+Additionally, if you want to have menu entries for starting applications in disposable based on this app qube (instead of in the app qube itself), you can achieve it with `appmenus-dispvm` feature:
```shell_session
[user@dom0 ~]$ qvm-features fedora-26-dvm appmenus-dispvm 1
@@ -33,41 +33,41 @@ Note: application shortcuts that existed before setting this feature will not be
## Security
-If a DisposableVM Template becomes compromised, then any DisposableVM based on that DisposableVM Template could be compromised.
-Therefore, you should not make any risky customizations (e.g., installing untrusted browser plugins) in important DisposableVM Templates.
-In particular, the *default* DisposableVM Template is important because it is used by the "Open in DisposableVM" feature.
+If a disposable template becomes compromised, then any disposable based on that disposable template could be compromised.
+Therefore, you should not make any risky customizations (e.g., installing untrusted browser plugins) in important disposable templates.
+In particular, the *default* disposable template is important because it is used by the "Open in disposable" feature.
This means that it will have access to everything that you open with this feature.
-For this reason, it is strongly recommended that you base the default DisposableVM Template on a trusted TemplateVM and refrain from making any risky customizations to it.
+For this reason, it is strongly recommended that you base the default disposable template on a trusted template and refrain from making any risky customizations to it.
-## Creating a new DisposableVM Template
+## Creating a new disposable template
-In Qubes 4.0, you're no longer restricted to a single DisposableVM Template. Instead, you can create as many as you want. Whenever you start a new DisposableVM, you can choose to base it on whichever DisposableVM Template you like.
-To create new DisposableVM Template, lets say `custom-disposablevm-template`, based on `debian-9` template, use following commands:
+In Qubes 4.0, you're no longer restricted to a single disposable template. Instead, you can create as many as you want. Whenever you start a new disposable, you can choose to base it on whichever disposable template you like.
+To create new disposable template, lets say `custom-disposable-template`, based on `debian-9` template, use following commands:
```shell_session
-[user@dom0 ~]$ qvm-create --template debian-9 --label red custom-disposablevm-template
-[user@dom0 ~]$ qvm-prefs custom-disposablevm-template template_for_dispvms True
-[user@dom0 ~]$ qvm-features custom-disposablevm-template appmenus-dispvm 1
+[user@dom0 ~]$ qvm-create --template debian-9 --label red custom-disposable-template
+[user@dom0 ~]$ qvm-prefs custom-disposable-template template_for_dispvms True
+[user@dom0 ~]$ qvm-features custom-disposable-template appmenus-dispvm 1
```
-Additionally you may want to set it as default DisposableVM Template:
+Additionally you may want to set it as default disposable template:
```shell_session
-[user@dom0 ~]$ qubes-prefs default_dispvm custom-disposablevm-template
+[user@dom0 ~]$ qubes-prefs default_dispvm custom-disposable-template
```
-The above default is used whenever a qube request starting a new DisposableVM and do not specify which one (for example `qvm-open-in-dvm` tool). This can be also set in qube settings and will affect service calls from that qube. See [qrexec documentation](/doc/qrexec/#specifying-vms-tags-types-targets-etc) for details.
+The above default is used whenever a qube request starting a new disposable and do not specify which one (for example `qvm-open-in-dvm` tool). This can be also set in qube settings and will affect service calls from that qube. See [qrexec documentation](/doc/qrexec/#specifying-vms-tags-types-targets-etc) for details.
-If you wish to use a [Minimal TemplateVM](/doc/templates/minimal/) as a DisposableVM Template, please see the [Minimal TemplateVM](/doc/templates/minimal/) page.
+If you wish to use a [Minimal Template](/doc/templates/minimal/) as a disposable template, please see the [Minimal Template](/doc/templates/minimal/) page.
-## Customization of DisposableVM
+## Customization of disposable
-_**Note:** If you are trying to customize Tor Browser in a Whonix DisposableVM, please consult the [Whonix documentation](https://www.whonix.org/wiki/Tor_Browser/Advanced_Users#DVM_Template_Customization)._
+_**Note:** If you are trying to customize Tor Browser in a Whonix disposable, please consult the [Whonix documentation](https://www.whonix.org/wiki/Tor_Browser/Advanced_Users#disposable_Template_Customization)._
-It is possible to change the settings for each new DisposableVM.
-This can be done by customizing the DisposableVM Template on which it is based:
+It is possible to change the settings for each new disposable.
+This can be done by customizing the disposable template on which it is based:
-1. Start a terminal in the `fedora-26-dvm` qube (or another DisposableVM Template) by running the following command in a dom0 terminal. (If you enable `appmenus-dispvm` feature (as explained at the top), applications menu for this VM (`fedora-26-dvm`) will be "Disposable: fedora-26-dvm" (instead of "Domain: fedora-26-dvm") and entries there will start new DisposableVM based on that VM (`fedora-26-dvm`). Not in that VM (`fedora-26-dvm`) itself).
+1. Start a terminal in the `fedora-26-dvm` qube (or another disposable template) by running the following command in a dom0 terminal. (If you enable `appmenus-dispvm` feature (as explained at the top), applications menu for this VM (`fedora-26-dvm`) will be "Disposable: fedora-26-dvm" (instead of "Domain: fedora-26-dvm") and entries there will start new disposable based on that VM (`fedora-26-dvm`). Not in that VM (`fedora-26-dvm`) itself).
```shell_session
[user@dom0 ~]$ qvm-run -a fedora-26-dvm gnome-terminal
@@ -76,16 +76,16 @@ This can be done by customizing the DisposableVM Template on which it is based:
2. Change the qube's settings and/or applications, as desired. Some examples of changes you may want to make include:
- Changing Firefox's default startup settings and homepage.
- Changing default editor, image viewer. In Debian-based templates this can be done with the `mimeopen` command.
- - Changing the DisposableVM's default NetVM. For example, you may wish to set the NetVM to "none." Then, whenever you start a new DisposableVM, you can choose your desired ProxyVM manually (by changing the newly-started DisposableVMs settings). This is useful if you sometimes wish to use a DisposableVM with a Whonix Gateway, for example. It is also useful if you sometimes wish to open untrusted files in a network-disconnected DisposableVM.
+ - Changing the disposable's default NetVM. For example, you may wish to set the NetVM to "none." Then, whenever you start a new disposable, you can choose your desired ProxyVM manually (by changing the newly-started disposables settings). This is useful if you sometimes wish to use a disposable with a Whonix Gateway, for example. It is also useful if you sometimes wish to open untrusted files in a network-disconnected disposable.
4. Shutdown the qube (either by `poweroff` from qube's terminal, or `qvm-shutdown` from dom0 terminal).
-## Using static DisposableVMs for sys-*
+## Using named disposables for sys-*
-You can use a static DisposableVM for `sys-*` as long as it is stateless.
+You can use a [named disposable](/doc/glossary/#named-disposable) for `sys-*` as long as it is stateless.
For example, a `sys-net` using DHCP or `sys-usb` will work.
-In most cases `sys-firewall` will also work, even if you have configured AppVM firewall rules.
-The only exception is if you require something like VM to VM communication and have manually edited `iptables` or other items directly inside the firewall AppVM.
+In most cases `sys-firewall` will also work, even if you have configured app qube firewall rules.
+The only exception is if you require something like VM to VM communication and have manually edited `iptables` or other items directly inside the firewall app qube.
To create one that has no PCI devices attached, such as for `sys-firewall`:
@@ -113,7 +113,7 @@ qvm-pci attach --persistent dom0:
qvm-prefs autostart true
qvm-prefs netvm ''
qvm-features appmenus-dispvm ''
-# optional, if this DisposableVM will be providing networking
+# optional, if this disposable will be providing networking
qvm-prefs provides_network true
~~~
@@ -137,52 +137,52 @@ qvm-prefs sys-firewall netvm sys-net2
qubes-prefs clockvm sys-net2
~~~
-## Adding programs to DisposableVM Application Menu
+## Adding programs to disposable Application Menu
-For added convenience, arbitrary programs can be added to the Application Menu of the DisposableVM.
+For added convenience, arbitrary programs can be added to the Application Menu of the disposable.
-In order to do that, select "Qube settings" entry in selected base AppVM, go to "Applications" tab and select desired applications as for any other qube.
+In order to do that, select "Qube settings" entry in selected base app qube, go to "Applications" tab and select desired applications as for any other qube.
Note that currently only applications whose main process keeps running until you close the application (i.e. do not start a background process instead) will work. One of known examples of incompatible applications is GNOME Terminal (shown on the list as "Terminal"). Choose different terminal emulator (like XTerm) instead.
-## Create Custom sys-net sys-firewall and sys-usb DisposableVMs
+## Create Custom sys-net sys-firewall and sys-usb disposables
-Users have the option of creating customized DisposableVMs for the `sys-net`, `sys-firewall` and `sys-usb` VMs. In this configuration, a fresh VM instance is created each time a DisposableVM is launched. Functionality is near-identical to the default VMs created following a new Qubes’ installation, except the user benefits from a non-persistent filesystem.
+Users have the option of creating customized disposables for the `sys-net`, `sys-firewall` and `sys-usb` VMs. In this configuration, a fresh VM instance is created each time a disposable is launched. Functionality is near-identical to the default VMs created following a new Qubes’ installation, except the user benefits from a non-persistent filesystem.
Functionality is not limited, users can:
- Set custom firewall rule sets and run Qubes VPN scripts.
-- Set DisposableVMs to autostart at system boot.
+- Set disposables to autostart at system boot.
- Attach PCI devices with the `--persistent` option.
-Using DisposableVMs in this manner is ideal for untrusted qubes which require persistent PCI devices, such as USB VMs and NetVMs.
+Using disposables in this manner is ideal for untrusted qubes which require persistent PCI devices, such as USB VMs and NetVMs.
->_**Note:**_ Users who want customized VPN or firewall rule sets must create a separate DisposableVM Template for use by each DisposableVM. If DisposableVM Template customization is not needed, then a single DisposableVM Template is used as a template for all DisposableVMs.
+>_**Note:**_ Users who want customized VPN or firewall rule sets must create a separate disposable template for use by each disposable. If disposable template customization is not needed, then a single disposable template is used as a template for all disposables.
-### Create and configure the DisposableVM Template on which the DisposableVM will be based
+### Create and configure the disposable template on which the disposable will be based
-1. Create the DisposableVM Template:
+1. Create the disposable template:
```shell_session
- [user@dom0 ~]$ qvm-create --class AppVM --label gray
+ [user@dom0 ~]$ qvm-create --class AppVM --label gray
```
-2. _(optional)_ In the DisposableVM Template, add custom firewall rule sets, Qubes VPN scripts, etc.
+2. _(optional)_ In the disposable template, add custom firewall rule sets, Qubes VPN scripts, etc.
Firewall rules sets and Qubes VPN scripts can be added just like any other VM.
-3. Set the DisposableVM Template as template for DisposableVMs:
+3. Set the disposable template as template for disposables:
```shell_session
- [user@dom0 ~]$ qvm-prefs template_for_dispvms true
+ [user@dom0 ~]$ qvm-prefs template_for_dispvms true
```
-### Create the sys-net DisposableVM
+### Create the sys-net disposable
-1. Create `sys-net` DisposableVM based on the DisposableVM Template:
+1. Create `sys-net` disposable based on the disposable template:
```shell_session
- [user@dom0 ~]$ qvm-create --template --class DispVM --label red disp-sys-net
+ [user@dom0 ~]$ qvm-create --template --class DispVM --label red disp-sys-net
```
2. Set `disp-sys-net` virtualization mode to [hvm](/doc/hvm/):
@@ -221,7 +221,7 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
[user@dom0 ~]$ qvm-prefs disp-sys-net autostart true
```
-8. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-net is not itself a DisposableVM template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the DisposableVM template):
+8. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-net is not itself a disposable template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the disposable template):
```shell_session
[user@dom0 ~]$ qvm-features disp-sys-net appmenus-dispvm ''
@@ -235,12 +235,12 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
10. _(recommended)_ Allow templates to be updated via `disp-sys-net`. In dom0, edit `/etc/qubes-rpc/policy/qubes.UpdatesProxy` to change the target from `sys-net` to `disp-sys-net`.
-### Create the sys-firewall DisposableVM
+### Create the sys-firewall disposable
-1. Create `sys-firewall` DisposableVM:
+1. Create `sys-firewall` disposable:
```shell_session
- [user@dom0 ~]$ qvm-create --template --class DispVM --label green disp-sys-firewall
+ [user@dom0 ~]$ qvm-create --template --class DispVM --label green disp-sys-firewall
```
2. Set `disp-sys-firewall` to provide network for other VMs:
@@ -255,7 +255,7 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
[user@dom0 ~]$ qvm-prefs disp-sys-firewall netvm disp-sys-net
```
-4. Set `disp-sys-firewall` as NetVM for other AppVMs:
+4. Set `disp-sys-firewall` as NetVM for other app qubes:
```shell_session
[user@dom0 ~]$ qvm-prefs netvm disp-sys-firewall
@@ -267,7 +267,7 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
[user@dom0 ~]$ qvm-prefs disp-sys-firewall autostart true
```
-6. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-firewall is not itself a DisposableVM template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the DisposableVM template):
+6. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-firewall is not itself a disposable template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the disposable template):
```shell_session
[user@dom0 ~]$ qvm-features disp-sys-firewall appmenus-dispvm ''
@@ -279,12 +279,12 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
[user@dom0 ~]$ qubes-prefs default_netvm disp-sys-firewall
```
-### Create the sys-usb DisposableVM
+### Create the sys-usb disposable
1. Create the `disp-sys-usb`:
```shell_session
- [user@dom0 ~]$ qvm-create --template --class DispVM --label red disp-sys-usb
+ [user@dom0 ~]$ qvm-create --template --class DispVM --label red disp-sys-usb
```
2. Set the `disp-sys-usb` virtualization mode to hvm:
@@ -318,7 +318,7 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
[user@dom0 ~]$ qvm-prefs disp-sys-usb autostart true
```
-7. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-usb is not itself a DisposableVM template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the DisposableVM template):
+7. _(recommended)_ Disable the `appmenus-dispvm` feature, as disp-sys-usb is not itself a disposable template (Note: this is only necessary if you enabled the `appmenus-dispvm` feature for the disposable template):
```shell_session
[user@dom0 ~]$ qvm-features disp-sys-usb appmenus-dispvm ''
@@ -339,9 +339,9 @@ Using DisposableVMs in this manner is ideal for untrusted qubes which require pe
disp-sys-usb dom0 allow,user=root
```
-### Starting the DisposableVMs
+### Starting the disposables
-Prior to starting the new VMs, users should ensure that no other VMs such as the old `sys-net` and `sys-usb` VMs are running. This is because no two VMs can share the same PCI device while both running. It is recommended that users detach the PCI devices from the old VMs without deleting them. This will allow users to reattach the PCI devices if the newly created DisposableVMs fail to start.
+Prior to starting the new VMs, users should ensure that no other VMs such as the old `sys-net` and `sys-usb` VMs are running. This is because no two VMs can share the same PCI device while both running. It is recommended that users detach the PCI devices from the old VMs without deleting them. This will allow users to reattach the PCI devices if the newly created disposables fail to start.
Detach PCI device from VM:
@@ -353,28 +353,28 @@ Detach PCI device from VM:
If the `disp-sys-usb` does not start, it could be due to a PCI passthrough problem. For more details on this issue along with possible solutions, users can look [here](/doc/pci-troubleshooting/#pci-passthrough-issues).
-## Deleting DisposableVMs
+## Deleting disposables
-While working in a DisposableVM, you may want to open a document in another DisposableVM.
-For this reason, the property `default_dispvm` may be set to the name of your DisposableVM in a number of VMs:
+While working in a disposable, you may want to open a document in another disposable.
+For this reason, the property `default_dispvm` may be set to the name of your disposable in a number of VMs:
```shell_session
[user@dom0 ~]$ qvm-prefs workvm | grep default_dispvm
-default_dispvm - custom-disposablevm-template
+default_dispvm - custom-disposable-template
```
-This will prevent the deletion of the DisposableVM Template. In order to fix this you need to unset the `default_dispvm` property:
+This will prevent the deletion of the disposable template. In order to fix this you need to unset the `default_dispvm` property:
```shell_session
[user@dom0 ~]$ qvm-prefs workvm default_dispvm ""
```
-You can then delete the DisposableVM Template:
+You can then delete the disposable template:
```shell_session
-[user@dom0 ~]$ qvm-remove custom-disposablevm-template
+[user@dom0 ~]$ qvm-remove custom-disposable-template
This will completely remove the selected VM(s)
- custom-disposablevm-template
+ custom-disposable-template
```
diff --git a/user/advanced-topics/gui-configuration.md b/user/advanced-topics/gui-configuration.md
index 1c145b085..a4420a01d 100644
--- a/user/advanced-topics/gui-configuration.md
+++ b/user/advanced-topics/gui-configuration.md
@@ -6,7 +6,6 @@ ref: 184
title: GUI Configuration
---
-
## Video RAM adjustment for high-resolution displays
When a qube starts, a fixed amount of RAM is allocated to the graphics buffer called video RAM.
diff --git a/user/advanced-topics/how-to-install-software-in-dom0.md b/user/advanced-topics/how-to-install-software-in-dom0.md
index be426e6cc..163fd4510 100644
--- a/user/advanced-topics/how-to-install-software-in-dom0.md
+++ b/user/advanced-topics/how-to-install-software-in-dom0.md
@@ -11,31 +11,41 @@ ref: 194
title: How to Install Software in Dom0
---
-
-
- Warning: Installing software in dom0 is for advanced users only. Doing so has the potential to compromise your entire Qubes OS installation. Exercise extreme caution.
-
+**Warning:** Installing software in dom0 is for advanced users only. Doing so
+has the potential to compromise your entire Qubes OS installation. Exercise
+extreme caution.
## Security
-Since there is no networking in dom0, any bugs discovered in dom0 desktop components (e.g., the window manager) are unlikely to pose a problem for Qubes, since none of the third-party software running in dom0 is accessible from VMs or the network in any way.
-Nonetheless, since software running in dom0 can potentially exercise full control over the system, it is important to install only trusted software in dom0.
-
-The install/update process is split into two phases: *resolve and download* and *verify and install*.
-The *resolve and download* phase is handled by the UpdateVM.
-(The role of UpdateVM can be assigned to any VM in the Qube Manager, and there are no significant security implications in this choice.
-By default, this role is assigned to the FirewallVM.)
-After the UpdateVM has successfully downloaded new packages, they are sent to dom0, where they are verified and installed.
-This separation of duties significantly reduces the attack surface, since all of the network and metadata processing code is removed from the TCB.
-
-Although this update scheme is far more secure than directly downloading updates in dom0, it is not invulnerable.
-For example, there is nothing that the Qubes OS Project can feasibly do to prevent a malicious RPM from exploiting a hypothetical bug in the cryptographic signature verification operation.
-At best, we could switch to a different distro or package manager, but any of them could be vulnerable to the same (or a similar) attack.
-While we could, in theory, write a custom solution, it would only be effective if Qubes repos included all of the regular TemplateVM distro's updates, and this would be far too costly for us to maintain.
+Since there is no networking in dom0, any bugs discovered in dom0 desktop
+components (e.g., the window manager) are unlikely to pose a problem for Qubes,
+since none of the third-party software running in dom0 is accessible from VMs
+or the network in any way. Nonetheless, since software running in dom0 can
+potentially exercise full control over the system, it is important to install
+only trusted software in dom0.
+
+The install/update process is split into two phases: *resolve and download* and
+*verify and install*. The *resolve and download* phase is handled by the
+UpdateVM. (The role of UpdateVM can be assigned to any VM in the Qube Manager,
+and there are no significant security implications in this choice. By default,
+this role is assigned to the FirewallVM.) After the UpdateVM has successfully
+downloaded new packages, they are sent to dom0, where they are verified and
+installed. This separation of duties significantly reduces the attack surface,
+since all of the network and metadata processing code is removed from the TCB.
+
+Although this update scheme is far more secure than directly downloading
+updates in dom0, it is not invulnerable. For example, there is nothing that the
+Qubes OS Project can feasibly do to prevent a malicious RPM from exploiting a
+hypothetical bug in the cryptographic signature verification operation. At
+best, we could switch to a different distro or package manager, but any of them
+could be vulnerable to the same (or a similar) attack. While we could, in
+theory, write a custom solution, it would only be effective if Qubes repos
+included all of the regular template distro's updates, and this would be far
+too costly for us to maintain.
## How to update dom0
-See [Updating Qubes OS](/doc/updating-qubes-os/).
+See [How to Update](/doc/how-to-update/).
## How to install a specific package
@@ -45,13 +55,15 @@ To install additional packages in dom0 (usually not recommended):
$ sudo qubes-dom0-update anti-evil-maid
```
-You may also pass the `--enablerepo=` option in order to enable optional repositories (see yum configuration in dom0).
-However, this is only for advanced users who really understand what they are doing.
-You can also pass commands to `dnf` using `--action=...`.
+You may also pass the `--enablerepo=` option in order to enable optional
+repositories (see yum configuration in dom0). However, this is only for
+advanced users who really understand what they are doing. You can also pass
+commands to `dnf` using `--action=...`.
## How to downgrade a specific package
-**WARNING:** Downgrading a package can expose your system to security vulnerabilities.
+**WARNING:** Downgrading a package can expose your system to security
+vulnerabilities.
1. Download an older version of the package:
@@ -59,7 +71,8 @@ You can also pass commands to `dnf` using `--action=...`.
sudo qubes-dom0-update package-version
~~~
- Dnf will say that there is no update, but the package will nonetheless be downloaded to dom0.
+ Dnf will say that there is no update, but the package will nonetheless be
+ downloaded to dom0.
2. Downgrade the package:
@@ -77,7 +90,8 @@ You can re-install in a similar fashion to downgrading.
sudo qubes-dom0-update package
~~~
- Dnf will say that there is no update, but the package will nonetheless be downloaded to dom0.
+ Dnf will say that there is no update, but the package will nonetheless be
+ downloaded to dom0.
2. Re-install the package:
@@ -85,12 +99,15 @@ You can re-install in a similar fashion to downgrading.
sudo dnf reinstall package
~~~
- Note that `dnf` will only re-install if the installed and downloaded versions match.
- You can ensure they match by either updating the package to the latest version, or specifying the package version in the first step using the form `package-version`.
+ Note that `dnf` will only re-install if the installed and downloaded
+ versions match. You can ensure they match by either updating the package to
+ the latest version, or specifying the package version in the first step
+ using the form `package-version`.
## How to uninstall a package
-If you've installed a package such as anti-evil-maid, you can remove it with the following command:
+If you've installed a package such as anti-evil-maid, you can remove it with
+the following command:
```
sudo dnf remove anti-evil-maid
@@ -100,15 +117,15 @@ sudo dnf remove anti-evil-maid
There are three Qubes dom0 [testing](/doc/testing/) repositories:
-- `qubes-dom0-current-testing` -- testing packages that will eventually land in the stable
- (`current`) repository
-- `qubes-dom0-security-testing` -- a subset of `qubes-dom0-current-testing` that contains packages
- that qualify as security fixes
-- `qubes-dom0-unstable` -- packages that are not intended to land in the stable (`qubes-dom0-current`)
- repository; mostly experimental debugging packages
+- `qubes-dom0-current-testing` -- testing packages that will eventually land in
+ the stable (`current`) repository
+- `qubes-dom0-security-testing` -- a subset of `qubes-dom0-current-testing`
+ that contains packages that qualify as security fixes
+- `qubes-dom0-unstable` -- packages that are not intended to land in the stable
+ (`qubes-dom0-current`) repository; mostly experimental debugging packages
-To temporarily enable any of these repos, use the `--enablerepo=` option.
-Example commands:
+To temporarily enable any of these repos, use the `--enablerepo=`
+option. Example commands:
~~~
sudo qubes-dom0-update --enablerepo=qubes-dom0-current-testing
@@ -116,12 +133,13 @@ sudo qubes-dom0-update --enablerepo=qubes-dom0-security-testing
sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable
~~~
-To enable or disable any of these repos permanently, change the corresponding `enabled` value to `1` in
-`/etc/yum.repos.d/qubes-dom0.repo`.
+To enable or disable any of these repos permanently, change the corresponding
+`enabled` value to `1` in `/etc/yum.repos.d/qubes-dom0.repo`.
## Contributed package repository
-Please see [installing contributed packages](/doc/installing-contributed-packages/).
+Please see [installing contributed
+packages](/doc/installing-contributed-packages/).
## Kernel upgrade
@@ -133,8 +151,11 @@ The packages `kernel` and `kernel-latest` are for dom0.
In the `current` repository:
-- `kernel`: an older LTS kernel that has passed Qubes [testing](/doc/testing/) (the default dom0 kernel)
-- `kernel-latest`: the latest release from kernel.org that has passed Qubes [testing](/doc/testing/) (useful for [troubleshooting newer hardware](/doc/newer-hardware-troubleshooting/))
+- `kernel`: an older LTS kernel that has passed Qubes [testing](/doc/testing/)
+ (the default dom0 kernel)
+- `kernel-latest`: the latest release from kernel.org that has passed Qubes
+ [testing](/doc/testing/) (useful for [troubleshooting newer
+ hardware](/doc/newer-hardware-troubleshooting/))
In the `current-testing` repository:
@@ -143,8 +164,8 @@ In the `current-testing` repository:
### domU
-The packages `kernel-qubes-vm` and `kernel-latest-qubes-vm` are for domUs.
-See [Managing VM kernel](/doc/managing-vm-kernels/) for more information.
+The packages `kernel-qubes-vm` and `kernel-latest-qubes-vm` are for domUs. See
+[Managing VM kernel](/doc/managing-vm-kernels/) for more information.
### Example
@@ -154,17 +175,19 @@ See [Managing VM kernel](/doc/managing-vm-kernels/) for more information.
sudo qubes-dom0-update --enablerepo=qubes-dom0-unstable kernel kernel-qubes-vm
~~~
-If the update process does not automatically do it (you should see it mentioned in the CLI output
-from the update command), you may need to manually rebuild the EFI or grub config depending on which
-your system uses.
+If the update process does not automatically do it (you should see it mentioned
+in the CLI output from the update command), you may need to manually rebuild
+the EFI or grub config depending on which your system uses.
+
+#### EFI
-*EFI*: Replace the example version numbers with the one you are upgrading to.
+Replace the example version numbers with the one you are upgrading to.
~~~
sudo dracut -f /boot/efi/EFI/qubes/initramfs-4.14.35-1.pvops.qubes.x86_64.img 4.14.35-1.pvops.qubes.x86_64
~~~
-*Grub2*
+#### Grub2
~~~
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
@@ -178,25 +201,25 @@ to do a lot of work yourself](https://groups.google.com/d/msg/qubes-users/m8sWoy
## Changing default kernel
-This section describes changing the default kernel in dom0.
-It is sometimes needed if you have upgraded to a newer kernel and are having problems booting, for example.
-The procedure varies depending on if you are booting with UEFI or grub.
-On the next kernel update, the default will revert to the newest.
+This section describes changing the default kernel in dom0. It is sometimes
+needed if you have upgraded to a newer kernel and are having problems booting,
+for example. The procedure varies depending on if you are booting with UEFI or
+grub. On the next kernel update, the default will revert to the newest.
-*EFI*
+### EFI
~~~
sudo nano /boot/efi/EFI/qubes/xen.cfg
~~~
-In the `[global]` section at the top, change the `default=` line to match one of the three boot entries listed below.
-For example,
+In the `[global]` section at the top, change the `default=` line to match one
+of the three boot entries listed below. For example:
~~~
default=4.19.67-1.pvops.qubes.x86_64
~~~
-*Grub2*
+### Grub2
~~~
sudo nano /etc/default/grub
@@ -207,21 +230,19 @@ GRUB_SAVEDEFAULT=true
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
~~~
-Then, reboot.
-Once the grub menu appears, choose "Advanced Options for Qubes (with Xen hypervisor)".
-Next, the top menu item (for example, "Xen hypervisor, version 4.8.5-9.fc25").
-Select the kernel you want as default, and it will be remembered for next boot.
+Then, reboot. Once the grub menu appears, choose "Advanced Options for Qubes
+(with Xen hypervisor)". Next, the top menu item (for example, "Xen hypervisor,
+version 4.8.5-9.fc25"). Select the kernel you want as default, and it will be
+remembered for next boot.
## Updating over Tor
Requires installed [Whonix](/doc/privacy/whonix/).
-Go to Qubes VM Manager -> System -> Global Settings.
-See the UpdateVM setting.
-Choose your desired Whonix-Gateway ProxyVM from the list.
-For example: sys-whonix.
+Go to Qubes VM Manager -> System -> Global Settings. See the UpdateVM setting.
+Choose your desired Whonix-Gateway ProxyVM from the list. For example:
+sys-whonix.
-`
+```
Qubes VM Manager -> System -> Global Settings -> UpdateVM -> sys-whonix
-`
-
+```
diff --git a/user/advanced-topics/i3.md b/user/advanced-topics/i3.md
index 43cfed2b6..b326988d5 100644
--- a/user/advanced-topics/i3.md
+++ b/user/advanced-topics/i3.md
@@ -10,7 +10,6 @@ ref: 183
title: i3 (window manager)
---
-
i3 is part of the stable repository (as of Qubes R3.1) and can be installed by
using the [dom0 update mechanism](/doc/how-to-install-software-in-dom0/). To install the i3
window manager and the its Qubes specific configuration:
diff --git a/user/advanced-topics/installing-contributed-packages.md b/user/advanced-topics/installing-contributed-packages.md
index e2abf82d7..8bc2e3474 100644
--- a/user/advanced-topics/installing-contributed-packages.md
+++ b/user/advanced-topics/installing-contributed-packages.md
@@ -6,7 +6,6 @@ ref: 225
title: Installing Contributed Packages
---
-
_This page is for users who wish to install contributed packages.
If you want to contribute a package, please see [package contributions](/doc/package-contributions/)._
@@ -35,8 +34,8 @@ In a Debian-based template, use `apt`:
sudo apt update && sudo apt install qubes-repo-contrib
```
-The new repository definition will be in the usual location for your distro, and it will follow the naming pattern `qubes-contrib-*`, depending on your Qubes release and whether it is in dom0 or a TemplateVM.
-For example, in a Fedora TemplateVM on Qubes 4.0, the new repository definition would be:
+The new repository definition will be in the usual location for your distro, and it will follow the naming pattern `qubes-contrib-*`, depending on your Qubes release and whether it is in dom0 or a template.
+For example, in a Fedora template on Qubes 4.0, the new repository definition would be:
```
/etc/yum.repos.d/qubes-contrib-vm-r4.0.repo
@@ -55,4 +54,3 @@ sudo qubes-dom0-update --clean qvm-screenshot-tool
```
Please see the package's README for specific installation and setup instructions.
-
diff --git a/user/advanced-topics/kde.md b/user/advanced-topics/kde.md
index 166400e1d..5d350b060 100644
--- a/user/advanced-topics/kde.md
+++ b/user/advanced-topics/kde.md
@@ -8,7 +8,6 @@ ref: 176
title: KDE (desktop environment)
---
-
Installation
------------
diff --git a/user/advanced-topics/managing-vm-kernels.md b/user/advanced-topics/managing-vm-kernels.md
index c3753a6b2..6460658a8 100644
--- a/user/advanced-topics/managing-vm-kernels.md
+++ b/user/advanced-topics/managing-vm-kernels.md
@@ -9,7 +9,6 @@ ref: 173
title: Managing VM Kernels
---
-
By default, VMs kernels are provided by dom0.
(See [here](/doc/how-to-install-software-in-dom0/#kernel-upgrade) for information about upgrading kernels in dom0.)
This means that:
@@ -278,7 +277,7 @@ Booting to a kernel inside the template is not supported under `PVH`.
#### Distribution kernel
-Apply the following instruction in a Debian TemplateVM or in a Debian StandaloneVM.
+Apply the following instruction in a Debian template or in a Debian standalone.
Using a distribution kernel package the initramfs and kernel modules should be handled automatically.
@@ -362,4 +361,3 @@ update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64
#### Troubleshooting
In case of problems, visit the [VM Troubleshooting guide](/doc/vm-troubleshooting/#vm-kernel-troubleshooting) to learn how to access the VM console, view logs and fix a VM kernel installation.
-
diff --git a/user/advanced-topics/mount-from-other-os.md b/user/advanced-topics/mount-from-other-os.md
index 29ed3d8d6..ec0427dca 100644
--- a/user/advanced-topics/mount-from-other-os.md
+++ b/user/advanced-topics/mount-from-other-os.md
@@ -10,21 +10,20 @@ ref: 175
title: How to Mount a Qubes Partition from Another OS
---
-
When a Qubes OS install is unbootable or booting it is otherwise undesirable, this process allows for the recovery of files stored within the system.
These functions are manual and do not require any Qubes specific tools. All steps assume the default Qubes install with the following components:
- LUKS encrypted disk
- LVM based VM storage
-Before beginning, if attempting to access one Qubes system from another, it is recommended to pass the entire encrypted Qubes disk to an isolated AppVM.
+Before beginning, if attempting to access one Qubes system from another, it is recommended to pass the entire encrypted Qubes disk to an isolated app qube.
This can be done with the command `qvm-block attach dom0:` in dom0.
Decrypting the Disk
-----------------
1. Find the disk to be accessed:
- 1. Open a Linux terminal in either dom0 or the AppVM the disk was passed through to and enter `lsblk`, which will result in an output similar to the following.
+ 1. Open a Linux terminal in either dom0 or the app qube the disk was passed through to and enter `lsblk`, which will result in an output similar to the following.
In this example, the currently booted Qubes system is installed on `sda` and the qubes system to be accessed is on `nvme0n1p2`.
```
@@ -58,7 +57,7 @@ Decrypting the Disk
Accessing LVM Logical Volumes
-----------------------------
-3. If using an AppVM or standard Linux, LVM should automatically discover the Qubes LVM configuration. In this case, continue to step 4.
+3. If using an app qube or standard Linux, LVM should automatically discover the Qubes LVM configuration. In this case, continue to step 4.
1. Qubes uses the default name `qubes_dom0` for it's LVM VG.
This will conflict with the name of the VG of the currently installed system.
To read both, you will have to rename the VG.
@@ -77,7 +76,7 @@ Mounting the disk
| ----------------------------- | ----------------- | ------------------------------------------- |
| other\_install/root | dom0 root | The root partition of dom0. |
| other\_install/-private | VM | The /rw partition of the named VM. |
-| other\_install/-root | templateVM root | The root partition of the named TemplateVM. |
+| other\_install/-root | template root | The root partition of the named template. |
| other\_install/pool00\_tmeta | LVM Metadata | The metadata LV of this disk. |
6. Mount the disk using the command `mount /dev/other_install/`.
@@ -91,7 +90,7 @@ Reverting Changes
Any changes which were made to the system in the above steps will need to be reverted before the disk will properly boot.
However, LVM will not allow an VG to be renamed to a name already in use.
-Thes steps must occur either in an AppVM or using recovery media.
+Thes steps must occur either in an app qube or using recovery media.
1. Unmount any disks that were accessed.
2. Rename the VG back to qubes\_dom0 using the command `vgrename other_install qubes_dom0`.
diff --git a/user/advanced-topics/resize-disk-image.md b/user/advanced-topics/resize-disk-image.md
index 2ac8c817c..98ffa74a9 100644
--- a/user/advanced-topics/resize-disk-image.md
+++ b/user/advanced-topics/resize-disk-image.md
@@ -30,10 +30,10 @@ There are risks attached to reducing the size of an image, and in general you sh
There are several disk images which can be easily extended, but pay attention to the overall consumed space of your sparse/thin disk images.
In most cases, the GUI tool Qube Settings (available for every qube from the Start menu, and also in the Qube Manager) will allow you to easily increase maximum disk image size.
-
+
In case of standalone qubes and templates, just change the Disk Storage settings above.
-In case of template-based qubes, the private storage (the /home directory and user files) can be changed in the qube's own settings, but the system root image is [inherited from the template](/getting-started/), and so it must be changed in the template settings.
+In case of template-based qubes, the private storage (the /home directory and user files) can be changed in the qube's own settings, but the system root image is [inherited from the template](/doc/how-to-get-started/), and so it must be changed in the template settings.
If you are increasing the disk image size for Linux-based qubes installed from Qubes OS repositories in Qubes 4.0 or later, changing the settings above is all you need to do - in other cases, you may need to do more, according to instructions below.
See also the OS-specific follow-up instructions below.
@@ -85,7 +85,7 @@ zpool online -e poolname ada0
#### Linux
-Qubes will automatically grow the filesystem for you on all AppVMs with Qubes packages installed (which are all AppVMs installed from templates, cloned from templates etc. - if you have not created an empty HVM and installed a Linux distribution in it, without using Qubes repositories, you are almost certainly safe).
+Qubes will automatically grow the filesystem for you on all app qubes with Qubes packages installed (which are all app qubes installed from templates, cloned from templates etc. - if you have not created an empty HVM and installed a Linux distribution in it, without using Qubes repositories, you are almost certainly safe).
Otherwise, you will see that there is unallocated free space at the end of your primary disk.
You can use standard linux tools like `fdisk` and `resize2fs` to make this space available.
@@ -107,4 +107,3 @@ sudo lvresize --size 1024M /dev/qubes_dom0/vm-qube1-private
```
If you have a SSD see [here](/doc/disk-trim) for information on using fstrim.
-
diff --git a/user/advanced-topics/rpc-policy.md b/user/advanced-topics/rpc-policy.md
index 75d738af5..19dd9f738 100644
--- a/user/advanced-topics/rpc-policy.md
+++ b/user/advanced-topics/rpc-policy.md
@@ -6,7 +6,6 @@ ref: 178
title: RPC Policies
---
-
This document explains the basics of RPC policies in Qubes.
For more information, see [Qrexec: command execution in VMs](/doc/qrexec3/).
@@ -67,4 +66,3 @@ Further details about how this system works can be found in [Qrexec: command exe
(***Note**: the `$` character is deprecated in qrexec keywords -- please use `@` instead (e.g. `@anyvm`).
For more information, see the bulletin [here](https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-038-2018.txt).*)
-
diff --git a/user/advanced-topics/salt.md b/user/advanced-topics/salt.md
index 3ee82da2f..e565c19e8 100644
--- a/user/advanced-topics/salt.md
+++ b/user/advanced-topics/salt.md
@@ -3,10 +3,9 @@ lang: en
layout: doc
permalink: /doc/salt/
ref: 185
-title: Salt (management stack)
+title: Salt (management software)
---
-
Since the Qubes R3.1 release we have included the Salt (also called SaltStack)
management engine in dom0 as default (with some states already configured).
Salt allows administrators to easily configure their systems.
@@ -243,8 +242,8 @@ optional arguments:
--skip-dom0 Skip dom0 configuration (VM creation etc)
--targets TARGETS Coma separated list of VMs to target
--templates Target all templates
- --app Target all AppVMs
- --all Target all non-disposable VMs (TemplateVMs and AppVMs)
+ --app Target all app qubes
+ --all Target all non-disposables (templates and app qubes)
```
To apply a state to all templates, call `qubesctl --templates state.highstate`.
@@ -260,18 +259,18 @@ compromise cannot spread from one VM to another.
Beginning with Qubes 4.0 and after [QSB #45](/news/2018/12/03/qsb-45/), we implemented two changes:
-1. Added the `management_dispvm` VM property, which specifies the DVM
+1. Added the `management_dispvm` VM property, which specifies the disposable
Template that should be used for management, such as Salt
- configuration. TemplateBasedVMs inherit this property from their
- parent TemplateVMs. If the value is not set explicitly, the default
+ configuration. App qubes inherit this property from their
+ parent templates. If the value is not set explicitly, the default
is taken from the global `management_dispvm` property. The
VM-specific property is set with the `qvm-prefs` command, while the
global property is set with the `qubes-prefs` command.
-2. Created the `default-mgmt-dvm` DisposableVM Template, which is hidden from
+2. Created the `default-mgmt-dvm` disposable template, which is hidden from
the menu (to avoid accidental use), has networking disabled, and has
- a black label (the same as TemplateVMs). This VM is set as the global
- `management_dispvm`. Keep in mind that this DVM template has full control
+ a black label (the same as templates). This VM is set as the global
+ `management_dispvm`. Keep in mind that this disposable template has full control
over the VMs it's used to manage.
## Writing Your Own Configurations
@@ -420,7 +419,7 @@ The default settings can be overridden in the pillar data located in:
```
In dom0, you can apply a single state with `sudo qubesctl state.sls STATE_NAME`.
-For example, `sudo qubesctl state.sls qvm.personal` will create a `personal` VM (if it does not already exist) with all its dependencies (TemplateVM, `sys-firewall`, and `sys-net`).
+For example, `sudo qubesctl state.sls qvm.personal` will create a `personal` VM (if it does not already exist) with all its dependencies (template, `sys-firewall`, and `sys-net`).
### Available states
@@ -451,31 +450,31 @@ Whonix gateway ProxyVM
#### `qvm.personal`
-Personal AppVM
+Personal app qube
#### `qvm.work`
-Work AppVM
+Work app qube
#### `qvm.untrusted`
-Untrusted AppVM
+Untrusted app qube
#### `qvm.vault`
-Vault AppVM with no NetVM enabled.
+Vault app qube with no NetVM enabled.
#### `qvm.default-dispvm`
-Default DisposableVM template - fedora-26-dvm AppVM
+Default disposable template - fedora-26-dvm app qube
#### `qvm.anon-whonix`
-Whonix workstation AppVM.
+Whonix workstation app qube.
#### `qvm.whonix-ws-dvm`
-Whonix workstation AppVM for Whonix DisposableVMs.
+Whonix workstation app qube for Whonix disposables.
#### `qvm.updates-via-whonix`
@@ -483,27 +482,27 @@ Setup UpdatesProxy to route all templates updates through Tor (sys-whonix here).
#### `qvm.template-fedora-21`
-Fedora-21 TemplateVM
+Fedora-21 template
#### `qvm.template-fedora-21-minimal`
-Fedora-21 minimal TemplateVM
+Fedora-21 minimal template
#### `qvm.template-debian-7`
-Debian 7 (wheezy) TemplateVM
+Debian 7 (wheezy) template
#### `qvm.template-debian-8`
-Debian 8 (jessie) TemplateVM
+Debian 8 (jessie) template
#### `qvm.template-whonix-gw`
-Whonix Gateway TemplateVM
+Whonix Gateway template
#### `qvm.template-whonix-ws`
-Whonix Workstation TemplateVM
+Whonix Workstation template
#### `update.qubes-dom0`
@@ -515,7 +514,7 @@ $ sudo qubesctl --show-output state.sls update.qubes-dom0
#### `update.qubes-vm`
-Updates domUs. Example to update all TemplateVMs (executed in dom0):
+Updates domUs. Example to update all templates (executed in dom0):
```
$ sudo qubesctl --show-output --skip-dom0 --templates state.sls update.qubes-vm
@@ -543,9 +542,9 @@ Additional pillar data is available to ease targeting configurations (for exampl
VM type. Possible values:
- `admin` - Administration domain (`dom0`)
-- `template` - Template VM
+- `template` - template
- `standalone` - Standalone VM
-- `app` - Template based AppVM
+- `app` - Template based app qube
### `qubes:template`
@@ -609,4 +608,3 @@ install template and shutdown updateVM:
- [Jinja templates](http://jinja.pocoo.org/)
- [Qubes specific modules](https://github.com/QubesOS/qubes-mgmt-salt-dom0-qvm/blob/master/README.rst)
- [Formulas for default Qubes VMs](https://github.com/QubesOS/qubes-mgmt-salt-dom0-virtual-machines/tree/master/qvm)
-
diff --git a/user/advanced-topics/secondary-storage.md b/user/advanced-topics/secondary-storage.md
index fe5888aed..be01f4549 100644
--- a/user/advanced-topics/secondary-storage.md
+++ b/user/advanced-topics/secondary-storage.md
@@ -10,14 +10,13 @@ ref: 187
title: Secondary Storage
---
-
Suppose you have a fast but small primary SSD and a large but slow secondary HDD.
-You want to store a subset of your AppVMs on the HDD.
+You want to store a subset of your app qubes on the HDD.
## Instructions
Qubes 4.0 is more flexible than earlier versions about placing different VMs on different disks.
-For example, you can keep templates on one disk and AppVMs on another, without messy symlinks.
+For example, you can keep templates on one disk and app qubes on another, without messy symlinks.
These steps assume you have already created a separate [volume group](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/vg_admin#VG_create) and [thin pool](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/thinly_provisioned_volume_creation) (not thin volume) for your HDD.
See also [this example](https://www.linux.com/blog/how-full-encrypt-your-linux-system-lvm-luks) if you would like to create an encrypted LVM pool (but note you can use a single logical volume if preferred, and to use the `-T` option on `lvcreate` to specify it is thin). You can find the commands for this example applied to Qubes at the bottom of this R4.0 section.
@@ -112,4 +111,3 @@ By default VMs will be created on the main Qubes disk (i.e. a small SSD), to cre
```
qvm-create -P poolhd0_qubes --label red unstrusted-hdd
```
-
diff --git a/user/advanced-topics/standalone-and-hvm.md b/user/advanced-topics/standalone-and-hvm.md
deleted file mode 100644
index 770cfcca6..000000000
--- a/user/advanced-topics/standalone-and-hvm.md
+++ /dev/null
@@ -1,338 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /doc/standalone-and-hvm/
-redirect_from:
-- /doc/hvm/
-- /doc/hvm-create/
-- /en/doc/hvm-create/
-- /doc/HvmCreate/
-- /wiki/HvmCreate/
-ref: 130
-title: StandaloneVMs and HVMs
----
-
-
-A [StandaloneVM](/doc/glossary/#standalonevm) is a type of VM in Qubes that is created by cloning a [TemplateVM](/doc/templates/).
-Unlike TemplateVMs, however, StandaloneVMs do not supply their root filesystems to other VMs.
-Examples of situations in which StandaloneVMs can be useful include:
-
-- VMs used for development (dev environments often require a lot of specific packages and tools)
-- VMs used for installing untrusted packages.
- Normally, you install digitally signed software from Red Hat/Fedora repositories, and it's reasonable that such software has non malicious *installation* scripts (rpm pre/post scripts).
- However, when you would like to install some packages from less trusted sources, or unsigned, then using a dedicated (untrusted) standalone VM might be a better way.
-
-Meanwhile, a [Hardware-assisted Virtual Machine (HVM)](/doc/glossary/#hvm), also known as a "Fully-Virtualized Virtual Machine," utilizes the virtualization extensions of the host CPU.
-These are typically contrasted with [Paravirtualized (PV)](/doc/glossary/#pv) VMs.
-
-HVMs allow you to create qubes based on any OS for which you have an installation ISO, so you can easily have qubes running Windows, *BSD, or any Linux distribution.
-You can also use HVMs to run "live" distros.
-
-By default, every Qubes VM runs in [PVH](/doc/glossary/#pvhvm) mode (which has security advantages over both PV and HVM) except for those with attached PCI devices, which run in HVM mode.
-See [here](https://blog.invisiblethings.org/2017/07/31/qubes-40-rc1.html) for a discussion of the switch from PV to HVM and [here](/news/2018/01/11/qsb-37/) for the announcement about the change to using PVH as default.
-
-The StandaloneVM/TemplateVM distinction and the HVM/PV/PVH distinctions are orthogonal.
-The former is about root filesystem inheritance, whereas the latter is about the virtualization mode.
-In practice, however, it is most common for StandaloneVMs to be HVMs and for HVMs to be StandaloneVMs.
-In fact, this is so common that [StandaloneHVMs](/doc/glossary/#standalonehvm) are typically just called "HVMs."
-Hence, this page covers both topics.
-
-## Creating a StandaloneVM
-
-You can create a StandaloneVM in the Qube Manager by selecting the "Type" of "Standalone qube copied from a template" or "Empty standalone qube (install your own OS)."
-
-Alternatively, from the dom0 command line:
-
-```
-qvm-create --class StandaloneVM --label --property virt_mode=hvm
-```
-
-(Note: Technically, `virt_mode=hvm` is not necessary for every StandaloneVM.
-However, it makes sense if you want to use a kernel from within the VM.)
-
-## Creating an HVM
-
-### Using the GUI:
-
-In Qube Manager, select "Create new qube" from the Qube menu, or select the "Create a new qube" button.
-In the "create new qube" dialog box set Type to "Empty standalone qube (install your own OS)".
-If "install system from device" is selected (which is by default), then `virt_mode` will be set to `hvm` automatically.
-Otherwise, open the newly created qube's Settings GUI and in the "Advanced" tab select `HVM` in the virtualization mode drop-down list.
-Also, make sure "Kernel" is set to `(none)` on the same tab.
-
-## Command line:
-
-Qubes are template-based by default so you must set the `--class StandaloneVM` option to create a StandaloneVM:
-(name and label color are for illustration purposes).
-
-~~~
-qvm-create my-new-vm --class StandaloneVM --property virt_mode=hvm --property kernel='' --label=green
-~~~
-
-If you receive an error like this one, then you must first enable VT-x in your BIOS:
-
-~~~
-libvirt.libvirtError: invalid argument: could not find capabilities for arch=x86_64
-~~~
-
-Make sure that you give the new qube adequate memory to install and run.
-
-## Installing an OS in an HVM
-
-You will have to boot the qube with the installation media "attached" to it. You may either use the GUI or use command line instructions.
-At the command line you can do this in three ways:
-
-1. If you have the physical cdrom media and a disk drive
-
- ~~~
- qvm-start my-new-vm --cdrom=/dev/cdrom
- ~~~
-
-2. If you have an ISO image of the installation media located in dom0
-
- ~~~
- qvm-start my-new-vm --cdrom=dom0:/usr/local/iso/installcd.iso
- ~~~
-
-3. If you have an ISO image of the installation media located in a qube (obviously the qube where the media is located must be running)
-
- ~~~
- qvm-start my-new-vm --cdrom=someVM:/home/user/installcd.iso
- ~~~
-
-For security reasons you should *never* copy untrusted data to dom0. Qubes doesn't provide any easy to use mechanism for copying files between qubes and Dom0 and generally tries to discourage such actions.
-
-Next, the qube will start booting from the attached installation media, and you can start installation.
-Whenever the installer wants to "reboot the system" it actually shuts down the qube, and Qubes won't automatically start it.
-You may have to restart the qube several times in order to complete installation, (as is the case with Windows 7 installations).
-Several invocations of `qvm-start` command (as shown above) might be needed.
-
-## Setting up networking for HVMs
-
-Just like standard paravirtualized AppVMs, the HVM qubes get fixed IP addresses centrally assigned by Qubes.
-Normally Qubes agent scripts (or services on Windows) running within each AppVM are responsible for setting up networking within the VM according to the configuration created by Qubes (through [keys](/doc/vm-interface/#qubesdb) exposed by dom0 to the VM).
-Such centrally managed networking infrastructure allows for [advanced networking configuration](https://blog.invisiblethings.org/2011/09/28/playing-with-qubes-networking-for-fun.html).
-
-A generic HVM domain such as a standard Windows or Ubuntu installation, however, has no Qubes agent scripts running inside it initially and thus requires manual configuration of networking so that it matches the values assigned by Qubes for this qube.
-
-Even though we do have a small DHCP server that runs inside HVM untrusted stub domain to make the manual network configuration unnecessary for many VMs, this won't work for most modern Linux distributions which contain Xen networking PV drivers (but not Qubes tools) which bypass the stub-domain networking (their net frontends connect directly to the net backend in the netvm).
-In this instance our DHCP server is not useful.
-
-In order to manually configure networking in a VM, one should first find out the IP/netmask/gateway assigned to the particular VM by Qubes.
-This can be seen e.g. in the Qube Manager in the qube's properties:
-
-
-
-Alternatively, one can use the `qvm-ls -n` command to obtain the same information, (IP/netmask/gateway).
-
-The DNS IP addresses are `10.139.1.1` and `10.139.1.2`.
-There is [opt-in support](/doc/networking/#ipv6) for IPv6 forwarding.
-
-## Using TemplateBasedHVMs
-
-Qubes allows HVMs to share a common root filesystem from a select TemplateVM (see [TemplateHVM](/doc/glossary/#templatehvm) and [TemplateBasedHVM](/doc/glossary/#templatebasedhvm)).
-This mode can be used for any HVM (e.g. FreeBSD running in a HVM).
-
-In order to create a TemplateHVM you use the following command, suitably adapted:
-
-~~~
-qvm-create --class TemplateVM --property virt_mode=HVM --property kernel='' -l green
-~~~
-
-Set memory as appropriate, and install the OS into this template in the same way you would install it into a normal HVM -- please see instructions on [this page](/doc/hvm-create/).
-Generally you should install in to the first "system" disk. (Resize it as needed before starting installation.)
-
-You can then create a new qube using the new template.
-If you use this Template as it is, then any HVMs that use it will effectively be DisposableVMs - all file system changes will be wiped when the HVM is closed down.
-
-Please see [this page](/doc/windows-appvms/) for specific advice on installing and using Windows-based Templates.
-
-## Cloning HVMs
-
-Just like normal AppVMs, the HVM domains can also be cloned either using the command-line `qvm-clone` or via the Qube Manager's 'Clone VM' option in the right-click menu.
-
-The cloned VM will get identical root and private images and will essentially be identical to the original VM except that it will get a different MAC address for the networking interface:
-
-~~~
-[joanna@dom0 ~]$ qvm-prefs my-new-vm
-name : my-new-vm
-label : green
-type : HVM
-netvm : firewallvm
-updateable? : True
-installed by RPM? : False
-include in backups: False
-dir : /var/lib/qubes/appvms/my-new-vm
-config : /var/lib/qubes/appvms/my-new-vm/my-new-vm.conf
-pcidevs : []
-root img : /var/lib/qubes/appvms/my-new-vm/root.img
-private img : /var/lib/qubes/appvms/my-new-vm/private.img
-vcpus : 4
-memory : 512
-maxmem : 512
-MAC : 00:16:3E:5E:6C:05 (auto)
-debug : off
-default user : user
-qrexec_installed : False
-qrexec timeout : 60
-drive : None
-timezone : localtime
-
-[joanna@dom0 ~]$ qvm-clone my-new-vm my-new-vm-copy
-
-/.../
-
-[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy
-name : my-new-vm-copy
-label : green
-type : HVM
-netvm : firewallvm
-updateable? : True
-installed by RPM? : False
-include in backups: False
-dir : /var/lib/qubes/appvms/my-new-vm-copy
-config : /var/lib/qubes/appvms/my-new-vm-copy/my-new-vm-copy.conf
-pcidevs : []
-root img : /var/lib/qubes/appvms/my-new-vm-copy/root.img
-private img : /var/lib/qubes/appvms/my-new-vm-copy/private.img
-vcpus : 4
-memory : 512
-maxmem : 512
-MAC : 00:16:3E:5E:6C:01 (auto)
-debug : off
-default user : user
-qrexec_installed : False
-qrexec timeout : 60
-drive : None
-timezone : localtime
-~~~
-
-Note how the MAC addresses differ between those two otherwise identical VMs.
-The IP addresses assigned by Qubes will also be different of course to allow networking to function properly:
-
-~~~
-[joanna@dom0 ~]$ qvm-ls -n
-/.../
- my-new-vm-copy | | Halted | Yes | | *firewallvm | green | 10.137.2.3 | n/a | 10.137.2.1 |
- my-new-vm | | Halted | Yes | | *firewallvm | green | 10.137.2.7 | n/a | 10.137.2.1 |
-/.../
-~~~
-
-If for any reason you would like to make sure that the two VMs have the same MAC address, you can use `qvm-prefs` to set a fixed MAC address for the VM:
-
-~~~
-[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy -s mac 00:16:3E:5E:6C:05
-[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy
-name : my-new-vm-copy
-label : green
-type : HVM
-netvm : firewallvm
-updateable? : True
-installed by RPM? : False
-include in backups: False
-dir : /var/lib/qubes/appvms/my-new-vm-copy
-config : /var/lib/qubes/appvms/my-new-vm-copy/my-new-vm-copy.conf
-pcidevs : []
-root img : /var/lib/qubes/appvms/my-new-vm-copy/root.img
-private img : /var/lib/qubes/appvms/my-new-vm-copy/private.img
-vcpus : 4
-memory : 512
-maxmem : 512
-MAC : 00:16:3E:5E:6C:05
-debug : off
-default user : user
-qrexec_installed : False
-qrexec timeout : 60
-drive : None
-timezone : localtime
-~~~
-
-## Assigning PCI devices to HVMs
-
-HVM domains (including Windows VMs) can be [assigned PCI devices](/doc/assigning-devices/) just like normal AppVMs.
-E.g. one can assign one of the USB controllers to the Windows VM and should be able to use various devices that require Windows software, such as phones, electronic devices that are configured via FTDI, etc.
-
-One problem at the moment however, is that after the whole system gets suspended into S3 sleep and subsequently resumed, some attached devices may stop working and should be restarted within the VM.
-This can be achieved under a Windows HVM by opening the Device Manager, selecting the actual device (such as a USB controller), 'Disabling' the device, and then 'Enabling' the device again.
-This is illustrated on the screenshot below:
-
-
-
-## Converting VirtualBox VMs to Qubes HVMs
-
-You can convert any VirtualBox VM to a Qubes HVM using this method.
-
-For example, Microsoft provides [free 90 day evaluation VirtualBox VMs for browser testing](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/).
-
-About 60 GB of disk space is required for conversion.
-Use an external harddrive if needed.
-The final root.img size is 40 GB.
-
-In Debian AppVM, install `qemu-utils` and `unzip`:
-
-~~~
-sudo apt install qemu-utils unzip
-~~~
-
-Unzip VirtualBox zip file:
-
-~~~
-unzip *.zip
-~~~
-
-Extract OVA tar archive:
-
-~~~
-tar -xvf *.ova
-~~~
-
-Convert vmdk to raw:
-
-~~~
-qemu-img convert -O raw *.vmdk win10.raw
-~~~
-
-Copy the root image file from the originating qube (here called `untrusted`) to a temporary location in dom0, typing this in a Dom0 terminal:
-
-~~~
-qvm-run --pass-io untrusted 'cat "/media/user/externalhd/win10.raw"' > /home/user/win10-root.img
-~~~
-
-From within Dom0, create a new HVM (here called `win10`) with the root image we just copied to Dom0 (change the amount of RAM in GB as you wish):
-
-~~~
-qvm-create --property=virt_mode=hvm --property=memory=4096 --property=kernel='' --label red --standalone --root-move-from /home/user/win10-root.img win10
-~~~
-
-Start win10 VM:
-
-~~~
-qvm-start win10
-~~~
-
-**Optional ways to get more information**
-
-Filetype of OVA file:
-
-~~~
-file *.ova
-~~~
-
-List files of OVA tar archive:
-
-~~~
-tar -tf *.ova
-~~~
-
-List filetypes supported by qemu-img:
-
-~~~
-qemu-img -h | tail -n1
-~~~
-
-## Further reading
-
-Other documents related to HVM:
-
-- [Windows VMs](/doc/windows-vm/)
-- [LinuxHVMTips](/doc/linux-hvm-tips/)
diff --git a/user/advanced-topics/standalones-and-hvms.md b/user/advanced-topics/standalones-and-hvms.md
new file mode 100644
index 000000000..04df42d55
--- /dev/null
+++ b/user/advanced-topics/standalones-and-hvms.md
@@ -0,0 +1,403 @@
+---
+lang: en
+layout: doc
+permalink: /doc/standalones-and-hvms/
+redirect_from:
+- /doc/standalones-and-hvm/
+- /doc/standalone-and-hvm/
+- /doc/hvm/
+- /doc/hvm-create/
+- /en/doc/hvm-create/
+- /doc/HvmCreate/
+- /wiki/HvmCreate/
+ref: 130
+title: Standalones and HVMs
+---
+
+A [standalone](/doc/glossary/#standalone) is a type of qube that is created by
+cloning a [template](/doc/glossary/#template). Unlike templates, however,
+standalones do not supply their root filesystems to other qubes. Examples of
+situations in which standalones can be useful include:
+
+- Qubes used for development (dev environments often require a lot of specific
+ packages and tools)
+- Qubes used for installing untrusted packages. Normally, you install digitally
+ signed software from Red Hat/Fedora repositories, and it's reasonable that
+ such software has non malicious *installation* scripts (rpm pre/post
+ scripts). However, when you would like to install some packages from less
+ trusted sources, or unsigned, then using a dedicated (untrusted) standalone
+ might be a better way.
+
+Meanwhile, a [Hardware-assisted Virtual Machine (HVM)](/doc/glossary/#hvm),
+also known as a "Fully-Virtualized Virtual Machine," utilizes the
+virtualization extensions of the host CPU. These are typically contrasted with
+Paravirtualized (PV) VMs.
+
+HVMs allow you to create qubes based on any OS for which you have an
+installation ISO, so you can easily have qubes running Windows, \*BSD, or any
+Linux distribution. You can also use HVMs to run "live" distros.
+
+By default, every qube runs in PVH mode (which has security advantages over
+both PV and HVM), except for those with attached PCI devices, which run in HVM
+mode. See [here](https://blog.invisiblethings.org/2017/07/31/qubes-40-rc1.html)
+for a discussion of the switch from PV to HVM and
+[here](/news/2018/01/11/qsb-37/) for the announcement about the change to using
+PVH as default.
+
+The standalone/template distinction and the HVM/PV/PVH distinctions are
+orthogonal. The former is about root filesystem inheritance, whereas the latter
+is about the virtualization mode. In practice, however, it is most common for
+standalones to be HVMs and for HVMs to be standalones. Hence, this page covers
+both topics.
+
+## Creating a standalone
+
+You can create a standalone in the Qube Manager by selecting the "Type" of
+"Standalone qube copied from a template" or "Empty standalone qube (install
+your own OS)."
+
+Alternatively, from the dom0 command line:
+
+```
+qvm-create --class StandaloneVM --label --property virt_mode=hvm
+```
+
+(Note: Technically, `virt_mode=hvm` is not necessary for every standalone.
+However, it makes sense if you want to use a kernel from within the qube.)
+
+## Updating standalones
+
+When you create a standalone from a template, the standalone is a complete
+clone of the template, including the entire filesystem. After the moment of
+creation, the standalone becomes completely independent from the template.
+Therefore, the standalone will not be updated merely by updating the template
+from which it was originally cloned. Rather, it must be updated as an
+independent qube. See [How to Update](/doc/how-to-update/).
+
+## Creating an HVM
+
+### Using the GUI
+
+In Qube Manager, select "Create new qube" from the Qube menu, or select the
+"Create a new qube" button. In the "create new qube" dialog box set Type to
+"Empty standalone qube (install your own OS)". If "install system from device"
+is selected (which it is by default), then `virt_mode` will be set to `hvm`
+automatically. Otherwise, open the newly-created qube's Settings GUI and, in
+the "Advanced" tab, select `HVM` in the virtualization mode drop-down list.
+Also, make sure "Kernel" is set to `(none)` on the same tab.
+
+### Command line
+
+Qubes are template-based (i.e., [app qubes](/doc/glossary/#app-qube) by
+default, so you must set the `--class StandaloneVM` option to create a
+standalone. The name and label color used below are for illustration purposes.
+
+```
+qvm-create my-new-vm --class StandaloneVM --property virt_mode=hvm --property kernel='' --label=green
+```
+
+If you receive an error like this one, then you must first enable VT-x in your
+BIOS:
+
+```
+libvirt.libvirtError: invalid argument: could not find capabilities for arch=x86_64
+```
+
+Make sure that you give the new qube adequate memory to install and run.
+
+## Installing an OS in an HVM
+
+You will have to boot the qube with the installation media "attached" to it.
+You may either use the GUI or use command line instructions. At the command
+line you can do this in three ways:
+
+1. If you have the physical CD-ROM media and an optical disc drive:
+
+ ```
+ qvm-start --cdrom=/dev/cdrom
+ ```
+
+2. If you have an ISO image of the installation media located in dom0:
+
+ ```
+ qvm-start --cdrom=dom0:/usr/local/iso/
+ ```
+
+3. If you have an ISO image of the installation media located in a qube (the
+ qube where the media is located must be running):
+
+ ```
+ qvm-start --cdrom=:/home/user/
+ ```
+
+For security reasons, you should *never* copy untrusted data to dom0.
+
+Next, the qube will start booting from the attached installation media, and you
+can start installation. Whenever the installer wants to "reboot the system" it
+actually shuts down the qube, and Qubes won't automatically start it. You may
+have to restart the qube several times in order to complete installation (as is
+the case with Windows 7 installations). Several invocations of the `qvm-start`
+command (as shown above) might be needed.
+
+## Setting up networking for HVMs
+
+Just like standard app qubes, an HVM gets a fixed IP addresses centrally
+assigned by Qubes. Normally, Qubes agent scripts (or services on Windows)
+running within each app qube are responsible for setting up networking within
+the qube according to the configuration created by Qubes (through
+[keys](/doc/vm-interface/#qubesdb) exposed by dom0 to the qube). Such
+centrally-managed networking infrastructure allows for [advanced networking
+configurations](https://blog.invisiblethings.org/2011/09/28/playing-with-qubes-networking-for-fun.html).
+
+A generic HVM such as a standard Windows or Ubuntu installation, however, has
+no Qubes agent scripts running inside it initially and thus requires manual
+configuration of networking so that it matches the values assigned by Qubes.
+
+Even though we do have a small DHCP server that runs inside the HVM's untrusted
+stub domain to make the manual network configuration unnecessary for many
+qubes, this won't work for most modern Linux distributions, which contain Xen
+networking PV drivers (but not Qubes tools), which bypass the stub-domain
+networking. (Their net frontends connect directly to the net backend in the
+[netvm](/doc/glossary/#netvm).) In this instance, our DHCP server is not
+useful.
+
+In order to manually configure networking in a qube, one should first find out
+the IP/netmask/gateway assigned to the particular qube by Qubes. This can be
+seen, e.g., in the Qube Manager in the qube's properties:
+
+
+
+Alternatively, one can use the `qvm-ls -n` command to obtain the same
+information (IP/netmask/gateway).
+
+The DNS IP addresses are `10.139.1.1` and `10.139.1.2`. There is [opt-in
+support](/doc/networking/#ipv6) for IPv6 forwarding.
+
+## Using template-based HVMs
+
+Qubes allows HVMs to share a common root filesystem from a select template.
+This mode can be used for any HVM (e.g., FreeBSD running in an HVM).
+
+In order to create an HVM template, you use the following command, suitably
+adapted:
+
+```
+qvm-create --class TemplateVM --property virt_mode=HVM --property kernel='' -l
+```
+
+Set memory as appropriate and install the OS into this template in the same way
+you would install it into a normal HVM. Generally, you should install in to the
+first "system" disk. (Resize it as needed before starting installation.)
+
+You can then create a new qube using the new template. If you use this Template
+as is, then any HVMs based on it it will effectively be disposables. All file
+system changes will be wiped when the HVM is shut down.
+
+Please see [this
+page](https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-tools.md)
+for specific advice on installing and using Windows-based templates.
+
+## Cloning HVMs
+
+Just like normal app qubes, HVMs can also be cloned either using the command
+`qvm-clone` or via the Qube Manager's "Clone VM" option in the right-click
+menu.
+
+The cloned qube will get identical root and private images and will essentially
+be identical to the original qube, except that it will get a different MAC
+address for the networking interface:
+
+```
+[joanna@dom0 ~]$ qvm-prefs my-new-vm
+name : my-new-vm
+label : green
+type : HVM
+netvm : firewallvm
+updateable? : True
+installed by RPM? : False
+include in backups: False
+dir : /var/lib/qubes/appvms/my-new-vm
+config : /var/lib/qubes/appvms/my-new-vm/my-new-vm.conf
+pcidevs : []
+root img : /var/lib/qubes/appvms/my-new-vm/root.img
+private img : /var/lib/qubes/appvms/my-new-vm/private.img
+vcpus : 4
+memory : 512
+maxmem : 512
+MAC : 00:16:3E:5E:6C:05 (auto)
+debug : off
+default user : user
+qrexec_installed : False
+qrexec timeout : 60
+drive : None
+timezone : localtime
+
+[joanna@dom0 ~]$ qvm-clone my-new-vm my-new-vm-copy
+
+/.../
+
+[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy
+name : my-new-vm-copy
+label : green
+type : HVM
+netvm : firewallvm
+updateable? : True
+installed by RPM? : False
+include in backups: False
+dir : /var/lib/qubes/appvms/my-new-vm-copy
+config : /var/lib/qubes/appvms/my-new-vm-copy/my-new-vm-copy.conf
+pcidevs : []
+root img : /var/lib/qubes/appvms/my-new-vm-copy/root.img
+private img : /var/lib/qubes/appvms/my-new-vm-copy/private.img
+vcpus : 4
+memory : 512
+maxmem : 512
+MAC : 00:16:3E:5E:6C:01 (auto)
+debug : off
+default user : user
+qrexec_installed : False
+qrexec timeout : 60
+drive : None
+timezone : localtime
+```
+
+Note that the MAC addresses differ between those two otherwise identical qubes.
+The IP addresses assigned by Qubes will also be different, of course, to allow
+networking to function properly:
+
+```
+[joanna@dom0 ~]$ qvm-ls -n
+/.../
+ my-new-vm-copy | | Halted | Yes | | *firewallvm | green | 10.137.2.3 | n/a | 10.137.2.1 |
+ my-new-vm | | Halted | Yes | | *firewallvm | green | 10.137.2.7 | n/a | 10.137.2.1 |
+/.../
+```
+
+If, for any reason, you would like to make sure that the two qubes have the
+same MAC address, you can use `qvm-prefs` to set a fixed MAC address:
+
+```
+[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy -s mac 00:16:3E:5E:6C:05
+[joanna@dom0 ~]$ qvm-prefs my-new-vm-copy
+name : my-new-vm-copy
+label : green
+type : HVM
+netvm : firewallvm
+updateable? : True
+installed by RPM? : False
+include in backups: False
+dir : /var/lib/qubes/appvms/my-new-vm-copy
+config : /var/lib/qubes/appvms/my-new-vm-copy/my-new-vm-copy.conf
+pcidevs : []
+root img : /var/lib/qubes/appvms/my-new-vm-copy/root.img
+private img : /var/lib/qubes/appvms/my-new-vm-copy/private.img
+vcpus : 4
+memory : 512
+maxmem : 512
+MAC : 00:16:3E:5E:6C:05
+debug : off
+default user : user
+qrexec_installed : False
+qrexec timeout : 60
+drive : None
+timezone : localtime
+```
+
+## Assigning PCI devices to HVMs
+
+HVMs (including Windows qubes) can be [assigned PCI
+devices](/doc/how-to-use-pci-devices/) just like normal app qubes. For example,
+you can assign a USB controller to a Windows qube, and you should be able to
+use various devices that require Windows software, such as phones, electronic
+devices that are configured via FTDI, etc.
+
+One problem at the moment, however, is that after the whole system gets
+suspended into S3 sleep and subsequently resumed, some attached devices may
+stop working and should be restarted within the qube. This can be achieved
+under a Windows HVM by opening the Device Manager, selecting the actual device
+(such as a USB controller), 'Disabling' the device, and then 'Enabling' the
+device again. This is illustrated in the screenshot below:
+
+
+
+## Converting VirtualBox VMs to Qubes HVMs
+
+You can convert any VirtualBox VM to a Qubes HVM using this method.
+
+For example, Microsoft provides [free 90-day evaluation VirtualBox VMs for
+browser
+testing](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/).
+
+About 60 GB of disk space is required for conversion. Use an external hard
+drive if needed. The final `root.img` size is 40 GB.
+
+In a Debian app qube, install `qemu-utils` and `unzip`:
+
+```
+sudo apt install qemu-utils unzip
+```
+
+Unzip VirtualBox zip file:
+
+```
+unzip *.zip
+```
+
+Extract OVA tar archive:
+
+```
+tar -xvf *.ova
+```
+
+Convert vmdk to raw:
+
+```
+qemu-img convert -O raw *.vmdk win10.raw
+```
+
+Copy the root image file from the originating qube (here called `untrusted`) to
+a temporary location in dom0, typing this in a dom0 terminal:
+
+```
+qvm-run --pass-io untrusted 'cat "/media/user/externalhd/win10.raw"' > /home/user/win10-root.img
+```
+
+From within dom0, create a new HVM (here called `win10`) with the root image we
+just copied to dom0 (change the amount of RAM in GB as you wish):
+
+```
+qvm-create --property=virt_mode=hvm --property=memory=4096 --property=kernel='' --label red --standalone --root-move-from /home/user/win10-root.img win10
+```
+
+Start `win10`:
+
+```
+qvm-start win10
+```
+
+### Optional ways to get more information
+
+Filetype of OVA file:
+
+```
+file *.ova
+```
+
+List files of OVA tar archive:
+
+```
+tar -tf *.ova
+```
+
+List filetypes supported by qemu-img:
+
+```
+qemu-img -h | tail -n1
+```
+
+## Further reading
+
+Other documents related to HVMs:
+
+- [Windows VMs](https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-vm.md)
+- [Linux HVM Tips](https://github.com/Qubes-Community/Contents/blob/master/docs/os/linux-hvm-tips.md)
diff --git a/user/advanced-topics/usb-qubes.md b/user/advanced-topics/usb-qubes.md
index 1e20bd824..bc978633c 100644
--- a/user/advanced-topics/usb-qubes.md
+++ b/user/advanced-topics/usb-qubes.md
@@ -12,7 +12,6 @@ ref: 181
title: USB Qubes
---
-
If during installation you enabled the creation of a USB-qube, your system should be setup already and none of the mentioned steps here should be necessary. (Unless you want to [remove your USB-qube](#removing-a-usb-qube).) If for any reason no USB-qube was created during installation, this guide will show you how to do so.
**Caution:** If you want to use a USB-keyboard, please beware of the possibility to lock yourself out! To avoid this problem [enable your keyboard for login](#enable-a-usb-keyboard-for-login)!
@@ -201,4 +200,3 @@ The procedure to hide all USB controllers from dom0 is as follows:
5. If `rd.qubes.hide_all_usb` appears anywhere in those lines, remove it.
6. Save and close the file.
7. Reboot.
-
diff --git a/user/advanced-topics/volume-backup-revert.md b/user/advanced-topics/volume-backup-revert.md
index 5905b71f0..417c93f6e 100644
--- a/user/advanced-topics/volume-backup-revert.md
+++ b/user/advanced-topics/volume-backup-revert.md
@@ -10,7 +10,6 @@ ref: 206
title: Volume Backup and Revert
---
-
With Qubes, it is possible to revert one of a VM's storage volumes to a previous
state using the automatic snapshot that is normally saved every time a VM is
shutdown. (Note that this is a different, lower level activity than the
@@ -19,7 +18,7 @@ shutdown. (Note that this is a different, lower level activity than the
In Qubes, when you create a new VM, it's volumes are stored in one of the
system's [Storage Pools](/doc/storage-pools/). On pool creation, a
revisions_to_keep default value is set for the entire pool. (For a pool creation
-example, see [Storing AppVMs on Secondary Drives](/doc/secondary-storage/).)
+example, see [Storing app qubes on Secondary Drives](/doc/secondary-storage/).)
Thereafter, each volume associated with a VM that is stored in this pool
inherits the pool default revisions_to_keep.
diff --git a/user/advanced-topics/windows.md b/user/advanced-topics/windows.md
index bd2c3720b..347f17b67 100644
--- a/user/advanced-topics/windows.md
+++ b/user/advanced-topics/windows.md
@@ -6,7 +6,6 @@ ref: 129
title: Windows VMs
---
-
Like any other unmodified OSes, Windows can be installed in Qubes as an [HVM](/doc/standalone-and-hvm/) domain.
Qubes Windows Tools are then usually installed to provide integration with the rest of the Qubes system; they also include Xen's paravirtualized (PV) drivers to increase performance compared to qemu emulated devices. Alternatively, only Xen's PV drivers can be installed if integration with Qubes isn't required or if the tools aren't supported on a give version of Windows. In the latter case, one would have to [enable inter-VM networking](/doc/firewall/#enabling-networking-between-two-qubes) to be able to exchange files with HVMs.
diff --git a/user/downloading-installing-upgrading/custom-install.md b/user/downloading-installing-upgrading/custom-install.md
index 76dc94c10..f536e6bc0 100644
--- a/user/downloading-installing-upgrading/custom-install.md
+++ b/user/downloading-installing-upgrading/custom-install.md
@@ -1,4 +1,5 @@
---
+advanced: true
lang: en
layout: doc
permalink: /doc/custom-install/
@@ -8,7 +9,6 @@ ref: 152
title: Custom Installation
---
-
In the present context, "custom installation" refers to things like manual partitioning, setting up LVM and RAID, and manual LUKS encryption configuration.
## Installer Defaults
@@ -160,4 +160,3 @@ Boot into the Qubes installer, then press `ctrl`+`alt`+`F2` to get a virtual con
Repeat the process for `sda1` and `qubes_dom0-swap`. Those should be assigned to `/boot` and `swap` respectively.
The default file systems are ext4 for `/boot` and `/`, and swap for `swap`.
When you are finished, the Unknown list should go away, and all three mount points should be assigned. Proceed normally with the installation from there.
-
diff --git a/user/downloading-installing-upgrading/download-mirrors.md b/user/downloading-installing-upgrading/download-mirrors.md
index 6b1873e4a..4220ea00a 100644
--- a/user/downloading-installing-upgrading/download-mirrors.md
+++ b/user/downloading-installing-upgrading/download-mirrors.md
@@ -1,11 +1,12 @@
---
lang: en
-layout: sidebar
+layout: doc
permalink: /downloads/mirrors/
ref: 148
title: Download Mirrors
---
+**Note:** The Qubes OS Project has no control over or access to data collected at these mirrors.
List of Download Mirrors
------------------------
@@ -24,4 +25,3 @@ helpful in streamlining the process.
every 6-8 hours is fine.
* For technical accommodations, please contact [Wojtek](/team/#wojtek-porczyk) or [Marek](/team/#marek-marczykowski-górecki).
* For website updates and fixes, please contact [Andrew](/team/#andrew-david-wong).
-
diff --git a/user/downloading-installing-upgrading/downloads.md b/user/downloading-installing-upgrading/downloads.md
index 9634fe521..a45f9e6c6 100644
--- a/user/downloading-installing-upgrading/downloads.md
+++ b/user/downloading-installing-upgrading/downloads.md
@@ -3,5 +3,6 @@ lang: en
layout: doc
permalink: /doc/downloads/
redirect_to: /downloads/
+ref: 244
title: Downloads
---
diff --git a/user/downloading-installing-upgrading/install-security.md b/user/downloading-installing-upgrading/install-security.md
index 2fddfef81..4ee21ff4c 100644
--- a/user/downloading-installing-upgrading/install-security.md
+++ b/user/downloading-installing-upgrading/install-security.md
@@ -10,7 +10,6 @@ ref: 149
title: Installation security
---
-
There are several security matters to consider before and during the Qubes installation process.
## Trusting your hardware
@@ -71,10 +70,9 @@ Cons:
(This mainly applies if you're upgrading from a previous version of Qubes.)
Currently, the only options for recording optical discs (e.g., CDs, DVDs, BRDs) in Qubes are:
1. Use a USB optical drive.
- 2. Attach a SATA optical drive to a secondary SATA controller, then assign this secondary SATA controller to an AppVM.
+ 2. Attach a SATA optical drive to a secondary SATA controller, then assign this secondary SATA controller to an app qube.
3. Use a SATA optical drive attached to dom0.
(Option 3 violates the Qubes security model since it entails transferring an untrusted ISO to dom0 in order to burn it to disc, which leaves only the other two options.)
Considering the pros and cons of each, perhaps a USB drive with non-rewritable (or at least cryptographically-signed) firmware and a physical write-protect switch might be the best option.
-
diff --git a/user/downloading-installing-upgrading/installation-guide.md b/user/downloading-installing-upgrading/installation-guide.md
index 2804e468a..284ae15d4 100644
--- a/user/downloading-installing-upgrading/installation-guide.md
+++ b/user/downloading-installing-upgrading/installation-guide.md
@@ -19,9 +19,10 @@ ref: 153
title: Installation Guide
---
-Welcome to the Qubes OS installation guide!
-This guide will walk you through the process of installing Qubes.
-Please read it carefully and thoroughly, as it contains important information for ensuring that your Qubes OS installation is functional and secure.
+Welcome to the Qubes OS installation guide! This guide will walk you through
+the process of installing Qubes. Please read it carefully and thoroughly, as it
+contains important information for ensuring that your Qubes OS installation is
+functional and secure.
## Pre-installation
@@ -29,29 +30,37 @@ Please read it carefully and thoroughly, as it contains important information fo
- Warning: Qubes has no control over what happens on your computer before you install it.
- No software can provide security if it is installed on compromised hardware.
- Do not install Qubes on a computer you don't trust.
+ Warning: Qubes has no control over what happens on your computer
+ before you install it. No software can provide security if it is installed on
+ compromised hardware. Do not install Qubes on a computer you don't trust.
See installation security for more information.
-Qubes OS has very specific [system requirements](/doc/system-requirements/).
-To ensure compatibility, we strongly recommend using [Qubes-certified hardware](/doc/certified-hardware/).
-Other hardware may require you to perform significant troubleshooting.
-You may also find it helpful to consult the [Hardware Compatibility List](/hcl/).
-
-Even on supported hardware, you must ensure that [IOMMU-based virtualization](https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit#Virtualization) is activated in the BIOS.
-Without it, Qubes OS won't be able to enforce isolation.
-For Intel-based boards, this setting is called Intel Virtualization for Directed I/O (**Intel VT-d**) and for AMD-based boards, it is called AMD I/O Virtualization Technology (or simply **AMD-Vi**).
-This parameter should be activated in your computer's BIOS, alongside the standard Virtualization (**Intel VT-x**) and AMD Virtualization (**AMD-V**) extensions.
-This [external guide](https://web.archive.org/web/20200112220913/https://www.intel.in/content/www/in/en/support/articles/000007139/server-products.html) made for Intel-based boards can help you figure out how to enter your BIOS to locate and activate those settings.
-If those settings are not nested under the Advanced tab, you might find them under the Security tab.
+Qubes OS has very specific [system requirements](/doc/system-requirements/). To
+ensure compatibility, we strongly recommend using [Qubes-certified
+hardware](/doc/certified-hardware/). Other hardware may require you to perform
+significant troubleshooting. You may also find it helpful to consult the
+[Hardware Compatibility List](/hcl/).
+
+Even on supported hardware, you must ensure that [IOMMU-based
+virtualization](https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit#Virtualization)
+is activated in the BIOS. Without it, Qubes OS won't be able to enforce
+isolation. For Intel-based boards, this setting is called Intel Virtualization
+for Directed I/O (**Intel VT-d**) and for AMD-based boards, it is called AMD
+I/O Virtualization Technology (or simply **AMD-Vi**). This parameter should be
+activated in your computer's BIOS, alongside the standard Virtualization
+(**Intel VT-x**) and AMD Virtualization (**AMD-V**) extensions. This [external
+guide](https://web.archive.org/web/20200112220913/https://www.intel.in/content/www/in/en/support/articles/000007139/server-products.html)
+made for Intel-based boards can help you figure out how to enter your BIOS to
+locate and activate those settings. If those settings are not nested under the
+Advanced tab, you might find them under the Security tab.
- Note: Qubes OS is not meant to be installed inside a virtual machine as a guest hypervisor.
- In other words, nested virtualization is not supported.
- In order for a strict compartmentalization to be enforced, Qubes OS needs to be able to manage the hardware directly.
+ Note: Qubes OS is not meant to be installed inside a virtual machine
+ as a guest hypervisor. In other words, nested virtualization is not
+ supported. In order for a strict compartmentalization to be enforced, Qubes
+ OS needs to be able to manage the hardware directly.
### Copying the ISO onto the installation medium
@@ -60,71 +69,86 @@ Start by [downloading](/downloads/) a Qubes ISO.
- Warning: Any file you download from the internet could be malicious, even if it appears to come from a trustworthy source.
- Our philosophy is to distrust the infrastructure.
- Regardless of how you acquire your Qubes ISO, verify its authenticity before continuing.
+ Warning: Any file you download from the internet could be malicious,
+ even if it appears to come from a trustworthy source. Our philosophy is to distrust the
+ infrastructure. Regardless of how you acquire your Qubes ISO, verify its authenticity before
+ continuing.
-Once the ISO has been verified as authentic, you should copy it onto the installation medium of your choice, such as a dual-layer DVD, a Blu-ray disc, or a USB drive.
-The size of each Qubes ISO is available on the [downloads](/downloads/) page by hovering over the download button.
+Once the ISO has been verified as authentic, you should copy it onto the
+installation medium of your choice, such as a dual-layer DVD, a Blu-ray disc,
+or a USB drive. The size of each Qubes ISO is available on the
+[downloads](/downloads/) page by hovering over the download button.
- Note: There are important security considerations to keep in mind when choosing an installation medium.
+ Note: There are important security
+ considerations to keep in mind when choosing an installation medium.
- Warning: Be careful to choose the correct device when copying the ISO, or you may lose data.
- We strongly recommended making a full backup before modifying any devices.
+ Warning: Be careful to choose the correct device when copying the ISO,
+ or you may lose data. We strongly recommended making a full backup before
+ modifying any devices.
-If you choose to use a USB drive, copy the ISO onto the USB device, e.g. using `dd`:
+If you choose to use a USB drive, copy the ISO onto the USB device, e.g. using
+`dd`:
```
$ sudo dd if=Qubes-RX-x86_64.iso of=/dev/sdY status=progress bs=1048576 && sync
```
-Change `Qubes-RX-x86_64.iso` to the filename of the version you're installing, and change `/dev/sdY` to the correct target device e.g., `/dev/sdc`).
-Make sure to write to the entire device (e.g., `/dev/sdc`) rather than just a single partition (e.g., `/dev/sdc1`).
+Change `Qubes-RX-x86_64.iso` to the filename of the version you're installing,
+and change `/dev/sdY` to the correct target device e.g., `/dev/sdc`). Make sure
+to write to the entire device (e.g., `/dev/sdc`) rather than just a single
+partition (e.g., `/dev/sdc1`).
-On Windows, you can use the [Rufus](https://rufus.akeo.ie/) tool to write the ISO to a USB key.
-MediaTest is not recommended.
-Be sure to select "DD image" mode (*after* selecting the Qubes ISO):
+On Windows, you can use the [Rufus](https://rufus.akeo.ie/) tool to write the
+ISO to a USB key. MediaTest is not recommended. Be sure to select "DD image"
+mode (*after* selecting the Qubes ISO):
- Note: If you do this on Windows 10, you can only install Qubes without MediaTest, which is not recommended.
+ Note: If you do this on Windows 10, you can only install Qubes
+ without MediaTest, which is not recommended.
-
+
-
+
-If you are an advanced user, and you would like to customize your installation, please see [custom installation](/doc/custom-install/).
-Otherwise, follow the instructions below.
+If you are an advanced user, and you would like to customize your installation,
+please see [custom installation](/doc/custom-install/). Otherwise, follow the
+instructions below.
## Installation
-This section will demonstrate a simple installation using mostly default settings.
+This section will demonstrate a simple installation using mostly default
+settings.
### Getting to the boot screen
-Just after you power on your machine, make the Qubes OS medium available to the computer by inserting your DVD or USB drive.
-Shortly after the Power-on self-test (POST) is completed, you should be greeted with the Qubes OS boot screen.
+Just after you power on your machine, make the Qubes OS medium available to the
+computer by inserting your DVD or USB drive. Shortly after the Power-on
+self-test (POST) is completed, you should be greeted with the Qubes OS boot
+screen.
-
+
- Note: When installing Qubes OS 4.0 on UEFI, there is intentionally no boot menu.
- It goes straight to the installer.
- The boot menu will be back in Qubes OS 4.1.
+ Note: When installing Qubes OS 4.0 on UEFI, there is intentionally no
+ boot menu. It goes straight to the installer. The boot menu will be back in
+ Qubes OS 4.1.
-From here, you can navigate the boot screen using the arrow keys on your keyboard.
-Pressing the "Tab" key will reveal options.
-You can choose one of three options:
+From here, you can navigate the boot screen using the arrow keys on your
+keyboard. Pressing the "Tab" key will reveal options. You can choose one of
+three options:
* Install Qubes OS
* Test this media and install Qubes OS
@@ -132,264 +156,319 @@ You can choose one of three options:
Select the option to test this media and install Qubes OS.
-If the boot screen does not appear, there are several options to troubleshoot.
-First, try rebooting your computer.
-If it still loads your currently installed operating system or does not detect your installation medium, make sure the boot order is set up appropriately.
-The process to change the boot order varies depending on the currently installed system and the motherboard manufacturer.
-If **Windows 10** is installed on your machine, you may need to follow specific instructions to change the boot order.
-This may require an [advanced reboot](https://support.microsoft.com/en-us/help/4026206/windows-10-find-safe-mode-and-other-startup-settings).
+If the boot screen does not appear, there are several options to troubleshoot.
+First, try rebooting your computer. If it still loads your currently installed
+operating system or does not detect your installation medium, make sure the
+boot order is set up appropriately. The process to change the boot order varies
+depending on the currently installed system and the motherboard manufacturer.
+If **Windows 10** is installed on your machine, you may need to follow specific
+instructions to change the boot order. This may require an [advanced
+reboot](https://support.microsoft.com/en-us/help/4026206/windows-10-find-safe-mode-and-other-startup-settings).
-After the POST, you may have a chance to choose a boot device.
-You may wish to select the USB drive or DVD drive as a temporary boot option so that the next time you boot, your internal storage device will be selected first.
+After the POST, you may have a chance to choose a boot device. You may wish to
+select the USB drive or DVD drive as a temporary boot option so that the next
+time you boot, your internal storage device will be selected first.
-
+
### The installer home screen
-On the first screen, you are asked to select the language that will be used during the installation process.
-When you are done, select **Continue**.
+On the first screen, you are asked to select the language that will be used
+during the installation process. When you are done, select **Continue**.
-
+
-Prior to the next screen, a compatibility test runs to check whether IOMMU-virtualization is active or not.
-If the test fails, a window will pop up.
+Prior to the next screen, a compatibility test runs to check whether
+IOMMU-virtualization is active or not. If the test fails, a window will pop up.
-
+
-Do not panic.
-It may simply indicate that IOMMU-virtualization hasn't been activated in the BIOS.
-Return to the [hardware requirements](#hardware-requirements) section to learn how to activate it.
-If the setting is not configured correctly, it means that your hardware won't be able to leverage some Qubes security features, such as a strict isolation of the networking and USB hardware.
+Do not panic. It may simply indicate that IOMMU-virtualization hasn't been
+activated in the BIOS. Return to the [hardware
+requirements](#hardware-requirements) section to learn how to activate it. If
+the setting is not configured correctly, it means that your hardware won't be
+able to leverage some Qubes security features, such as a strict isolation of
+the networking and USB hardware.
-If the test passes, you will reach the installation summary screen.
-The installer loads Xen right at the beginning.
-If you can see the installer's graphical screen, and you pass the compatibility check that runs immediately afterward, Qubes OS is likely to work on your system!
+If the test passes, you will reach the installation summary screen. The
+installer loads Xen right at the beginning. If you can see the installer's
+graphical screen, and you pass the compatibility check that runs immediately
+afterward, Qubes OS is likely to work on your system!
-Like Fedora, Qubes OS uses the Anaconda installer.
-Those that are familiar with RPM-based distributions should feel at home.
+Like Fedora, Qubes OS uses the Anaconda installer. Those that are familiar with
+RPM-based distributions should feel at home.
### Installation summary
- Did you know? The Qubes OS installer is completely offline.
- It doesn't even load any networking drivers, so there is no possibility of internet-based data leaks or attacks during the installation process.
+ Did you know? The Qubes OS installer is completely offline. It doesn't
+ even load any networking drivers, so there is no possibility of
+ internet-based data leaks or attacks during the installation process.
-The Installation summary screen allows you to change how the system will be installed and configured, including localization settings.
-At minimum, you are required to select the storage device on which Qubes OS will be installed.
+The Installation summary screen allows you to change how the system will be
+installed and configured, including localization settings. At minimum, you are
+required to select the storage device on which Qubes OS will be installed.
-
+
### Localization
-Let's assume you wish to add a German keyboard layout.
-Go to Keyboard Layout, press the "Plus" symbol, search for "German" as indicated in the screenshot and press "Add".
-If you want it be your default language, select the "German" entry in the list and press the arrow button.
-Click on "Done" in the upper left corner, and you're ready to go!
+Let's assume you wish to add a German keyboard layout. Go to Keyboard Layout,
+press the "Plus" symbol, search for "German" as indicated in the screenshot and
+press "Add". If you want it be your default language, select the "German" entry
+in the list and press the arrow button. Click on "Done" in the upper left
+corner, and you're ready to go!
-
+
-The process to select a new language is similar to the process to select a new keyboard layout.
-Follow the same process in the "Language Support" entry.
+The process to select a new language is similar to the process to select a new
+keyboard layout. Follow the same process in the "Language Support" entry.
-
+
-You can have as many keyboard layout and languages as you want.
-Post-install, you will be able to switch between them and install others.
+You can have as many keyboard layout and languages as you want. Post-install,
+you will be able to switch between them and install others.
Don't forget to select your time and date by clicking on the Time & Date entry.
-
+
### Software
-
+
-On the software selection tab, you can choose which software to install in Qubes OS.
-Two options are available:
+On the software selection tab, you can choose which software to install in
+Qubes OS. Two options are available:
-* **Debian:** Select this option if you would like to use [Debian](/doc/templates/debian/) qubes in addition to the default Fedora qubes.
-* **Whonix:** Select this option if you would like to use [Whonix](/doc/whonix/) qubes.
- Whonix allows you to use [Tor](https://www.torproject.org/) securely within Qubes.
+* **Debian:** Select this option if you would like to use
+ [Debian](/doc/templates/debian/) qubes in addition to the default Fedora
+ qubes.
+* **Whonix:** Select this option if you would like to use
+ [Whonix](/doc/whonix/) qubes. Whonix allows you to use
+ [Tor](https://www.torproject.org/) securely within Qubes.
-Whonix lets you route some or all of your network traffic through Tor for greater privacy.
-Depending on your threat model, you may need to install Whonix templates right away.
+Whonix lets you route some or all of your network traffic through Tor for
+greater privacy. Depending on your threat model, you may need to install Whonix
+templates right away.
-Regardless of your choices on this screen, you will always be able to install these and other [TemplateVMs](/doc/templates/) later.
-If you're short on disk space, you may wish to deselect these options.
+Regardless of your choices on this screen, you will always be able to install
+these and other [templates](/doc/templates/) later. If you're short on disk
+space, you may wish to deselect these options.
-By default, Qubes OS comes preinstalled with the lightweight Xfce4 desktop environment.
-Other desktop environments will be available to you after the installation is completed, though they may not be officially supported (see [Advanced Topics](/doc/#advanced-topics)).
+By default, Qubes OS comes preinstalled with the lightweight Xfce4 desktop
+environment. Other desktop environments will be available to you after the
+installation is completed, though they may not be officially supported (see
+[Advanced Topics](/doc/#advanced-topics)).
Press **Done** to go back to the installation summary screen.
### Installation destination
-Under the System section, you must choose the installation destination.
-Select the storage device on which you would like to install Qubes OS.
+Under the System section, you must choose the installation destination. Select
+the storage device on which you would like to install Qubes OS.
- Warning: Be careful to choose the correct installation target, or you may lose data.
- We strongly recommended making a full backup before proceeding.
+ Warning: Be careful to choose the correct installation target, or you
+ may lose data. We strongly recommended making a full backup before
+ proceeding.
-Your installation destination can be an internal or external storage drive, such as an SSD, HDD, or USB drive.
-The installation destination must have a least 32 GiB of free space available.
+Your installation destination can be an internal or external storage drive,
+such as an SSD, HDD, or USB drive. The installation destination must have a
+least 32 GiB of free space available.
- Note: The installation destination cannot be the same as the installation medium. For example, if you're installing Qubes OS from a USB drive onto a USB drive, they must be two distinct USB drives, and they must both be plugged into your computer at the same time. (Note: This may not apply to advanced users who partition their devices appropriately.)
+ Note: The installation destination cannot be the same as the
+ installation medium. For example, if you're installing Qubes OS from
+ a USB drive onto a USB drive, they must be two distinct USB drives,
+ and they must both be plugged into your computer at the same time. (Note:
+ This may not apply to advanced users who partition their devices
+ appropriately.)
-Installing an operating system onto a USB drive can be a convenient way to try Qubes.
-However, USB drives are typically much slower than internal SSDs.
-We recommend a very fast USB 3.0 drive for decent performance.
-Please note that a minimum storage of 32 GiB is required.
-If you want to install Qubes OS onto a USB drive, just select the USB device as the target installation device.
-Bear in mind that the installation process is likely to take longer than it would on an internal storage device.
+Installing an operating system onto a USB drive can be a convenient way to try
+Qubes. However, USB drives are typically much slower than internal SSDs. We
+recommend a very fast USB 3.0 drive for decent performance. Please note that a
+minimum storage of 32 GiB is required. If you want to install Qubes OS onto a
+USB drive, just select the USB device as the target installation device. Bear
+in mind that the installation process is likely to take longer than it would on
+an internal storage device.
-
+
- Did you know? Qubes OS uses full-disk AES encryption (FDE) via LUKS by default.
+ Did you know? Qubes OS uses full-disk AES encryption (FDE) via LUKS by
+ default.
-As soon as you press **Done**, the installer will ask you to enter a passphrase for disk encryption.
-The passphrase should be complex.
-Make sure that your keyboard layout reflects what keyboard you are actually using.
-When you're finished, press **Done**.
+As soon as you press **Done**, the installer will ask you to enter a passphrase
+for disk encryption. The passphrase should be complex. Make sure that your
+keyboard layout reflects what keyboard you are actually using. When you're
+finished, press **Done**.
- Warning: If you forget your encryption passphrase, there is no way to recover it.
+ Warning: If you forget your encryption passphrase, there is no way to
+ recover it.
-
+
When you're ready, press **Begin Installation**.
-
+
### Create your user account
While the installation process is running, you can create your user account.
-This is what you'll use to log in after disk decryption and when unlocking the screen locker.
-This is a purely local, offline account in dom0.
-By design, Qubes OS is a single-user operating system, so this is just for you.
+This is what you'll use to log in after disk decryption and when unlocking the
+screen locker. This is a purely local, offline account in dom0. By design,
+Qubes OS is a single-user operating system, so this is just for you.
-Select **User Creation** to define a new user with administrator privileges and a password.
-Just as for the disk encryption, this password should be complex.
+Select **User Creation** to define a new user with administrator privileges and
+a password. Just as for the disk encryption, this password should be complex.
The root account is deactivated and should remain as such.
-
+
-When the installation is complete, press **Reboot**.
-Don't forget to remove the installation medium, or else you may end up seeing the installer boot screen again.
+When the installation is complete, press **Reboot**. Don't forget to remove the
+installation medium, or else you may end up seeing the installer boot screen
+again.
## Post-installation
### First boot
-If the installation was successful, you should now see the GRUB menu during the boot process.
+If the installation was successful, you should now see the GRUB menu during the
+boot process.
-
+
Just after this screen, you will be asked to enter your encryption passphrase.
-
+
### Initial Setup
-You're almost done.
-Before you can start using Qubes OS, some configuration is needed.
+You're almost done. Before you can start using Qubes OS, some configuration is
+needed.
-
+
-By default, the installer will create a number of qubes (depending on the options you selected during the installation process).
-These are designed to give you a more ready-to-use environment from the get-go.
+By default, the installer will create a number of qubes (depending on the
+options you selected during the installation process). These are designed to
+give you a more ready-to-use environment from the get-go.
-
+
Let's briefly go over the options:
* **Create default system qubes:**
- These are the core components of the system, required for things like internet access.
+ These are the core components of the system, required for things like
+ internet access.
* **Create default application qubes:**
- These are how you compartmentalize your digital life.
- There's nothing special about the ones the installer creates.
- They're just suggestions that apply to most people.
- If you decide you don't want them, you can always delete them later, and you can always create your own.
+ These are how you compartmentalize your digital life. There's nothing special
+ about the ones the installer creates. They're just suggestions that apply to
+ most people. If you decide you don't want them, you can always delete them
+ later, and you can always create your own.
* **Create Whonix Gateway and Workstation qubes:**
If you want to use Whonix, you should select this option.
* **Enabling system and template updates over the Tor anonymity network using Whonix:**
- If you select this option, then whenever you install or update software in dom0 or a TemplateVM, the internet traffic will go through Tor.
+ If you select this option, then whenever you install or update software in
+ dom0 or a template, the internet traffic will go through Tor.
* **Create USB qube holding all USB controllers:**
- Just like the network qube for the network stack, the USB qube isolates the USB controllers.
+ Just like the network qube for the network stack, the USB qube isolates the
+ USB controllers.
* **Use sys-net qube for both networking and USB devices:**
- You should select this option if you rely on a USB device for network access, such as a USB modem or a USB Wi-Fi adapter.
+ You should select this option if you rely on a USB device for network access,
+ such as a USB modem or a USB Wi-Fi adapter.
* **Do not configure anything:**
- This is for very advanced users only.
- If you select this option, you'll have to set everything up manually afterward.
+ This is for very advanced users only. If you select this option, you'll have
+ to set everything up manually afterward.
-When you're satisfied with you choices, press **Done**.
-This configuration process may take a while, depending on the speed and compatibility of your system.
+When you're satisfied with you choices, press **Done**. This configuration
+process may take a while, depending on the speed and compatibility of your
+system.
-After the configuration is done, you will be greeted by the login screen.
-Enter your password and log in.
+After the configuration is done, you will be greeted by the login screen. Enter
+your password and log in.
-
+
Congratulations, you are now ready to use Qubes OS!
-
+
## Next steps
### Updating
-Next, [update](/doc/updating-qubes-os/) your installation to ensure you have the latest security updates.
-Frequently updating is one of the best ways to remain secure against new threats.
+Next, [update](/doc/how-to-update/) your installation to ensure you have
+the latest security updates. Frequently updating is one of the best ways to
+remain secure against new threats.
### Security
-The Qubes OS Project occasionally issues [Qubes Security Bulletins (QSBs)](/security/bulletins/) as part of the [Qubes Security Pack (qubes-secpack)](/security/pack/).
-It is important to make sure that you receive all QSBs in a timely manner so that you can take action to keep your system secure.
-(While [updating](#updating) will handle most security needs, there may be cases in which additional action from you is required.)
-For this reason, we strongly recommend that every Qubes user subscribe to the [qubes-announce](/support/#qubes-announce) mailing list.
-
-In addition to QSBs, the Qubes OS Project also publishes [Canaries](/security/canaries/), XSA summaries, TemplateVM releases and end-of-life notices, and other items of interest to Qubes users.
-Since these are not essential for all Qubes users to read, they are not sent to [qubes-announce](/support/#qubes-announce) in order to keep the volume on that list low.
-However, we expect that most users, especially novice users, will find them helpful.
-If you are interested in these additional items, we encourage you to subscribe to the [Qubes News RSS feed](/feed.xml) or join one of our other [venues](/support/), where these news items are also announced.
-
-For more information about Qubes OS Project security, please see the [security center](/security/).
+The Qubes OS Project occasionally issues [Qubes Security Bulletins
+(QSBs)](/security/qsb/) as part of the [Qubes Security Pack
+(qubes-secpack)](/security/pack/). It is important to make sure that you
+receive all QSBs in a timely manner so that you can take action to keep your
+system secure. (While [updating](#updating) will handle most security needs,
+there may be cases in which additional action from you is required.) For this
+reason, we strongly recommend that every Qubes user subscribe to the
+[qubes-announce](/support/#qubes-announce) mailing list.
+
+In addition to QSBs, the Qubes OS Project also publishes
+[Canaries](/security/canary/), XSA summaries, template releases and
+end-of-life notices, and other items of interest to Qubes users. Since these
+are not essential for all Qubes users to read, they are not sent to
+[qubes-announce](/support/#qubes-announce) in order to keep the volume on that
+list low. However, we expect that most users, especially novice users, will
+find them helpful. If you are interested in these additional items, we
+encourage you to subscribe to the [Qubes News RSS feed](/feed.xml) or join one
+of our other [venues](/support/), where these news items are also announced.
+
+For more information about Qubes OS Project security, please see the [security
+center](/security/).
### Backups
-It is extremely important to make regular backups so that you don't lose your data unexpectedly.
-The [Qubes backup system](/doc/backup-restore/) allows you to do this securely and easily.
+It is extremely important to make regular backups so that you don't lose your
+data unexpectedly. The [Qubes backup
+system](/doc/how-to-back-up-restore-and-migrate/) allows you to do this
+securely and easily.
### Submit your HCL report
-Consider giving back to the Qubes community and helping other users by [generating and submitting a Hardware Compatibility List (HCL) report](/doc/hcl/#generating-and-submitting-new-reports).
+Consider giving back to the Qubes community and helping other users by
+[generating and submitting a Hardware Compatibility List (HCL)
+report](/doc/hcl/#generating-and-submitting-new-reports).
### Get Started
-[Get Started](/doc/how-to-get-started/) with Qubes, check out the [How-to Guides](/doc/#how-to-guides), and learn about [Templates](/doc/#templates).
+Find out [How to Get Started](/doc/how-to-get-started/) with Qubes, check out
+the other [How-to Guides](/doc/#how-to-guides), and learn about
+[Templates](/doc/#templates).
## Getting help
-* We work very hard to make the [documentation](/doc/) accurate, comprehensive useful and user friendly.
- We urge you to read it! It may very well contain the answers to your questions.
- (Since the documentation is a community effort, we'd also greatly appreciate your help in [improving](/doc/doc-guidelines/) it!)
-
-* If issues arise during installation, see the [Installation Troubleshooting](/doc/installation-troubleshooting) guide.
+* We work very hard to make the [documentation](/doc/) accurate, comprehensive
+ useful and user friendly. We urge you to read it! It may very well contain
+ the answers to your questions. (Since the documentation is a community
+ effort, we'd also greatly appreciate your help in
+ [improving](/doc/doc-guidelines/) it!)
-* If you don't find your answer in the documentation, please see [Help, Support, Mailing Lists, and Forum](/support/) for places to ask.
+* If issues arise during installation, see the [Installation
+ Troubleshooting](/doc/installation-troubleshooting) guide.
-* Please do **not** email individual members of the Qubes team with questions about installation or other problems.
- Instead, please see [Help, Support, Mailing Lists, and Forum](/support/) for appropriate places to ask questions.
+* If you don't find your answer in the documentation, please see [Help,
+ Support, Mailing Lists, and Forum](/support/) for places to ask.
+* Please do **not** email individual members of the Qubes team with questions
+ about installation or other problems. Instead, please see [Help, Support,
+ Mailing Lists, and Forum](/support/) for appropriate places to ask questions.
diff --git a/user/downloading-installing-upgrading/supported-versions.md b/user/downloading-installing-upgrading/supported-versions.md
index 447ef4ed2..68da7909f 100644
--- a/user/downloading-installing-upgrading/supported-versions.md
+++ b/user/downloading-installing-upgrading/supported-versions.md
@@ -6,15 +6,16 @@ ref: 154
title: Supported Versions
---
-
-This page details the level and period of support for versions of operating systems in the Qubes ecosystem.
+This page details the level and period of support for versions of operating
+systems in the Qubes ecosystem.
## Qubes OS
Qubes OS releases are supported for **six months** after each subsequent major
-or minor release (see [Version Scheme](/doc/version-scheme/)). The current release and past major
-releases are always available on the [Downloads](/downloads/) page, while all ISOs, including
-past minor releases, are available from our [download mirrors](/downloads/#mirrors).
+or minor release (see [Version Scheme](/doc/version-scheme/)). The current
+release and past major releases are always available on the
+[Downloads](/downloads/) page, while all ISOs, including past minor releases,
+are available from our [download mirrors](/downloads/#mirrors).
| Qubes OS | Start Date | End Date | Status |
| ----------- | ---------- | ---------- | --------------------- |
@@ -28,10 +29,12 @@ past minor releases, are available from our [download mirrors](/downloads/#mirro
### Note on point releases
-Please note that point releases, such as 3.2.1 and 4.0.1, do not designate separate, new versions of Qubes OS.
-Rather, they designate their respective major or minor releases, such as 3.2 and 4.0, inclusive of all package updates up to a certain point.
-For example, installing Release 4.0 and fully updating it results in the same system as installing Release 4.0.1.
-Therefore, point releases are not displayed as separate rows on any of the tables on this page.
+Please note that point releases, such as 3.2.1 and 4.0.1, do not designate
+separate, new versions of Qubes OS. Rather, they designate their respective
+major or minor releases, such as 3.2 and 4.0, inclusive of all package updates
+up to a certain point. For example, installing Release 4.0 and fully updating
+it results in the same system as installing Release 4.0.1. Therefore, point
+releases are not displayed as separate rows on any of the tables on this page.
## Dom0
@@ -49,51 +52,80 @@ The table below shows the OS used for dom0 in each Qubes OS release.
### Note on dom0 and EOL
-Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as Xen, device backends (in the dom0 kernel and in other VMs, such as the NetVM), and Qubes tools (gui-daemon, qrexec-daemon, etc.).
-These components are [security-critical](/doc/security-critical-code/), and we provide updates for all of them (when necessary), regardless of the support status of the base distribution.
-For this reason, we consider it safe to continue using a given base distribution in dom0 even after it has reached end-of-life (EOL).
-
-## TemplateVMs
-
-The following table shows select [TemplateVM](/doc/templates/) versions that are currently supported.
-Currently, only [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/) TemplateVMs are officially supported by the Qubes OS Project.
-[Whonix](/doc/whonix/) TemplateVMs are supported by our partner, the [Whonix Project](https://www.whonix.org/).
-Qubes support for each TemplateVM ends when that upstream release reaches end-of-life (EOL).
-Please see below for distribution-specific notes.
-
-It is the responsibility of each distribution to clearly notify its users in advance of its own EOL dates, and it is users' responsibility to heed these notices by upgrading to supported releases.
-As a courtesy to Qubes users, we attempt to pass along any upstream EOL notices we receive for officially-supported templates, but our ability to do this reliably is dependent on the upstream distribution's practices.
-If a distribution provides a mailing list similar to [qubes-announce](/support/#qubes-announce), which allows us to receive only very important, infrequent messages, including EOL announcements, we are much more likely to be able to pass along EOL notices to Qubes users reliably.
-Qubes users can always check the EOL status of an upstream release on the upstream distribution's website (see [Fedora EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian Releases](https://wiki.debian.org/DebianReleases)).
+Dom0 is isolated from domUs. DomUs can access only a few interfaces, such as
+Xen, device backends (in the dom0 kernel and in other VMs, such as the NetVM),
+and Qubes tools (gui-daemon, qrexec-daemon, etc.). These components are
+[security-critical](/doc/security-critical-code/), and we provide updates for
+all of them (when necessary), regardless of the support status of the base
+distribution. For this reason, we consider it safe to continue using a given
+base distribution in dom0 even after it has reached end-of-life (EOL).
+
+## Templates
+
+The following table shows select [template](/doc/templates/) versions that are
+currently supported. Currently, only [Fedora](/doc/templates/fedora/) and
+[Debian](/doc/templates/debian/) templates are officially supported by the
+Qubes OS Project. [Whonix](/doc/whonix/) templates are supported by our
+partner, the [Whonix Project](https://www.whonix.org/). Qubes support for each
+template ends when that upstream release reaches end-of-life (EOL). Please see
+below for distribution-specific notes.
+
+It is the responsibility of each distribution to clearly notify its users in
+advance of its own EOL dates, and it is users' responsibility to heed these
+notices by upgrading to supported releases. As a courtesy to Qubes users, we
+attempt to pass along any upstream EOL notices we receive for
+officially-supported templates, but our ability to do this reliably is
+dependent on the upstream distribution's practices. If a distribution provides
+a mailing list similar to [qubes-announce](/support/#qubes-announce), which
+allows us to receive only very important, infrequent messages, including EOL
+announcements, we are much more likely to be able to pass along EOL notices to
+Qubes users reliably. Qubes users can always check the EOL status of an
+upstream release on the upstream distribution's website (see [Fedora
+EOL](https://fedoraproject.org/wiki/End_of_life) and [Debian
+Releases](https://wiki.debian.org/DebianReleases)).
| Qubes OS | Fedora | Debian | Whonix |
| ----------- | ------ | ---------------------------------------- | ------ |
| Release 4.0 | 33 | 9 ("stretch"),* 10 ("buster") | 15 |
| Release 4.1 | 33 | 10 ("buster") | 15 |
-\* Although Debian 9 has reached regular EOL and is now in [LTS](https://wiki.debian.org/LTS), we continue to support it for Qubes R4.0.
-This is a *temporary* exception to our [policy](#note-on-debian-support) of ending Qubes support at each Debian release's *regular* (not LTS) EOL date, since this policy was introduced after the release of Qubes R4.0.
-In Qubes R4.1 and beyond, Qubes support for each Debian release will end when that release reaches regular EOL and will not extend into LTS.
+\* Although Debian 9 has reached regular EOL and is now in
+[LTS](https://wiki.debian.org/LTS), we continue to support it for Qubes R4.0.
+This is a *temporary* exception to our [policy](#note-on-debian-support) of
+ending Qubes support at each Debian release's *regular* (not LTS) EOL date,
+since this policy was introduced after the release of Qubes R4.0. In Qubes R4.1
+and beyond, Qubes support for each Debian release will end when that release
+reaches regular EOL and will not extend into LTS.
### Note on Debian support
-Debian releases have two EOL dates: regular and [long-term support (LTS)](https://wiki.debian.org/LTS).
-See [Debian Production Releases](https://wiki.debian.org/DebianReleases#Production_Releases) for a chart that illustrates this.
-Qubes support ends at the *regular* EOL date, *not* the LTS EOL date, unless a specific exception has been made.
+Debian releases have two EOL dates: regular and [long-term support
+(LTS)](https://wiki.debian.org/LTS). See [Debian Production
+Releases](https://wiki.debian.org/DebianReleases#Production_Releases) for a
+chart that illustrates this. Qubes support ends at the *regular* EOL date,
+*not* the LTS EOL date, unless a specific exception has been made.
### Note on Whonix support
-[Whonix](/doc/whonix/) TemplateVMs are supported by our partner, the [Whonix Project](https://www.whonix.org/).
-The Whonix Project has set its own support policy for Whonix TemplateVMs in Qubes.
-
-This policy requires Whonix TemplateVM users to stay reasonably close to the cutting edge by upgrading to new stable versions of Qubes OS and Whonix TemplateVMs within a month of their respective releases.
-To be precise:
+[Whonix](/doc/whonix/) templates are supported by our partner, the [Whonix
+Project](https://www.whonix.org/). The Whonix Project has set its own support
+policy for Whonix templates in Qubes.
-* One month after a new stable version of Qubes OS is released, Whonix TemplateVMs will no longer be supported on any older version of Qubes OS.
- This means that users who wish to continue using Whonix TemplateVMs on Qubes must always upgrade to the latest stable Qubes OS version within one month of its release.
+This policy requires Whonix template users to stay reasonably close to the
+cutting edge by upgrading to new stable versions of Qubes OS and Whonix
+templates within a month of their respective releases. To be precise:
-* One month after new stable versions of Whonix TemplateVMs are released, older versions of Whonix TemplateVMs will no longer be supported.
- This means that users who wish to continue using Whonix TemplateVMs on Qubes must always upgrade to the latest stable Whonix TemplateVM versions within one month of their release.
+* One month after a new stable version of Qubes OS is released, Whonix
+ templates will no longer be supported on any older version of Qubes OS. This
+ means that users who wish to continue using Whonix templates on Qubes must
+ always upgrade to the latest stable Qubes OS version within one month of its
+ release.
-We aim to announce both types of events one month in advance in order to remind users to upgrade.
+* One month after new stable versions of Whonix templates are released, older
+ versions of Whonix templates will no longer be supported. This means that
+ users who wish to continue using Whonix templates on Qubes must always
+ upgrade to the latest stable Whonix template versions within one month of
+ their release.
+We aim to announce both types of events one month in advance in order to remind
+users to upgrade.
diff --git a/user/downloading-installing-upgrading/testing.md b/user/downloading-installing-upgrading/testing.md
index 93a7059a2..d394a7695 100644
--- a/user/downloading-installing-upgrading/testing.md
+++ b/user/downloading-installing-upgrading/testing.md
@@ -1,4 +1,5 @@
---
+advanced: true
lang: en
layout: doc
permalink: /doc/testing/
@@ -6,58 +7,79 @@ ref: 147
title: Testing New Releases and Updates
---
+Testing new Qubes OS releases and updates is one of the most helpful ways in
+which you can [contribute](/doc/contributing/) to the Qubes OS Project. There
+are several different types of testing, which we'll cover below.
-Testing new Qubes OS releases and updates is one of the most helpful ways in which you can [contribute](/doc/contributing/) to the Qubes OS Project.
+**Warning:** Software testing is intended for advanced users and developers.
+You should only attempt to do this if you know what you're doing. Never rely on
+code that is in testing for critical work!
-
-
- Warning: Software testing is intended for advanced users and developers. You should only attempt to do this if you know what you're doing. Never rely on code that is in testing for critical work!
-
-
-There are several different types of testing, which we'll cover below.
-
-Releases
---------
+## Releases
How to test upcoming Qubes OS releases:
* Use [qubes-builder](/doc/qubes-builder/) to build the latest release.
-* Test the latest release candidate (RC), if any is currently available.
-* (No support) Experiment with devel alpha ISOs found from time to time at [Qubes OpenQA](https://openqa.qubes-os.org/).
+* Test the latest release candidate (RC), if one is currently available.
+* (No support) Experiment with devel alpha ISOs found from time to time at
+ [Qubes OpenQA](https://openqa.qubes-os.org/).
-Please make sure to [report any bugs you encounter](/doc/reporting-bugs/).
+Please make sure to [report any bugs you encounter](/doc/issue-tracking/).
-See [Version Scheme](/doc/version-scheme/) for details about release versions and schedules.
-See [Release Checklist](/doc/releases/todo/) for details about the RC process.
+See [Version Scheme](/doc/version-scheme/) for details about release versions
+and schedules. See [Release Checklist](/doc/releases/todo/) for details about
+the RC process.
-Updates
--------
+## Updates
How to test updates:
-* Enable [dom0 testing repositories](/doc/how-to-install-software-in-dom0/#testing-repositories).
-* Enable [TemplateVM testing repositories](/doc/how-to-install-software/#testing-repositories).
-
-Every new update is first uploaded to the `security-testing` repository if it is a security update or `current-testing` if it is a normal update.
-The update remains in `security-testing` or `current-testing` for a minimum of one week.
-On occasion, an exception is made for a particularly critical security update, which is immediately pushed to the `current` stable repository.
-In general, however, security updates remain in `security-testing` for two weeks before migrating to `current`.
-Normal updates generally remain in `current-testing` until they have been sufficiently tested by the community, which can last weeks or even months, depending on the amount of feedback received (see [Providing feedback](#providing-feedback)).
-
-"Sufficient testing" is, in practice, a fluid term that is up the developers' judgment.
-In general, it means either that no negative feedback and at least one piece of positive feedback has been received or that the package has been in `current-testing` for long enough, depending on the component and the complexity of the changes.
-
-A limitation of the current testing setup is that it is only possible to migrate the *most recent version* of a package from `current-testing` to `current`.
-This means that, if a newer version of a package is uploaded to `current-testing`, it will no longer be possible to migrate any older versions of that same package from `current-testing` to `current`, even if one of those older versions has been deemed stable enough.
-While this limitation can be inconvenient, the benefits outweigh the costs, since it greatly simplifies the testing and reporting process.
-
-Providing feedback
-------------------
-
-Since the whole point of testing software is to discover and fix bugs, your feedback is an essential part of this process.
-
-We use an [automated build process](https://github.com/QubesOS/qubes-infrastructure/blob/master/README.md).
-For every package that is uploaded to a testing repository, a GitHub issue is created in the [updates-status](https://github.com/QubesOS/updates-status/issues) repository for tracking purposes.
-We welcome any kind of feedback on any package in any testing repository.
-Even a simple or on the package's associated issue would help us to decide whether the package is ready to be migrated to a stable repository.
-If you [report a bug](/doc/reporting-bugs/) in a package that is in a testing repository, please reference the appropriate issue in [updates-status](https://github.com/QubesOS/updates-status/issues).
+* Enable [dom0 testing
+ repositories](/doc/how-to-install-software-in-dom0/#testing-repositories).
+* Enable [template testing
+ repositories](/doc/how-to-install-software/#testing-repositories).
+
+Every new update is first uploaded to the `security-testing` repository if it
+is a security update or `current-testing` if it is a normal update. The update
+remains in `security-testing` or `current-testing` for a minimum of one week.
+On occasion, an exception is made for a particularly critical security update,
+which is immediately pushed to the `current` stable repository. In general,
+however, security updates remain in `security-testing` for two weeks before
+migrating to `current`. Normal updates generally remain in `current-testing`
+until they have been sufficiently tested by the community, which can last weeks
+or even months, depending on the amount of feedback received (see [Providing
+feedback](#providing-feedback)).
+
+"Sufficient testing" is, in practice, a fluid term that is up the developers'
+judgment. In general, it means either that no negative feedback and at least
+one piece of positive feedback has been received or that the package has been
+in `current-testing` for long enough, depending on the component and the
+complexity of the changes.
+
+A limitation of the current testing setup is that it is only possible to
+migrate the *most recent version* of a package from `current-testing` to
+`current`. This means that, if a newer version of a package is uploaded to
+`current-testing`, it will no longer be possible to migrate any older versions
+of that same package from `current-testing` to `current`, even if one of those
+older versions has been deemed stable enough. While this limitation can be
+inconvenient, the benefits outweigh the costs, since it greatly simplifies the
+testing and reporting process.
+
+## Providing feedback
+
+Since the whole point of testing software is to discover and fix bugs, your
+feedback is an essential part of this process.
+
+We use an [automated build
+process](https://github.com/QubesOS/qubes-infrastructure/blob/master/README.md).
+For every package that is uploaded to a testing repository, a GitHub issue is
+created in the
+[updates-status](https://github.com/QubesOS/updates-status/issues) repository
+for tracking purposes. We welcome any kind of feedback on any package in any
+testing repository. Even a simple or on
+the package's associated issue would help us to decide whether the package is
+ready to be migrated to a stable repository. If you [report a
+bug](/doc/issue-tracking/) in a package that is in a testing repository, please
+reference the appropriate issue in
+[updates-status](https://github.com/QubesOS/updates-status/issues).
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2.md
index a2d1c3807..681bd7844 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2.md
@@ -11,7 +11,6 @@ ref: 156
title: Upgrading to R2
---
-
Current Qubes R2 Beta 3 (R2B3) systems can be upgraded in-place to the latest R2 (R2) release by following the procedure below.
**Before attempting either an in-place upgrade or a clean installation, we strongly recommend that users back up the system by using the built-in [backup tool](/doc/backup-restore/).**
@@ -23,9 +22,9 @@ Upgrade Template and Standalone VM(s)
- **It also possible to download a new Fedora 20-based template from our repositories**. To do this please first upgrade the Dom0 distro as described in the section below.
-While technically it is possible to use old Fedora 18 template on R2, it is strongly recommended to upgrade all the Template VMs and Standalone VMs, because Fedora 18 no longer receive security updates.
+While technically it is possible to use old Fedora 18 template on R2, it is strongly recommended to upgrade all the templates and Standalone VMs, because Fedora 18 no longer receive security updates.
-By default, in Qubes R2, there is only one Template VM, however users are free to create more Template VMs for special purposes, as well as Standalone VMs. If more than one template and/or Standalone VMs are used, then it is recommended to upgrade/replace all of them. More information on using multiple Template VMs, as well as Standalone VMs, can be found [here](/doc/software-update-vm/).
+By default, in Qubes R2, there is only one template, however users are free to create more templates for special purposes, as well as Standalone VMs. If more than one template and/or Standalone VMs are used, then it is recommended to upgrade/replace all of them. More information on using multiple templates, as well as Standalone VMs, can be found [here](/doc/software-update-vm/).
Upgrading dom0
--------------
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b1.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b1.md
index cde22001a..5d22eb648 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b1.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b1.md
@@ -10,7 +10,6 @@ ref: 163
title: Upgrading to R2B1
---
-
**Note: Qubes R2 Beta 1 is no longer supported! Please install or upgrade to a newer Qubes R2.**
**Note: This page is kept for historical reasons only! Do not follow the instructions below'''**
@@ -20,9 +19,9 @@ Existing users of Qubes R1 (but not R1 betas!) can upgrade their systems to the
Upgrade all Template and Standalone VM(s)
-----------------------------------------
-By default, in Qubes R1, there is only one Template VM, however users are free to create more Template VMs for special purposes, as well as Standalone VMs. More information on using multiple Template VMs, as well as Standalone VMs, can be found [here](/doc/templates/) and [here](/doc/standalone-and-hvm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
+By default, in Qubes R1, there is only one template, however users are free to create more templates for special purposes, as well as Standalone VMs. More information on using multiple templates, as well as Standalone VMs, can be found [here](/doc/templates/) and [here](/doc/standalone-and-hvm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
-1. Open terminal in the template VM (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
+1. Open terminal in the template (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
2. Install `qubes-upgrade-vm` package (this package brings in R2 repo definitions and R2 keys)
~~~
@@ -46,7 +45,7 @@ By default, in Qubes R1, there is only one Template VM, however users are free t
Is this ok [y/N]:
~~~
- If you see (as is the case on the "screenshot" above) that the new key was imported from a local filesystem (`/etc/pki/rpm-gpg/...`) you can safely accept the key, without checking its fingerprint. This is because there were only two ways for such a key to make it to your Template VM's filesystem:
+ If you see (as is the case on the "screenshot" above) that the new key was imported from a local filesystem (`/etc/pki/rpm-gpg/...`) you can safely accept the key, without checking its fingerprint. This is because there were only two ways for such a key to make it to your template's filesystem:
- via a legitimate RPM package previously installed (in our case it was the `qubes-upgrade-vm` RPM). Such an RPM must have been signed by one of the keys you decided to trust previously, by default this would be either via the Qubes R1 signing key, or Fedora 17 signing key.
- via system compromise or via some illegal RPM package (e.g. Fedora released package pretending to bring new Firefox). In that case, however, your VM is already compromised, and it careful checking of the new R2 key would not change this situation to any better one. The game is lost for this VM anyway (and all VMs based on this template).
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b2.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b2.md
index 64b49df02..88bfc86b0 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b2.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b2.md
@@ -10,7 +10,6 @@ ref: 160
title: Upgrading to R2B2
---
-
Existing users of Qubes R1 (but not R1 betas!) can upgrade their systems to the latest R2 beta release by following the procedure below. As usual, it is advisable to backup the system before proceeding with the upgrade. While it is possible to upgrade the system **it is strongly recommended to reinstall it**. You will preserve all your data and settings thanks to [backup and restore tools](/doc/backup-restore/).
Upgrade all Template and Standalone VM(s)
@@ -18,9 +17,9 @@ Upgrade all Template and Standalone VM(s)
**If you have already R2 Beta1 installed, follow standard template update procedure (e.g. "Update VM" button in Qubes Manager) and skip the rest of this section**
-By default, in Qubes R1, there is only one Template VM, however users are free to create more Template VMs for special purposes, as well as Standalone VMs. More information on using multiple Template VMs, as well as Standalone VMs, can be found [here](/doc/templates/) and [here](/doc/standalone-and-hvm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
+By default, in Qubes R1, there is only one template, however users are free to create more templates for special purposes, as well as Standalone VMs. More information on using multiple templates, as well as Standalone VMs, can be found [here](/doc/templates/) and [here](/doc/standalone-and-hvm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
-1. Open terminal in the template VM (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
+1. Open terminal in the template (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
2. Install `qubes-upgrade-vm` package (this package brings in R2 repo definitions and R2 keys)
~~~
@@ -44,7 +43,7 @@ By default, in Qubes R1, there is only one Template VM, however users are free t
Is this ok [y/N]:
~~~
- If you see (as is the case on the "screenshot" above) that the new key was imported from a local filesystem (`/etc/pki/rpm-gpg/...`) you can safely accept the key, without checking its fingerprint. This is because there were only two ways for such a key to make it to your Template VM's filesystem:
+ If you see (as is the case on the "screenshot" above) that the new key was imported from a local filesystem (`/etc/pki/rpm-gpg/...`) you can safely accept the key, without checking its fingerprint. This is because there were only two ways for such a key to make it to your template's filesystem:
- via a legitimate RPM package previously installed (in our case it was the `qubes-upgrade-vm` RPM). Such an RPM must have been signed by one of the keys you decided to trust previously, by default this would be either via the Qubes R1 signing key, or Fedora 17 signing key.
- via system compromise or via some illegal RPM package (e.g. Fedora released package pretending to bring new Firefox). In that case, however, your VM is already compromised, and it careful checking of the new R2 key would not change this situation to any better one. The game is lost for this VM anyway (and all VMs based on this template).
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b3.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b3.md
index 86f57780b..18916dee6 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b3.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r2b3.md
@@ -10,7 +10,6 @@ ref: 157
title: Upgrading to R2B3
---
-
Current Qubes R2 Beta 2 (R2B2) systems can be upgraded in-place to the latest R2 Beta 3 (R2B3) release by following the procedure below. However, upgrading in-place is riskier than performing a clean installation, since there are more things which can go wrong. For this reason, **we strongly recommended that users perform a [clean installation](/doc/installation-guide/) of Qubes R2 Beta 3**.
**Before attempting either an in-place upgrade or a clean installation, we strongly recommend that users back up the system by using the built-in [backup tool](/doc/backup-restore/).**
@@ -20,11 +19,11 @@ Experienced users may be comfortable accepting the risks of upgrading in-place.
Upgrade all Template and Standalone VM(s)
-----------------------------------------
-By default, in Qubes R2, there is only one Template VM, however users are free to create more Template VMs for special purposes, as well as Standalone VMs. More information on using multiple Template VMs, as well as Standalone VMs, can be found [here](/doc/software-update-vm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
+By default, in Qubes R2, there is only one template, however users are free to create more templates for special purposes, as well as Standalone VMs. More information on using multiple templates, as well as Standalone VMs, can be found [here](/doc/software-update-vm/). The steps described in this section should be repeated in *all* user's Template and Standalone VMs.
It is critical to complete this step **before** proceeding to dom0 upgrade. Otherwise you will most likely ends with unusable system.
-1. Open terminal in the template VM (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
+1. Open terminal in the template (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
2. Proceed with normal update in the template:
~~~
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_0.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_0.md
index c09d400da..19082f647 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_0.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_0.md
@@ -10,7 +10,6 @@ ref: 159
title: Upgrading to R3.0
---
-
**This instruction is highly experimental, the official way to upgrade from R2 is to backup the data and reinstall the system. Use at your own risk!**
Current Qubes R3.0 (R3.0) systems can be upgraded in-place to the latest R3.0 by following the procedure below. However, upgrading in-place is riskier than performing a clean installation, since there are more things which can go wrong. For this reason, **we strongly recommended that users perform a [clean installation](/doc/installation-guide/) of Qubes R3.0**.
@@ -21,13 +20,13 @@ Experienced users may be comfortable accepting the risks of upgrading in-place.
## Upgrade all Template and Standalone VM(s)
-By default, in Qubes R2, there is only one Template VM, however users are free to create more Template VMs for special purposes, as well as Standalone VMs. More information on using multiple Template VMs, as well as Standalone VMs, can be found [here](/doc/software-update-vm/). The steps described in this section should be repeated in **all** user's Template and Standalone VMs.
+By default, in Qubes R2, there is only one template, however users are free to create more templates for special purposes, as well as Standalone VMs. More information on using multiple templates, as well as Standalone VMs, can be found [here](/doc/software-update-vm/). The steps described in this section should be repeated in **all** user's Template and Standalone VMs.
It is critical to complete this step **before** proceeding to dom0 upgrade. Otherwise you will most likely end with unusable system.
### Upgrade Fedora template:
-1. Open terminal in the template VM (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
+1. Open terminal in the template (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
2. Install `qubes-upgrade-vm` package:
```
@@ -42,11 +41,11 @@ It is critical to complete this step **before** proceeding to dom0 upgrade. Othe
You'll need to accept "Qubes Release 3 Signing Key" - it is delivered by signed qubes-upgrade-vm package (verify that the message is about local file), so you don't need to manually verify it.
-4. Shutdown the template VM.
+4. Shutdown the template.
### Upgrade Debian template:
-1. Open terminal in the template VM (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
+1. Open terminal in the template (or standalone VM). E.g. use the Qubes Manager's right-click menu and choose Run Command in VM and type `gnome-terminal` there.
2. Update repository definition:
```
@@ -68,7 +67,7 @@ It is critical to complete this step **before** proceeding to dom0 upgrade. Othe
(after 3min timeout), but you can ignore this problem for now. After
completing the whole upgrade the service will be properly restarted.
-4. Shutdown the template VM.
+4. Shutdown the template.
## Upgrading dom0
@@ -137,7 +136,7 @@ Because of above limitations, you will need to configure some of those manually.
```shell_session
[user@dom0 ~]$ qvm-start custom-template
- --> Loading the VM (type = TemplateVM)...
+ --> Loading the VM (type = template)...
--> Starting Qubes DB...
--> Setting Qubes DB info for the VM...
--> Updating firewall rules...
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_1.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_1.md
index 932984593..527434cac 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_1.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_1.md
@@ -10,7 +10,6 @@ ref: 155
title: Upgrading to R3.1
---
-
**Before attempting either an in-place upgrade or a clean installation, we
strongly recommend that users [back up their systems](/doc/backup-restore/).**
@@ -19,15 +18,15 @@ by following the procedure below.
## Upgrade all Template and Standalone VM(s)
-By default, in Qubes R3.0, there is only one TemplateVM. However, users are
-free to create more TemplateVMs for special purposes, as well as StandaloneVMs.
-More information on using multiple TemplateVMs, as well as StandaloneVMs, can be
+By default, in Qubes R3.0, there is only one template. However, users are
+free to create more templates for special purposes, as well as standalones.
+More information on using multiple templates, as well as standalones, can be
found [here](/doc/software-update-vm/). The steps described in this
section should be repeated in **all** the user's Template and Standalone VMs.
### Upgrade Fedora templates:
-1. Open a terminal in the TemplateVM (or StandaloneVM). (E.g., use Qubes VM
+1. Open a terminal in the template (or standalone). (E.g., use Qubes VM
Manager's right-click menu, choose "Run Command in VM," and type
`gnome-terminal` there.)
@@ -43,11 +42,11 @@ section should be repeated in **all** the user's Template and Standalone VMs.
sudo yum upgrade
```
-4. Shut down the template VM.
+4. Shut down the template.
### Upgrade Debian (and Whonix) templates:
-1. Open a terminal in the TemplateVM (or StandaloneVM). (E.g., use Qubes VM
+1. Open a terminal in the template (or standalone). (E.g., use Qubes VM
Manager's right-click menu, choose "Run Command in VM," and type
`gnome-terminal` there.)
@@ -71,7 +70,7 @@ section should be repeated in **all** the user's Template and Standalone VMs.
sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
```
-5. Shut down the template VM.
+5. Shut down the template.
## Upgrading dom0
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_2.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_2.md
index d2337c506..1f26854c2 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_2.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r3_2.md
@@ -10,7 +10,6 @@ ref: 161
title: Upgrading to R3.2
---
-
**Before attempting either an in-place upgrade or a clean installation, we
strongly recommend that users [back up their systems](/doc/backup-restore/).**
@@ -114,9 +113,9 @@ your favorite desktop environment and continue.
## Upgrade all Template and Standalone VM(s)
-By default, in Qubes R3.1, there are few TemplateVMs and no StandaloneVMs.
-However, users are free to create StandaloneVMs More information on using
-multiple TemplateVMs, as well as StandaloneVMs, can be found
+By default, in Qubes R3.1, there are few templates and no standalones.
+However, users are free to create standalones More information on using
+multiple templates, as well as standalones, can be found
[here](/doc/software-update-vm/). The steps described in this section should be
repeated in **all** the user's Template and Standalone VMs.
@@ -127,7 +126,7 @@ repeated in **all** the user's Template and Standalone VMs.
In order to do that, please see the
[Fedora 23 template upgrade instructions](/doc/templates/fedora/#upgrading).
-1. Open a terminal in the TemplateVM (or StandaloneVM). (E.g., use Qubes VM
+1. Open a terminal in the template (or standalone). (E.g., use Qubes VM
Manager's right-click menu, choose "Run Command in VM," and type
`gnome-terminal` there.)
@@ -149,11 +148,11 @@ In order to do that, please see the
sudo dnf install qubes-mgmt-salt-vm-connector
```
-5. Shut down the template VM.
+5. Shut down the template.
### Upgrade Debian (and Whonix) templates:
-1. Open a terminal in the TemplateVM (or StandaloneVM). (E.g., use Qubes VM
+1. Open a terminal in the template (or standalone). (E.g., use Qubes VM
Manager's right-click menu, choose "Run Command in VM," and type
`gnome-terminal` there.)
@@ -183,4 +182,4 @@ In order to do that, please see the
sudo rm -f /etc/apt/sources.list.d/qubes-r3-upgrade.list
```
-6. Shut down the template VM.
+6. Shut down the template.
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade-to-r4_0.md b/user/downloading-installing-upgrading/upgrade/upgrade-to-r4_0.md
index 62b6233b2..5b66a8eb3 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade-to-r4_0.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade-to-r4_0.md
@@ -10,7 +10,6 @@ ref: 162
title: Upgrading to R4.0
---
-
**Before attempting either an in-place upgrade or a clean installation, we strongly recommend that users [back up their systems](/doc/backup-restore/).**
Current Qubes R3.2 systems cannot be upgraded in-place to R4.0.
@@ -82,38 +81,37 @@ Restore from your backup
4. Go to **Qubes menu -> System Tools -> Qubes Manager** to start it.
5. Follow the **Restoring from a Backup** section in the [Backup, Restoration, and Migration](/doc/backup-restore/) guide.
- We recommend that you restore only your [TemplateBasedVMs](/doc/glossary/#templatebasedvm) and [StandaloneVMs](/doc/glossary/#standalonevm) from R3.2.
- Using [TemplateVMs](/doc/templates/) and [SystemVMs](/doc/glossary/#systemvm) from R3.2 is not fully supported (see [#3514](https://github.com/QubesOS/qubes-issues/issues/3514)).
- Instead, we recommend using the TemplateVMs that were created specifically for R4.0, which you can [customize](/doc/software-update-vm/) according to your needs.
- For the TemplateVM OS versions supported in R4.0, see [Supported Versions](/doc/supported-versions/#templatevms).
- If the restore tool complains about missing templates, you can select the option to restore the AppVMs anyway, then change them afterward to use one of the default R4.0 templates.
+ We recommend that you restore only your [app qubes](/doc/glossary/#app-qube) and [standalones](/doc/glossary/#standalone) from R3.2.
+ Using [templates](/doc/templates/) and [service qubes](/doc/glossary/#service-qube) from R3.2 is not fully supported (see [#3514](https://github.com/QubesOS/qubes-issues/issues/3514)).
+ Instead, we recommend using the templates that were created specifically for R4.0, which you can [customize](/doc/software-update-vm/) according to your needs.
+ For the template OS versions supported in R4.0, see [Supported Versions](/doc/supported-versions/#templates).
+ If the restore tool complains about missing templates, you can select the option to restore the app qubes anyway, then change them afterward to use one of the default R4.0 templates.
Note about additional disp-* qubes created during restore
---------------------------------------------------------
-One of differences between R3.2 and R4.0 is the handling of DisposableVMs.
-In R3.2, a DisposableVM inherited its network settings (NetVM and firewall rules) from the calling qube.
+One of differences between R3.2 and R4.0 is the handling of disposables.
+In R3.2, a disposable inherited its network settings (NetVM and firewall rules) from the calling qube.
In R4.0, this is no longer the case.
-Instead, in R4.0 it's possible to create multiple DisposableVM Templates and choose which one should be used by each qube.
-It's even possible to use different DisposableVM Templates for different operations from the same qube.
+Instead, in R4.0 it's possible to create multiple disposable templates and choose which one should be used by each qube.
+It's even possible to use different disposable templates for different operations from the same qube.
This allows much more flexibility, since it allows you to differentiate not only network settings, but all of a qube's properties (including its template, memory settings, etc.).
-Restoring a backup from R3.2 preserves the old behavior by creating separate DisposableVM Template for each network-providing qube (and also `disp-no-netvm` for network-isolated qubes).
-Then, each restored qube is configured to use the appropriate DisposableVM Template according to its `netvm` or `dispvm_netvm` property from R3.2.
-This way, DisposableVMs started on R4.0 by qubes restored from a R3.2 backup have the same NetVM settings as they had on R3.2.
+Restoring a backup from R3.2 preserves the old behavior by creating separate disposable template for each network-providing qube (and also `disp-no-netvm` for network-isolated qubes).
+Then, each restored qube is configured to use the appropriate disposable template according to its `netvm` or `dispvm_netvm` property from R3.2.
+This way, disposables started on R4.0 by qubes restored from a R3.2 backup have the same NetVM settings as they had on R3.2.
-If you find this behavior undesirable and want to configure it differently, you can remove those `disp-*` DisposableVM Templates.
+If you find this behavior undesirable and want to configure it differently, you can remove those `disp-*` disposable templates.
But, to do so, you must first make sure they are not set as the value for the `default_dispvm` property on any other qube.
-Both Qubes Manager and the `qvm-remove` tool will show you where a DisposableVM Template is being used, so you can go there and change the setting.
+Both Qubes Manager and the `qvm-remove` tool will show you where a disposable template is being used, so you can go there and change the setting.
Upgrade all Template and Standalone VM(s)
-----------------------------------------
-We strongly recommend that you update **all** TemplateVMs and StandaloneVMs before use so that you have the latest security patches from upstream distributions.
+We strongly recommend that you update **all** templates and standalones before use so that you have the latest security patches from upstream distributions.
In addition, if the default templates have reached EOL (end-of-life) by the time you install R4.0, we strongly recommend that you upgrade them before use.
Please see [Supported Versions](/doc/supported-versions/) for information on supported OS versions and consult the guides below for specific upgrade instructions:
-* [Upgrading Fedora TemplateVMs](/doc/templates/fedora/#upgrading)
-* [Upgrading Debian TemplateVMs](/doc/templates/debian/#upgrading)
-* [Updating Whonix TemplateVMs](https://www.whonix.org/wiki/Qubes/Update)
-
+* [Upgrading Fedora templates](/doc/templates/fedora/#upgrading)
+* [Upgrading Debian templates](/doc/templates/debian/#upgrading)
+* [Updating Whonix templates](https://www.whonix.org/wiki/Qubes/Update)
diff --git a/user/downloading-installing-upgrading/upgrade/upgrade.md b/user/downloading-installing-upgrading/upgrade/upgrade.md
index 277fc08ed..cab6117cc 100644
--- a/user/downloading-installing-upgrading/upgrade/upgrade.md
+++ b/user/downloading-installing-upgrading/upgrade/upgrade.md
@@ -6,9 +6,9 @@ ref: 158
title: Upgrade Guides
---
-
These guides are for upgrading from one version of Qubes to another.
-If you're just looking to update your system while staying on the same version, see [Updating Qubes OS](/doc/updating-qubes-os/).
+If you're just looking to update your system while staying on the same version,
+see [How to Update](/doc/how-to-update/).
* [Upgrading from R1 to R2 Beta 1](/doc/upgrade-to-r2b1/)
* [Upgrading from R1 to R2 Beta 2](/doc/upgrade-to-r2b2/)
@@ -18,4 +18,3 @@ If you're just looking to update your system while staying on the same version,
* [Upgrading from R3.0 to R3.1](/doc/upgrade-to-r3.1/)
* [Upgrading from R3.1 to R3.2](/doc/upgrade-to-r3.2/)
* [Upgrading from R3.2 to R4.0](/doc/upgrade-to-r4.0/)
-
diff --git a/user/hardware/certified-hardware.md b/user/hardware/certified-hardware.md
index 33187898c..94beb66f7 100644
--- a/user/hardware/certified-hardware.md
+++ b/user/hardware/certified-hardware.md
@@ -10,7 +10,6 @@ ref: 144
title: Certified Hardware
---
-
The Qubes OS Project aims to partner with a select few computer vendors to ensure that Qubes users have reliable hardware purchasing options.
We aim for these vendors to be as diverse as possible in terms of geography, cost, and availability.
@@ -82,7 +81,7 @@ Among other things, this implies **proper DMAR ACPI table** construction.
Finally, we require that Qubes-certified hardware does not have any built-in _USB-connected_ microphones (e.g. as part of a USB-connected built-in camera) that cannot be easily physically disabled by the user, e.g. via a convenient mechanical switch.
Thankfully, the majority of laptops on the market that we have seen already satisfy this condition out-of-the-box, because their built-in microphones are typically connected to the internal audio device, which itself is a type of PCIe device.
-This is important, because such PCIe audio devices are --- by default --- assigned to Qubes' (trusted) dom0 and exposed through our carefully designed protocol only to select AppVMs when the user explicitly chooses to do so.
+This is important, because such PCIe audio devices are --- by default --- assigned to Qubes' (trusted) dom0 and exposed through our carefully designed protocol only to select app qubes when the user explicitly chooses to do so.
The rest of the time, they should be outside the reach of malware.
While we also recommend a physical kill switch on the built-in camera (or, if possible, not to have a built-in camera), we also recognize this isn't a critical requirement, because users who are concerned about it can easily cover it a piece of tape (something that, regrettably, is far less effective on a microphone).
@@ -105,4 +104,3 @@ This could be done by consulting the [Hardware Compatibility List](/hcl/) or try
While we are willing to troubleshoot simple issues, we will need to charge a consulting fee for more in-depth work.
If you are interested in having your hardware certified, please [contact us](mailto:business@qubes-os.org).
-
diff --git a/user/hardware/hardware-testing.md b/user/hardware/hardware-testing.md
index dcf65ce17..170df9ef2 100644
--- a/user/hardware/hardware-testing.md
+++ b/user/hardware/hardware-testing.md
@@ -6,7 +6,6 @@ ref: 145
title: Hardware Testing
---
-
The Qubes developers test Qubes OS on certain hardware models.
The tested hardware described on this page differs from [Qubes Certified Hardware](/doc/certified-hardware/) in a few key ways:
@@ -38,4 +37,3 @@ If anyone is willing to lend or donate these models to us, we would be happy to
- Dell Latitude with Intel 8th Gen CPU and integrated graphics
Note: The Lenovo X and T series are similar enough to assume similar compatibility of the matching model from the other series.
-
diff --git a/user/hardware/hcl.md b/user/hardware/hcl.md
index cd7017f91..c5d7952a5 100644
--- a/user/hardware/hcl.md
+++ b/user/hardware/hcl.md
@@ -12,7 +12,6 @@ ref: 146
title: Hardware Compatibility List (HCL)
---
-
The [HCL](/hcl) is a compilation of reports generated and submitted by users across various Qubes versions about their hardware's compatibility with Qubes.
**Note:**
@@ -46,4 +45,3 @@ Please consider sending the **HCL Support Files** `.cpio.gz` file as well. To ge
**Please note:**
The **HCL Support Files** may contain numerous hardware details, including serial numbers. If, for privacy or security reasons, you do not wish to make this information public, please **do not** send the `.cpio.gz` file to the public mailing list.
-
diff --git a/user/hardware/hcl_listing.md b/user/hardware/hcl_listing.md
deleted file mode 100644
index 0aba6b95f..000000000
--- a/user/hardware/hcl_listing.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-lang: en
-layout: hcl
-model: all
-permalink: /hcl/
-redirect_from:
-- /compatible-hardware/
-ref: 143
-title: Hardware Compatibility List (HCL)
----
diff --git a/user/hardware/system-requirements.md b/user/hardware/system-requirements.md
index 17c596ff9..a7cb0df57 100644
--- a/user/hardware/system-requirements.md
+++ b/user/hardware/system-requirements.md
@@ -11,13 +11,16 @@ ref: 142
title: System Requirements
---
-
Notice:
- The system requirements on this page are necessary, but not sufficient, for Qubes compatibility at a minimal or recommended level.
- In other words, just because a computer satisfies these requirements doesn't mean that Qubes will successfully install and run on it.
- We strongly recommend consulting the Hardware Compatibility List to verify that Qubes can install and run on your specific model in the ways you need it to.
+ The system requirements on this page are necessary, but not
+ sufficient, for Qubes compatibility at a minimal or recommended level.
+ In other words, just because a computer satisfies these requirements doesn't
+ mean that Qubes will successfully install and run on it. We strongly
+ recommend consulting the Hardware Compatibility List to
+ verify that Qubes can install and run on your specific model in the ways you
+ need it to.
## Minimum
@@ -37,32 +40,47 @@ title: System Requirements
- **Storage:** 128 GB free space
- High-speed solid-state drive strongly recommended
- **Graphics:** Intel integrated graphics processor (IGP) strongly recommended
- - Nvidia GPUs may require significant [troubleshooting](/doc/install-nvidia-driver/)
- - AMD GPUs have not been formally tested, but Radeons (especially RX580 and earlier) generally work well
+ - Nvidia GPUs may require significant
+ [troubleshooting](/doc/install-nvidia-driver/)
+ - AMD GPUs have not been formally tested, but Radeons (especially RX580 and
+ earlier) generally work well
- **Peripherals:** A non-USB keyboard or multiple USB controllers
-- **TPM:** Trusted Platform Module (TPM) with proper BIOS support (required for [Anti Evil Maid](/doc/anti-evil-maid/))
-- **Other:** Satisfaction of all [hardware certification requirements for Qubes 4.x](/news/2016/07/21/new-hw-certification-for-q4/)
+- **TPM:** Trusted Platform Module (TPM) with proper BIOS support (required for
+ [Anti Evil Maid](/doc/anti-evil-maid/))
+- **Other:** Satisfaction of all [hardware certification requirements for Qubes
+ 4.x](/news/2016/07/21/new-hw-certification-for-q4/)
## Choosing Hardware
-- Please see the [Hardware Compatibility List](/hcl/) for a compilation of hardware reports generated and submitted by users across various Qubes versions.
- (For more information about the HCL itself, see [here](/doc/hcl/).)
+- Please see the [Hardware Compatibility List](/hcl/) for a compilation of
+ hardware reports generated and submitted by users across various Qubes
+ versions. (For more information about the HCL itself, see [here](/doc/hcl/).)
- See the [Certified Hardware](/doc/certified-hardware/) page.
- See the [Hardware Testing](/doc/hardware-testing/) page.
## Important Notes
-- **Installing Qubes in a virtual machine is not recommended, as it uses its own bare-metal hypervisor (Xen).**
-- Qubes **can** be installed on systems which do not meet the recommended requirements.
- Such systems will still offer significant security improvements over traditional operating systems, since things like GUI isolation and kernel protection do not require special hardware.
-- Qubes **can** be installed on a USB flash drive or external disk, and testing has shown that this works very well. A fast USB 3.0 flash drive is recommended for this.
- (As a reminder, its capacity must be at least 32 GiB.)
- Simply plug the flash drive into the computer before booting into the Qubes installer from a separate installation medium, choose the flash drive as the target installation disk, and proceed with the installation normally.
- After Qubes has been installed on the flash drive, it can then be plugged into other computers in order to boot into Qubes.
- In addition to the convenience of having a portable copy of Qubes, this allows users to test for hardware compatibility on multiple machines (e.g., at a brick-and-mortar computer
- store) before deciding on which computer to purchase.
- (See [hcl-report](/doc/hcl/#generating-and-submitting-new-reports) for advice on hardware compatibility testing.)
- Remember to change the devices assigned to your NetVM and USB VM if you move between different machines.
-- [Advice on finding a VT-d capable notebook](https://groups.google.com/d/msg/qubes-users/Sz0Nuhi4N0o/ZtpJdoc0OY8J).
-- You can check whether an Intel processor has VT-x and VT-d on [ark.intel.com](https://ark.intel.com/content/www/us/en/ark.html#@Processors).
-
+- **Installing Qubes in a virtual machine is not recommended, as it uses its
+ own bare-metal hypervisor (Xen).**
+- Qubes **can** be installed on systems which do not meet the recommended
+ requirements. Such systems will still offer significant security improvements
+ over traditional operating systems, since things like GUI isolation and
+ kernel protection do not require special hardware.
+- Qubes **can** be installed on a USB flash drive or external disk, and testing
+ has shown that this works very well. A fast USB 3.0 flash drive is
+ recommended for this. (As a reminder, its capacity must be at least 32 GiB.)
+ Simply plug the flash drive into the computer before booting into the Qubes
+ installer from a separate installation medium, choose the flash drive as the
+ target installation disk, and proceed with the installation normally. After
+ Qubes has been installed on the flash drive, it can then be plugged into
+ other computers in order to boot into Qubes. In addition to the convenience
+ of having a portable copy of Qubes, this allows users to test for hardware
+ compatibility on multiple machines (e.g., at a brick-and-mortar computer
+ store) before deciding on which computer to purchase. (See
+ [hcl-report](/doc/hcl/#generating-and-submitting-new-reports) for advice on
+ hardware compatibility testing.) Remember to change the devices assigned to
+ your NetVM and USB VM if you move between different machines.
+- [Advice on finding a VT-d capable
+ notebook](https://groups.google.com/d/msg/qubes-users/Sz0Nuhi4N0o/ZtpJdoc0OY8J).
+- You can check whether an Intel processor has VT-x and VT-d on
+ [ark.intel.com](https://ark.intel.com/content/www/us/en/ark.html#@Processors).
diff --git a/user/how-to-guides/backup-emergency-restore-v2.md b/user/how-to-guides/backup-emergency-restore-v2.md
index 73731383d..9cc0c23c6 100644
--- a/user/how-to-guides/backup-emergency-restore-v2.md
+++ b/user/how-to-guides/backup-emergency-restore-v2.md
@@ -9,7 +9,6 @@ ref: 207
title: Emergency Backup Recovery (v2)
---
-
This page describes how to perform emergency restore of backup created on Qubes
R2 Beta3 or earlier (which uses backup format 2).
diff --git a/user/how-to-guides/backup-emergency-restore-v3.md b/user/how-to-guides/backup-emergency-restore-v3.md
index fa0a716c2..1abab60ef 100644
--- a/user/how-to-guides/backup-emergency-restore-v3.md
+++ b/user/how-to-guides/backup-emergency-restore-v3.md
@@ -9,7 +9,6 @@ ref: 201
title: Emergency Backup Recovery (v3)
---
-
This page describes how to perform an emergency restore of a backup created on
Qubes R2 or later (which uses backup format version 3).
diff --git a/user/how-to-guides/backup-emergency-restore-v4.md b/user/how-to-guides/backup-emergency-restore-v4.md
index 0dce08d4c..9a7ec00cb 100644
--- a/user/how-to-guides/backup-emergency-restore-v4.md
+++ b/user/how-to-guides/backup-emergency-restore-v4.md
@@ -9,7 +9,6 @@ ref: 192
title: Emergency Backup Recovery (v4)
---
-
This page describes how to perform an emergency restore of a backup created on
Qubes R4.X (which uses backup format version 4).
@@ -21,21 +20,22 @@ any GNU/Linux system with the following procedure.
Required `scrypt` Utility
-------------------------
-In Qubes 4.X, backups are encrypted and integrity-protected with [scrypt](https://www.tarsnap.com/scrypt.html). You
-will need a copy of this utility in order to access your data. Since `scrypt`
-is not pre-installed on every GNU/Linux system, it is strongly recommended that
-you store a copy of it with your backups. If your distribution has `scrypt`
-packaged (e.g., Debian), you can install the package in the standard way using
-your distribution's package manager. Otherwise, you'll need to obtain a
-compiled binary (instructions below) or compile the program from source
-yourself. (Don't forget to [verify signatures](/security/verifying-signatures) first!) Note that versions of
-`scrypt` up to 1.2.0 (inclusive) do not support the `-P` option for easier
-scripting, which means you'll need to enter the passphrase for each file
+In Qubes 4.X, backups are encrypted and integrity-protected with
+[scrypt](https://www.tarsnap.com/scrypt.html). You will need a copy of this
+utility in order to access your data. Since `scrypt` is not pre-installed on
+every GNU/Linux system, it is strongly recommended that you store a copy of it
+with your backups. If your distribution has `scrypt` packaged (e.g., Debian),
+you can install the package in the standard way using your distribution's
+package manager. Otherwise, you'll need to obtain a compiled binary
+(instructions below) or compile the program from source yourself. (Don't forget
+to [verify signatures](/security/verifying-signatures) first!) Note that
+versions of `scrypt` up to 1.2.0 (inclusive) do not support the `-P` option for
+easier scripting, which means you'll need to enter the passphrase for each file
separately, instead of using `echo ... | scrypt`.
Here are instructions for obtaining a compiled `scrypt` binary. This example
-uses an RPM-based system (Fedora), but the same general procedure should work on
-any GNU/Linux system.
+uses an RPM-based system (Fedora), but the same general procedure should work
+on any GNU/Linux system.
1. If you're not on Qubes 4.X, [get and verify the Release 4 Signing Key](/security/verifying-signatures/#2-get-the-release-signing-key).
2. If you're not on Qubes 4.X, import the Release 4 Signing Key.
@@ -143,7 +143,8 @@ Emergency Recovery Instructions
[user@restore ~]$ backup_id=20161020T123455-1234
- 6. Verify the integrity of your data, decrypt, decompress, and extract `private.img`:
+ 6. Verify the integrity of your data, decrypt, decompress, and extract
+ `private.img`:
[user@restore ~]$ find vm1 -name 'private.img.*.enc' | sort -V | while read f_enc; do \
f_dec=${f_enc%.enc}; \
@@ -177,4 +178,3 @@ Emergency Recovery Instructions
repository:
https://github.com/QubesOS/qubes-doc.git
-
diff --git a/user/how-to-guides/how-to-back-up-restore-and-migrate.md b/user/how-to-guides/how-to-back-up-restore-and-migrate.md
index e6e6f4348..131658e9a 100644
--- a/user/how-to-guides/how-to-back-up-restore-and-migrate.md
+++ b/user/how-to-guides/how-to-back-up-restore-and-migrate.md
@@ -11,23 +11,26 @@ ref: 199
title: How to Back Up, Restore, and Migrate
---
+With Qubes, it's easy and secure to back up and restore your whole system, as
+well as to migrate between two physical machines.
-With Qubes, it's easy and secure to back up and restore your whole system, as well as to migrate between two physical machines.
+These functions are integrated into the Qube Manager. There are also two
+command-line tools available that perform the same functions: `qvm-backup` and
+`qvm-backup-restore`.
-These functions are integrated into the Qube Manager.
-There are also two command-line tools available that perform the same functions: `qvm-backup` and `qvm-backup-restore`.
+It's extremely important to make regular backups of all the data you care
+about. This is true of all computing, not just the use of Qubes. Data loss can
+and does occur in myriad and unexpected ways. A standard recommendation is to
+make backups at least weekly: three copies in two different formats, one
+off-site.
-It's extremely important to make regular backups of all the data you care about.
-This is true of all computing, not just the use of Qubes.
-Data loss can and does occur in myriad and unexpected ways.
-A standard recommendation is to make backups at least weekly: three copies in two different formats, one off-site.
+## Backing up changes to dom0
-Backing up changes to dom0
---------------------------
-
-When backing up dom0 using the Qubes backup tool (explained below), only the home directory is backed up.
-Therefore, if there are files outside of the home directory you wish to save, you should copy them into the home directory prior to creating a backup.
-Here is an example of how to back up Qubes config files and RPC policies:
+When backing up dom0 using the Qubes backup tool (explained below), only the
+home directory is backed up. Therefore, if there are files outside of the home
+directory you wish to save, you should copy them into the home directory prior
+to creating a backup. Here is an example of how to back up Qubes config files
+and RPC policies:
```
$ mkdir -p ~/backup/etc/qubes/
@@ -36,106 +39,146 @@ $ mkdir ~/backup/etc/qubes-rpc/
$ cp -a /etc/qubes-rpc/* ~/systemfiles/etc/qubes-rpc/
```
-To restore these files, move them from the restored directory in dom0's home back to their appropriate locations in `/etc/`.
-Please note that any packages installed via the package manager in dom0 will not be backed up.
-Such packages will have to be reinstalled through the package manager when restoring on a fresh installation.
+To restore these files, move them from the restored directory in dom0's home
+back to their appropriate locations in `/etc/`. Please note that any packages
+installed via the package manager in dom0 will not be backed up. Such packages
+will have to be reinstalled through the package manager when restoring on a
+fresh installation.
-Creating a backup
------------------
+## Creating a backup
-1. Go to **Applications menu -> System Tools -> Backup Qubes**.
- This brings up the **Qubes Backup VMs** window.
+1. Go to **Applications menu -> System Tools -> Backup Qubes**. This brings up
+ the **Qubes Backup VMs** window.
2. Move the VMs that you want to back up to the right-hand **Selected** column.
VMs in the left-hand **Available** column will not be backed up.
- You may choose whether to compress backups by checking or unchecking the **Compress the backup** box.
- Normally this should be left on unless you have a specific reason otherwise.
+ You may choose whether to compress backups by checking or unchecking the
+ **Compress the backup** box. Normally this should be left on unless you have
+ a specific reason otherwise.
Once you have selected all desired VMs, click **Next**.
3. Select the destination for the backup:
- If you wish to send your backup to a (currently running) VM, select the VM in the drop-down box next to **Target AppVM**.
- If you wish to send your backup to a [USB mass storage device](/doc/usb/), you can use the directory selection widget to mount a connected device (under "Other locations" item on the left); or first mount the device in a VM, then select the mount point inside that VM as the backup destination.
+ If you wish to send your backup to a (currently running) VM, select the VM
+ in the drop-down box next to **Target app qube**. If you wish to send your
+ backup to a [USB mass storage device](/doc/usb/), you can use the directory
+ selection widget to mount a connected device (under "Other locations" item
+ on the left); or first mount the device in a VM, then select the mount point
+ inside that VM as the backup destination.
- You must also specify a directory on the device or in the VM, or a command to be executed in the VM as a destination for your backup.
- For example, if you wish to send your backup to the `~/backups` folder in the target VM, you would simply browse to it using the convenient directory selection dialog (`...`) at the right.
- This destination directory must already exist.
- If it does not exist, you must create it manually prior to backing up.
+ You must also specify a directory on the device or in the VM, or a command
+ to be executed in the VM as a destination for your backup. For example, if
+ you wish to send your backup to the `~/backups` folder in the target VM, you
+ would simply browse to it using the convenient directory selection dialog
+ (`...`) at the right. This destination directory must already exist. If it
+ does not exist, you must create it manually prior to backing up.
- By specifying the appropriate directory as the destination in a VM, it is possible to send the backup directly to, e.g., a USB mass storage device attached to the VM.
- Likewise, it is possible to enter any command as a backup target by specifying the command as the destination in the VM.
- This can be used to send your backup directly to, e.g., a remote server using SSH.
+ By specifying the appropriate directory as the destination in a VM, it is
+ possible to send the backup directly to, e.g., a USB mass storage device
+ attached to the VM. Likewise, it is possible to enter any command as a
+ backup target by specifying the command as the destination in the VM. This
+ can be used to send your backup directly to, e.g., a remote server using
+ SSH.
- **Note:** The supplied passphrase is used for **both** encryption/decryption and integrity verification.
+ **Note:** The supplied passphrase is used for **both** encryption/decryption
+ and integrity verification.
- At this point, you may also choose whether to save your settings by checking or unchecking the **Save settings as default backup profile** box.
+ At this point, you may also choose whether to save your settings by checking
+ or unchecking the **Save settings as default backup profile** box.
- **Warning: Saving the settings will result in your backup passphrase being saved in plaintext in dom0, so consider your threat model before checking this box.**
+ **Warning: Saving the settings will result in your backup passphrase being
+ saved in plaintext in dom0, so consider your threat model before checking
+ this box.**
-4. You will now see the summary of VMs to be backed up.
- If there are any issues preventing the backup, they will be listed here and the **Next** button grayed out.
+4. You will now see the summary of VMs to be backed up. If there are any issues
+ preventing the backup, they will be listed here and the **Next** button
+ grayed out.
-5. When you are ready, click **Next**.
- Qubes will proceed to create your backup.
- Once the progress bar has completed, you may click **Finish**.
+5. When you are ready, click **Next**. Qubes will proceed to create your
+ backup. Once the progress bar has completed, you may click **Finish**.
-6. Test restore your backup.
- Follow the [restore procedure](#restoring-from-a-backup), selecting **Verify backup integrity, do not restore the data**.
- This step is optional but strongly recommended.
- A backup is useless if you can't restore your data from it, and you can't be sure that your backup is good until you try to restore.
+6. Test restore your backup. Follow the [restore
+ procedure](#restoring-from-a-backup), selecting **Verify backup integrity,
+ do not restore the data**. This step is optional but strongly recommended. A
+ backup is useless if you can't restore your data from it, and you can't be
+ sure that your backup is good until you try to restore.
-Restoring from a backup
------------------------
+## Restoring from a backup
-1. Go to **Applications menu -> System Tools -> Restore Backup**.
-This brings up the **Qubes Restore VMs** window.
+1. Go to **Applications menu -> System Tools -> Restore Backup**. This brings
+ up the **Qubes Restore VMs** window.
2. Select the source location of the backup to be restored:
- - If your backup is located on a [USB mass storage device](/doc/usb/), attach it first to another VM or select `sys-usb` in the next item.
- - If your backup is located in a (currently running) VM, select the VM in the drop-down box next to **AppVM**.
+ - If your backup is located on a [USB mass storage device](/doc/usb/),
+ attach it first to another VM or select `sys-usb` in the next item.
+ - If your backup is located in a (currently running) VM, select the VM in
+ the drop-down box next to **app qube**.
- You must also specify the directory and filename of the backup (or a command to be executed in a VM) in the **Backup file** field.
- If you followed the instructions in the previous section, "Creating a Backup," then your backup is most likely in the location you chose as the destination in step 3.
- For example, if you had chosen the `~/backups` directory of a VM as your destination in step 3, you would now select the same VM and again browse to (using `...`) the `backups` folder.
- Once you've located the backup file, double-click it or select it and hit **OK**.
+ You must also specify the directory and filename of the backup (or a command
+ to be executed in a VM) in the **Backup file** field. If you followed the
+ instructions in the previous section, "Creating a Backup," then your backup
+ is most likely in the location you chose as the destination in step 3. For
+ example, if you had chosen the `~/backups` directory of a VM as your
+ destination in step 3, you would now select the same VM and again browse to
+ (using `...`) the `backups` folder. Once you've located the backup file,
+ double-click it or select it and hit **OK**.
3. There are three options you may select when restoring from a backup:
- 1. **ignore missing templates and net VMs**: If any of the VMs in your backup depended upon a NetVM or TemplateVM that is not present in (i.e., "missing from") the current system, checking this box will ignore the fact that they are missing and restore the VMs anyway and set them to use the default NetVM and system default template.
- 2. **ignore username mismatch**: This option applies only to the restoration of dom0's home directory.
- If your backup was created on a Qubes system which had a different dom0 username than the dom0 username of the current system, then checking this box will ignore the mismatch between the two usernames and proceed to restore the home directory anyway.
- 3. **Verify backup integrity, do not restore the data**: This will scan the backup file for corrupted data.
- However, it does not currently detect if it is missing data as long as it is a correctly structured, non-corrupted backup file.
- See [issue #3498](https://github.com/QubesOS/qubes-issues/issues/3498) for more details.
-
-4. If your backup is encrypted, you must check the **Encrypted backup** box.
-If a passphrase was supplied during the creation of your backup (regardless of whether it is encrypted), then you must supply it here.
-
- **Note:** The passphrase which was supplied when the backup was created is used for **both** encryption/decryption and integrity verification.
- If the backup was not encrypted, the supplied passphrase is used only for integrity verification.
- All backups made from a Qubes R4.0 system will be encrypted.
-
-5. You will now see the summary of VMs to be restored.
-If there are any issues preventing the restore, they will be listed here and the **Next** button grayed out.
-
-6. When you are ready, click **Next**.
-Qubes will proceed to restore from your backup.
-Once the progress bar has completed, you may click **Finish**.
-
-**Note:** When restoring from a dom0 backup, a new directory will be created in the current dom0 home directory, and the contents from the backup will be placed inside this new directory.
-This is intentional, as it allows users to have explicit control over which files and settings get applied in dom0.
-If the contents from the dom0 backup were instead to overwrite the existing files in dom0's home directory, unexpected and undesired configuration changes could occur.
-However, if you do wish to move all files from the dom0 backup out of the subdirectory into your current dom0 home directory (overwriting any existing files in the process), you may do so by following the instructions [here](https://stackoverflow.com/questions/20192070/how-to-move-all-files-including-hidden-files-into-parent-directory-via).
-Just remember that this can cause unexpected and desired configuration changes in dom0, depending on exactly which files you're adding and replacing.
-
-Emergency backup recovery without qubes
----------------------------------------
-
-The Qubes backup system has been designed with emergency disaster recovery in mind.
-No special Qubes-specific tools are required to access data backed up by Qubes.
-In the event a Qubes system is unavailable, you can access your data on any GNU/Linux system with the following procedure.
+ 1. **ignore missing templates and net VMs**: If any of the VMs in your
+ backup depended upon a NetVM or template that is not present in (i.e.,
+ "missing from") the current system, checking this box will ignore the fact
+ that they are missing and restore the VMs anyway and set them to use the
+ default NetVM and system default template.
+ 2. **ignore username mismatch**: This option applies only to the restoration
+ of dom0's home directory. If your backup was created on a Qubes system which
+ had a different dom0 username than the dom0 username of the current system,
+ then checking this box will ignore the mismatch between the two usernames
+ and proceed to restore the home directory anyway.
+ 3. **Verify backup integrity, do not restore the data**: This will scan the
+ backup file for corrupted data. However, it does not currently detect if it
+ is missing data as long as it is a correctly structured, non-corrupted
+ backup file. See [issue
+ #3498](https://github.com/QubesOS/qubes-issues/issues/3498) for more
+ details.
+
+4. If your backup is encrypted, you must check the **Encrypted backup** box. If
+a passphrase was supplied during the creation of your backup (regardless of
+whether it is encrypted), then you must supply it here.
+
+ **Note:** The passphrase which was supplied when the backup was created is
+ used for **both** encryption/decryption and integrity verification. If the
+ backup was not encrypted, the supplied passphrase is used only for integrity
+ verification. All backups made from a Qubes R4.0 system will be encrypted.
+
+5. You will now see the summary of VMs to be restored. If there are any issues
+preventing the restore, they will be listed here and the **Next** button grayed
+out.
+
+6. When you are ready, click **Next**. Qubes will proceed to restore from your
+backup. Once the progress bar has completed, you may click **Finish**.
+
+**Note:** When restoring from a dom0 backup, a new directory will be created in
+the current dom0 home directory, and the contents from the backup will be
+placed inside this new directory. This is intentional, as it allows users to
+have explicit control over which files and settings get applied in dom0. If the
+contents from the dom0 backup were instead to overwrite the existing files in
+dom0's home directory, unexpected and undesired configuration changes could
+occur. However, if you do wish to move all files from the dom0 backup out of
+the subdirectory into your current dom0 home directory (overwriting any
+existing files in the process), you may do so by following the instructions
+[here](https://stackoverflow.com/questions/20192070/how-to-move-all-files-including-hidden-files-into-parent-directory-via).
+Just remember that this can cause unexpected and desired configuration changes
+in dom0, depending on exactly which files you're adding and replacing.
+
+## Emergency backup recovery without qubes
+
+The Qubes backup system has been designed with emergency disaster recovery in
+mind. No special Qubes-specific tools are required to access data backed up by
+Qubes. In the event a Qubes system is unavailable, you can access your data on
+any GNU/Linux system with the following procedure.
Refer to the following for emergency restore of a backup created on:
@@ -143,28 +186,38 @@ Refer to the following for emergency restore of a backup created on:
- [Qubes R3](/doc/backup-emergency-restore-v3/)
- [Qubes R2 or older](/doc/backup-emergency-restore-v2/)
-Migrating between two physical machines
----------------------------------------
+## Migrating between two physical machines
-In order to migrate your Qubes system from one physical machine to another, simply follow the backup procedure on the old machine, [install Qubes](/downloads/) on the new machine, and follow the restoration procedure on the new machine.
-All of your settings and data will be preserved!
+In order to migrate your Qubes system from one physical machine to another,
+simply follow the backup procedure on the old machine, [install
+Qubes](/downloads/) on the new machine, and follow the restoration procedure on
+the new machine. All of your settings and data will be preserved!
-Choosing a backup passphrase
-----------------------------
+## Choosing a backup passphrase
Here are some things to consider when selecting a passphrase for your backups:
-- If you plan to store the backup for a long time or on third-party servers, you should make sure to use a very long, high-entropy passphrase.
- (Depending on the decryption passphrase you use for your system drive, this may necessitate selecting a stronger passphrase.
- If your system drive decryption passphrase is already sufficiently strong, it may not.)
-- An adversary who has access to your backups may try to substitute one backup for another.
- For example, when you attempt to retrieve a recent backup, the adversary may instead give you a very old backup containing a compromised VM.
- If you're concerned about this type of attack, you may wish to use a different passphrase for each backup, e.g., by appending a number or date to the passphrase.
-- If you're forced to enter your system drive decryption passphrase in plain view of others (where it can be shoulder-surfed), then you may want to use a different passphrase for your backups (even if your system drive decryption passphrase is already maximally strong).
- On the other hand, if you're careful to avoid shoulder-surfing and/or have a passphrase that's difficult to detect via shoulder-surfing, then this may not be a problem for you.
-
-Notes
------
-
-- For the technical details of the backup system, please refer to [this thread](https://groups.google.com/d/topic/qubes-devel/TQr_QcXIVww/discussion).
-- If working with symlinks, note the issues described in [this thread](https://groups.google.com/d/topic/qubes-users/EITd1kBHD30/discussion).
+- If you plan to store the backup for a long time or on third-party servers,
+ you should make sure to use a very long, high-entropy passphrase. (Depending
+ on the decryption passphrase you use for your system drive, this may
+ necessitate selecting a stronger passphrase. If your system drive decryption
+ passphrase is already sufficiently strong, it may not.)
+- An adversary who has access to your backups may try to substitute one backup
+ for another. For example, when you attempt to retrieve a recent backup, the
+ adversary may instead give you a very old backup containing a compromised VM.
+ If you're concerned about this type of attack, you may wish to use a
+ different passphrase for each backup, e.g., by appending a number or date to
+ the passphrase.
+- If you're forced to enter your system drive decryption passphrase in plain
+ view of others (where it can be shoulder-surfed), then you may want to use a
+ different passphrase for your backups (even if your system drive decryption
+ passphrase is already maximally strong). On the other hand, if you're careful
+ to avoid shoulder-surfing and/or have a passphrase that's difficult to detect
+ via shoulder-surfing, then this may not be a problem for you.
+
+## Notes
+
+- For the technical details of the backup system, please refer to [this
+ thread](https://groups.google.com/d/topic/qubes-devel/TQr_QcXIVww/discussion).
+- If working with symlinks, note the issues described in [this
+ thread](https://groups.google.com/d/topic/qubes-users/EITd1kBHD30/discussion).
diff --git a/user/how-to-guides/how-to-copy-and-move-files.md b/user/how-to-guides/how-to-copy-and-move-files.md
index f7bc105f3..987f12d30 100644
--- a/user/how-to-guides/how-to-copy-and-move-files.md
+++ b/user/how-to-guides/how-to-copy-and-move-files.md
@@ -11,7 +11,6 @@ ref: 191
title: How to Copy and Move Files
---
-
*This page is about copying and moving files.
If you wish to simply copy and paste text, that can be done more easily using the inter-qube clipboard.
See [copying and pasting text between qubes](/doc/how-to-copy-and-paste-text/).
@@ -21,7 +20,7 @@ Qubes OS supports the secure copying and moving of files and directories (folder
For simplicity, these instructions will refer to copying/moving a single file, but they apply equally well to groups of files and directories, which are copied recursively.
- 1. Open a file manager in the qube containing the file you wish to copy (the source qube), right-click on the file you wish to copy or move, and select `Copy to Other AppVM...` or `Move to Other AppVM...`.
+ 1. Open a file manager in the qube containing the file you wish to copy (the source qube), right-click on the file you wish to copy or move, and select `Copy to Other app qube...` or `Move to Other app qube...`.
2. A dialog box will appear in dom0 asking for the name of the target qube (qube B).
Enter or select the desired destination qube name.
diff --git a/user/how-to-guides/how-to-copy-and-paste-text.md b/user/how-to-guides/how-to-copy-and-paste-text.md
index 2a4929819..791acc6ee 100644
--- a/user/how-to-guides/how-to-copy-and-paste-text.md
+++ b/user/how-to-guides/how-to-copy-and-paste-text.md
@@ -11,7 +11,6 @@ ref: 196
title: How to Copy and Paste Text
---
-
*This page is about copying and pasting plain text.
If you wish to copy more complex data, such as rich text or images, see [copying and moving files between qubes](/doc/how-to-copy-and-move-files/).
For dom0, see [copying from (and to) dom0](/doc/how-to-copy-from-dom0/).*
@@ -67,7 +66,7 @@ The Qubes clipboard [RPC policy](/doc/rpc-policy/) is configurable in:
~~~
You may wish to configure this policy in order to prevent user error.
-For example, if you are certain that you never wish to paste *into* your "vault" AppVM (and it is highly recommended that you do not), then you should edit the policy as follows:
+For example, if you are certain that you never wish to paste *into* your "vault" app qube (and it is highly recommended that you do not), then you should edit the policy as follows:
~~~
@anyvm vault deny
diff --git a/user/how-to-guides/how-to-copy-from-dom0.md b/user/how-to-guides/how-to-copy-from-dom0.md
index 182e7428c..a7d10ee5a 100644
--- a/user/how-to-guides/how-to-copy-from-dom0.md
+++ b/user/how-to-guides/how-to-copy-from-dom0.md
@@ -12,7 +12,6 @@ ref: 198
title: How to Copy from Dom0
---
-
This page covers copying files and clipboard text between [dom0](/doc/glossary/#dom0) and [domUs](/doc/glossary/#domu).
Since dom0 is special, the processes are different from [copying and pasting text between qubes](/doc/how-to-copy-and-paste-text/) and [copying and moving files between qubes](/doc/how-to-copy-and-move-files/).
@@ -69,7 +68,7 @@ For this reason, there is no simple means of copying anything into dom0, unlike
There should normally be few reasons for the user to want to copy anything from domUs to dom0, as dom0 only acts as a "thin trusted terminal", and no user applications run there.
Sometimes, new users feel the urge to copy a desktop wallpaper image into dom0, but that is not necessary.
-A safer approach is simply to display the image in [full-screen mode](/doc/full-screen-mode/) in an AppVM, then take a screenshot from dom0, which results in exactly the image needed for a wallpaper, created securely and natively in dom0.
+A safer approach is simply to display the image in [full-screen mode](/doc/full-screen-mode/) in an app qube, then take a screenshot from dom0, which results in exactly the image needed for a wallpaper, created securely and natively in dom0.
If you are determined to copy some files to dom0 anyway, you can use the following method.
(If you want to copy text, first save it into a text file.)
diff --git a/user/how-to-guides/how-to-enter-fullscreen-mode.md b/user/how-to-guides/how-to-enter-fullscreen-mode.md
index 84d832d9e..e58445386 100644
--- a/user/how-to-guides/how-to-enter-fullscreen-mode.md
+++ b/user/how-to-guides/how-to-enter-fullscreen-mode.md
@@ -11,7 +11,6 @@ ref: 205
title: How to Enter Fullscreen Mode
---
-
What is fullscreen mode?
-------------------------
diff --git a/user/how-to-guides/how-to-get-started.md b/user/how-to-guides/how-to-get-started.md
index 72d17eb9b..e2cbf90ff 100644
--- a/user/how-to-guides/how-to-get-started.md
+++ b/user/how-to-guides/how-to-get-started.md
@@ -12,176 +12,241 @@ ref: 190
title: How to Get Started
---
-After [downloading](/downloads/) and [installing](/doc/installation-guide/) Qubes OS, let's cover some basic concepts.
-
-Introduction
-------------
-
-In Qubes OS, you run all your programs in lightweight [virtual machines (VMs)](/doc/glossary/#vm) called [qubes](/doc/glossary/#qube).
-Not every app runs in its own qube.
-(That would be a big waste of resources!)
-Instead, each qube represents a [security domain](/doc/glossary/#domain) (e.g., "work," "personal," and "banking").
-By default, all qubes are based on a single, common [template](/doc/glossary/#templatevm), although you can create more templates if you wish.
-When you create a new qube, you don't copy the whole system needed for this qube to work (which would include copying all the programs).
-Instead, each qube *shares* the system with its respective template.
-A qube has read-only access to the system of the template on which it's based, so a qube cannot modify a template in any way.
-This is important, as it means that if a qube is ever compromised, the template on which it's based (and any other qubes based on that template) will still be safe.
-So, creating a large number of qubes is cheap: each one needs only as much disk space as is necessary to store its private files (e.g., the "home" folder).
-
-If you've installed Qubes OS using the default options, a few qubes have already been created for you:
-
-- work
-- personal
-- untrusted
-- vault
-
-Each qube, apart from having a distinct name, is also assigned a **label**, which is one of several predefined colors.
-The trusted window manager uses these colors in order to draw colored borders around the windows of applications running in each qube.
-This is designed to allow you to quickly and easily identify the trust level of a given window at a glance.
-Most Qubes OS users associate red with what's untrusted and dangerous (like a red light -- stop! danger!), green with what's safe and trusted, and yellow and orange with things in the middle.
-This color scheme also extends to include blue and black, which are usually interpreted as indicating progressively more trusted domains than green, with black being ultimately trusted.
-However, it's totally up to you how you'd like to interpret these colors.
-Qubes OS doesn't assume anything about these colors.
-When you make a new qube, the system doesn't do anything special to it depending on whether it's black or red, for example.
-The only difference is which color you see and the meaning you assign to that color in your mind.
-For example, you could use the colors to show that qubes belong to the same domain.
-You might use three or four qubes for work activities and give them all the same distinct color label, for instance.
-It's entirely up to you.
-
-
-
-In addition to qubes and templates, there's one special domain called [dom0](/doc/glossary/#dom0), where many system tools and the desktop manager run.
-This is where you log in to the system.
-Dom0 is more trusted than any other domain (including templates and black-labeled qubes).
-If dom0 were ever compromised, it would be "game over."
-(The entire system would effectively be compromised.)
-Due to its overarching importance, dom0 has no network connectivity and is used only for running the window and desktop managers.
-Dom0 shouldn't be used for anything else.
-In particular, [you should never run user applications in dom0](https://github.com/Qubes-Community/Contents/blob/master/docs/security/security-guidelines.md#dom0-precautions).
-(That's what your qubes are for!)
-
-GUI and command-line tools
---------------------------
-
-All aspects of Qubes OS can be controlled using command-line tools run in a dom0 terminal.
-Opening a terminal in dom0 can be done in several ways:
-
-- Go to the Application Launcher and click **Terminal Emulator**.
-- Press `Alt+F3`, type `xfce terminal` and press Enter twice.
+After [downloading](/downloads/) and [installing](/doc/installation-guide/)
+Qubes OS, it's time to dive in and get to work!
+
+## The Basics
+
+Qubes OS is an operating system built out of securely-isolated compartments
+called [qubes](/doc/glossary/#qube). For example, you might have a work qube, a
+personal qube, a banking qube, a web browsing qube, and so on. You can have as
+many qubes as you want! Most of the time, you'll be using an [app
+qube](/doc/glossary/#app-qube), which is a qube intended for running software
+programs like web browsers, email clients, and word processors. Each app qube
+is based on another type of qube called a [template](/doc/glossary/#template).
+More than one qube can be based on the same template. Importantly, a qube
+cannot modify its template in any way. This means that, if a qube is ever
+compromised, its template and any other qubes based on that template will
+remain safe. This is what makes Qubes OS so secure. Even if an attack is
+successful, the damage is limited to a single qube.
+
+Suppose you want to use your favorite web browser in several different qubes.
+You'd install the web browser in a template, then every qube based on that
+template would be able to run the web browser software (while still being
+forbidden from modifying the template and any other qubes). This way, you only
+have to install the web browser a single time, and updating the template serves
+to update all the qubes based on it. This elegant design saves time and space
+while enhancing security.
+
+There are also some "helper" qubes in your system. Each qube that connects to
+the Internet does so through a network-providing [service
+qube](/doc/glossary/#service-qube). If you need to access USB devices, another
+service qube will do that. There's also a [management
+qube](/doc/glossary/#management-qube) that automatically handles a lot of
+background housekeeping. For the most part, you won't have to worry about it,
+but it's nice to know that it's there. As with app qubes, service qubes and
+management qubes are also based on templates. Templates are usually named after
+their operating system (often a [Linux
+distribution](https://en.wikipedia.org/wiki/Linux_distribution)) and
+corresponding version number. There are many ready-to-use
+[templates](/doc/templates) to choose from, and you can download and have as
+many as you like.
+
+Last but not least, there's a very special [admin
+qube](/doc/glossary/#admin-qube) which, as the name suggests, is used to
+administer your entire system. There's only one admin qube, and it's called
+[dom0](/doc/glossary/#dom0). You can think of it as the master qube, holding
+ultimate power over everything that happens in Qubes OS. Dom0 is more trusted
+than any other qube. If dom0 were ever compromised, it would be "game over."
+The entire system would effectively be compromised. That's why everything in
+Qubes OS is specifically designed to protect dom0 and ensure that doesn't
+happen. Due to its overarching importance, dom0 has no network connectivity and
+is used only for running the [desktop
+environment](https://en.wikipedia.org/wiki/Desktop_environment) and [window
+manager](https://en.wikipedia.org/wiki/Window_manager). Dom0 should never be
+used for anything else. In particular, you should never run user applications
+in dom0. (That's what your app qubes are for!)
+
+### Color & Security
+
+You'll choose a **color** for each of your qubes out of a predefined set of
+colors. Each window on your desktop will have its frame colored according to
+the color of that qube. These colored frames help you keep track of which qube
+each window belongs to and how trustworthy it is. This is especially helpful
+when you have the same app running in multiple qubes at the same time. For
+example, if you're logged in to your bank account in one qube while doing some
+random web surfing in a different qube, you wouldn't want to accidentally enter
+your banking password in the latter! The colored frames help to avoid such
+mistakes.
+
+[](/attachment/doc/r4.0-snapshot_40.png)
+
+Most Qubes users associate red with what's untrusted and dangerous (like a red
+light: stop! danger!), green with what's safe and trusted, and yellow and
+orange with things in the middle. This color scheme also extends to include
+blue and black, which are usually interpreted as indicating progressively more
+trusted domains than green, with black being ultimately trusted. Color and
+associated meanings are ultimately up to you, however. The system itself does
+not treat the colors differently. If you create two identical qubes --- black
+and red, say --- they'll be the same until you start using them differently.
+Feel free to use the colors in whatever way is most useful to you. For example,
+you might decide to use three or four qubes for work activities and give them
+all the same color --- or all different colors. It's entirely up to you.
+
+### User Interface
+
+On operating systems like Windows and macOS, the desktop environment is
+unchangeable and part of that operating system. With Linux, any of a number of
+desktop environments are an option. Qubes OS is installed with XFCE as its
+default desktop environment, but it also supports [KDE](/doc/kde/), as well as
+the window managers [i3](/doc/i3/) and [AwesomeWM](/doc/awesomewm/).
+
+[](/attachment/doc/r4.0-taskbar.png)
+
+The bar at the top of your screen in Qubes 4.0 includes the following XFCE
+component areas:
+
+- The **Tray**, where many functional widgets live.
+- **Spaces**, an interface for [virtual
+ desktops](https://en.wikipedia.org/wiki/Virtual_desktop). Virtual desktops do
+ not have any inherent security isolation properties, but some users find them
+ useful for organizing things.
+- The **Task Bar** where buttons for open and hidden windows live.
+- The **App Menu**, where you go to open an application within a qube, to open
+ a dom0 terminal, to access administrative UI tools such as the Qube Manager,
+ or to access settings panels for your desktop environment.
+
+To learn more about how to customize your desktop environment, we recommend you
+spend some time going through [XFCE's documentation](https://docs.xfce.org/).
+
+There are several tray widgets that are unique to Qubes OS:
+
+- The **Whonix SDWDate** allows you to control the Tor connection in your
+ [`sys-whonix`](https://www.whonix.org/wiki/Qubes) qube.
+- The **Qubes Clipboard** lets you easily copy text from dom0.
+- The **Qubes Devices** widget allows you to attach and detach devices --- such
+ as USB drives and cameras --- to qubes.
+- The **Qubes Disk Space** widget shows you how much storage you're using.
+ It'll notify you if you're ever running out of space.
+- The **Qubes Domains** widget allows you to manage running qubes, turn them on
+ and off, and monitor RAM and CPU usage.
+- The **Qubes Updater** widget informs you when updates are available and helps
+ you install them.
+
+[](/attachment/doc/r4.0-widgets.png)
+
+To see all of your qubes at the same time, you can use the **Qube Manager** (go
+to the App Menu → System Tools → Qube Manager), which displays the states of
+all the qubes in your system, even the ones that aren't running.
+
+[](/attachment/doc/r4.0-qubes-manager.png)
+
+#### Command-line interface
+
+All aspects of Qubes OS can be controlled using command-line tools. Opening a
+terminal emulator in dom0 can be done in several ways:
+
+- Go to the App Menu and select **Terminal Emulator** at the top.
+- Press Alt+F3 and search for `xfce terminal`.
- Right-click on the desktop and select **Open Terminal Here**.
-Various command-line tools are described as part of this guide, and the whole reference can be found [here](/doc/tools/).
+Terminal emulators can also be run in other qubes as normal programs. Various
+command-line tools are described as part of this guide, and the whole reference
+can be found [here](/doc/tools/).
-Alternatively, you can use a suite of GUI tools, most of which are available through desktop widgets:
+## First boot
-- The **Domains Widget** allows you to manage running qubes, turn them on and off, and monitor memory usage.
-- The **Devices Widget** allows you to attach and detach devices -- such as USB drives and cameras -- to qubes.
-- The **Disk Space Widget** will notify you if you're ever running out of disk space.
-- The **Updates Widget** will inform you when template updates are available.
+When you install Qubes OS, a number of qubes are pre-configured for you:
-
+- **Templates:** `fedora-XX` (`XX` being the version number)
+- **Admin qube:** `dom0`
+- **Service qubes:** `sys-usb`, `sys-net`, `sys-firewall`, and `sys-whonix`
+- **App qubes** configured to prioritize security by compartmentalizing tasks
+ and types of data: `work`, `personal`, `untrusted`, and `vault`. (There is
+ nothing special about these qubes. If you were to create a black qube and
+ name it `vault`, it would be the same as the pre-configured `vault` qube.
+ They're just suggestions to get you started. )
-For an overview of the entire system, you can use the **Qube Manager** (go to the Application Launcher → System Tools → Qube Manager), which displays the states of all the qubes in your system.
+A variety of open-source applications such as file managers, command-line
+terminals, printer managers, text editors, and "applets" used to configure
+different things like audio or parts of the user interface are also installed
+by default—most within the templates. Most are bundled with each template.
-Starting apps
--------------
+### Adding, removing, and listing qubes
-Apps can be started either by using the shortcuts in the Application Launcher menu or by using the command line (i.e., a terminal running in dom0).
+You can easily create a new qube with the **Create Qubes VM** option in the App
+Menu. If you need to add or remove qubes, simply use the Qube Manager's **Add**
+and **Remove** buttons. You can also add, remove, and list qubes from the
+command line using the following tools:
-You can start apps directly from the Application Launcher or the Application Finder (`Alt+F3`).
-Each qube has its own menu directory under the scheme `Domain: `.
-After navigating into one of these directories, simply click on the application you'd like to start:
+- `qvm-create`
+- `qvm-remove`
+- `qvm-ls`
-
+### How many qubes do I need?
-
+That's a great question, but there's no one-size-fits-all answer. It depends on
+the structure of your digital life, and this is at least a little different for
+everyone. If you plan on using your system for work, then it also depends on
+what kind of job you do.
-By default, each qube's menu contains only a few shortcuts.
-If you'd like to add more, enter the qube's **Qube Settings** and add them on the Applications tab.
+It's a good idea to start out with the qubes created automatically by the
+installer: `work`, `personal`, `untrusted`, and `vault`. If and when you start
+to feel that some activity just doesn't fit into any of your existing qubes, or
+you want to partition some part of your life, you can easily create a new qube
+for it. You'll also be able to easily [copy any
+files](/doc/how-to-copy-and-move-files) you need to the newly-created qube.
-To start apps from the terminal in dom0, type:
+Still not sure? You might find it helpful to read [this
+article](https://blog.invisiblethings.org/2011/03/13/partitioning-my-digital-life-into.html),
+which describes how one of the Qubes OS architects partitioned her digital life
+into security domains.
-```shell_session
-$ qvm-run [arguments]
-```
+## Secure Habits
-e.g.:
+It is *very important* to [keep Qubes updated](/doc/how-to-update/) to ensure
+you have the latest security updates. Frequently updating is one of the best
+ways to remain secure against new threats.
-```shell_session
-$ qvm-run untrusted firefox
-```
+It's also *very important* to make regular backups so that you don't lose your
+data unexpectedly. The [Qubes backup
+system](/doc/how-to-back-up-restore-and-migrate/) allows you to do this
+securely and easily.
-This command will start the qube if it is not already running.
+## How-to Guides
-Adding, removing, and listing qubes
------------------------------------
+Here are some basic tasks you're likely to want to perform often that are
+unique to Qubes as a multi-environment system. A full list is available in the
+[How-to Guides](/doc/#how-to-guides) section in the docs.
-You can easily create a new qube with the **Create Qubes VM** option in the Application Launcher.
-If you need to add or remove qubes, simply use the Qube Manager's **Add** and **Remove** buttons.
+- [How to Update](/doc/how-to-update/)
+- [How to Back Up, Restore, and Migrate](/doc/how-to-back-up-restore-and-migrate/)
+- [How to Copy and Paste Text](/doc/how-to-copy-and-paste-text/)
+- [How to Copy and Move Files](/doc/how-to-copy-and-move-files/)
+- [How to Copy from Dom0](/doc/how-to-copy-from-dom0/)
+- [How to Install Software](/doc/how-to-install-software/)
+- [How to Use Devices (block storage, USB, and PCI devices)](/doc/how-to-use-devices/)
-You can also add, remove, and list qubes from the command line using the following tools:
+If you encounter any problems, please visit the [Help, Support, Mailing Lists,
+and Forum](/support/) page.
-- `qvm-create`
-- `qvm-remove`
-- `qvm-ls`
+## Compatible Hardware
+
+Make sure your hardware satisfies the [system
+requirements](/doc/system-requirements/), as Qubes OS cannot run on every type
+of computer. You may also want to check out [Qubes-certified
+Hardware](/doc/certified-hardware/) and take a look at the [Hardware
+Compatibility List (HCL)](/hcl/).
+
+## Downloads
+
+[Download an ISO](/downloads/), learn how to [verify its
+authenticity](/doc/verifying-signatures/), and follow our [guide to install
+Qubes OS](/doc/installation-guide/). Looking for the [source
+code](/doc/source-code/)? You'll find it [on
+GitHub](https://github.com/QubesOS).
+
+## Documentation
-How many qubes do I need?
--------------------------
-
-That's a great question, but there's no one-size-fits-all answer.
-It depends on the structure of your digital life, and this is at least a little different for everyone.
-If you plan on using your system for work, then it also depends on what kind of job you do.
-
-It's a good idea to start out with the three qubes created automatically by the installer: work, personal, and untrusted.
-If and when you start to feel that some activity just doesn't fit into any of your existing qubes, or you want to partition some part of your life, you can easily create a new qube for it.
-You'll also be able to easily [copy](/doc/how-to-copy-and-move-files/) any files you need to the newly created qube.
-
-Still not sure?
-You might find it helpful to read [this article](https://blog.invisiblethings.org/2011/03/13/partitioning-my-digital-life-into.html), which describes how one of the Qubes OS architects partitions her digital life into security domains.
-
-Important tasks
----------------
-
-It's very important to [keep Qubes updated](/doc/updating-qubes-os/) to ensure you have the latest security updates.
-Frequently updating is one of the best ways to remain secure against new threats.
-
-It's also very important to make regular backups so that you don't lose your data unexpectedly.
-The [Qubes backup system](/doc/backup-restore/) allows you to do this securely and easily.
-
-Here are some other tasks you're likely to want to perform.
-(A full list is available in the [How-to Guides](/doc/#how-to-guides) section of the documentation.)
-
-- [Copying and Pasting Text Between Domains](/doc/how-to-copy-and-paste-text/)
-- [Copying and Moving Files Between Domains](/doc/how-to-copy-and-move-files/)
-- [Copying from (and to) dom0](/doc/how-to-copy-from-dom0/)
-- [Fullscreen Mode](/doc/full-screen-mode/)
-- [DisposableVMs](/doc/disposablevm/)
-- [Device Handling](/doc/how-to-use-devices/) (block, USB, and PCI devices)
-
-If you encounter any problems, please visit the [Help, Support, and Mailing Lists](/support/) page.
-
-
-
-
-
-
Compatible Hardware
-
Make sure your hardware is compatible, as Qubes OS cannot run on every type of computer. Also, check out Qubes-certified Laptops.
Download an ISO, learn how to verify its authenticity and integrity, and follow our guides to install Qubes OS. Looking for the source code? You'll find it on GitHub.
+Peruse our extensive library of [documentation](/doc/) for users and developers
+of Qubes OS. You can even [help us improve it](/doc/doc-guidelines/)!
diff --git a/user/how-to-guides/how-to-install-software.md b/user/how-to-guides/how-to-install-software.md
index b62c6a468..432905919 100644
--- a/user/how-to-guides/how-to-install-software.md
+++ b/user/how-to-guides/how-to-install-software.md
@@ -12,42 +12,86 @@ ref: 189
title: How to Install Software
---
-This page explains how to install software in TemplateVMs and StandaloneVMs.
-Advanced users may also be interested in learning [how to install software in dom0](/doc/how-to-install-software-in-dom0).
+When you wish to install software in Qubes OS, you should generally install it
+in a [template](/doc/glossary/#template).
-## Installing software in TemplateVMs
+Advanced users may also be interested in learning how to install software in
+[standalones](/doc/standalones-and-hvms/) and
+[dom0](/doc/how-to-install-software-in-dom0).
-To permanently install new software in a TemplateVM:
+## Instructions
-1. Start the TemplateVM.
-2. Start either a terminal (e.g. `gnome-terminal`) or a dedicated software management application, such as `gpk-application`.
-3. Install software as normally instructed inside that operating system (e.g. `sudo dnf install ` on Fedora, `sudo apt install ` on Debian).
-4. Shut down the TemplateVM.
-5. Restart all [TemplateBasedVMs](/doc/glossary/#templatebasedvm) based on the TemplateVM so the changes can take effect.
-6. (Optional) In the relevant [TemplateBasedVMs](/doc/glossary/#templatebasedvm)' **Qube Settings**, go to the **Applications** tab, select the new application(s) from the list, and press OK.
- These new shortcuts will appear in the Applications Menu.
- (If you encounter problems, see [here](/doc/app-menu-shortcut-troubleshooting/) for troubleshooting.)
+To permanently install new software in a template:
-](/attachment/wiki/ManagingAppVmShortcuts/r4.1-dom0-appmenu-select.png)
+1. Start the template.
-## Updating software in TemplateVMs
+2. Start either a terminal (e.g. `gnome-terminal`) or a dedicated software
+ management application, such as `gpk-application`.
-See [Updating Qubes OS](/doc/updating-qubes-os/).
+3. Install software as normally instructed inside that operating system, e.g.:
+ - Fedora: `sudo dnf install `
+ - Debian: `sudo apt install `
-## Testing repositories
+4. **Shut down the template. (Do not skip this step.)**
-If you wish to install updates that are still in [testing](/doc/testing), you must enable the appropriate testing repositories.
+5. **Restart all qubes based on the template. (Do not skip this step.)**
-### Fedora
+6. (Recommended) In the relevant qubes' **Qube Settings**, go to the
+ **Applications** tab, select the new application(s) from the list, and press
+ OK. These new shortcuts will appear in the Applications Menu. (If you
+ encounter problems, see [here](/doc/app-menu-shortcut-troubleshooting/) for
+ troubleshooting.)
+
+](/attachment/doc/r4.1-dom0-appmenu-select.png)
+
+## Troubleshooting
+
+If things are still not working as expected:
+
+- Review the [instructions](#instructions) very carefully, making sure you
+ follow each step.
+- Make sure you **shut down the template after installing your software**.
+- Make sure you **restart your app qube *after* shutting down your template**.
+- If your software requires special files or directories to be persistent, and
+ you're an advanced user, see [Standalones and
+ HVMs](/doc/standalones-and-hvms/) and [How to Make Any File Persistent
+ (bind-dirs)](/doc/bind-dirs/).
+- [Ask for help.](/support/)
+
+## How to update software
+
+Please see [How to Update](/doc/how-to-update/).
+
+## Why don't templates have network access?
+
+In order to protect you from performing risky activites in templates, they do
+not have normal network access. Instead, templates use an [updates
+proxy](#updates-proxy) that allows you to install and update software without
+giving the template direct network access.
+
+## Advanced
+
+The following sections cover advanced topics pertaining to installing and
+updating software in domUs.
+
+### Testing repositories
+
+If you wish to install updates that are still in [testing](/doc/testing), you
+must enable the appropriate testing repositories.
+
+#### Fedora
There are three Qubes VM testing repositories (where `*` denotes the Release):
-- `qubes-vm-*-current-testing` -- testing packages that will eventually land in the stable (`current`) repository
-- `qubes-vm-*-security-testing` -- a subset of `qubes-vm-*-current-testing` that contains packages that qualify as security fixes
-- `qubes-vm-*-unstable` -- packages that are not intended to land in the stable (`qubes-vm-*-current`) repository; mostly experimental debugging packages
+- `qubes-vm-*-current-testing` -- testing packages that will eventually land in
+ the stable (`current`) repository
+- `qubes-vm-*-security-testing` -- a subset of `qubes-vm-*-current-testing`
+ that contains packages that qualify as security fixes
+- `qubes-vm-*-unstable` -- packages that are not intended to land in the stable
+ (`qubes-vm-*-current`) repository; mostly experimental debugging packages
-To temporarily enable any of these repos, use the `--enablerepo=` option.
-Example commands:
+To temporarily enable any of these repos, use the `--enablerepo=`
+option. Example commands:
~~~
sudo dnf upgrade --enablerepo=qubes-vm-*-current-testing
@@ -55,37 +99,37 @@ sudo dnf upgrade --enablerepo=qubes-vm-*-security-testing
sudo dnf upgrade --enablerepo=qubes-vm-*-unstable
~~~
-To enable or disable any of these repos permanently, change the corresponding `enabled` value to `1` in `/etc/yum.repos.d/qubes-*.repo`.
+To enable or disable any of these repos permanently, change the corresponding
+`enabled` value to `1` in `/etc/yum.repos.d/qubes-*.repo`.
-### Debian
+#### Debian
-Debian also has three Qubes VM testing repositories (where `*` denotes the Release):
+Debian also has three Qubes VM testing repositories (where `*` denotes the
+Release):
-- `*-testing` -- testing packages that will eventually land in the stable (`current`) repository
-- `*-securitytesting` -- a subset of `*-testing` that contains packages that qualify as security fixes
-- `*-unstable` -- packages that are not intended to land in the stable repository; mostly experimental debugging packages
+- `*-testing` -- testing packages that will eventually land in the stable
+ (`current`) repository
+- `*-securitytesting` -- a subset of `*-testing` that contains packages that
+ qualify as security fixes
+- `*-unstable` -- packages that are not intended to land in the stable
+ repository; mostly experimental debugging packages
-To enable or disable any of these repos permanently, uncomment the corresponding `deb` line in `/etc/apt/sources.list.d/qubes-r*.list`.
+To enable or disable any of these repos permanently, uncomment the
+corresponding `deb` line in `/etc/apt/sources.list.d/qubes-r*.list`.
-## Contributed package repository
+### Standalones
-Please see [installing contributed packages](/doc/installing-contributed-packages/).
+The process for installing and updating software in
+[standalones](/doc/glossary/#standalone) is the same as described above for
+templates, except no qubes are based on standalones, so there are no other
+qubes to restart.
-## StandaloneVMs
+### RPMFusion for Fedora templates
-When you create a [StandaloneVM](/doc/standalone-and-hvm/) from a TemplateVM, the StandaloneVM is a complete clone of the TemplateVM, including the entire filesystem.
-After the moment of creation, the StandaloneVM is completely independent from the TemplateVM.
-Therefore, it will not be updated when the TemplateVM is updated.
-Rather, it must be updated individually.
-The process for installing and updating software in StandaloneVMs is the same as described above for TemplateVMs.
-
-## Advanced
-
-The following sections cover advanced topics pertaining to installing and updating software in domUs.
-
-### RPMFusion for Fedora TemplateVMs
-
-If you would like to enable the [RPM Fusion](https://rpmfusion.org/) repositories, open a Terminal of the TemplateVM and type the following commands, depending on which RPM Fusion repositories you wish to enable (see [RPM Fusion](https://rpmfusion.org/) for details):
+If you would like to enable the [RPM Fusion](https://rpmfusion.org/)
+repositories, open a Terminal of the template and type the following commands,
+depending on which RPM Fusion repositories you wish to enable (see [RPM
+Fusion](https://rpmfusion.org/) for details):
~~~
sudo dnf config-manager --set-enabled rpmfusion-free
@@ -95,94 +139,129 @@ sudo dnf config-manager --set-enabled rpmfusion-nonfree-updates
sudo dnf upgrade --refresh
~~~
-This will permanently enable the RPM Fusion repos.
-If you install software from here, it's important to keep these repos enabled so that you can receiving future updates.
-If you only enable these repos temporarily to install a package the Qubes update mechanism may persistently notify you that updates are available, since it cannot download them.
+This will permanently enable the RPM Fusion repos. If you install software from
+here, it's important to keep these repos enabled so that you can receiving
+future updates. If you only enable these repos temporarily to install a package
+the Qubes update mechanism may persistently notify you that updates are
+available, since it cannot download them.
-### Reverting changes to a TemplateVM
+### Reverting changes to a template
-Perhaps you've just updated your TemplateVM, and the update broke your template.
-Or perhaps you've made a terrible mistake, like accidentally confirming the installation of an unsigned package that could be malicious.
-If you want to undo changes to a TemplateVM, there are three basic methods:
+Perhaps you've just updated your template, and the update broke your template.
+Or perhaps you've made a terrible mistake, like accidentally confirming the
+installation of an unsigned package that could be malicious. If you want to
+undo changes to a template, there are three basic methods:
1. **Root revert.**
- This is appropriate for misconfigurations, but not for security concerns.
- It will preserve your customizations.
+ This is appropriate for misconfigurations, but not for security concerns. It
+ will preserve your customizations.
2. **Reinstall the template.**
- This is appropriate for both misconfigurations and security concerns, but you will lose all customizations.
+ This is appropriate for both misconfigurations and security concerns, but
+ you will lose all customizations.
3. **Full revert.**
- This is appropriate for both misconfigurations and security concerns, and it can preserve your customizations.
- However, it is a bit more complex.
+ This is appropriate for both misconfigurations and security concerns, and it
+ can preserve your customizations. However, it is a bit more complex.
#### Root revert
-**Important:** This command will roll back any changes made *during the last time the TemplateVM was run, but **not** before.*
-This means that if you have already restarted the TemplateVM, using this command is unlikely to help, and you'll likely want to reinstall it from the repository instead.
-On the other hand, if the template is already broken or compromised, it won't hurt to try reverting first.
-Just make sure to **back up** all of your data and changes first!
+**Important:** This command will roll back any changes made *during the last
+time the template was run, but **not** before.* This means that if you have
+already restarted the template, using this command is unlikely to help, and
+you'll likely want to reinstall it from the repository instead. On the other
+hand, if the template is already broken or compromised, it won't hurt to try
+reverting first. Just make sure to **back up** all of your data and changes
+first!
-1. Shut down ``.
- If you've already just shut it down, do **not** start it again (see above).
+1. Shut down ``. If you've already just shut it down, do **not**
+ start it again (see above).
2. In a dom0 terminal:
-```
- qvm-volume revert :root
-```
+ ```
+ qvm-volume revert :root
+ ```
#### Reinstall the template
-Please see [How to Reinstall a TemplateVM](/doc/reinstall-template/).
+Please see [How to Reinstall a template](/doc/reinstall-template/).
#### Full revert
This is like the simple revert, except:
-- You must also revert the private volume with `qvm-volume revert :private`.
- This requires you to have an old revision of the private volume, which does not exist with the current default config.
- However, if you don't have anything important in the private volume (likely for a TemplateVM), then you can work around this by just resetting the private volume with `qvm-volume import --no-resize :private /dev/null`.
+- You must also revert the private volume with `qvm-volume revert
+ :private`. This requires you to have an old revision of the private
+ volume, which does not exist with the current default config. However, if you
+ don't have anything important in the private volume (likely for a template),
+ then you can work around this by just resetting the private volume with
+ `qvm-volume import --no-resize :private /dev/null`.
-- The saved revision of the volumes must be uncompromised.
- With the default `revisions_to_keep=1` for the root volume, you must **not** have started the template since the compromising action.
+- The saved revision of the volumes must be uncompromised. With the default
+ `revisions_to_keep=1` for the root volume, you must **not** have started the
+ template since the compromising action.
### Temporarily allowing networking for software installation
-Some third-party applications cannot be installed using the standard repositories and need to be manually downloaded and installed.
-When the installation requires internet connection to access third-party repositories, it will naturally fail when run in a Template VM because the default firewall rules for templates only allow connections from package managers.
-So it is necessary to modify firewall rules to allow less restrictive internet access for the time of the installation, if one really wants to install those applications into a template.
-As soon as software installation is completed, firewall rules should be returned back to the default state.
-The user should decide by themselves whether such third-party applications should be equally trusted as the ones that come from the standard Fedora signed repositories and whether their installation will not compromise the default Template VM, and potentially consider installing them into a separate template or a standalone VM (in which case the problem of limited networking access doesn't apply by default), as described above.
+Some third-party applications cannot be installed using the standard
+repositories and need to be manually downloaded and installed. When the
+installation requires internet connection to access third-party repositories,
+it will naturally fail when run in a template because the default firewall
+rules for templates only allow connections from package managers. So it is
+necessary to modify firewall rules to allow less restrictive internet access
+for the time of the installation, if one really wants to install those
+applications into a template. As soon as software installation is completed,
+firewall rules should be returned back to the default state. The user should
+decide by themselves whether such third-party applications should be equally
+trusted as the ones that come from the standard Fedora signed repositories and
+whether their installation will not compromise the default template, and
+potentially consider installing them into a separate template or a standalone
+VM (in which case the problem of limited networking access doesn't apply by
+default), as described above.
### Updates proxy
-Updates proxy is a service which allows access only from package managers.
-This is meant to mitigate user errors (like using browser in the template VM), rather than some real isolation.
-It is done with http proxy (tinyproxy) instead of simple firewall rules because it is hard to list all the repository mirrors (and keep that list up to date).
-The proxy is used only to filter the traffic, not to cache anything.
-
-The proxy is running in selected VMs (by default all the NetVMs (1)) and intercepts traffic directed to 10.137.255.254:8082.
-Thanks to such configuration all the VMs can use the same proxy address, and if there is a proxy on network path, it will handle the traffic (of course when firewall rules allow that).
-If the VM is configured to have access to the updates proxy (2), the startup scripts will automatically configure dnf to really use the proxy (3).
-Also access to updates proxy is independent of any other firewall settings (VM will have access to updates proxy, even if policy is set to block all the traffic).
-
-There are two services (`qvm-service`, [service framework](/doc/qubes-service/)):
-
-1. `qubes-updates-proxy` (and its deprecated name: `qubes-yum-proxy`) - a service providing a proxy for templates - by default enabled in NetVMs (especially: sys-net)
-2. `updates-proxy-setup` (and its deprecated name: `yum-proxy-setup`) - use a proxy provided by another VM (instead of downloading updates directly), enabled by default in all templates
-
-Both the old and new names work.
-The defaults listed above are applied if the service is not explicitly listed in the services tab.
+Updates proxy is a service which allows access only from package managers. This
+is meant to mitigate user errors (like using browser in the template), rather
+than some real isolation. It is done with http proxy (tinyproxy) instead of
+simple firewall rules because it is hard to list all the repository mirrors
+(and keep that list up to date). The proxy is used only to filter the traffic,
+not to cache anything.
+
+The proxy is running in selected VMs (by default all the NetVMs (1)) and
+intercepts traffic directed to 10.137.255.254:8082. Thanks to such
+configuration all the VMs can use the same proxy address, and if there is a
+proxy on network path, it will handle the traffic (of course when firewall
+rules allow that). If the VM is configured to have access to the updates proxy
+(2), the startup scripts will automatically configure dnf to really use the
+proxy (3). Also access to updates proxy is independent of any other firewall
+settings (VM will have access to updates proxy, even if policy is set to block
+all the traffic).
+
+There are two services (`qvm-service`, [service
+framework](/doc/qubes-service/)):
+
+1. `qubes-updates-proxy` (and its deprecated name: `qubes-yum-proxy`) - a
+ service providing a proxy for templates - by default enabled in NetVMs
+ (especially: sys-net)
+2. `updates-proxy-setup` (and its deprecated name: `yum-proxy-setup`) - use a
+ proxy provided by another VM (instead of downloading updates directly),
+ enabled by default in all templates
+
+Both the old and new names work. The defaults listed above are applied if the
+service is not explicitly listed in the services tab.
#### Technical details
-The updates proxy uses RPC/qrexec.
-The proxy is configured in qrexec policy in dom0: `/etc/qubes-rpc/policy/qubes.UpdatesProxy`.
-By default this is set to sys-net and/or sys-whonix, depending on firstboot choices.
-This new design allows for templates to be updated even when they are not connected to any NetVM.
+The updates proxy uses RPC/qrexec. The proxy is configured in qrexec policy in
+dom0: `/etc/qubes-rpc/policy/qubes.UpdatesProxy`. By default this is set to
+sys-net and/or sys-whonix, depending on firstboot choices. This new design
+allows for templates to be updated even when they are not connected to any
+NetVM.
-Example policy file in R4.0 (with Whonix installed, but not set as default UpdateVM for all templates):
+Example policy file in R4.0 (with Whonix installed, but not set as default
+UpdateVM for all templates):
```shell_session
# any VM with tag `whonix-updatevm` should use `sys-whonix`; this tag is added to `whonix-gw` and `whonix-ws` during installation and is preserved during template clone
@@ -190,108 +269,125 @@ Example policy file in R4.0 (with Whonix installed, but not set as default Updat
@tag:whonix-updatevm @anyvm deny
# other templates use sys-net
-@type:TemplateVM @default allow,target=sys-net
+@type:template @default allow,target=sys-net
@anyvm @anyvm deny
```
### Installing Snap Packages
-Snap packages do not use the normal update channels for Debian and Fedora (apt and dnf) and are often installed as the user rather than as root. To support these in an AppVM you need to take the following steps:
-
-1. In the **TemplateVM** you must install `snapd` and `qubes-snapd-helper`. Open a terminal in the TemplateVM and run:
-
-```shell_session
-[user@fedora-30-snap-demo ~]$ sudo dnf install snapd qubes-snapd-helper
-Last metadata expiration check: 0:55:39 ago on Thu Nov 14 09:26:47 2019.
-Dependencies resolved.
-========================================================================================================
- Package Arch Version Repository Size
-========================================================================================================
-Installing:
- snapd x86_64 2.42.1-1.fc30 updates 17 M
- qubes-snapd-helper noarch 1.0.1-1.fc30 qubes-vm-r4.0-current 10 k
-Installing dependencies:
-[...]
-
-Transaction Summary
-========================================================================================================
-Install 20 Packages
-
-Total download size: 37 M
-Installed size: 121 M
-Is this ok [y/N]: y
-
-Downloading Packages:
-[..]
-Failed to resolve booleanif statement at /var/lib/selinux/targeted/tmp/modules/200/snappy/cil:1174
-/usr/sbin/semodule: Failed!
-[...]
-Last metadata expiration check: 0:57:08 ago on Thu Nov 14 09:26:47 2019.
-Notifying dom0 about installed applications
-
-Installed:
- snapd-2.42.1-1.fc30.x86_64 qubes-snapd-helper-1.0.1-1.fc30.noarch
-[...]
-Complete!
-```
-
-You may see the following message:
-
-```
-Failed to resolve booleanif statement at /var/lib/selinux/targeted/tmp/modules/200/snappy/cil:1174
-/usr/sbin/semodule: Failed!
-```
-
-This is expected and you can safely continue.
-
-Shutdown the TemplateVM:
-
-```shell_session
-[user@fedora-30-snap-demo ~]$ sudo shutdown -h now
-```
-
-2. Now open the **AppVM** in which you would like to install the Snap application and run a terminal:
-
-```shell_session
-[user@snap-demo-AppVM ~]$ snap install
-```
-
-When the install is complete you can close the terminal window.
-
-3. Refresh the Applications list for the AppVM.
-In the Qubes Menu for the **AppVM*** launch the Qube Settings.
-Then go to the Applications tab and click "Refresh Applications"
-
-The refresh will take a few minutes; after it's complete the Snap app will appear in the AppVM's list of available applications. At this point the snap will be persistent within the AppVM and will receive updates when the AppVM is running.
+Snap packages do not use the normal update channels for Debian and Fedora (apt
+and dnf) and are often installed as the user rather than as root. To support
+these in an app qube you need to take the following steps:
+
+1. In the **template** you must install `snapd` and `qubes-snapd-helper`. Open
+ a terminal in the template and run:
+
+ ```shell_session
+ [user@fedora-30-snap-demo ~]$ sudo dnf install snapd qubes-snapd-helper
+ Last metadata expiration check: 0:55:39 ago on Thu Nov 14 09:26:47 2019.
+ Dependencies resolved.
+ ========================================================================================================
+ Package Arch Version Repository Size
+ ========================================================================================================
+ Installing:
+ snapd x86_64 2.42.1-1.fc30 updates 17 M
+ qubes-snapd-helper noarch 1.0.1-1.fc30 qubes-vm-r4.0-current 10 k
+ Installing dependencies:
+ [...]
+
+ Transaction Summary
+ ========================================================================================================
+ Install 20 Packages
+
+ Total download size: 37 M
+ Installed size: 121 M
+ Is this ok [y/N]: y
+
+ Downloading Packages:
+ [..]
+ Failed to resolve booleanif statement at /var/lib/selinux/targeted/tmp/modules/200/snappy/cil:1174
+ /usr/sbin/semodule: Failed!
+ [...]
+ Last metadata expiration check: 0:57:08 ago on Thu Nov 14 09:26:47 2019.
+ Notifying dom0 about installed applications
+
+ Installed:
+ snapd-2.42.1-1.fc30.x86_64 qubes-snapd-helper-1.0.1-1.fc30.noarch
+ [...]
+ Complete!
+ ```
+
+ You may see the following message:
+
+ ```
+ Failed to resolve booleanif statement at /var/lib/selinux/targeted/tmp/modules/200/snappy/cil:1174
+ /usr/sbin/semodule: Failed!
+ ```
+
+ This is expected and you can safely continue.
+
+ Shutdown the template:
+
+ ```shell_session
+ [user@fedora-30-snap-demo ~]$ sudo shutdown -h now
+ ```
+
+2. Now open the **app qube** in which you would like to install the Snap
+ application and run a terminal:
+
+ ```shell_session
+ [user@snap-demo-app qube ~]$ snap install
+ ```
+
+ When the install is complete you can close the terminal window.
+
+3. Refresh the Applications list for the app qube. In the Qubes Menu for the
+ **app qube*** launch the Qube Settings. Then go to the Applications tab and
+ click "Refresh Applications"
+
+ The refresh will take a few minutes; after it's complete the Snap app will
+ appear in the app qube's list of available applications. At this point the
+ snap will be persistent within the app qube and will receive updates when
+ the app qube is running.
### Autostarting Installed Applications
-If you want a desktop app to start automatically every time a qube starts you can create a link to it in the `~/.config/autostart` directory of the **AppVM**. This might be useful for Qubes that you set to automatically start on boot or for Qubes that have a set of apps you typically use all day, such as a chat app.
+If you want a desktop app to start automatically every time a qube starts you
+can create a link to it in the `~/.config/autostart` directory of the **app
+qube**. This might be useful for Qubes that you set to automatically start on
+boot or for Qubes that have a set of apps you typically use all day, such as a
+chat app.
-1. Open a terminal in the **AppVM** where you would like the app to launch.
-2. List the names of the available desktop shortcuts by running the command `ls /usr/share/applications` and find the exact name of the shortcut to the app you want to autostart:
+1. Open a terminal in the **app qube** where you would like the app to launch.
-```shell_session
-[user@example-AppVM ~]$ ls /usr/share/applications/
-bluetooth-sendto.desktop
-eog.desktop
-firefox.desktop
-...
-xterm.desktop
-yelp.desktop
-```
+2. List the names of the available desktop shortcuts by running the command `ls
+ /usr/share/applications` and find the exact name of the shortcut to the app
+ you want to autostart:
-3. Create the autostart directory:
+ ```shell_session
+ [user@example-app qube ~]$ ls /usr/share/applications/
+ bluetooth-sendto.desktop
+ eog.desktop
+ firefox.desktop
+ ...
+ xterm.desktop
+ yelp.desktop
+ ```
-```
-[user@example-AppVM ~]$ mkdir -p ~/.config/autostart
-```
+3. Create the autostart directory:
-4. Make a link to the desktop app file you'd like to start in the autostart directory. For example, the command below will link the Thunderbird app into the autostart directory:
+ ```
+ [user@example-app qube ~]$ mkdir -p ~/.config/autostart
+ ```
-```
-[user@example-AppVM ~]$ ln -s /usr/share/applications/mozilla-thunderbird.desktop ~/.config/autostart/mozilla-thunderbird.desktop
-```
+4. Make a link to the desktop app file you'd like to start in the autostart
+ directory. For example, the command below will link the Thunderbird app into
+ the autostart directory:
-Note that the app will autostart only when the AppVM starts. If you would like the AppVM to autostart, select the "Start qube automatically on boot" checkbox in the AppVM's Qube Settings.
+ ```
+ [user@example-app qube ~]$ ln -s /usr/share/applications/mozilla-thunderbird.desktop ~/.config/autostart/mozilla-thunderbird.desktop
+ ```
+Note that the app will autostart only when the app qube starts. If you would
+like the app qube to autostart, select the "Start qube automatically on boot"
+checkbox in the app qube's Qube Settings.
diff --git a/user/how-to-guides/how-to-update.md b/user/how-to-guides/how-to-update.md
index 2d84e8053..327b782da 100644
--- a/user/how-to-guides/how-to-update.md
+++ b/user/how-to-guides/how-to-update.md
@@ -3,72 +3,109 @@ lang: en
layout: doc
permalink: /doc/how-to-update/
redirect_from:
- - /doc/updating-qubes-os/
+- /doc/updating-qubes-os/
ref: 200
title: How to Update
---
-*This page is about updating your system while staying on the same [supported version of Qubes OS](/doc/supported-versions/#qubes-os).
-If you're instead looking to upgrade from your current version of Qubes OS to a newer version, see the [Upgrade Guides](/doc/upgrade/).*
-
-
-
- Warning: Updating with direct commands such as qubes-dom0-update, dnf update, and apt update is not recommended, since these bypass built-in Qubes OS update security measures.
- Instead, we strongly recommend using the Qubes Update tool or its command-line equivalents, as described below.
- (By contrast, installing packages using direct package manager commands is fine.)
-
+*This page is about updating your system while staying on the same [supported
+version of Qubes OS](/doc/supported-versions/#qubes-os). If you're instead
+looking to upgrade from your current version of Qubes OS to a newer version,
+see the [Upgrade Guides](/doc/upgrade/).*
## Security updates
-Security updates are an extremely important part of keeping your Qubes installation secure.
-When there is an important security issue, we will issue a [Qubes Security Bulletin (QSB)](/security/bulletins/) via the [Qubes Security Pack (`qubes-secpack`)](/security/pack/).
-It is very important to read each new QSB and follow any user instructions it contains.
-Most of the time, simply [updating your system normally](#routine-updates) will be sufficient to obtain security updates.
-However, in some cases, special action may be required on your part, which will be explained in the QSB.
+Security updates are an extremely important part of keeping your Qubes
+installation secure. When there is an important security issue, we will issue a
+[Qubes Security Bulletin (QSB)](/security/qsb/) via the [Qubes Security
+Pack (`qubes-secpack`)](/security/pack/). It is very important to read each new
+QSB and follow any user instructions it contains. Most of the time, simply
+[updating your system normally](#routine-updates) will be sufficient to obtain
+security updates. However, in some cases, special action may be required on
+your part, which will be explained in the QSB.
## Routine updates
-It is important to keep your Qubes OS system up-to-date to ensure you have the latest [security updates](#security-updates), as well as the latest non-security enhancements and bug fixes.
+It is important to keep your Qubes OS system up-to-date to ensure you have the
+latest [security updates](#security-updates), as well as the latest
+non-security enhancements and bug fixes.
Fully updating your Qubes OS system means updating:
-- [Dom0](/doc/how-to-install-software-in-dom0/)
-- [TemplateVMs](/doc/how-to-install-software/#updating-software-in-templatevms)
-- [StandaloneVMs](/doc/how-to-install-software/#standalonevms) (if you have any)
+- [dom0](/doc/glossary/#dom0)
+- [templates](/doc/glossary/#template)
+- [standalones](/doc/glossary/#standalone) (if you have any)
You can accomplish this using the **Qubes Update** tool.
-[](/attachment/wiki/QubesScreenshots/r4.0-software-update.png)
-
-By default, the Qubes Update tool will appear as an icon in the Notification Area when updates are available.
-
-[](/attachment/wiki/QubesScreenshots/r4.0-qube-updates-available.png)
+[](/attachment/doc/r4.0-software-update.png)
-However, you can also start the tool manually by selecting it in the Applications Menu under "System Tools."
-Even if no updates have been detected, you can use this tool to check for updates manually at any time by selecting "Enable updates for qubes without known available updates," then selecting all desired items from the list and clicking "Next."
+By default, the Qubes Update tool will appear as an icon in the Notification
+Area when updates are available.
-
-
-## Upgrading to stay on a supported release
-
-The above covers updating *within* a given operating system release.
-Eventually, however, most operating system releases will reach [end-of-life (EOL)](https://fedoraproject.org/wiki/End_of_life), after which point they will no longer be supported.
-This applies to [Qubes OS itself](/doc/supported-versions/#qubes-os) as well as operating systems used for TemplateVMs and StandaloneVMs, such as [Fedora](/doc/templates/fedora/) and [Debian](/doc/templates/debian/).
-It is very important to use only supported releases, since generally only supported releases receive security updates.
-This means that you must periodically upgrade to a newer release before your current release reaches EOL.
+[](/attachment/doc/r4.0-qube-updates-available.png)
-In the case of Qubes OS itself, we will always [announce](/news/categories/#releases) when a given Qubes OS release is approaching and has reached EOL, and we will provide [instructions for upgrading to the next stable supported Qubes OS release](/doc/upgrade/).
-Again, you can always see the current support status for all Qubes OS releases [here](/doc/supported-versions/#qubes-os).
+However, you can also start the tool manually by selecting it in the
+Applications Menu under "System Tools." Even if no updates have been detected,
+you can use this tool to check for updates manually at any time by selecting
+"Enable updates for qubes without known available updates," then selecting all
+desired items from the list and clicking "Next."
-Periodic upgrades are also important for TemplateVMs and StandaloneVMs.
-For example, you might be using a [Fedora TemplateVM](/doc/templates/fedora/).
-The [Fedora Project](https://getfedora.org/) is independent of the Qubes OS Project.
-They set their own [schedule](https://fedoraproject.org/wiki/Fedora_Release_Life_Cycle#Maintenance_Schedule) for when each Fedora release reaches EOL.
-You can always find out when an operating system reaches EOL from the upstream project that maintains it, but we also make EOL [announcements](/news/categories/#announcements) and publish guides for official TemplateVM operating systems as a convenience to Qubes users.
-When this happens, you should make sure to follow the guide to upgrade to a supported version of that operating system (see the [Fedora upgrade guides](/doc/templates/fedora/#upgrading) and the [Debian upgrade guides](/doc/templates/debian/#upgrading)).
+## Command-line interface
-The one exception to all this is the specific release used for dom0 (not to be confused with Qubes OS as a whole), which [doesn't have to be upgraded](/doc/supported-versions/#note-on-dom0-and-eol).
+
+
+ Warning: Updating with direct commands such as
+ qubes-dom0-update, dnf update, and apt
+ update is not recommended, since these bypass built-in Qubes OS
+ update security measures. Instead, we strongly recommend using the Qubes
+ Update tool or its command-line equivalents, as described below. (By
+ contrast, installing packages
+ using direct package manager commands is fine.)
+
+Advanced users may wish to perform updates via the command-line interface. The
+recommended way to do this is by using the command-line equivalents of the
+**Qubes Update** tool.
+
+There are two Salt formulae and two corresponding `qubesctl` commands:
+ - [`update.qubes-dom0`](/doc/salt/#updatequbes-dom0)
+ - [`update.qubes-vm`](/doc/salt/#updatequbes-vm)
+
+In addition, advanced user may be interested in learning [how to enable the
+testing repos](/doc/testing/).
+
+## Upgrading to avoid EOL
+
+The above covers updating *within* a given operating system (OS) release.
+Eventually, however, most OS releases will reach **end-of-life (EOL)**, after
+which point they will no longer be supported. This applies to Qubes OS itself
+as well as OSes used in [templates](/doc/templates/) (and
+[standalones](/doc/standalones-and-hvms/), if you have any).
+
+**It's very important that you use only supported releases so that you continue
+to receive security updates.** This means that you *must* periodically upgrade
+Qubes OS and your templates before they reach EOL. You can always see which
+versions of Qubes OS and select templates are supported on the [Supported
+Versions](/doc/supported-versions/) page.
+
+In the case of Qubes OS itself, we will make an
+[announcement](/news/categories/#releases) when a supported Qubes OS release is
+approaching EOL and another when it has actually reached EOL, and we will
+provide [instructions for upgrading to the next stable supported Qubes OS
+release](/doc/upgrade/).
+
+Periodic upgrades are also important for templates. For example, you might be
+using a [Fedora template](/doc/templates/fedora/). The [Fedora
+Project](https://getfedora.org/) is independent of the Qubes OS Project. They
+set their own
+[schedule](https://fedoraproject.org/wiki/Fedora_Release_Life_Cycle#Maintenance_Schedule)
+for when each Fedora release reaches EOL. You can always find out when an OS
+reaches EOL from the upstream project that maintains it. We also pass along any
+EOL notices we receive for official template OSes as a convenience to Qubes
+users (see [Supported Versions:
+Templates](/doc/supported-versions/#templates)).
+
+The one exception to all this is the specific release used for dom0 (not to be
+confused with Qubes OS as a whole), which [doesn't have to be
+upgraded](/doc/supported-versions/#note-on-dom0-and-eol).
diff --git a/user/how-to-guides/how-to-use-block-storage-devices.md b/user/how-to-guides/how-to-use-block-storage-devices.md
index f8c31be99..9ca24628a 100644
--- a/user/how-to-guides/how-to-use-block-storage-devices.md
+++ b/user/how-to-guides/how-to-use-block-storage-devices.md
@@ -12,7 +12,6 @@ ref: 193
title: How to Use Block Storage Devices
---
-
*This page is part of [device handling in qubes](/doc/how-to-use-devices/).*
If you don't know what a "block device" is, just think of it as a fancy way to say "something that stores data".
@@ -24,7 +23,7 @@ In addition to smaller flash memory sticks, this includes things like USB extern
Qubes OS supports the ability to attach a USB drive (or just its partitions) to any qube easily, no matter which qube handles the USB controller.
-Attaching USB drives is integrated into the Devices Widget: 
+Attaching USB drives is integrated into the Devices Widget: 
Simply insert your USB drive and click on the widget.
You will see multiple entries for your USB drive; typically, `sys-usb:sda`, `sys-usb:sda1`, and `sys-usb:2-1` for example.
Entries starting with a number (e.g. here `2-1`) are the [whole usb-device](/doc/how-to-use-usb-devices/).
@@ -36,8 +35,8 @@ In our example, this is `sys-usb:sda`, so hover over it.
This will pop up a submenu showing running VMs to which the USB drive can be connected.
Click on one and your USB drive will be attached!
-**Note:** attaching individual partitions (e.g. `sys-usb:sda1`) can be slightly more secure because it doesn't force the target AppVM to parse the partition table.
-However, it often means the AppVM won't detect the new partition and you will need to manually mount it inside the AppVM.
+**Note:** attaching individual partitions (e.g. `sys-usb:sda1`) can be slightly more secure because it doesn't force the target app qube to parse the partition table.
+However, it often means the app qube won't detect the new partition and you will need to manually mount it inside the app qube.
See below for more detailed steps.
## Block Devices in VMs
@@ -178,7 +177,7 @@ To attach a file as block device to another qube, first turn it into a loopback
Afterwards it prints the device-node-name it found.
2. If you want to use the GUI, you're done.
- Click the Device Manager  and select the `loop0`-device to attach it to another qube.
+ Click the Device Manager  and select the `loop0`-device to attach it to another qube.
If you rather use the command line, continue:
@@ -255,4 +254,3 @@ qvm-block a work sys-usb:sda1 -o devtype=cdrom
```
This option accepts `cdrom` and `disk`, default is `disk`.
-
diff --git a/user/how-to-guides/how-to-use-devices.md b/user/how-to-guides/how-to-use-devices.md
index 38c709ad6..b3c3f0a50 100644
--- a/user/how-to-guides/how-to-use-devices.md
+++ b/user/how-to-guides/how-to-use-devices.md
@@ -12,7 +12,6 @@ ref: 188
title: How to Use Devices
---
-
This is an overview of device handling in Qubes OS.
For specific devices ([block](/doc/how-to-use-block-storage-devices/), [USB](/doc/how-to-use-usb-devices/) and [PCI](/doc/how-to-use-pci-devices/) devices), please visit their respective pages.
@@ -38,7 +37,7 @@ PCI devices can be attached using the Qube Settings, but require a VM reboot.
## General Qubes Device Widget Behavior And Handling ##
-When clicking on the tray icon (which looks similar to this):  several device-classes separated by lines are displayed as tooltip.
+When clicking on the tray icon (which looks similar to this):  several device-classes separated by lines are displayed as tooltip.
Block devices are displayed on top, microphones one below and USB-devices at the bottom.
On most laptops, integrated hardware such as cameras and fingerprint-readers are implemented as USB-devices and can be found here.
@@ -57,7 +56,7 @@ Click on one and your device will be attached!
To detach a device, click the Qubes Devices Widget icon again.
Attached devices are displayed in bold.
Hover the one you want to detach.
-A list of VMs appears, one showing the eject symbol: 
+A list of VMs appears, one showing the eject symbol: 
### Attaching a Device to Several VMs ###
@@ -157,4 +156,3 @@ If no specific `sourceVM:deviceID` combination is given, *all devices of that DE
**SYNOPSIS**
`qvm-device DEVICE_CLASS {detach|dt|d} targetVM [sourceVM:deviceID]`
-
diff --git a/user/how-to-guides/how-to-use-disposables.md b/user/how-to-guides/how-to-use-disposables.md
new file mode 100644
index 000000000..3ca8507bd
--- /dev/null
+++ b/user/how-to-guides/how-to-use-disposables.md
@@ -0,0 +1,190 @@
+---
+lang: en
+layout: doc
+permalink: /doc/how-to-use-disposables/
+redirect_from:
+- /doc/how-to-use-disposablevms/
+- /doc/disposable/
+- /doc/disposablevm/
+- /doc/dispvm/
+- /en/doc/dispvm/
+- /doc/DisposableVms/
+- /wiki/DisposableVMs/
+ref: 203
+title: How to Use Disposables
+---
+
+A [disposable](/doc/glossary/#disposable) is a lightweight [qube](/doc/glossary/#qube) that can be created quickly and will self-destruct when closed.
+Disposables are usually created in order to host a single application, like a viewer, editor, or web browser.
+
+From inside an app qube, choosing the `Open in disposable` option on a file will launch a disposable for just that file.
+Changes made to a file opened in a disposable are passed back to the originating VM.
+This means that you can safely work with untrusted files without risk of compromising your other VMs.
+Disposables can be launched either directly from dom0's Start Menu or terminal window, or from within app qubes.
+While running, disposables will appear in Qubes VM Manager with the name `disp####`.
+
+[](/attachment/doc/disposablevm-example.png)
+
+This diagram provides a general example of how disposables can be used to safely open untrusted links and attachments in disposables. See [this article](https://blog.invisiblethings.org/2010/06/01/disposable-vms.html) for more on why one would want to use a disposable.
+
+## Security
+
+If a [disposable template](/doc/glossary/#disposable-template) becomes compromised, then any disposable based on that disposable template could be compromised.
+In particular, the *default* disposable template is important because it is used by the "Open in disposable" feature.
+This means that it will have access to everything that you open with this feature.
+For this reason, it is strongly recommended that you base the default disposable template on a trusted template.
+
+### Disposables and Local Forensics
+
+At this time, disposables should not be relied upon to circumvent local forensics, as they do not run entirely in RAM.
+For details, see [this thread](https://groups.google.com/d/topic/qubes-devel/QwL5PjqPs-4/discussion).
+
+When it is essential to avoid leaving any trace, consider using [Tails](https://tails.boum.org/).
+
+## Disposables and Networking
+
+Similarly to how app qubes are based on their underlying [template](/doc/glossary/#template), disposables are based on their underlying [disposable template](/doc/glossary/#disposable-template).
+R4.0 introduces the concept of multiple disposable templates, whereas R3.2 was limited to only one.
+
+On a fresh installation of Qubes, the default disposable template is called `fedora-XX-dvm` (where `XX` is the Fedora version of the default template).
+If you have included the Whonix option in your install, there will also be a `whonix-ws-dvm` disposable template available for your use.
+
+You can set any app qube to have the ability to act as a disposable template with:
+
+```
+qvm-prefs template_for_dispvms True
+```
+
+The default system wide disposable template can be changed with `qubes-prefs default_dispvm`.
+By combining the two, choosing `Open in disposable` from inside an app qube will open the document in a disposable based on the default disposable template you specified.
+
+You can change this behaviour for individual VMs: in the Application Menu, open Qube Settings for the VM in question and go to the "Advanced" tab.
+Here you can edit the "Default disposable" setting to specify which disposable template will be used to launch disposables from that VM.
+This can also be changed from the command line with:
+
+```
+qvm-prefs default_dispvm
+```
+
+For example, `anon-whonix` has been set to use `whonix-ws-dvm` as its `default_dispvm`, instead of the system default.
+You can even set an app qube that has also been configured as a disposable template to use itself, so disposables launched from within the app qube/disposable template would inherit the same settings.
+
+NetVM and firewall rules for disposable templates can be set as they can for a normal VM.
+By default a disposable will inherit the NetVM and firewall settings of the disposable template on which it is based.
+This is a change in behaviour from R3.2, where disposables would inherit the settings of the app qube from which they were launched.
+Therefore, launching a disposable from an app qube will result in it using the network/firewall settings of the disposable template on which it is based.
+For example, if an app qube uses sys-net as its NetVM, but the default system disposable uses sys-whonix, any disposable launched from this app qube will have sys-whonix as its NetVM.
+
+**Warning:** The opposite is also true.
+This means if you have changed anon-whonix's `default_dispvm` to use the system default, and the system default disposable uses sys-net, launching a disposable from inside anon-whonix will result in the disposable using sys-net.
+
+A disposable launched from the Start Menu inherits the NetVM and firewall settings of the disposable template on which it is based.
+Note that changing the "NetVM" setting for the system default disposable template *does* affect the NetVM of disposables launched from the Start Menu.
+Different disposable templates with individual NetVM settings can be added to the Start Menu.
+
+**Important Notes:**
+Some disposable templates will automatically create a menu item to launch a disposable, if you do not see an entry and want to add one please use the command:
+
+```
+qvm-features appmenus-dispvm 1
+```
+
+To launch a disposable template from the command line, in dom0 please type the following:
+
+```
+qvm-run --dispvm= --service qubes.StartApp+NameOfApp
+```
+
+## Opening a file in a disposable via GUI
+
+In an app qube's file manager, right click on the file you wish to open in a disposable, then choose "View in disposable" or "Edit in disposable".
+Wait a few seconds and the default application for this file type should appear displaying the file content.
+This app is running in its own dedicated VM -- a disposable created for the purpose of viewing or editing this very file.
+Once you close the viewing application the whole disposable will be destroyed.
+If you have edited the file and saved the changes, the changed file will be saved back to the original app qube, overwriting the original.
+
+ 
+
+
+## Opening a fresh web browser instance in a new disposable
+
+Sometimes it is desirable to open an instance of Firefox within a new fresh disposable.
+This can be done easily using the Start Menu: just go to **Application Menu -\> Disposable -\> Disposable:Firefox web browser**.
+Wait a few seconds until a web browser starts.
+Once you close the viewing application the whole disposable will be destroyed.
+
+
+
+
+## Opening a file in a disposable via command line (from app qube)
+
+Use the `qvm-open-in-dvm` command from a terminal in your app qube:
+
+~~~
+[user@work-pub ~]$ qvm-open-in-dvm Downloads/apple-sandbox.pdf
+~~~
+
+Note that the `qvm-open-in-dvm` process will not exit until you close the application in the disposable.
+
+## Starting an arbitrary program in a disposable from an app qube
+
+Sometimes it can be useful to start an arbitrary program in a disposable.
+The disposable will stay running so long as the process which started the disposable has not exited.
+Some applications, such as GNOME Terminal, do not wait for the application to close before the process exits (details [here](https://github.com/QubesOS/qubes-issues/issues/2581#issuecomment-272664009)).
+Starting an arbitrary program can be done from an app qube by running
+
+~~~
+[user@vault ~]$ qvm-run '@dispvm' xterm
+~~~
+
+The created disposable can be accessed via other tools (such as `qvm-copy-to-vm`) using its `disp####` name as shown in the Qubes Manager or `qvm-ls`.
+
+## Starting an arbitrary application in a disposable via command line from dom0
+
+The Application Launcher has shortcuts for opening a terminal and a web browser in dedicated disposables, since these are very common tasks.
+The disposable will stay running so long as the process which started the disposable has not exited.
+Some applications, such as GNOME Terminal, do not wait for the application to close before the process exits (details [here](https://github.com/QubesOS/qubes-issues/issues/2581#issuecomment-272664009)).
+It is possible to start an arbitrary application in a disposable directly from dom0 by running:
+
+~~~
+$ qvm-run --dispvm= --service qubes.StartApp+xterm
+~~~
+
+The label color will be inherited from ``.
+(The disposable Application Launcher shortcut used for starting programs runs a very similar command to the one above.)
+
+### Opening a link in a disposable based on a non-default disposable template from a qube
+
+Suppose that the default disposable template for your `email` qube has no networking (e.g., so that untrusted attachments can't phone home).
+However, sometimes you want to open email links in disposables.
+Obviously, you can't use the default disposable template, since it has no networking, so you need to be able to specify a different disposable template.
+You can do that with this command from the `email` qube (as long as your RPC policies allow it):
+
+~~~
+$ qvm-open-in-vm @dispvm: https://www.qubes-os.org
+~~~
+
+This will create a new disposable based on ``, open the default web browser in that disposable, and navigate to `https://www.qubes-os.org`.
+
+#### Example of RPC policies to allow this behavior
+
+In dom0, add the following line at the beginning of the file `/etc/qubes-rpc/policy/qubes.OpenURL`
+
+~~~
+@anyvm @dispvm: allow
+~~~
+
+This line means:
+- FROM: Any VM
+- TO: A disposable based on ``
+- WHAT: Allow sending an "Open URL" request
+
+In other words, any VM will be allowed to create a new disposable based on `` and open a URL inside of that disposable.
+
+More information about RPC policies for disposables can be found [here](/doc/qrexec/#qubes-rpc-administration).
+
+## Customizing disposables
+
+You can change the template used to generate the disposables, and change settings used in the disposable savefile.
+These changes will be reflected in every new disposable based on that template.
+Full instructions can be found [here](/doc/disposable-customization/).
diff --git a/user/how-to-guides/how-to-use-disposablevms.md b/user/how-to-guides/how-to-use-disposablevms.md
deleted file mode 100644
index 91fcb57e4..000000000
--- a/user/how-to-guides/how-to-use-disposablevms.md
+++ /dev/null
@@ -1,190 +0,0 @@
----
-lang: en
-layout: doc
-permalink: /doc/how-to-use-disposablevms/
-redirect_from:
-- /doc/disposablevm/
-- /doc/dispvm/
-- /en/doc/dispvm/
-- /doc/DisposableVms/
-- /wiki/DisposableVMs/
-ref: 203
-title: How to Use DisposableVMs
----
-
-
-A DisposableVM (previously known as a "DispVM") is a lightweight VM that can be created quickly and will disappear when closed.
-DisposableVMs are usually created in order to host a single application, like a viewer, editor, or web browser.
-
-From inside an AppVM, choosing the `Open in DisposableVM` option on a file will launch a DisposableVM for just that file.
-Changes made to a file opened in a DisposableVM are passed back to the originating VM.
-This means that you can safely work with untrusted files without risk of compromising your other VMs.
-DisposableVMs can be launched either directly from dom0's Start Menu or terminal window, or from within AppVMs.
-While running, DisposableVMs will appear in Qubes VM Manager with the name `disp####`.
-
-[](/attachment/wiki/DisposableVms/disposablevm-example.png)
-
-This diagram provides a general example of how DisposableVMs can be used to safely open untrusted links and attachments in DisposableVMs. See [this article](https://blog.invisiblethings.org/2010/06/01/disposable-vms.html) for more on why one would want to use a DisposableVM.
-
-## Security
-
-If a [DisposableVM Template](/doc/glossary/#disposablevm-template) becomes compromised, then any DisposableVM based on that DisposableVM Template could be compromised.
-In particular, the *default* DisposableVM Template is important because it is used by the "Open in DisposableVM" feature.
-This means that it will have access to everything that you open with this feature.
-For this reason, it is strongly recommended that you base the default DisposableVM Template on a trusted TemplateVM.
-
-### DisposableVMs and Local Forensics
-
-At this time, DisposableVMs should not be relied upon to circumvent local forensics, as they do not run entirely in RAM.
-For details, see [this thread](https://groups.google.com/d/topic/qubes-devel/QwL5PjqPs-4/discussion).
-
-When it is essential to avoid leaving any trace, consider using [Tails](https://tails.boum.org/).
-
-## DisposableVMs and Networking
-
-Similarly to how AppVMs are based on their underlying [TemplateVM](/doc/glossary/#templatevm), DisposableVMs are based on their underlying [DisposableVM Template](/doc/glossary/#disposablevm-template).
-R4.0 introduces the concept of multiple DisposableVM Templates, whereas R3.2 was limited to only one.
-
-On a fresh installation of Qubes, the default DisposableVM Template is called `fedora-XX-dvm` (where `XX` is the Fedora version of the default TemplateVM).
-If you have included the Whonix option in your install, there will also be a `whonix-ws-dvm` DisposableVM Template available for your use.
-
-You can set any AppVM to have the ability to act as a DisposableVM Template with:
-
-```
-qvm-prefs template_for_dispvms True
-```
-
-The default system wide DisposableVM Template can be changed with `qubes-prefs default_dispvm`.
-By combining the two, choosing `Open in DisposableVM` from inside an AppVM will open the document in a DisposableVM based on the default DisposableVM Template you specified.
-
-You can change this behaviour for individual VMs: in the Application Menu, open Qube Settings for the VM in question and go to the "Advanced" tab.
-Here you can edit the "Default DisposableVM" setting to specify which DisposableVM Template will be used to launch DisposableVMs from that VM.
-This can also be changed from the command line with:
-
-```
-qvm-prefs default_dispvm
-```
-
-For example, `anon-whonix` has been set to use `whonix-ws-dvm` as its `default_dispvm`, instead of the system default.
-You can even set an AppVM that has also been configured as a DisposableVM Template to use itself, so DisposableVMs launched from within the AppVM/DisposableVM Template would inherit the same settings.
-
-NetVM and firewall rules for DisposableVM Templates can be set as they can for a normal VM.
-By default a DisposableVM will inherit the NetVM and firewall settings of the DisposableVM Template on which it is based.
-This is a change in behaviour from R3.2, where DisposableVMs would inherit the settings of the AppVM from which they were launched.
-Therefore, launching a DisposableVM from an AppVM will result in it using the network/firewall settings of the DisposableVM Template on which it is based.
-For example, if an AppVM uses sys-net as its NetVM, but the default system DisposableVM uses sys-whonix, any DisposableVM launched from this AppVM will have sys-whonix as its NetVM.
-
-**Warning:** The opposite is also true.
-This means if you have changed anon-whonix's `default_dispvm` to use the system default, and the system default DisposableVM uses sys-net, launching a DisposableVM from inside anon-whonix will result in the DisposableVM using sys-net.
-
-A DisposableVM launched from the Start Menu inherits the NetVM and firewall settings of the DisposableVM Template on which it is based.
-Note that changing the "NetVM" setting for the system default DisposableVM Template *does* affect the NetVM of DisposableVMs launched from the Start Menu.
-Different DisposableVM Templates with individual NetVM settings can be added to the Start Menu.
-
-**Important Notes:**
-Some DisposableVM Templates will automatically create a menu item to launch a DVM, if you do not see an entry and want to add one please use the command:
-
-```
-qvm-features appmenus-dispvm 1
-```
-
-To launch a DisposableVM Template from the command line, in dom0 please type the following:
-
-```
-qvm-run --dispvm= --service qubes.StartApp+NameOfApp
-```
-
-## Opening a file in a DisposableVM via GUI
-
-In an AppVM's file manager, right click on the file you wish to open in a DisposableVM, then choose "View in DisposableVM" or "Edit in DisposableVM".
-Wait a few seconds and the default application for this file type should appear displaying the file content.
-This app is running in its own dedicated VM -- a DisposableVM created for the purpose of viewing or editing this very file.
-Once you close the viewing application the whole DisposableVM will be destroyed.
-If you have edited the file and saved the changes, the changed file will be saved back to the original AppVM, overwriting the original.
-
- 
-
-
-## Opening a fresh web browser instance in a new DisposableVM
-
-Sometimes it is desirable to open an instance of Firefox within a new fresh DisposableVM.
-This can be done easily using the Start Menu: just go to **Application Menu -\> DisposableVM -\> DisposableVM:Firefox web browser**.
-Wait a few seconds until a web browser starts.
-Once you close the viewing application the whole DisposableVM will be destroyed.
-
-
-
-
-## Opening a file in a DisposableVM via command line (from AppVM)
-
-Use the `qvm-open-in-dvm` command from a terminal in your AppVM:
-
-~~~
-[user@work-pub ~]$ qvm-open-in-dvm Downloads/apple-sandbox.pdf
-~~~
-
-Note that the `qvm-open-in-dvm` process will not exit until you close the application in the DisposableVM.
-
-## Starting an arbitrary program in a DisposableVM from an AppVM
-
-Sometimes it can be useful to start an arbitrary program in a DisposableVM.
-The DisposableVM will stay running so long as the process which started the DisposableVM has not exited.
-Some applications, such as GNOME Terminal, do not wait for the application to close before the process exits (details [here](https://github.com/QubesOS/qubes-issues/issues/2581#issuecomment-272664009)).
-Starting an arbitrary program can be done from an AppVM by running
-
-~~~
-[user@vault ~]$ qvm-run '@dispvm' xterm
-~~~
-
-The created DisposableVM can be accessed via other tools (such as `qvm-copy-to-vm`) using its `disp####` name as shown in the Qubes Manager or `qvm-ls`.
-
-## Starting an arbitrary application in a DisposableVM via command line from dom0
-
-The Application Launcher has shortcuts for opening a terminal and a web browser in dedicated DisposableVMs, since these are very common tasks.
-The DisposableVM will stay running so long as the process which started the DisposableVM has not exited.
-Some applications, such as GNOME Terminal, do not wait for the application to close before the process exits (details [here](https://github.com/QubesOS/qubes-issues/issues/2581#issuecomment-272664009)).
-It is possible to start an arbitrary application in a DisposableVM directly from dom0 by running:
-
-~~~
-$ qvm-run --dispvm= --service qubes.StartApp+xterm
-~~~
-
-The label color will be inherited from ``.
-(The DisposableVM Application Launcher shortcut used for starting programs runs a very similar command to the one above.)
-
-### Opening a link in a DisposableVM based on a non-default DisposableVM Template from a qube
-
-Suppose that the default DisposableVM Template for your `email` qube has no networking (e.g., so that untrusted attachments can't phone home).
-However, sometimes you want to open email links in DisposableVMs.
-Obviously, you can't use the default DisposableVM Template, since it has no networking, so you need to be able to specify a different DisposableVM Template.
-You can do that with this command from the `email` qube (as long as your RPC policies allow it):
-
-~~~
-$ qvm-open-in-vm @dispvm: https://www.qubes-os.org
-~~~
-
-This will create a new DisposableVM based on ``, open the default web browser in that DisposableVM, and navigate to `https://www.qubes-os.org`.
-
-#### Example of RPC policies to allow this behavior
-
-In dom0, add the following line at the beginning of the file `/etc/qubes-rpc/policy/qubes.OpenURL`
-
-~~~
-@anyvm @dispvm: allow
-~~~
-
-This line means:
-- FROM: Any VM
-- TO: A DisposableVM based on ``
-- WHAT: Allow sending an "Open URL" request
-
-In other words, any VM will be allowed to create a new DisposableVM based on `` and open a URL inside of that DisposableVM.
-
-More information about RPC policies for DisposableVMs can be found [here](/doc/qrexec/#qubes-rpc-administration).
-
-## Customizing DisposableVMs
-
-You can change the template used to generate the DisposableVMs, and change settings used in the DisposableVM savefile.
-These changes will be reflected in every new DisposableVM based on that template.
-Full instructions can be found [here](/doc/disposablevm-customization/).
-
diff --git a/user/how-to-guides/how-to-use-optical-discs.md b/user/how-to-guides/how-to-use-optical-discs.md
index 84ecb060a..d4287ead0 100644
--- a/user/how-to-guides/how-to-use-optical-discs.md
+++ b/user/how-to-guides/how-to-use-optical-discs.md
@@ -10,7 +10,6 @@ ref: 204
title: How to Use Optical Discs
---
-
Passthrough reading and recording (a.k.a., "burning") are not supported by Xen.
Currently, the only options for reading and recording optical discs (e.g., CDs, DVDs, BRDs) in Qubes are:
diff --git a/user/how-to-guides/how-to-use-pci-devices.md b/user/how-to-guides/how-to-use-pci-devices.md
index 47f07ab46..820825c93 100644
--- a/user/how-to-guides/how-to-use-pci-devices.md
+++ b/user/how-to-guides/how-to-use-pci-devices.md
@@ -12,7 +12,6 @@ ref: 197
title: How to Use PCI Devices
---
-
*This page is part of [device handling in qubes](/doc/how-to-use-devices/).*
**Warning:** Only dom0 exposes PCI devices.
@@ -45,7 +44,7 @@ There you can attach PCI-devices to a qube.
1. To reach the settings of any qube either
- - Press Alt+F3 to open the application finder, type in the VM name, select the "\[VM-name\]: Qube Settings" menu entry and press enter or click "Launch"!
+ - Press Alt+F3 to open the application finder, type in the VM name, select the "\[VM-name\]: Qube Settings" menu entry and press enter or click "Launch"!
- Select the VM in Qube Manager and click the settings-button or right-click the VM and select `Qube settings`.
- Click the Domain Manager, hover the VM you want to attach a device to and select "settings" in the additional menu. (only running VMs!)
@@ -142,4 +141,3 @@ or
```
It is **strongly discouraged to reattach PCI devices to dom0**, especially if they don't support resetting!
-
diff --git a/user/how-to-guides/how-to-use-usb-devices.md b/user/how-to-guides/how-to-use-usb-devices.md
index 3a3253b8a..9261a4ee1 100644
--- a/user/how-to-guides/how-to-use-usb-devices.md
+++ b/user/how-to-guides/how-to-use-usb-devices.md
@@ -9,7 +9,6 @@ ref: 195
title: How to Use USB Devices
---
-
*This page is part of [device handling in qubes](/doc/how-to-use-devices/).*
If you are looking to handle USB *storage* devices (thumbdrives or USB-drives), please have a look at the [block device](/doc/how-to-use-block-storage-devices/) page.
@@ -33,9 +32,9 @@ But it has some [issues](https://github.com/QubesOS/qubes-issues/issues/4661).)
### With Qubes Device Manager
-Click the device-manager-icon: 
+Click the device-manager-icon: 
A list of available devices appears.
-USB-devices have a USB-icon to their right: 
+USB-devices have a USB-icon to their right: 
Hover on one device to display a list of VMs you may attach it to.
@@ -46,7 +45,7 @@ You're done.
After you finished using the USB-device, you can detach it the same way by clicking on the Devices Widget.
You will see an entry in bold for your device such as **`sys-usb:2-5 - 058f_USB_2.0_Camera`**.
Hover on the attached device to display a list of running VMs.
-The one to which your device is connected will have an eject button  next to it.
+The one to which your device is connected will have an eject button  next to it.
Click that and your device will be detached.
### With The Command Line Tool
@@ -155,4 +154,3 @@ Now you see the path and the text between `/pci0000:00/0000:` and `/usb3` i.e. `
For example, On R 4.0 the command would look something like
`qvm-pci attach --persistent personal dom0:00_1a.0`
-
diff --git a/user/reference/glossary.md b/user/reference/glossary.md
index dde39d91e..b5593587c 100644
--- a/user/reference/glossary.md
+++ b/user/reference/glossary.md
@@ -10,219 +10,206 @@ ref: 140
title: Glossary
---
+## admin qube
-Qubes OS
---------
+A type of [qube](#qube) used for administering Qubes OS.
-A security-oriented operating system (OS).
-The main principle of Qubes OS is security by compartmentalization (or isolation), in which activities are compartmentalized (or isolated) in separate [qubes](#qube).
+* Currently, the only admin qube is [dom0](#dom0).
-* The official name is "Qubes OS" (note the capitalization and spacing).
- However, in casual conversation this is often shortened to "Qubes," and in technical contexts where spaces are not permitted (e.g., usernames), the space may be omitted, as in `QubesOS`.
+## app qube
-VM
---
+Any [qube](#qube) that does not have a root filesystem of its own. Every app
+qube is based on a [template](#template) from which it borrows the root
+filesystem.
-An abbreviation for "virtual machine."
-A software implementation of a machine (for example, a computer) that executes programs like a physical machine.
+* Previously known as: `AppVM`, `TemplateBasedVM`.
-Qube
-----
+* Historical note: This term originally meant "a qube intended for running user
+ software applications" (hence the name "app").
-A user-friendly term for a [VM](#vm) in Qubes OS.
+## disposable
-* Example: "In Qubes OS, you do your banking in your 'banking' qube and your web surfing in your 'untrusted' qube. That way, if your 'untrusted' qube is compromised, your banking activities will remain secure."
+A type of temporary [app qube](#app-qube) that self-destructs when its
+originating window closes. Each disposable is based on a [disposable
+template](#disposable-template).
-* "Qube" is an informal term intended to make it easier for less technical users to understand Qubes OS and learn how to use it. In technical discussions, the other, more precise terms defined on this page are to be preferred.
+See [How to Use Dispoables](/doc/how-to-use-disposables/).
-* The term "qube" should be lowercase unless it is the first word in a sentence. Note that starting a sentence with the plural of "qube" (i.e., "Qubes...") can be ambiguous, since it may not be clear whether the referent is a collection of qubes or [Qubes OS](#qubes-os).
+* Previously known as: `DisposableVM`, `DispVM`.
-Domain
-------
+## disposable template
-**In Qubes OS:** An area or set of activities in one's digital life that has certain security requirements and therefore involves the use of certain [qubes](#qube).
-For example, suppose your "email" domain encompasses the activity of sending PGP-encrypted email.
-This domain may include your email qube and your [Split GPG](/doc/split-gpg) qube.
-Note that domains and qubes are not the same thing.
-In this example, your "email" domain includes the use of two qubes.
-Furthermore, a qube can fall under multiple domains simultaneously.
-For example, your Split GPG qube may also be part of your "software development" domain if you PGP-sign your Git commits.
+Any [app qube](#app-qube) on which [disposables](#disposable) are based. A
+disposable template shares its user directories (and, indirectly, the root
+filesystem of the regular [template](#template) on which it is based) with all
+[disposables](#disposable) based on it.
-**In Xen:** A synonym for [VM](#vm). See [Domain on the Xen Wiki](https://wiki.xenproject.org/wiki/Domain).
+* Not to be confused with the concept of a regular [template](#template) that
+ is itself disposable, which does not exist in Qubes OS.
-dom0
-----
+* Disposable templates must be app qubes. They cannot be regular
+ [templates](#template).
-Domain Zero.
-Also known as the **host** domain, dom0 is the initial VM started by the Xen hypervisor on boot.
-Dom0 runs the Xen management toolstack and has special privileges relative to other domains, such as direct access to most hardware.
-(Note that the use of [domain](#domain) for a synonym for [VM](#vm) is specific to Xen. Qubes diverges from this practice. See: [domain](#domain).)
+* Every [disposable](#disposable) is based on a disposable template, which is
+ in turn based on a regular [template](#template).
-domU
-----
+* Unlike [disposables](#disposable), disposable templates have the persistence
+ properties of normal [app qubes](#app-qube).
-Unprivileged Domain.
-Also known as **guest** domains, domUs are the counterparts to dom0.
-All VMs except dom0 are domUs.
-By default, most domUs lack direct hardware access.
-(Note that the use of [domain](#domain) for a synonym for [VM](#vm) is specific to Xen. Qubes diverges from this practice. See: [domain](#domain).)
+* Previously known as: `DisposableVM Template`, `DVM Template`, `DVM`.
-TemplateVM
-----------
+## dom0
-[Template Virtual Machine](/doc/templates/).
-Any [VM](#vm) that supplies its root filesystem to another VM.
-TemplateVMs are intended for installing and updating software applications, but not for running them.
+[Domain](#domain) zero. A type of [admin qube](#admin-qube). Also known as the
+**host** domain, dom0 is the initial qube started by the Xen hypervisor on
+boot. Dom0 runs the Xen management toolstack and has special privileges
+relative to other domains, such as direct access to most hardware.
-* Colloquially, TemplateVMs are often referred to as "templates."
-* Since every TemplateVM supplies its *own* root filesystem to at least one other VM, no TemplateVM can be based on another TemplateVM.
- In other words, no TemplateVM is a [TemplateBasedVM](#templatebasedvm).
-* Since every TemplateVM supplies its *root* filesystem to at least one other VM, no [DisposableVM Template](#disposablevm-template) is a TemplateVM.
+* The term "dom0" is a common noun and should follow the capitalization rules
+ of common nouns.
-TemplateBasedVM
----------------
+## domain
-Any [VM](#vm) that depends on a [TemplateVM](#templatevm) for its root filesystem.
+In Xen, a synonym for [VM](#vm).
-Standalone(VM)
---------------
+See ["domain" on the Xen Wiki](https://wiki.xenproject.org/wiki/Domain).
-[Standalone (Virtual Machine)](/doc/standalone-and-hvm/).
-In general terms, a [VM](#vm) is described as **standalone** if and only if it does not depend on any other VM for its root filesystem.
-(In other words, a VM is standalone if and only if it is not a TemplateBasedVM.)
-More specifically, a **StandaloneVM** is a type of VM in Qubes that is created by cloning a TemplateVM.
-Unlike TemplateVMs, however, StandaloneVMs do not supply their root filesystems to other VMs.
-(Therefore, while a TemplateVM is a type of standalone VM, it is not a StandaloneVM.)
+* This term has no official meaning in Qubes OS.
-AppVM
------
+## domU
-Application Virtual Machine.
-A type of [VM](#vm).
-Synonymous with [TemplateBasedVM](#templatebasedvm).
+Unprivileged [domain](#domain). Also known as **guest** domains, domUs are the
+counterparts to dom0. In Xen, all VMs except dom0 are domUs. By default, most
+domUs lack direct hardware access.
-NetVM
------
+* The term "domU" is a common noun and should follow the capitalization rules
+ of common nouns.
-*This is an old definition from before Qubes 4.0.
-NetVMs, as defined here, no longer exist in Qubes 4.0 or later (see [here](https://github.com/QubesOS/qubes-doc/pull/748) for technical details).*
+* Sometimes the term [VM](#vm) is used as a synonym for domU. This is
+ technically inaccurate, as [dom0](#dom0) is also a VM in Xen.
-Network Virtual Machine.
-A type of [VM](#vm) that connects directly to a network.
-Other VMs gain access to a network by connecting to a NetVM (usually indirectly, via a [FirewallVM](#firewallvm)).
-A NetVM called `sys-net` is created by default in most Qubes installations.
+## HVM
-Alternatively, "NetVM" may refer to whichever VM is directly connected to a VM for networking purposes.
-For example, if `untrusted` is directly connected to `sys-firewall` for network access, then it is accurate to say, "`sys-firewall` is `untrusted`'s NetVM," even though `sys-firewall` is a ProxyVM.
+Hardware-assisted Virtual Machine. Any fully virtualized, or hardware-assisted,
+[VM](#vm) utilizing the virtualization extensions of the host CPU. Although
+HVMs are typically slower than paravirtualized qubes due to the required
+emulation, HVMs allow the user to create domains based on any operating system.
-ProxyVM
--------
+See [Standalones and HVM](/doc/standalones-and-hvms/).
-*This is an old definition from before Qubes 4.0.
-ProxyVMs, as defined here, no longer exist in Qubes 4.0 or later (see [here](https://github.com/QubesOS/qubes-doc/pull/748) for technical details).*
+## management qube
-Proxy Virtual Machine.
-A type of [VM](#vm) that proxies network access for other VMs.
-Typically, a ProxyVM sits between a NetVM and another VM (such as an AppVM or a TemplateVM) that requires network access.
+A [qube](#qube) used for automated management of a Qubes OS installation via
+[Salt](/doc/salt/).
-FirewallVM
-----------
+## named disposable
-*This is an old definition from before Qubes 4.0.
-FirewallVMs, as defined here, no longer exist in Qubes 4.0 or later (see [here](https://github.com/QubesOS/qubes-doc/pull/748) for technical details).*
+A type of [disposable](#disposable) given a permanent name that continues to
+exist even after it is shut down and can be restarted again. Like a regular
+[disposable](#disposable), a named disposable has no persistent state: Any
+changes made are lost when it is shut down.
-Firewall Virtual Machine.
-A type of [ProxyVM](#proxyvm) that is used to enforce network-level policies (a.k.a. "firewall rules").
-A FirewallVM called `sys-firewall` is created by default in most Qubes installations.
-Also see [Qubes Firewall](/doc/firewall/).
+* Only one instance of a named disposable can run at a time.
-DisposableVM
-------------
+* Like a regular [disposable](#disposable), a named disposable always has the
+ same state when it starts, namely that of the [disposable
+ template](#disposable-template) on which it is based.
-[Disposable Virtual Machine](/doc/disposablevm/).
-A temporary [AppVM](#appvm) based on a [DisposableVM Template](#disposablevm-template) that can quickly be created, used, and destroyed.
+* Technical note: Named disposables are useful for certain [service
+ qubes](#service-qube), where the combination of persistent device assignment
+ and ephemeral qube state is desirable.
-DispVM
-------
+## netvm
-An older term for [DisposableVM](#disposablevm).
+The property of a [qube](#qube) that specifies from which qube, if any, it
+receives network access. Despite the name, `netvm` is a *property* of a qube,
+not a type of VM. For example, it is common for the `netvm` of an [app
+qube](#app-qube) to be the [service qube](#service-qube) `sys-firewall`, which
+in turn uses `sys-net` as its `netvm`.
-DVM
----
+* If a qube does not have a `netvm` (i.e., its `netvm` is set to `None`), then
+ that qube is offline. It is disconnected from all networking.
-An abbreviation of [DisposableVM](#disposablevm), typically used to refer to [DisposableVM Templates](#disposablevm-template).
+* The name derives from "Networking Virtual Machine." Before Qubes 4.0, there
+ was a type of [service qube](#service-qube) called a "NetVM." The name of the
+ `netvm` property is a holdover from that era.
-DisposableVM Template
----------------------
+## qube
-(Formerly known as a "DVM Template".)
-A type of [TemplateBasedVM](#templatebasedvm) on which [DisposableVMs](#disposablevm) are based.
-By default, a DisposableVM Template named `fedora-XX-dvm` is created on most Qubes installations (where `XX` is the Fedora version of the default TemplateVM).
-DisposableVM Templates are not [TemplateVMs](#templatevm), since (being TemplateBasedVMs) they do not have root filesystems of their own to provide to other VMs.
-Rather, DisposableVM Templates are complementary to TemplateVMs insofar as DisposableVM Templates provide their own user filesystems to the DisposableVMs based on them.
+A secure compartment in Qubes OS. Currently, qubes are implemented as Xen
+[VMs](#vm), but Qubes OS is independent of its underlying compartmentalization
+technology. VMs could be replaced with a different technology, and qubes would
+still be called "qubes."
-PV
---
+* **Important:** The term "qube" is a common noun and should follow the
+ capitalization rules of common nouns. For example, "I have three qubes" is
+ correct," while "I have three Qubes" is incorrect.
-Paravirtualization.
-An efficient and lightweight virtualization technique originally introduced by the Xen Project and later adopted by other virtualization platforms.
-Unlike HVMs, paravirtualized [VMs](#vm) do not require virtualization extensions from the host CPU.
-However, paravirtualized VMs require a PV-enabled kernel and PV drivers, so the guests are aware of the hypervisor and can run efficiently without emulation or virtual emulated hardware.
+* Note that starting a sentence with the plural of "qube" (i.e., "Qubes...")
+ can be ambiguous, since it may not be clear whether the referent is a
+ plurality of qubes or [Qubes OS](#qubes-os).
-HVM
----
+* Example usage: "In Qubes OS, you do your banking in your 'banking' qube and
+ your web surfing in your 'untrusted' qube. That way, if your 'untrusted' qube
+ is compromised, your banking activities will remain secure."
+
+* Historical note: The term "qube" was originally invented as an alternative to
+ "VM" intended to make it easier for less technical users to understand Qubes
+ OS and learn how to use it.
+
+## Qubes OS
+
+A security-oriented operating system (OS). The main principle of Qubes OS is
+security by compartmentalization (or isolation), in which activities are
+compartmentalized (or isolated) in separate [qubes](#qube).
+
+* **Important:** The official name is "Qubes OS" (note the capitalization and
+ the space between "Qubes" and "OS"). In casual conversation, this is often
+ shortened to "Qubes." Only in technical contexts where spaces are not
+ permitted (e.g., in usernames) may the space be omitted, as in `@QubesOS`.
-[Hardware-assisted Virtual Machine](/doc/standalone-and-hvm/).
-Any fully virtualized, or hardware-assisted, [VM](#vm) utilizing the virtualization extensions of the host CPU.
-Although HVMs are typically slower than paravirtualized VMs due to the required emulation, HVMs allow the user to create domains based on any operating system.
+## Qubes Windows Tools (QWT)
-StandaloneHVM
--------------
+A set of programs and drivers that provide integration of Windows qubes with
+the rest of the Qubes OS system.
-Any [HVM](#hvm) that is standalone (i.e., does not depend on any other VM for its root filesystem).
-In Qubes, StandaloneHVMs are referred to simply as **HVMs**.
+See [Qubes Windows Tools](/doc/windows-tools/) and [Windows](/doc/windows/).
-TemplateHVM
------------
+## service qube
-Any [HVM](#hvm) that functions as a [TemplateVM](#templatevm) by supplying its root filesystem to other VMs.
-In Qubes, TemplateHVMs are referred to as **HVM templates**.
+Any [app qube](#app-qube) the primary purpose of which is to provide services
+to other qubes. `sys-net` and `sys-firewall` are examples of service qubes.
-TemplateBasedHVM
-----------------
+## standalone
-Any [HVM](#hvm) that depends on a [TemplateVM](#templatevm) for its root filesystem.
+Any [qube](#qube) that has its own root filesystem and does not share it with
+another qube. Distinct from both [templates](#template) and [app
+qubes](#app-qube).
-ServiceVM
----------
+See [Standalones and HVMs](/doc/standalones-and-hvms/).
-Service Virtual Machine.
-A [VM](#vm) the primary purpose of which is to provide a service or services to other VMs.
-NetVMs and ProxyVMs are examples of ServiceVMs.
+* Previously known as: `StandaloneVM`.
-SystemVM
---------
+## template
-System Virtual Machine.
-A synonym for [ServiceVM](#servicevm).
-SystemVMs usually have the prefix `sys-`.
+Any [qube](#qube) that shares its root filesystem with another qube. A qube
+that is borrowing a template's root filesystem is known as an [app
+qube](#app-qube) and is said to be "based on" the template. Templates are
+intended for installing and updating software applications, but not for running
+them.
-PVHVM
------
+See [Templates](/doc/templates/).
-[PV](#pv) on [HVM](#hvm).
-To boost performance, fully virtualized HVM guests can use special paravirtual device drivers (PVHVM or PV-on-HVM drivers).
-These drivers are optimized PV drivers for HVM environments and bypass the emulation for disk and network I/O, thus providing PV-like (or better) performance on HVM systems.
-This allows for optimal performance on guest operating systems such as Windows.
+* No template is an [app qube](#app-qube).
-Windows Tools
------
+* A template cannot be based on another template.
-[Qubes Windows Tools](/doc/windows-tools/) (QWT) are a set of programs and drivers that provide integration of Windows [AppVMs](#appvm) with the rest of the Qubes system.
-Also see [Windows](/doc/windows/).
+* Regular templates cannot function as [disposable
+ templates](#disposable-template). (Disposable templates must be app qubes.)
-QWT
-----
+* Previously known as: `TemplateVM`.
-An abbreviation of Qubes [Windows Tools](#windows-tools).
+## VM
+An abbreviation for "virtual machine." A software implementation of a machine
+(for example, a computer) that executes programs like a physical machine.
diff --git a/user/reference/tools.md b/user/reference/tools.md
index 4f1a2bed5..0494ae38b 100644
--- a/user/reference/tools.md
+++ b/user/reference/tools.md
@@ -13,7 +13,6 @@ ref: 141
title: Command-line Tools
---
-
Dom0
----
diff --git a/user/security-in-qubes/anti-evil-maid.md b/user/security-in-qubes/anti-evil-maid.md
index 93d49e06a..89482d472 100644
--- a/user/security-in-qubes/anti-evil-maid.md
+++ b/user/security-in-qubes/anti-evil-maid.md
@@ -10,7 +10,6 @@ ref: 164
title: Anti Evil Maid (AEM)
---
-
Background
----------
diff --git a/user/security-in-qubes/data-leaks.md b/user/security-in-qubes/data-leaks.md
index 0710fa618..ec357ebec 100644
--- a/user/security-in-qubes/data-leaks.md
+++ b/user/security-in-qubes/data-leaks.md
@@ -10,21 +10,20 @@ ref: 171
title: Data Leaks
---
-
The Role of the Firewall
------------------------
**[Firewalling in Qubes](/doc/firewall/) is not intended to be a leak-prevention mechanism.**
There are several reasons for this, which will be explained below.
-However, the main reason is that Qubes cannot prevent an attacker who has compromised one AppVM with restrictive firewall rules from leaking data via cooperative covert channels through another compromised AppVM with nonrestrictive firewall rules.
+However, the main reason is that Qubes cannot prevent an attacker who has compromised one app qube with restrictive firewall rules from leaking data via cooperative covert channels through another compromised app qube with nonrestrictive firewall rules.
-For example, suppose you have an `email` AppVM.
+For example, suppose you have an `email` app qube.
You have set the firewall rules for `email` such that it can communicate only with your email server.
Now suppose that an attacker sends you a GPG-encrypted message which exploits a hypothetical bug in the GnuPG process.
There are now multiple ways the attacker could proceed to leak data (such as confidential email messages) from `email`.
The most obvious way is by simply emailing the data to himself.
-Another possibility is that the attacker has also compromised another one of your AppVMs, such as your `netvm`, which is normally assumed to be untrusted and has unrestricted access to the network.
+Another possibility is that the attacker has also compromised another one of your app qubes, such as your `netvm`, which is normally assumed to be untrusted and has unrestricted access to the network.
In this case, the attacker might move data from `email` to the `netvm` via a covert channel, such as the CPU cache.
Such covert channels have been described and even implemented in some "lab environments" and might allow for bandwidths of even a few tens of bits/sec.
It is unclear whether such channels could be implemented in a real world system, where multiple VMs are running at the same time, each handling tens or hundreds of processes, all using the same cache memory, but it is worth keeping in mind.
@@ -41,7 +40,7 @@ Types of Data Leaks
In order to understand and attempt to prevent data leaks in Qubes, we must distinguish among three different types of relevant data leaks:
-1. **Intentional leaks.** Malicious software which actively tries to leak data out of an AppVM, perhaps via cooperative covert channels established with other malicious software in another AppVM or on some server via networking, if networking, even limited, is allowed for the AppVM.
+1. **Intentional leaks.** Malicious software which actively tries to leak data out of an app qube, perhaps via cooperative covert channels established with other malicious software in another app qube or on some server via networking, if networking, even limited, is allowed for the app qube.
2. **Intentional sniffing.** Malicious software trying to use side channels to, e.g., actively guess some key material used in another VM by some non-malicious software there (e.g., non-leak-proof GPG accidentally leaking out bits of the private key by generating some timing patterns when using this key for some crypto operation).
Such attacks have been described in the academic literature, but it is doubtful that they would succeed in practice in a moderately busy general purpose system like Qubes OS where the attacker normally has no way to trigger the target crypto operation explicitly and it is normally required that the attacker trigger many such operations.
@@ -49,7 +48,7 @@ Such attacks have been described in the academic literature, but it is doubtful
3. **Unintentional leaks.** Non-malicious software which is either buggy or doesn't maintain the privacy of user data, whether by design or accident.
For example, software which automatically sends error reports to a remote server, where these reports contain details about the system which the user did not want to share.
- Both Qubes firewall and an empty NetVM (i.e., setting the NetVM of an AppVM to "none") can fully protect against leaks of type 3.
+ Both Qubes firewall and an empty NetVM (i.e., setting the NetVM of an app qube to "none") can fully protect against leaks of type 3.
However, neither Qubes firewall nor an empty NetVM are guaranteed to protect against leaks of types 1 and 2.
There are few effective, practical policy measures available to end-users today to stop the leaks of type 1.
It is likely that the only way to fully protect against leaks of type 2 is to either pause or shut down all other VMs while performing sensitive operations in the target VM(s) (such as key generation).
diff --git a/user/security-in-qubes/device-handling-security.md b/user/security-in-qubes/device-handling-security.md
index 1208a1802..a67a7b642 100644
--- a/user/security-in-qubes/device-handling-security.md
+++ b/user/security-in-qubes/device-handling-security.md
@@ -6,7 +6,6 @@ ref: 170
title: Device Handling Security
---
-
Any additional ability a VM gains is additional attack surface.
It's a good idea to always attach the minimum entity required in a VM.
@@ -73,4 +72,3 @@ One possibility is to set up the screen locker to require an additional step to
One way to achieve this is to use a [YubiKey](/doc/YubiKey/), or some other hardware token, or even to manually enter a one-time password.
Support for [two factor authentication](/news/2018/09/11/qubes-u2f-proxy/) was recently added, though there are [issues](https://github.com/QubesOS/qubes-issues/issues/4661).
-
diff --git a/user/security-in-qubes/firewall.md b/user/security-in-qubes/firewall.md
index 45c6e18c2..b122afca3 100644
--- a/user/security-in-qubes/firewall.md
+++ b/user/security-in-qubes/firewall.md
@@ -27,7 +27,7 @@ How to edit rules
In order to edit rules for a given qube, select it in the Qube Manager and press the "firewall" button.
-
+
If the qube is running, you can open Settings from the Qube Popup Menu.
@@ -494,7 +494,7 @@ Where to put firewall rules
---------------------------
Implicit in the above example [scripts](/doc/config-files/), but worth calling attention to: for all qubes *except* those supplying networking, iptables commands should be added to the `/rw/config/rc.local` script.
-For AppVMs supplying networking (`sys-firewall` inclusive), iptables commands should be added to `/rw/config/qubes-firewall-user-script`.
+For app qubes supplying networking (`sys-firewall` inclusive), iptables commands should be added to `/rw/config/qubes-firewall-user-script`.
Firewall troubleshooting
------------------------
diff --git a/user/security-in-qubes/split-gpg.md b/user/security-in-qubes/split-gpg.md
index 49dccf10f..bab2c9174 100644
--- a/user/security-in-qubes/split-gpg.md
+++ b/user/security-in-qubes/split-gpg.md
@@ -16,12 +16,12 @@ ref: 168
title: Split GPG
---
-Split GPG implements a concept similar to having a smart card with your private GPG keys, except that the role of the "smart card" is played by another Qubes AppVM.
+Split GPG implements a concept similar to having a smart card with your private GPG keys, except that the role of the "smart card" is played by another Qubes app qube.
This way one not-so-trusted domain, e.g. the one where Thunderbird is running, can delegate all crypto operations -- such as encryption/decryption and signing -- to another, more trusted, network-isolated domain.
This way the compromise of your domain where Thunderbird or another client app is running -- arguably a not-so-unthinkable scenario -- does not allow the attacker to automatically also steal all your keys.
(We should make a rather obvious comment here that the so-often-used passphrases on private keys are pretty meaningless because the attacker can easily set up a simple backdoor which would wait until the user enters the passphrase and steal the key then.)
-[](/attachment/wiki/SplitGpg/split-gpg-diagram.png)
+[](/attachment/doc/split-gpg-diagram.png)
This diagram presents an overview of the Split GPG architecture.
@@ -37,8 +37,8 @@ Unfortunately this problem of signing reliability is not solvable by Split GPG)
With Qubes Split GPG this problem is drastically minimized, because each time the key is to be used the user is asked for consent (with a definable time out, 5 minutes by default), plus is always notified each time the key is used via a tray notification from the domain where GPG backend is running.
This way it would be easy to spot unexpected requests to decrypt documents.
-[](/attachment/wiki/SplitGpg/r2-split-gpg-1.png)
-[](/attachment/wiki/SplitGpg/r2-split-gpg-3.png)
+[](/attachment/doc/r2-split-gpg-1.png)
+[](/attachment/doc/r2-split-gpg-3.png)
## Configuring Split GPG
@@ -64,9 +64,9 @@ For Fedora:
### Setting up the GPG backend domain
-First, create a dedicated AppVM for storing your keys (we will be calling it the GPG backend domain).
+First, create a dedicated app qube for storing your keys (we will be calling it the GPG backend domain).
It is recommended that this domain be network disconnected (set its netvm to `none`) and only used for this one purpose.
-In later examples this AppVM is named `work-gpg`, but of course it might have any other name.
+In later examples this app qube is named `work-gpg`, but of course it might have any other name.
Make sure that gpg is installed there.
At this stage you can add the private keys you want to store there, or you can now set up Split GPG and add the keys later.
@@ -116,7 +116,7 @@ ssb 4096R/30498E2A 2012-11-15
(...)
```
-Note that running normal `gpg -K` in the demo above shows no private keys stored in this AppVM.
+Note that running normal `gpg -K` in the demo above shows no private keys stored in this app qube.
A note on `gpg` and `gpg2`:
@@ -125,20 +125,20 @@ If you encounter trouble while trying to set up Split GPG, make sure you're usin
### Advanced Configuration
-The `qubes-gpg-client-wrapper` script sets the `QUBES_GPG_DOMAIN` variable automatically based on the content of the file `/rw/config/gpg-split-domain`, which should be set to the name of the GPG backend VM. This file survives the AppVM reboot, of course.
+The `qubes-gpg-client-wrapper` script sets the `QUBES_GPG_DOMAIN` variable automatically based on the content of the file `/rw/config/gpg-split-domain`, which should be set to the name of the GPG backend VM. This file survives the app qube reboot, of course.
```shell_session
[user@work-email ~]$ sudo bash
[root@work-email ~]$ echo "work-gpg" > /rw/config/gpg-split-domain
```
-Split GPG's default qrexec policy requires the user to enter the name of the AppVM containing GPG keys on each invocation. To improve usability for applications like Thunderbird with Enigmail, in `dom0` place the following line at the top of the file `/etc/qubes-rpc/policy/qubes.Gpg`:
+Split GPG's default qrexec policy requires the user to enter the name of the app qube containing GPG keys on each invocation. To improve usability for applications like Thunderbird with Enigmail, in `dom0` place the following line at the top of the file `/etc/qubes-rpc/policy/qubes.Gpg`:
```
work-email work-gpg allow
```
-where `work-email` is the Thunderbird + Enigmail AppVM and `work-gpg` contains your GPG keys.
+where `work-email` is the Thunderbird + Enigmail app qube and `work-gpg` contains your GPG keys.
You may also edit the qrexec policy file for Split GPG in order to tell Qubes your default gpg vm (qrexec prompts will appear with the gpg vm preselected as the target, instead of the user needing to type a name in manually). To do this, append `,default_target=` to `ask` in `/etc/qubes-rpc/policy/qubes.Gpg`. For the examples given on this page:
@@ -146,7 +146,7 @@ You may also edit the qrexec policy file for Split GPG in order to tell Qubes yo
@anyvm @anyvm ask,default_target=work-gpg
```
-Note that, because this makes it easier to accept Split GPG's qrexec authorization prompts, it may decrease security if the user is not careful in reviewing presented prompts. This may also be inadvisable if there are multiple AppVMs with Split GPG set up.
+Note that, because this makes it easier to accept Split GPG's qrexec authorization prompts, it may decrease security if the user is not careful in reviewing presented prompts. This may also be inadvisable if there are multiple app qubes with Split GPG set up.
## Using Thunderbird
@@ -156,9 +156,9 @@ Starting with version 78, Thunderbird has a built-in PGP feature and no longer r
In `work-email`, use the Thunderbird config editor (found at the bottom of preferences/options), and search for `mail.openpgp.allow_external_gnupg`. Switch the value to true. Still in config editor, search for `mail.openpgp.alternative_gpg_path`. Set its value to `/usr/bin/qubes-gpg-client-wrapper`. Restart Thunderbird after this change.
-[](/attachment/wiki/SplitGpg/tb78-1.png)
-[](/attachment/wiki/SplitGpg/tb78-2.png)
-[](/attachment/wiki/SplitGpg/tb78-3.png)
+[](/attachment/doc/tb78-1.png)
+[](/attachment/doc/tb78-2.png)
+[](/attachment/doc/tb78-3.png)
You need to obtain your key ID which should be **exactly 16 characters**. Enter the command `qubes-gpg-client-wrapper -K --keyid-format long`:
@@ -178,24 +178,24 @@ ssb rsa2048/370CE932085BA13B 2020-09-05 [E] [expires: 2022-09-05]
Open the Account Settings and open the *End-to-End Encryption* tab of the respective email account. Click the *Add Key* button. You'll be offered the choice *Use your external key through GnuPG*. Select it and click Continue.
-[](/attachment/wiki/SplitGpg/tb78-4.png)
-[](/attachment/wiki/SplitGpg/tb78-5.png)
+[](/attachment/doc/tb78-4.png)
+[](/attachment/doc/tb78-5.png)
The key ID reference you would need here is `777402E6D301615C`. Now paste or type the ID of the secret key that you would like to use. Be careful to enter it correctly, because your input isn't verified. Confirm to save this key ID. Now you can select the key ID to use.
-[](/attachment/wiki/SplitGpg/tb78-6.png)
-[](/attachment/wiki/SplitGpg/tb78-7.png)
+[](/attachment/doc/tb78-6.png)
+[](/attachment/doc/tb78-7.png)
This key ID will be used to digitally sign or send an encrypted message with your account. For this to work, Thunderbird needs a copy of your public key. At this time, Thunderbird doesn't fetch the public key from `/usr/bin/qubes-gpg-client-wrapper`, you must manually import it. Export the key as follow (assuming the key ID would be `777402E6D301615C`):
-[](/attachment/wiki/SplitGpg/tb78-8.png)
-[](/attachment/wiki/SplitGpg/tb78-9.png)
+[](/attachment/doc/tb78-8.png)
+[](/attachment/doc/tb78-9.png)
Use Thunderbird's Tools menu to open *OpenPGP Key Management*. In that window, use the File menu to access the *Import Public Key(s) From File* command. Open the file with your public key. After the import was successful, right click on the imported key in the list and select *Key Properties*. You must mark your own key as *Yes, I've verified in person this key has the correct fingerprint*.
Once this is done, you should be able to send an encrypted and signed email by selecting *Require Encryption* or *Digitally Sign This Message* in the compose menu *Options* or *Security* toolbar button. You can try it by sending an email to yourself.
-[](/attachment/wiki/SplitGpg/tb78-10.png)
+[](/attachment/doc/tb78-10.png)
For more details about using smart cards/Split GPG with Thunderbird PGP feature, please see [Thunderbird:OpenPGP:Smartcards](https://wiki.mozilla.org/Thunderbird:OpenPGP:Smartcards) from which the above documentation is inspired.
@@ -208,7 +208,7 @@ It is recommended to set up and use `/usr/bin/qubes-gpg-client-wrapper`, as disc
On a fresh Enigmail install, your need to change the default `Enigmail Junior Mode`. Go to Thunderbird preferences and then privacy tab. Select `Force using S/MIME and Enigmail`. Then, in the preferences of Enigmail, make it point to `/usr/bin/qubes-gpg-client-wrapper` instead of the standard GnuPG binary:
-[](/attachment/wiki/SplitGpg/tb-enigmail-split-gpg-settings-2.png)
+[](/attachment/doc/tb-enigmail-split-gpg-settings-2.png)
## Using Keybase with Split GPG
@@ -222,7 +222,7 @@ The following command will configure Keybase to use `/usr/bin/qubes-gpg-client-w
$ keybase config set gpg.command /usr/bin/qubes-gpg-client-wrapper
```
-Now that Keybase is configured to use `qubes-gpg-client-wrapper`, you will be able to use `keybase pgp select` to choose a GPG key from your backend GPG AppVM and link that key to your Keybase identity.
+Now that Keybase is configured to use `qubes-gpg-client-wrapper`, you will be able to use `keybase pgp select` to choose a GPG key from your backend GPG app qube and link that key to your Keybase identity.
## Using Git with Split GPG
@@ -271,7 +271,7 @@ Now you can use `git stag` to add a signed tag to a commit and `git vtag` to ver
## Importing public keys
-Use `qubes-gpg-import-key` in the client AppVM to import the key into the GPG backend VM.
+Use `qubes-gpg-import-key` in the client app qube to import the key into the GPG backend VM.
```shell_session
[user@work-email ~]$ export QUBES_GPG_DOMAIN=work-gpg
@@ -280,7 +280,7 @@ Use `qubes-gpg-import-key` in the client AppVM to import the key into the GPG ba
A safe, unspoofable user consent dialog box is displayed.
-[](/attachment/wiki/SplitGpg/r2-split-gpg-5.png)
+[](/attachment/doc/r2-split-gpg-5.png)
Selecting "Yes to All" will add a line in the corresponding [RPC Policy](/doc/rpc-policy/) file.
@@ -369,7 +369,7 @@ Rather, the master secret key remains in the `vault` VM, which is extremely unli
\* The attacker might nonetheless be able to leak the secret subkeys from the `work-gpg` VM in the manner described above, but even if this is successful, the secure master secret key can simply be used to revoke the compromised subkeys and to issue new subkeys in their place.
(This is significantly less devastating than having to create a new *master* keypair.)
-\*In order to gain access to the `vault` VM, the attacker would require the use of, e.g., a general Xen VM escape exploit or a [signed, compromised package which is already installed in the TemplateVM](/doc/templates/#trusting-your-templatevms) upon which the `vault` VM is based.
+\*In order to gain access to the `vault` VM, the attacker would require the use of, e.g., a general Xen VM escape exploit or a [signed, compromised package which is already installed in the template](/doc/templates/#trusting-your-templates) upon which the `vault` VM is based.
### Subkey Tutorials and Discussions
@@ -388,7 +388,7 @@ As always, exercise caution and use your good judgment.)
See ticket [#474](https://github.com/QubesOS/qubes-issues/issues/474) for more details and plans how to get around this problem, as well as the section on [using Split GPG with subkeys](#advanced-using-split-gpg-with-subkeys).
* It doesn't solve the problem of allowing the user to know what is to be signed before the operation gets approved.
- Perhaps the GPG backend domain could start a DisposableVM and have the to-be-signed document displayed there? To Be Determined.
+ Perhaps the GPG backend domain could start a disposable and have the to-be-signed document displayed there? To Be Determined.
* The Split GPG client will fail to sign or encrypt if the private key in the GnuPG backend is protected by a passphrase.
It will give an `Inappropriate ioctl for device` error.
@@ -398,4 +398,3 @@ As always, exercise caution and use your good judgment.)
Note that `pinentry` might show an error when you try to set an empty passphrase, but it will still make the change.
(See [this StackExchange answer](https://unix.stackexchange.com/a/379373) for more information.)
Note: The error shows only if you **do not** have graphical pinentry installed.
-
diff --git a/user/security-in-qubes/u2f-proxy.md b/user/security-in-qubes/u2f-proxy.md
index ca7dd7b49..b1836f3c9 100644
--- a/user/security-in-qubes/u2f-proxy.md
+++ b/user/security-in-qubes/u2f-proxy.md
@@ -6,7 +6,6 @@ ref: 167
title: U2F Proxy
---
-
The [Qubes U2F Proxy](https://github.com/QubesOS/qubes-app-u2f) is a secure proxy intended to make use of U2F two-factor authentication devices with web browsers without exposing the browser to the full USB stack, not unlike the [USB keyboard and mouse proxies](/doc/usb/) implemented in Qubes.
## What is U2F?
@@ -42,7 +41,7 @@ Therefore, the token is never in the same qube as the browser.
Our proxy forwards only the data necessary to actually perform the authentication, leaving all unnecessary data out, so it won't become a vector of attack.
This is depicted in the diagram below (click for full size).
-[](/attachment/wiki/posts/u2f.svg)
+[](/attachment/doc/u2f.svg)
The Qubes U2F Proxy has two parts: the frontend and the backend.
The frontend runs in the same qube as the browser and presents a fake USB-like HID device using `uhid`.
@@ -79,20 +78,20 @@ $ qvm-service --enable work qubes-u2f-proxy
The above assumes a `work` qube in which you would like to enable u2f. Repeat the `qvm-service` command for all qubes that should have the proxy enabled. Alternatively, you can add `qubes-u2f-proxy` in VM settings -> Services in the Qube Manager of each qube you would like to enable the service.
-In Fedora TemplateVMs:
+In Fedora templates:
```
$ sudo dnf install qubes-u2f
```
-In Debian TemplateVMs:
+In Debian templates:
```
$ sudo apt install qubes-u2f
```
As usual with software updates, shut down the templates after installation, then restart `sys-usb` and all qubes that use the proxy.
-After that, you may use your U2F token (but see [Browser support](#templatevm-and-browser-support) below).
+After that, you may use your U2F token (but see [Browser support](#template-and-browser-support) below).
## Advanced usage: per-qube key access
@@ -125,11 +124,10 @@ systemctl disable qubes-u2fproxy@sys-usb.service
Replace `USB_QUBE` with the actual USB qube name.
-## TemplateVM and browser support
+## Template and browser support
-The large number of possible combinations of TemplateVM (Fedora 27, 28; Debian 8, 9) and browser (multiple Google Chrome versions, multiple Chromium versions, multiple Firefox versions) made it impractical for us to test every combination that users are likely to attempt with the Qubes U2F Proxy.
+The large number of possible combinations of template (Fedora 27, 28; Debian 8, 9) and browser (multiple Google Chrome versions, multiple Chromium versions, multiple Firefox versions) made it impractical for us to test every combination that users are likely to attempt with the Qubes U2F Proxy.
In some cases, you may be the first person to try a particular combination.
Consequently (and as with any new feature), users will inevitably encounter bugs.
We ask for your patience and understanding in this regard.
-As always, please [report any bugs you encounter](/doc/reporting-bugs/).
-
+As always, please [report any bugs you encounter](/doc/issue-tracking/).
diff --git a/user/security-in-qubes/vm-sudo.md b/user/security-in-qubes/vm-sudo.md
index 66860a994..865f66718 100644
--- a/user/security-in-qubes/vm-sudo.md
+++ b/user/security-in-qubes/vm-sudo.md
@@ -10,7 +10,6 @@ ref: 165
title: Passwordless Root Access in VMs
---
-
Background (`/etc/sudoers.d/qubes` in VM):
```
@@ -118,9 +117,9 @@ Do not rely on this for extra security.**
>/etc/qubes-rpc/policy/qubes.VMAuth
```
- (Note: any VMs you would like still to have passwordless root access (e.g. TemplateVMs) can be specified in the second file with "\ dom0 allow")
+ (Note: any VMs you would like still to have passwordless root access (e.g. Templates) can be specified in the second file with "\ dom0 allow")
-2. Configuring Fedora TemplateVM to prompt Dom0 for any authorization request:
+2. Configuring Fedora template to prompt Dom0 for any authorization request:
- In `/etc/pam.d/system-auth`, replace all lines beginning with "auth" with these lines:
```
@@ -143,7 +142,7 @@ Do not rely on this for extra security.**
[root@fedora-20-x64]# rm /etc/polkit-1/localauthority/50-local.d/qubes-allow-all.pkla
```
-3. Configuring Debian/Whonix TemplateVM to prompt Dom0 for any authorization request:
+3. Configuring Debian/Whonix template to prompt Dom0 for any authorization request:
- In `/etc/pam.d/common-auth`, replace all lines beginning with "auth" with these lines:
```
diff --git a/user/security-in-qubes/yubi-key.md b/user/security-in-qubes/yubi-key.md
index ed26130fa..10f5809d2 100644
--- a/user/security-in-qubes/yubi-key.md
+++ b/user/security-in-qubes/yubi-key.md
@@ -10,7 +10,6 @@ ref: 169
title: YubiKey
---
-
You can use a YubiKey to enhance Qubes user authentication, for example to mitigate risk of someone snooping the password.
This can also slightly improve security when you have a [USB keyboard](/doc/device-handling-security/#security-warning-on-usb-input-devices).
@@ -24,7 +23,7 @@ Same as in the OTP case, you will need to set up your YubiKey, choose a separate
To use this mode you need to:
-1. Install yubikey personalization the packages in your TemplateVM on which your USB VM is based.
+1. Install yubikey personalization the packages in your template on which your USB VM is based.
For Fedora.
@@ -38,8 +37,8 @@ To use this mode you need to:
sudo apt-get install yubikey-personalization yubikey-personalization-gui
```
- Shut down your TemplateVM.
- Then, either reboot your USB VM (so changes inside the TemplateVM take effect in your USB TemplateBasedVM) or install the packages inside your USB VM if you would like to avoid rebooting it.
+ Shut down your template.
+ Then, either reboot your USB VM (so changes inside the template take effect in your USB app qube) or install the packages inside your USB VM if you would like to avoid rebooting it.
2. Configure your YubiKey for challenge-response `HMAC-SHA1` mode, for example [following this tutorial](https://www.yubico.com/products/services-software/personalization-tools/challenge-response/).
diff --git a/user/templates/debian/debian-upgrade.md b/user/templates/debian/debian-upgrade.md
index b05519208..2828af67c 100644
--- a/user/templates/debian/debian-upgrade.md
+++ b/user/templates/debian/debian-upgrade.md
@@ -1,4 +1,5 @@
---
+advanced: true
lang: en
layout: doc
permalink: /doc/template/debian/upgrade/
@@ -14,16 +15,16 @@ title: How to Upgrade a Debian Template In-place
- Warning: This page is intended for advanced users only. Most users seeking to upgrade should instead install a new Debian TemplateVM. Learn more about the two options here.
+ Warning: This page is intended for advanced users only. Most users seeking to upgrade should instead install a new Debian template. Learn more about the two options here.
-This page provides instructions for performing an in-place upgrade of an installed [Debian TemplateVM](/doc/templates/debian/).
-If you wish to install a new, unmodified Debian TemplateVM instead of upgrading a template that is already installed in your system, please see the [Debian TemplateVM](/doc/templates/debian/) page instead. ([Learn more about the two options.](/doc/templates/debian/#upgrading))
+This page provides instructions for performing an in-place upgrade of an installed [Debian Template](/doc/templates/debian/).
+If you wish to install a new, unmodified Debian template instead of upgrading a template that is already installed in your system, please see the [Debian Template](/doc/templates/debian/) page instead. ([Learn more about the two options.](/doc/templates/debian/#upgrading))
-In general, upgrading a Debian TemplateVM follows the same process as [upgrading a native Debian system](https://wiki.debian.org/DebianUpgrade).
+In general, upgrading a Debian template follows the same process as [upgrading a native Debian system](https://wiki.debian.org/DebianUpgrade).
-## Summary instructions for Debian TemplateVMs
+## Summary instructions for Debian templates
**Note:** The prompt on each line indicates where each command should be entered: `dom0`, `debian-`, or `debian-`, where `` is the Debian version number *from* which you are upgrading, and `` is the Debian version number *to* which you are upgrading.
@@ -40,10 +41,10 @@ In general, upgrading a Debian TemplateVM follows the same process as [upgrading
**Recommended:** [Switch everything that was set to the old template to the new template.](/doc/templates/#switching)
-## Detailed instructions for Debian TemplateVMs
+## Detailed instructions for Debian templates
-These instructions will show you how to upgrade Debian TemplateVMs.
-The same general procedure may be used to upgrade any template based on the standard Debian TemplateVM.
+These instructions will show you how to upgrade Debian templates.
+The same general procedure may be used to upgrade any template based on the standard Debian template.
**Note:** The prompt on each line indicates where each command should be entered: `dom0`, `debian-`, or `debian-`, where `` is the Debian version number *from* which you are upgrading, and `` is the Debian version number *to* which you are upgrading.
@@ -101,7 +102,7 @@ The same general procedure may be used to upgrade any template based on the stan
[user@debian- ~]$ sudo fstrim -av
```
-8. Shut down the new TemplateVM.
+8. Shut down the new template.
```
[user@dom0 ~]$ qvm-shutdown debian-
@@ -118,9 +119,9 @@ The same general procedure may be used to upgrade any template based on the stan
11. (Optional) [Uninstall the old template.](/doc/templates/#uninstalling)
Make sure that the template you're uninstalling is the old one, not the new one!
-## StandaloneVMs
+## Standalones
-The procedure for upgrading a Debian [StandaloneVM](/doc/standalone-and-hvm/) is the same as for a TemplateVM.
+The procedure for upgrading a Debian [standalone](/doc/standalone-and-hvm/) is the same as for a template.
## Release-specific notes
@@ -138,7 +139,7 @@ Please see [Debian's Buster upgrade instructions](https://www.debian.org/release
* If sound is not working, you may need to enable the Qubes testing repository to get the testing version of `qubes-gui-agent`.
This can be done by editing the `/etc/apt/sources.list.d/qubes-r4.list` file and uncommenting the `Qubes Updates Candidates` repo.
-* User-initiated updates/upgrades may not run when a templateVM first starts.
+* User-initiated updates/upgrades may not run when a template first starts.
This is due to a new Debian config setting that attempts to update automatically; it should be disabled with `sudo systemctl disable apt-daily.{service,timer}`.
Relevant discussions:
@@ -165,4 +166,3 @@ We strongly recommend against using any Debian release that has reached [end-of-
* By default, Qubes uses code names in the `apt` sources files, although the templates are referred to by release number.
Check the code names for the templates, and ensure you are aware of any changes you have made in the repository definitions.
-
diff --git a/user/templates/debian/debian.md b/user/templates/debian/debian.md
index cd4995de4..9c4258a03 100644
--- a/user/templates/debian/debian.md
+++ b/user/templates/debian/debian.md
@@ -11,15 +11,14 @@ ref: 134
title: Debian Templates
---
-
-The Debian [TemplateVM](/doc/templates/) is an officially [supported](/doc/supported-versions/#templatevms) TemplateVM in Qubes OS.
-This page is about the standard (or "full") Debian TemplateVM.
-For the minimal version, please see the [Minimal TemplateVMs](/doc/templates/minimal/) page.
+The Debian [template](/doc/templates/) is an officially [supported](/doc/supported-versions/#templates) template in Qubes OS.
+This page is about the standard (or "full") Debian template.
+For the minimal version, please see the [Minimal templates](/doc/templates/minimal/) page.
There is also a [Qubes page on the Debian Wiki](https://wiki.debian.org/Qubes).
## Installing
-To [install](/doc/templates/#installing) a specific Debian TemplateVM that is not currently installed in your system, use the following command in dom0:
+To [install](/doc/templates/#installing) a specific Debian template that is not currently installed in your system, use the following command in dom0:
```
$ sudo qubes-dom0-update qubes-template-debian-XX
@@ -27,29 +26,33 @@ $ sudo qubes-dom0-update qubes-template-debian-XX
(Replace `XX` with the Debian version number of the template you wish to install.)
-To reinstall a Debian TemplateVM that is already installed in your system, see [How to Reinstall a TemplateVM](/doc/reinstall-template/).
+To reinstall a Debian template that is already installed in your system, see [How to Reinstall a template](/doc/reinstall-template/).
## After Installing
-After installing a fresh Debian TemplateVM, we recommend performing the following steps:
+After installing a fresh Debian template, we recommend performing the following steps:
+
+1. [Update the template](/doc/software-update-vm/).
-1. [Update the TemplateVM](/doc/software-update-vm/).
+2. [Switch any app qubes that are based on the old template to the new one](/doc/templates/#switching).
-2. [Switch any TemplateBasedVMs that are based on the old TemplateVM to the new one](/doc/templates/#switching).
+3. If desired, [uninstall the old template](/doc/templates/#uninstalling).
-3. If desired, [uninstall the old TemplateVM](/doc/templates/#uninstalling).
+## Installing software
+
+See [How to Install Software](/doc/how-to-install-software/).
## Updating
-For routine daily TemplateVM updates within a given Debian release, see [Updating software in TemplateVMs](/doc/how-to-install-software/#updating-software-in-templatevms).
+For routine daily updates within a given release, see [How to Update](/doc/how-to-update/).
## Upgrading
-There are two ways to upgrade your TemplateVM to a new Debian release:
+There are two ways to upgrade your template to a new Debian release:
-- [Install a fresh template to replace the existing one.](#installing) **This option may be simpler for less experienced users.** After you install the new template, redo all desired template modifications and [switch everything that was set to the old template to the new template](/doc/templates/#switching). You may want to write down the modifications you make to your templates so that you remember what to redo on each fresh install. In the old Debian template, see `/var/log/dpkg.log` and `/var/log/apt/history.log` for logs of package manager actions.
+- **Recommended:** [Install a fresh template to replace the existing one.](#installing) **This option may be simpler for less experienced users.** After you install the new template, redo all desired template modifications and [switch everything that was set to the old template to the new template](/doc/templates/#switching). You may want to write down the modifications you make to your templates so that you remember what to redo on each fresh install. In the old Debian template, see `/var/log/dpkg.log` and `/var/log/apt/history.log` for logs of package manager actions.
-- [Perform an in-place upgrade of an existing Debian template.](/doc/template/debian/upgrade/) This option will preserve any modifications you've made to the template, **but it may be more complicated for less experienced users.**
+- **Advanced:** [Perform an in-place upgrade of an existing Debian template.](/doc/template/debian/upgrade/) This option will preserve any modifications you've made to the template, **but it may be more complicated for less experienced users.**
## Release-specific notes
@@ -106,4 +109,3 @@ The lesson is that you should carefully look at what is being installed to your
### Package installation errors in Qubes 4.0
If some packages throw installation errors, see [this guide.](/doc/vm-troubleshooting/#fixing-package-installation-errors)
-
diff --git a/user/templates/fedora/fedora-upgrade.md b/user/templates/fedora/fedora-upgrade.md
index 13163581a..866dcd66d 100644
--- a/user/templates/fedora/fedora-upgrade.md
+++ b/user/templates/fedora/fedora-upgrade.md
@@ -1,4 +1,5 @@
---
+advanced: true
lang: en
layout: doc
permalink: /doc/template/fedora/upgrade/
@@ -25,13 +26,13 @@ title: How to Upgrade a Fedora Template In-place
- Warning: This page is intended for advanced users only. Most users seeking to upgrade should instead install a new Fedora TemplateVM. Learn more about the two options here.
+ Warning: This page is intended for advanced users only. Most users seeking to upgrade should instead install a new Fedora template. Learn more about the two options here.
-This page provides instructions for performing an in-place upgrade of an installed [Fedora TemplateVM](/doc/templates/fedora/).
-If you wish to install a new, unmodified Fedora TemplateVM instead of upgrading a template that is already installed in your system, please see the [Fedora TemplateVM](/doc/templates/fedora/) page instead. ([Learn more about the two options.](/doc/templates/fedora/#upgrading))
+This page provides instructions for performing an in-place upgrade of an installed [Fedora Template](/doc/templates/fedora/).
+If you wish to install a new, unmodified Fedora template instead of upgrading a template that is already installed in your system, please see the [Fedora Template](/doc/templates/fedora/) page instead. ([Learn more about the two options.](/doc/templates/fedora/#upgrading))
-## Summary instructions for standard Fedora TemplateVMs
+## Summary instructions for standard Fedora templates
**Note:** The prompt on each line indicates where each command should be entered: `dom0`, `fedora-`, or `fedora-`, where `` is the Fedora version number *from* which you are upgrading, and `` is the Fedora version number *to* which you are upgrading.
@@ -52,10 +53,10 @@ If you wish to install a new, unmodified Fedora TemplateVM instead of upgrading
**Recommended:** [Switch everything that was set to the old template to the new template.](/doc/templates/#switching)
-## Detailed instructions for standard Fedora TemplateVMs
+## Detailed instructions for standard Fedora templates
-These instructions will show you how to upgrade the standard Fedora TemplateVM.
-The same general procedure may be used to upgrade any template based on the standard Fedora TemplateVM.
+These instructions will show you how to upgrade the standard Fedora template.
+The same general procedure may be used to upgrade any template based on the standard Fedora template.
**Note:** The prompt on each line indicates where each command should be entered: `dom0`, `fedora-`, or `fedora-`, where `` is the Fedora version number *from* which you are upgrading, and `` is the Fedora version number *to* which you are upgrading.
@@ -123,7 +124,7 @@ The same general procedure may be used to upgrade any template based on the stan
At least X MB more space needed on the / filesystem.
`
- In this case, one option is to [resize the TemplateVM's disk image](/doc/resize-disk-image/) before reattempting the upgrade process.
+ In this case, one option is to [resize the template's disk image](/doc/resize-disk-image/) before reattempting the upgrade process.
(See [Additional Information](#additional-information) below for other options.)
4. Check that you are on the correct (new) Fedora release. Do this check only after completing the upgrade process. This is *not* a troubleshooting procedure for fixing download issues from the repository. This check simply verifies that your clone has successfully been upgraded.
@@ -143,7 +144,7 @@ The same general procedure may be used to upgrade any template based on the stan
[user@fedora- ~]$ sudo fstrim -av
```
-6. Shut down the new TemplateVM.
+6. Shut down the new template.
```
[user@dom0 ~]$ qvm-shutdown fedora-
@@ -167,7 +168,7 @@ The same general procedure may be used to upgrade any template based on the stan
10. (Optional) [Uninstall the old template.](/doc/templates/#uninstalling)
Make sure that the template you're uninstalling is the old one, not the new one!
-## Summary instructions for Fedora Minimal TemplateVMs
+## Summary instructions for Fedora Minimal templates
**Note:** The prompt on each line indicates where each command should be entered: `dom0`, `fedora-`, or `fedora-`, where `` is the Fedora version number *from* which you are upgrading, and `` is the Fedora version number *to* which you are upgrading.
@@ -179,18 +180,18 @@ The same general procedure may be used to upgrade any template based on the stan
[user@fedora--minimal ~]# fstrim -v /
```
-(Shut down TemplateVM by any normal means.)
+(Shut down template by any normal means.)
(If you encounter insufficient space issues, you may need to use the methods described for the standard template above.)
-## StandaloneVMs
+## Standalones
-The procedure for upgrading a Fedora [StandaloneVM](/doc/standalone-and-hvm/) is the same as for a TemplateVM.
+The procedure for upgrading a Fedora [standalone](/doc/standalone-and-hvm/) is the same as for a template.
## Release-specific notes
-See the [news](/news/) announcement for each specific TemplateVM release for any important notices about that particular release.
+See the [news](/news/) announcement for each specific template release for any important notices about that particular release.
### End-of-life (EOL) releases
@@ -209,12 +210,11 @@ At least X MB more space needed on the / filesystem.
In this case, you have several options:
-1. [Increase the TemplateVM's disk image size](/doc/resize-disk-image/).
+1. [Increase the template's disk image size](/doc/resize-disk-image/).
This is the solution mentioned in the main instructions above.
2. Delete files in order to free up space. One way to do this is by uninstalling packages.
You may then reinstall them again after you finish the upgrade process, if desired).
However, you may end up having to increase the disk image size anyway (see previous option).
3. Do the upgrade in parts, e.g., by using package groups.
(First upgrade `@core` packages, then the rest.)
-4. Do not perform an in-place upgrade, see [Upgrading Fedora TemplateVMs](/doc/templates/fedora/#upgrading).
-
+4. Do not perform an in-place upgrade, see [Upgrading Fedora templates](/doc/templates/fedora/#upgrading).
diff --git a/user/templates/fedora/fedora.md b/user/templates/fedora/fedora.md
index 2b835585f..97725b93f 100644
--- a/user/templates/fedora/fedora.md
+++ b/user/templates/fedora/fedora.md
@@ -6,12 +6,11 @@ ref: 136
title: Fedora Templates
---
-
-The Fedora [TemplateVM](/doc/templates/) is the default TemplateVM in Qubes OS. This page is about the standard (or "full") Fedora TemplateVM. For the minimal and Xfce versions, please see the [Minimal TemplateVMs](/doc/templates/minimal/) and [Xfce TemplateVMs](/doc/templates/xfce/) pages.
+The Fedora [template](/doc/templates/) is the default template in Qubes OS. This page is about the standard (or "full") Fedora template. For the minimal and Xfce versions, please see the [Minimal templates](/doc/templates/minimal/) and [Xfce templates](/doc/templates/xfce/) pages.
## Installing
-To [install](/doc/templates/#installing) a specific Fedora TemplateVM that is not currently installed in your system, use the following command in dom0:
+To [install](/doc/templates/#installing) a specific Fedora template that is not currently installed in your system, use the following command in dom0:
```
$ sudo qubes-dom0-update qubes-template-fedora-XX
@@ -19,27 +18,30 @@ $ sudo qubes-dom0-update qubes-template-fedora-XX
(Replace `XX` with the Fedora version number of the template you wish to install.)
-To reinstall a Fedora TemplateVM that is already installed in your system, see [How to Reinstall a TemplateVM](/doc/reinstall-template/).
+To reinstall a Fedora template that is already installed in your system, see [How to Reinstall a template](/doc/reinstall-template/).
## After Installing
-After installing a fresh Fedora TemplateVM, we recommend performing the following steps:
+After installing a fresh Fedora template, we recommend performing the following steps:
+
+1. [Update the template](/doc/software-update-vm/).
-1. [Update the TemplateVM](/doc/software-update-vm/).
+2. [Switch any app qubes that are based on the old template to the new one](/doc/templates/#switching).
-2. [Switch any TemplateBasedVMs that are based on the old TemplateVM to the new one](/doc/templates/#switching).
+3. If desired, [uninstall the old template](/doc/templates/#uninstalling).
-3. If desired, [uninstall the old TemplateVM](/doc/templates/#uninstalling).
+## Installing software
+
+See [How to Install Software](/doc/how-to-install-software/).
## Updating
-For routine daily updates within a given release, see [Updating software in TemplateVMs](/doc/how-to-install-software/#updating-software-in-templatevms).
+For routine daily updates within a given release, see [How to Update](/doc/how-to-update/).
## Upgrading
-There are two ways to upgrade your TemplateVM to a new Fedora release:
-
-- [Install a fresh template to replace the existing one.](#installing) **This option may be simpler for less experienced users.** After you install the new template, redo all desired template modifications and [switch everything that was set to the old template to the new template](/doc/templates/#switching). You may want to write down the modifications you make to your templates so that you remember what to redo on each fresh install. To see a log of package manager actions, open a terminal in the old Fedora template and use the `dnf history` command.
+There are two ways to upgrade your template to a new Fedora release:
-- [Perform an in-place upgrade of an existing Fedora template.](/doc/template/fedora/upgrade/) This option will preserve any modifications you've made to the template, **but it may be more complicated for less experienced users.**
+- **Recommended:** [Install a fresh template to replace the existing one.](#installing) **This option may be simpler for less experienced users.** After you install the new template, redo all desired template modifications and [switch everything that was set to the old template to the new template](/doc/templates/#switching). You may want to write down the modifications you make to your templates so that you remember what to redo on each fresh install. To see a log of package manager actions, open a terminal in the old Fedora template and use the `dnf history` command.
+- **Advanced:** [Perform an in-place upgrade of an existing Fedora template.](/doc/template/fedora/upgrade/) This option will preserve any modifications you've made to the template, **but it may be more complicated for less experienced users.**
diff --git a/user/templates/how-to-reinstall-a-template.md b/user/templates/how-to-reinstall-a-template.md
index 68131d3e0..9d96bba47 100644
--- a/user/templates/how-to-reinstall-a-template.md
+++ b/user/templates/how-to-reinstall-a-template.md
@@ -9,13 +9,12 @@ ref: 128
title: How to Reinstall a Template
---
-
-If you suspect your [TemplateVM](/doc/templates/) is broken, misconfigured, or compromised, you can reinstall any TemplateVM that was installed from the Qubes repository.
+If you suspect your [template](/doc/templates/) is broken, misconfigured, or compromised, you can reinstall any template that was installed from the Qubes repository.
Automatic Method
----------------
-First, copy any files that you wish to keep from the TemplateVM's `/home` and `/rw` folders to a safe storage location.
+First, copy any files that you wish to keep from the template's `/home` and `/rw` folders to a safe storage location.
Then, in a dom0 terminal, run:
```
@@ -44,21 +43,21 @@ $ sudo qubes-dom0-update --enablerepo=qubes-templates-community --action=reinsta
Manual Method
-------------
-In what follows, the term "target TemplateVM" refers to whichever TemplateVM you want to reinstall.
-If you want to reinstall more than one TemplateVM, repeat these instructions for each one.
+In what follows, the term "target template" refers to whichever template you want to reinstall.
+If you want to reinstall more than one template, repeat these instructions for each one.
-1. Clone the existing target TemplateVM.
+1. Clone the existing target template.
This can be a good idea if you've customized the existing template and want to keep your customizations.
On the other hand, if you suspect that this template is broken, misconfigured, or compromised, be certain you do not start any VMs using it in the below procedure.
-2. Temporarily change all VMs based on the target TemplateVM to the new clone template, or remove them.
+2. Temporarily change all VMs based on the target template to the new clone template, or remove them.
This can be a good idea if you have user data in these VMs that you want to keep.
On the other hand, if you suspect that these VMs (or the templates on which they are based) are broken, misconfigured, or compromised, you may want to remove them instead.
You can do this in Qubes Manager by right-clicking on the VM and clicking **Remove VM**, or you can use the command `qvm-remove ` in dom0.
-3. Uninstall the target TemplateVM from dom0:
+3. Uninstall the target template from dom0:
```
$ sudo dnf remove
@@ -70,7 +69,7 @@ If you want to reinstall more than one TemplateVM, repeat these instructions for
$ sudo dnf remove qubes-template-whonix-gw
```
-4. Reinstall the target TemplateVM in dom0:
+4. Reinstall the target template in dom0:
```shell_session
$ sudo qubes-dom0-update --enablerepo= \
@@ -84,10 +83,9 @@ If you want to reinstall more than one TemplateVM, repeat these instructions for
qubes-template-whonix-gw
```
-5. If you temporarily changed all VMs based on the target TemplateVM to the clone template in step 3, change them back to the new target TemplateVM now.
- If you instead removed all VMs based on the old target TemplateVM, you can recreate your desired VMs from the newly reinstalled target TemplateVM now.
+5. If you temporarily changed all VMs based on the target template to the clone template in step 3, change them back to the new target template now.
+ If you instead removed all VMs based on the old target template, you can recreate your desired VMs from the newly reinstalled target template now.
6. Delete the cloned template.
You can do this in Qubes Manager by right-clicking on the VM and clicking **Remove VM**, or you can use the
command `qvm-remove ` in dom0.
-
diff --git a/user/templates/minimal-templates.md b/user/templates/minimal-templates.md
index 4ef7fe124..ac5456905 100644
--- a/user/templates/minimal-templates.md
+++ b/user/templates/minimal-templates.md
@@ -1,4 +1,5 @@
---
+advanced: true
lang: en
layout: doc
permalink: /doc/templates/minimal/
@@ -13,107 +14,170 @@ ref: 132
title: Minimal Templates
---
-The Minimal [TemplateVMs](/doc/templates/) are lightweight versions of their standard TemplateVM counterparts.
-They have only the most vital packages installed, including a minimal X and xterm installation.
-The sections below contain instructions for using the template and provide some examples for common use cases.
-There are currently three Minimal TemplateVMs corresponding to the standard [Fedora](/doc/templates/fedora/), [Debian](/doc/templates/debian/), [CentOS](/doc/templates/centos/) and [Gentoo](/doc/templates/gentoo/) TemplateVMs.
+The minimal [templates](/doc/templates/) are lightweight versions of their
+standard template counterparts. They have only the most vital packages
+installed, including a minimal X and xterm installation. When properly
+configured and used, minimal templates can be less resource-intensive, reduce
+attack surface, and support more fine-grained compartmentalization. The
+sections below contain instructions for installing and configuring minimal
+templates, along with some examples of common use cases.
## Important
-1. The Minimal TemplateVMs are intended only for advanced users.
- If you encounter problems with the Minimal TemplateVMs, we recommend that you use their standard TemplateVM counterparts instead.
+1. **The minimal templates are intended only for advanced users.** If you
+ encounter problems with the minimal templates, we recommend that you use
+ their standard template counterparts instead.
-2. If something works with a standard TemplateVM but not the minimal version, this is most likely due to user error (e.g., a missing package or misconfiguration) rather than a bug.
- In such cases, please do *not* file a bug report.
- Instead, please see [Help, Support, Mailing Lists, and Forum](/support/) for the appropriate place to ask for help.
- Once you have learned how to solve your problem, please [contribute what you learned to the documentation](/doc/doc-guidelines/).
+2. If something works with a standard template but not the minimal version,
+ this is most likely due to user error (e.g., a missing package or
+ misconfiguration) rather than a bug. In such cases, please do *not* file a
+ bug report. Instead, please see [Help, Support, Mailing Lists, and
+ Forum](/support/) for the appropriate place to ask for help. Once you have
+ learned how to solve your problem, please [contribute what you learned to
+ the documentation](/doc/doc-guidelines/).
-3. The Minimal TemplateVMs are intentionally *minimal*.
- [Do not ask for your favorite package to be added to the minimal template by default.](/faq/#could-you-please-make-my-preference-the-default)
+3. The minimal templates are intentionally *minimal*. [Do not ask for your
+ favorite package to be added to the minimal template by
+ default.](/faq/#could-you-please-make-my-preference-the-default)
-4. In order to reduce unnecessary risk, unused repositories have been disabled by default.
- If you wish to install or update any packages from those repositories, you must enable them.
+4. In order to reduce unnecessary risk, unused repositories have been disabled
+ by default. If you wish to install or update any packages from those
+ repositories, you must enable them.
+
+## List
+
+Minimal templates of the following distros are available:
+
+ - Fedora
+ - Debian
+ - CentOS
+ - Gentoo
## Installation
-The Minimal TemplateVMs can be installed with the following command (where `X` is your desired distro and version number):
+The minimal templates can be installed with the following type of command:
```
-[user@dom0 ~]$ sudo qubes-dom0-update qubes-template-X-minimal
+[user@dom0 ~]$ sudo qubes-dom0-update qubes-template---minimal
```
-If your desired version is not found, it may still be in [testing](/doc/testing/).
-You may wish to try again with the testing repository enabled:
+If your desired version is not found, it may still be in
+[testing](/doc/testing/). You may wish to try again with the testing repository
+enabled:
```
-[user@dom0 ~]$ sudo qubes-dom0-update --enablerepo=qubes-templates-itl-testing qubes-template-X-minimal
+[user@dom0 ~]$ sudo qubes-dom0-update --enablerepo=qubes-templates-itl-testing qubes-template---minimal
```
-If you would like to install a community distribution, try the install command by enabling the community repository:
+If you would like to install a community distribution, try the install command
+by enabling the community repository:
```
-[user@dom0 ~]$ sudo qubes-dom0-update --enablerepo=qubes-templates-community qubes-template-X-minimal
+[user@dom0 ~]$ sudo qubes-dom0-update --enablerepo=qubes-templates-community qubes-template---minimal
```
The download may take a while depending on your connection speed.
## Passwordless root
-It is an intentional design choice for [Passwordless Root Access in VMs](/doc/vm-sudo/) to be optional in Minimal TemplateVMs.
-Since the Minimal TemplateVMs are *minimal*, they are not configured for passwordless root by default.
-To update or install packages, execute the following command in dom0 (where `X` is your distro and version number):
+It is an intentional design choice for [Passwordless Root Access in
+VMs](/doc/vm-sudo/) to be optional in minimal templates. Since the minimal
+templates are *minimal*, they are not configured for passwordless root by
+default. To update or install packages, execute the following command in dom0:
```
-[user@dom0 ~]$ qvm-run -u root X-minimal xterm
+[user@dom0 ~]$ qvm-run -u root --minimal xterm
```
-This opens a root terminal in the Minimal TemplateVM, from which you can use execute root commands without `sudo`.
-You will have to do this every time if you choose not to enable passwordless root.
+This opens a root terminal in the minimal template, from which you can use
+execute root commands without `sudo`. You will have to do this every time if
+you choose not to enable passwordless root.
-If you want to be able to use `sudo` inside a Minimal TemplateVM (or TemplateBasedVMs based on a Minimal TemplateVM), open a root terminal as just instructed, then install the `qubes-core-agent-passwordless-root` package.
+If you want to be able to use `sudo` inside a minimal template (or app qubes
+based on a minimal template), open a root terminal as just instructed, then
+install the `qubes-core-agent-passwordless-root` package.
-Optionally, verify that passwordless root now works by opening a normal (non-root) xterm window in the Minimal TemplateVM, then issue the command `sudo -l`.
-This should give you output that includes the `NOPASSWD` keyword.
+Optionally, verify that passwordless root now works by opening a normal
+(non-root) xterm window in the minimal template, then issue the command `sudo
+-l`. This should give you output that includes the `NOPASSWD` keyword.
## Customization
-You may wish to clone the original template and make any changes in the clone instead of the original template.
-You must start the clone in order to customize it.
+You may wish to clone the original template and make any changes in the clone
+instead of the original template. You must start the clone in order to
+customize it.
-Customizing the template for specific use cases normally only requires installing additional packages.
+Customizing the template for specific use cases normally only requires
+installing additional packages.
## Distro-specific notes
-This following sections provide information that is specific to a particular Minimal TemplateVM distro.
+This following sections provide information that is specific to a particular
+minimal template distro.
### Fedora
-The following list provides an overview of which packages are needed for which purpose.
-As usual, the required packages are to be installed in the running template with the following command (replace `packages` with a space-delimited list of packages to be installed):
+The following list provides an overview of which packages are needed for which
+purpose. As usual, the required packages are to be installed in the running
+template with the following command (replace `packages` with a space-delimited
+list of packages to be installed):
```
[user@your-new-clone ~]$ sudo dnf install packages
```
-- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc` `gnome-keyring`.
+- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc`
+ `gnome-keyring`.
- Audio: `pulseaudio-qubes`.
-- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at least `qubes-core-agent-networking` and `iproute`, and also `qubes-core-agent-dom0-updates` if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
-- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking` `qubes-core-agent-network-manager` `NetworkManager-wifi` `network-manager-applet` `wireless-tools` `notification-daemon` `gnome-keyring` `polkit` `@hardware-support`. If your network devices need extra packages for the template to work as a network VM, use the `lspci` command to identify the devices, then run `dnf search firmware` (replace `firmware` with the appropriate device identifier) to find the needed packages and then install them. If you need utilities for debugging and analyzing network connections, install `tcpdump` `telnet` `nmap` `nmap-ncat`.
-- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`: `qubes-usb-proxy` to provide USB devices to other Qubes and `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
-- [VPN qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md): Use the `dnf search "NetworkManager VPN plugin"` command to look up the VPN packages you need, based on the VPN technology you'll be using, and install them. Some GNOME related packages may be needed as well. After creation of a machine based on this template, follow the [VPN instructions](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager) to configure it.
-- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and `qubes-mgmt-salt-vm-connector`.
-
-In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be needed to make the customized minimal template work properly.
-These packages are:
-
-- `qubes-core-agent-nautilus`: This package provides integration with the Nautilus file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in Nautilus).
-- `qubes-core-agent-thunar`: This package provides integration with the thunar file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in thunar).
-- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates. Any template on which the qube responsible for 'dom0' updates (e.g. `sys-firewall`) is based must contain this package.
+- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
+ least `qubes-core-agent-networking` and `iproute`, and also
+ `qubes-core-agent-dom0-updates` if you want to use it as the `UpdateVM`
+ (which is normally `sys-firewall`).
+- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
+ `qubes-core-agent-network-manager` `NetworkManager-wifi`
+ `network-manager-applet` `wireless-tools` `notification-daemon`
+ `gnome-keyring` `polkit` `@hardware-support`. If your network devices need
+ extra packages for the template to work as a network VM, use the `lspci`
+ command to identify the devices, then run `dnf search firmware` (replace
+ `firmware` with the appropriate device identifier) to find the needed
+ packages and then install them. If you need utilities for debugging and
+ analyzing network connections, install `tcpdump` `telnet` `nmap` `nmap-ncat`.
+- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`:
+ `qubes-usb-proxy` to provide USB devices to other Qubes and
+ `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
+- [VPN
+ qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ Use the `dnf search "NetworkManager VPN plugin"` command to look up the VPN
+ packages you need, based on the VPN technology you'll be using, and install
+ them. Some GNOME related packages may be needed as well. After creation of a
+ machine based on this template, follow the [VPN
+ instructions](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ to configure it.
+- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
+ `qubes-mgmt-salt-vm-connector`.
+
+In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be
+needed to make the customized minimal template work properly. These packages
+are:
+
+- `qubes-core-agent-nautilus`: This package provides integration with the
+ Nautilus file manager (without it, items like "copy to VM/open in disposable"
+ will not be shown in Nautilus).
+- `qubes-core-agent-thunar`: This package provides integration with the thunar
+ file manager (without it, items like "copy to VM/open in disposable" will not
+ be shown in thunar).
+- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates.
+ Any template on which the qube responsible for 'dom0' updates (e.g.
+ `sys-firewall`) is based must contain this package.
- `qubes-menus`: Defines menu layout.
-- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop experience.
+- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop
+ experience.
- `qubes-core-agent-qrexec`: Qubes qrexec agent. Installed by default.
-- `qubes-core-agent-systemd`: Qubes unit files for SystemD init style. Installed by default.
-- `qubes-core-agent-passwordless-root`, `polkit`: By default, the Fedora Minimal template doesn't have passwordless root. These two packages enable this feature.
+- `qubes-core-agent-systemd`: Qubes unit files for SystemD init style.
+ Installed by default.
+- `qubes-core-agent-passwordless-root`, `polkit`: By default, the Fedora
+ minimal template doesn't have passwordless root. These two packages enable
+ this feature.
- `qubes-core-agent-sysvinit`: Qubes unit files for SysV init style or upstart.
Also, there are packages to provide additional services:
@@ -124,45 +188,78 @@ Also, there are packages to provide additional services:
- `qubes-img-converter`: For implementing safe conversion of images.
- `qubes-snapd-helper`: If you want to use snaps in qubes.
- `thunderbird-qubes`: Additional tools for use in thunderbird.
-- `qubes-app-shutdown-idle`: If you want qubes to automatically shutdown when idle.
-- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the template and qubes.
+- `qubes-app-shutdown-idle`: If you want qubes to automatically shutdown when
+ idle.
+- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the
+ template and qubes.
-You may also wish to consider additional packages from the `qubes-core-agent` suite:
+You may also wish to consider additional packages from the `qubes-core-agent`
+suite.
-See [here](https://github.com/Qubes-Community/Contents/blob/master/docs/customization/fedora-minimal-template-customization.md) for further information on customizing `fedora-minimal`.
+See
+[here](https://github.com/Qubes-Community/Contents/blob/master/docs/customization/fedora-minimal-template-customization.md)
+for further information on customizing `fedora-minimal`.
#### Logging
-The `rsyslog` logging service is not installed by default, as all logging is instead being handled by the `systemd` journal.
-Users requiring the `rsyslog` service should install it manually.
+The `rsyslog` logging service is not installed by default, as all logging is
+instead being handled by the `systemd` journal. Users requiring the `rsyslog`
+service should install it manually.
To access the `journald` log, use the `journalctl` command.
### Debian
-The following list provides an overview of which packages are needed for which purpose.
-As usual, the required packages are to be installed in the running template with the following command (replace `packages` with a space-delimited list of packages to be installed):
+The following list provides an overview of which packages are needed for which
+purpose. As usual, the required packages are to be installed in the running
+template with the following command (replace `packages` with a space-delimited
+list of packages to be installed):
```
[user@your-new-clone ~]$ sudo apt install packages
```
-- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc` `gnome-keyring`
+- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc`
+ `gnome-keyring`
- Audio: `pulseaudio-qubes`
-- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates` if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
-- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking` `qubes-core-agent-network-manager`. If your network devices need extra packages for a network VM, use the `lspci` command to identify the devices, then find the package that provides necessary firmware and install it. If you need utilities for debugging and analyzing network connections, install the following packages: `tcpdump` `telnet` `nmap` `nmap-ncat`.
-- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`: `qubes-usb-proxy` to provide USB devices to other Qubes and `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
-- [VPN qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md): You may need to install network-manager VPN packages, depending on the VPN technology you'll be using. After creating a machine based on this template, follow the [VPN howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager) to configure it.
-- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and `qubes-mgmt-salt-vm-connector`.
-
-In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be needed to make the customized minimal template work properly.
-These packages are:
-
-- `qubes-core-agent-nautilus`: This package provides integration with the Nautilus file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in Nautilus).
-- `qubes-core-agent-thunar`: This package provides integration with the thunar file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in thunar).
-- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates. Any template on which the qube responsible for 'dom0' updates (e.g. `sys-firewall`) is based must contain this package.
+- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
+ least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates`
+ if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
+- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
+ `qubes-core-agent-network-manager`. If your network devices need extra
+ packages for a network VM, use the `lspci` command to identify the devices,
+ then find the package that provides necessary firmware and install it. If you
+ need utilities for debugging and analyzing network connections, install the
+ following packages: `tcpdump` `telnet` `nmap` `nmap-ncat`.
+- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`:
+ `qubes-usb-proxy` to provide USB devices to other Qubes and
+ `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
+- [VPN
+ qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ You may need to install network-manager VPN packages, depending on the VPN
+ technology you'll be using. After creating a machine based on this template,
+ follow the [VPN
+ howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ to configure it.
+- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
+ `qubes-mgmt-salt-vm-connector`.
+
+In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be
+needed to make the customized minimal template work properly. These packages
+are:
+
+- `qubes-core-agent-nautilus`: This package provides integration with the
+ Nautilus file manager (without it, items like "copy to VM/open in disposable"
+ will not be shown in Nautilus).
+- `qubes-core-agent-thunar`: This package provides integration with the thunar
+ file manager (without it, items like "copy to VM/open in disposable" will not
+ be shown in thunar).
+- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates.
+ Any template on which the qube responsible for 'dom0' updates (e.g.
+ `sys-firewall`) is based must contain this package.
- `qubes-menus`: Defines menu layout.
-- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop experience.
+- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop
+ experience.
Also, there are packages to provide additional services:
@@ -172,40 +269,75 @@ Also, there are packages to provide additional services:
- `qubes-img-converter`: For implementing safe conversion of images.
- `qubes-snapd-helper`: If you want to use snaps in qubes.
- `qubes-thunderbird`: Additional tools for use in thunderbird.
-- `qubes-app-shutdown-idle`: If you want qubes to automatically shutdown when idle.
-- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the template and qubes.
+- `qubes-app-shutdown-idle`: If you want qubes to automatically shutdown when
+ idle.
+- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the
+ template and qubes.
-Documentation on all of these can be found in the [docs](/doc)
+Documentation on all of these can be found in the [docs](/doc/).
-If you want to use interactive dialogs, (e.g file selection), you will need to add the `zenity` package. ([Here's an example](https://github.com/QubesOS/qubes-issues/issues/5202))
+If you want to use interactive dialogs, (e.g file selection), you will need to
+add the `zenity` package
+([example](https://github.com/QubesOS/qubes-issues/issues/5202)).
-You could, of course, use `qubes-vm-recommended` to automatically install many of these, but in that case you are well on the way to a standard Debian template.
+You could, of course, use `qubes-vm-recommended` to automatically install many
+of these, but in that case you are well on the way to a standard Debian
+template.
### CentOS
-The following list provides an overview of which packages are needed for which purpose.
-As usual, the required packages are to be installed in the running template with the following command (replace `packages` with a space-delimited list of packages to be installed):
+The following list provides an overview of which packages are needed for which
+purpose. As usual, the required packages are to be installed in the running
+template with the following command (replace `packages` with a space-delimited
+list of packages to be installed):
```
[user@your-new-clone ~]$ sudo yum install packages
```
-- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc` `gnome-keyring`
+- Commonly used utilities: `pciutils` `vim-minimal` `less` `psmisc`
+ `gnome-keyring`
- Audio: `pulseaudio-qubes`.
-- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates` if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
-- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking` `qubes-core-agent-network-manager` `NetworkManager-wifi` `network-manager-applet` `wireless-tools` `notification-daemon` `gnome-keyring`. If your network devices need extra packages for a network VM, use the `lspci` command to identify the devices, then find the package that provides necessary firnware and install it. If you need utilities for debugging and analyzing network connections, install the following packages: `tcpdump` `telnet` `nmap` `nmap-ncat`
-- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`: `qubes-usb-proxy` to provide USB devices to other Qubes and `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
-- [VPN qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md): You may need to install network-manager VPN packages, depending on the VPN technology you'll be using. After creating a machine based on this template, follow the [VPN howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager) to configure it.
-- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and `qubes-mgmt-salt-vm-connector`.
-
-In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be needed to make the customized minimal template work properly.
-These packages are:
-
-- `qubes-core-agent-nautilus`: This package provides integration with the Nautilus file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in Nautilus).
-- `qubes-core-agent-thunar`: This package provides integration with the thunar file manager (without it, items like "copy to VM/open in disposable VM" will not be shown in thunar).
-- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates. Any template on which the qube responsible for 'dom0' updates (e.g. `sys-firewall`) is based must contain this package.
+- [FirewallVM](/doc/firewall/), such as the template for `sys-firewall`: at
+ least `qubes-core-agent-networking`, and also `qubes-core-agent-dom0-updates`
+ if you want to use it as the `UpdateVM` (which is normally `sys-firewall`).
+- NetVM, such as the template for `sys-net`: `qubes-core-agent-networking`
+ `qubes-core-agent-network-manager` `NetworkManager-wifi`
+ `network-manager-applet` `wireless-tools` `notification-daemon`
+ `gnome-keyring`. If your network devices need extra packages for a network
+ VM, use the `lspci` command to identify the devices, then find the package
+ that provides necessary firnware and install it. If you need utilities for
+ debugging and analyzing network connections, install the following packages:
+ `tcpdump` `telnet` `nmap` `nmap-ncat`
+- [USB qube](/doc/usb-qubes/), such as the template for `sys-usb`:
+ `qubes-usb-proxy` to provide USB devices to other Qubes and
+ `qubes-input-proxy-sender` to provide keyboard or mouse input to dom0.
+- [VPN
+ qube](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md):
+ You may need to install network-manager VPN packages, depending on the VPN
+ technology you'll be using. After creating a machine based on this template,
+ follow the [VPN
+ howto](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/vpn.md#set-up-a-proxyvm-as-a-vpn-gateway-using-networkmanager)
+ to configure it.
+- `default-mgmt-dvm`: requires `qubes-core-agent-passwordless-root` and
+ `qubes-mgmt-salt-vm-connector`.
+
+In Qubes 4.0, additional packages from the `qubes-core-agent` suite may be
+needed to make the customized minimal template work properly. These packages
+are:
+
+- `qubes-core-agent-nautilus`: This package provides integration with the
+ Nautilus file manager (without it, items like "copy to VM/open in disposable"
+ will not be shown in Nautilus).
+- `qubes-core-agent-thunar`: This package provides integration with the thunar
+ file manager (without it, items like "copy to VM/open in disposable" will not
+ be shown in thunar).
+- `qubes-core-agent-dom0-updates`: Script required to handle `dom0` updates.
+ Any template on which the qube responsible for 'dom0' updates (e.g.
+ `sys-firewall`) is based must contain this package.
- `qubes-menus`: Defines menu layout.
-- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop experience.
+- `qubes-desktop-linux-common`: Contains icons and scripts to improve desktop
+ experience.
Also, there are packages to provide additional services:
@@ -213,9 +345,11 @@ Also, there are packages to provide additional services:
- `qubes-pdf-converter`: For implementing safe conversion of PDFs.
- `qubes-img-converter`: For implementing safe conversion of images.
- `qubes-snapd-helper`: If you want to use snaps in qubes.
-- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the template and qubes.
-
-Documentation on all of these can be found in the [docs](/doc)
+- `qubes-mgmt-salt-vm-connector`: If you want to use salt management on the
+ template and qubes.
-You could, of course, use `qubes-vm-recommended` to automatically install many of these, but in that case you are well on the way to a standard Debian template.
+Documentation on all of these can be found in the [docs](/doc/).
+You could, of course, use `qubes-vm-recommended` to automatically install many
+of these, but in that case you are well on the way to a standard Debian
+template.
diff --git a/user/templates/templates.md b/user/templates/templates.md
index e58886a82..485146bf8 100644
--- a/user/templates/templates.md
+++ b/user/templates/templates.md
@@ -11,25 +11,40 @@ ref: 131
title: Templates
---
+In [How to Get Started](/doc/how-to-get-started/), we covered the distinction
+in Qubes OS between where you *install* your software and where you *run* your
+software. Your software is installed in [templates](/doc/glossary/#template).
+Each template shares its root filesystem (i.e., all of its programs and system
+files) with all the qubes based on it. [App qubes](/doc/glossary/#app-qube) are
+where you run your software and store your data.
-In [Getting Started](/getting-started/), we covered the distinction in Qubes OS between where you *install* your software and where you *run* your software.
-Your software is installed in [TemplateVMs](/doc/glossary/#templatevm) (or "templates" for short).
-Each TemplateVM shares its root filesystem (i.e., all of its programs and system files) with other qubes called [TemplateBasedVMs](/doc/glossary/#templatebasedvm).
-TemplateBasedVMs are where you run your software and store your data.
+The template system has significant benefits:
-The TemplateVM system has significant benefits:
+* **Security:** Each qube has read-only access to the template on which it's
+ based, so if a qube is compromised, it cannot infect its template or any of
+ the other qubes based on that template.
-* **Security:** Each qube has read-only access to the TemplateVM on which it's based, so if a qube is compromised, it cannot infect its TemplateVM or any of the other qubes based on that TemplateVM.
-* **Storage:** Each qube based on a TemplateVM uses only the disk space required to store its own data (i.e., your files in its home directory), which dramatically saves on disk space.
-* **Speed:** It is extremely fast to create new TemplateBasedVMs, since the root filesystem already exists in the TemplateVM.
-* **Updates:** Updates are naturally centralized, since updating a TemplateVM means that all qubes based on it will automatically use those updates after they're restarted.
+* **Storage:** Each qube based on a template uses only the disk space required
+ to store its own data (i.e., your files in its home directory), which
+ dramatically saves on disk space.
-An important side effect of this system is that any software installed in a TemplateBasedVM (rather than in the TemplateVM on which it is based) will disappear after the TemplateBasedVM reboots (see [Inheritance and Persistence](#inheritance-and-persistence)).
-For this reason, we recommend installing most of your software in TemplateVMs, not TemplateBasedVMs.
+* **Speed:** It is extremely fast to create new app qubes, since the root
+ filesystem already exists in the template.
-The default TemplateVM in Qubes is based on Fedora, but there are additional templates based on other Linux distributions.
-There are also templates available with or without certain software preinstalled.
-You may find it useful to have multiple TemplateVMs installed in order to provide:
+* **Updates:** Updates are naturally centralized, since updating a template
+ means that all qubes based on it will automatically use those updates after
+ they're restarted.
+
+An important side effect of this system is that any software installed in an
+app qube (rather than in the template on which it is based) will disappear
+after the app qube reboots (see [Inheritance and
+Persistence](#inheritance-and-persistence)). For this reason, we recommend
+installing most of your software in templates, not app qubes.
+
+The default template in Qubes is based on Fedora, but there are additional
+templates based on other Linux distributions. There are also templates
+available with or without certain software preinstalled. You may find it useful
+to have multiple templates installed in order to provide:
* Different security levels (e.g., more or less trusted software installed)
* Different environments (e.g., Fedora, Debian, Whonix)
@@ -37,9 +52,9 @@ You may find it useful to have multiple TemplateVMs installed in order to provid
## Official
-These are the official Qubes OS Project templates.
-We build and release updates for these templates.
-We guarantee that the binary updates are compiled from exactly the same source code as we publish.
+These are the official Qubes OS Project templates. We build and release updates
+for these templates. We guarantee that the binary updates are compiled from
+exactly the same source code as we publish.
* [Fedora](/doc/templates/fedora/) (default)
* [Fedora Minimal](/doc/templates/minimal/)
@@ -49,13 +64,16 @@ We guarantee that the binary updates are compiled from exactly the same source c
## Community
-These templates are supported by the Qubes community.
-Some of them are available in ready-to-use binary package form (built by the Qubes developers), while others are available only in source code form.
-In all cases, the Qubes OS Project does not provide updates for these templates.
-However, such updates may be provided by the template maintainer.
+These templates are supported by the Qubes community. Some of them are
+available in ready-to-use binary package form (built by the Qubes developers),
+while others are available only in source code form. In all cases, the Qubes OS
+Project does not provide updates for these templates. However, such updates may
+be provided by the template maintainer.
-By installing these templates, you are trusting not only the Qubes developers and the distribution maintainers, but also the template maintainer.
-In addition, these templates may be somewhat less stable, since the Qubes developers do not test them.
+By installing these templates, you are trusting not only the Qubes developers
+and the distribution maintainers, but also the template maintainer. In
+addition, these templates may be somewhat less stable, since the Qubes
+developers do not test them.
* [Whonix](/doc/templates/whonix/)
* [Ubuntu](/doc/templates/ubuntu/)
@@ -67,58 +85,78 @@ In addition, these templates may be somewhat less stable, since the Qubes develo
## Installing
-Certain TemplateVMs come preinstalled with Qubes OS.
-However, there may be times when you wish to install a fresh TemplateVM from the Qubes repositories, e.g.:
+Certain templates come preinstalled with Qubes OS. However, there may be times
+when you wish to install a fresh template from the Qubes repositories, e.g.:
-* When a TemplateVM version you're using reaches [end-of-life](/doc/supported-versions/).
-* When a new version of a TemplateVM that you wish to use becomes [supported](/doc/supported-versions/).
-* When you suspect your TemplateVM has been compromised.
-* When you have made modifications to your TemplateVM that you no longer want.
+* When a template version you're using reaches
+ [end-of-life](/doc/supported-versions/).
+* When a new version of a template that you wish to use becomes
+ [supported](/doc/supported-versions/).
+* When you suspect your template has been compromised.
+* When you have made modifications to your template that you no longer want.
-Please refer to each TemplateVM's installation instructions.
-Usually, the installation method is to execute the following type of command in dom0:
+Please refer to each template's installation instructions. Usually, the
+installation method is to execute the following type of command in dom0:
```
-$ sudo qubes-dom0-update qubes-template-
+$ sudo qubes-dom0-update qubes-template--
```
-where `qubes-template-` is the name of your TemplateVM package.
+`qubes-template--` is the name of the desired
+template package. Advanced users can install a
+[minimal](/doc/templates/minimal/) version of the template, if one exists, by
+appending `-minimal` directly to the end of the template package name.
-If you wish to install a community template, you must enable the community template repo:
+If you wish to install a community template, you must enable the community
+template repo:
```
-$ sudo qubes-dom0-update --enablerepo=qubes-templates-community qubes-template-
+$ sudo qubes-dom0-update --enablerepo=qubes-templates-community qubes-template--
```
-If you receive the message that no match is found for `qubes-template-`, see [here](/faq/#when-i-try-to-install-a-templatevm-it-says-no-match-is-found).
+If you receive the message that no match is found for
+`qubes-template--`, see
+[here](/faq/#when-i-try-to-install-a-template-it-says-no-match-is-found).
## After Installing
-After installing a fresh TemplateVM, we recommend performing the following steps:
+After installing a fresh template, we recommend performing the following steps:
-1. [Update the TemplateVM](#updating).
+1. [Update the template](#updating).
-2. [Switch any TemplateBasedVMs that are based on the old TemplateVM to the new one](#switching).
+2. [Switch any app qubes that are based on the old template to the new
+ one](#switching).
-3. If desired, [uninstall the old TemplateVM](#uninstalling).
+3. If desired, [uninstall the old template](#uninstalling).
## Updating
-Please see [Updating Qubes OS](/doc/updating-qubes-os/).
+Please see [How to Update](/doc/how-to-update/).
+
+## Installing Software
+
+Please see [How to Install Software](/doc/how-to-install-software).
## Uninstalling
-The procedure for uninstalling a TemplateVM depends on how it was created.
+The procedure for uninstalling a template depends on how it was created.
-If the TemplateVM was originaly created by cloning another TemplateVM, then you can delete it the same way as you would any other qube.
-In the Qube Manager, right-click on the TemplateVM and select **Delete qube**.
-(If you're not sure, you can safely try this method first to see if it works.)
+If the template was originaly created by cloning another template, then you can
+delete it the same way as you would any other qube. In the Qube Manager,
+right-click on the template and select **Delete qube**. (If you're not sure,
+you can safely try this method first to see if it works.)
-If, on the other hand, the TemplateVM came pre-installed or was installed by installing a template package in dom0, per the instructions [above](#installing), then you must execute the following type of command in dom0 in order to uninstall it:
+If, on the other hand, the template came pre-installed or was installed by
+installing a template package in dom0, per the instructions
+[above](#installing), then you must execute the following type of command in
+dom0 in order to uninstall it:
- $ sudo dnf remove qubes-template-
+```
+$ sudo dnf remove qubes-template--
+```
-(where `qubes-template-` is the name of your TemplateVM package)
+`qubes-template--` is the name of the desired
+template package.
You may see warning messages like the following:
@@ -139,152 +177,215 @@ warning: file /var/lib/qubes/vm-templates/fedora-XX/apps: remove failed: No such
warning: file /var/lib/qubes/vm-templates/fedora-XX: remove failed: No such file or directory
```
-These are normal and expected. Nothing is wrong, and no action is required to address these warnings.
+These are normal and expected. Nothing is wrong, and no action is required to
+address these warnings.
-If this uninstallation command doesn't work, please see [How to Remove VMs Manually](/doc/remove-vm-manually/).
+If this uninstallation command doesn't work, please see
+[VM Troubleshooting](/doc/vm-troubleshooting/).
-If the Applications Menu entry doesn't go away after you uninstall a TemplateVM, execute the following type of command in dom0:
+If the Applications Menu entry doesn't go away after you uninstall a template,
+execute the following type of command in dom0:
```
-$ rm ~/.local/share/applications/
+$ rm ~/.local/share/applications/
```
-Applications Menu entries for backups of removed VMs can also be found in `/usr/local/share/applications/` of dom0.
+Applications Menu entries for backups of removed qubes can also be found in
+`/usr/local/share/applications/` of dom0.
```
-$ rm /usr/local/share/applications/
+$ rm /usr/local/share/applications/
```
## Reinstalling
-Please see [How to Reinstall a TemplateVM](/doc/reinstall-template/).
+Please see [How to Reinstall a Template](/doc/reinstall-template/).
## Switching
-When you install a new template or upgrade a clone of a template, it is recommended that you switch everything that was set to the old template to the new template:
+When you install a new template or upgrade a clone of a template, it is
+recommended that you switch everything that was set to the old template to the
+new template:
1. Make the new template the default template.
- `
- Applications Menu --> System Tools --> Qubes Global Settings --> Default template
- `
+ ```
+ Applications Menu -> System Tools -> Qubes Global Settings -> Default template
+ ```
-2. If your keyboard or mouse is connected through `sys-usb`, switch `sys-usb` to the new template.
- (Note that this is a single command to ensure that `sys-usb` restarts.
- If it does not, you will not be able to use your USB keyboard or mouse.)
+2. If your keyboard or mouse is connected through `sys-usb`, switch `sys-usb`
+ to the new template. (Note that this is a single command to ensure that
+ `sys-usb` restarts. If it does not, you will not be able to use your USB
+ keyboard or mouse.)
```
- [user@dom0 ~]$ qvm-shutdown --wait sys-usb; qvm-prefs sys-usb template ; qvm-start sys-usb
+ [user@dom0 ~]$ qvm-shutdown --wait sys-usb; qvm-prefs sys-usb template ; qvm-start sys-usb
```
-3. Base AppVMs on the new template.
+3. Base app qubes on the new template.
- `
- Applications Menu --> System Tools --> Qubes Template Manager
- `
+ ```
+ Applications Menu -> System Tools -> Qubes Template Manager
+ ```
-4. Base the [DisposableVM Template](/doc/glossary/#disposablevm-template) on the new template.
+4. Base the [disposable template](/doc/glossary/#disposable-template) on the new
+ template.
```
- [user@dom0 ~]$ qvm-create -l red -t
- [user@dom0 ~]$ qvm-prefs template_for_dispvms True
- [user@dom0 ~]$ qvm-features appmenus-dispvm 1
- [user@dom0 ~]$ qubes-prefs default-dispvm
+ [user@dom0 ~]$ qvm-create -l red -t
+ [user@dom0 ~]$ qvm-prefs template_for_dispvms True
+ [user@dom0 ~]$ qvm-features appmenus-dispvm 1
+ [user@dom0 ~]$ qubes-prefs default-dispvm
```
## Advanced
-The following sections cover advanced topics pertaining to TemplateVMs.
+The following sections cover advanced topics pertaining to templates.
### Inheritance and Persistence
-Whenever a TemplateBasedVM is created, the contents of the `/home` directory of its parent TemplateVM are *not* copied to the child TemplateBasedVM's `/home`.
-The child TemplateBasedVM's `/home` is always independent from its parent TemplateVM's `/home`, which means that any subsequent changes to the parent TemplateVM's `/home` will not affect the child TemplateBasedVM's `/home`.
-
-Once a TemplateBasedVM has been created, any changes in its `/home`, `/usr/local`, or `/rw/config` directories will be persistent across reboots, which means that any files stored there will still be available after restarting the TemplateBasedVM.
-No changes in any other directories in TemplateBasedVMs persist in this manner. If you would like to make changes in other directories which *do* persist in this manner, you must make those changes in the parent TemplateVM.
-
-| | Inheritance (1) | Persistence (2)
-|--------------------|-----------------------------------------------------------|------------------------------------------
-|TemplateVM | n/a | Everything
-|TemplateBasedVM (3) | `/etc/skel` to `/home`, `/usr/local.orig` to `/usr/local` | `/rw` (includes `/home`, `/usr/local` and `bind-dirs`)
-|DisposableVM | `/rw` (includes `/home`, `/usr/local` and `bind-dirs`) | Nothing
-
-(1) Upon creation
-(2) Following shutdown
-(3) Including any [DisposableVM Templates](/doc/glossary/#disposablevm-template)
-
-### Trusting your TemplateVMs
-
-As the TemplateVM is used for creating filesystems for other AppVMs where you actually do the work, it means that the TemplateVM is as trusted as the most trusted AppVM based on this template.
-In other words, if your template VM gets compromised, e.g. because you installed an application, whose *installer's scripts* were malicious, then *all* your AppVMs (based on this template) will inherit this compromise.
+Whenever an app qube is created, the contents of the `/home` directory of its
+parent template are *not* copied to the child app qube's `/home`. The child app
+qube's `/home` is always independent from its parent template's `/home`, which
+means that any subsequent changes to the parent template's `/home` will not
+affect the child app qube's `/home`.
+
+Once an app qube has been created, any changes in its `/home`, `/usr/local`, or
+`/rw/config` directories will be persistent across reboots, which means that
+any files stored there will still be available after restarting the app qube.
+No changes in any other directories in app qubes persist in this manner. If you
+would like to make changes in other directories which *do* persist in this
+manner, you must make those changes in the parent template.
+
+| Qube Type | Inheritance1 | Persistence2 |
+|-------------------------------------------------|-----------------------------------------------------------|---------------------------------------------------------|
+| [template](/doc/glossary/#template) | N/A (templates cannot be based on templates) | everything |
+| [app qube](/doc/glossary/#app-qube)3 | `/etc/skel` to `/home`; `/usr/local.orig` to `/usr/local` | `/rw` (includes `/home`, `/usr/local`, and `bind-dirs`) |
+| [disposable](/doc/glossary/#disposable) | `/rw` (includes `/home`, `/usr/local`, and `bind-dirs`) | nothing |
+
+1Upon creation
+2Following shutdown
+3Includes [disposable templates](/doc/glossary/#disposable-template)
+
+### Trusting your templates
+
+As the template is used for creating filesystems for other app qubes where you
+actually do the work, it means that the template is as trusted as the most
+trusted app qube based on this template. In other words, if your template gets
+compromised, e.g. because you installed an application, whose *installer's
+scripts* were malicious, then *all* your app qubes (based on this template)
+will inherit this compromise.
There are several ways to deal with this problem:
-* Only install packages from trusted sources -- e.g. from the pre-configured Fedora repositories.
- All those packages are signed by Fedora, and we expect that at least the package's installation scripts are not malicious.
- This is enforced by default (at the [firewall VM level](/doc/firewall/)), by not allowing any networking connectivity in the default template VM, except for access to the Fedora repos.
+* Only install packages from trusted sources -- e.g. from the pre-configured
+ Fedora repositories. All those packages are signed by Fedora, and we expect
+ that at least the package's installation scripts are not malicious. This is
+ enforced by default (at the [firewall qube level](/doc/firewall/)), by not
+ allowing any networking connectivity in the default template, except for
+ access to the Fedora repos.
-* Use *standalone VMs* (see below) for installation of untrusted software packages.
+* Use [standalones](/doc/glossary/#standalone) (see below) for installation of
+ untrusted software packages.
-* Use multiple templates (see below) for different classes of domains, e.g. a less trusted template, used for creation of less trusted AppVMs, would get various packages from less trusted vendors, while the template used for more trusted AppVMs will only get packages from the standard Fedora repos.
+* Use multiple templates (see below) for different classes of domains, e.g. a
+ less trusted template, used for creation of less trusted app qubes, would get
+ various packages from less trusted vendors, while the template used for more
+ trusted app qubes will only get packages from the standard Fedora repos.
Some popular questions:
-> So, why should we actually trust Fedora repos -- it also contains large amount of third-party software that might be buggy, right?
+> So, why should we actually trust Fedora repos -- it also contains large
+> amount of third-party software that might be buggy, right?
-As far as the template's compromise is concerned, it doesn't really matter whether `/usr/bin/firefox` is buggy and can be exploited, or not.
-What matters is whether its *installation* scripts (such as %post in the rpm.spec) are benign or not.
-Template VM should be used only for installation of packages, and nothing more, so it should never get a chance to actually run `/usr/bin/firefox` and get infected from it, in case it was compromised.
-Also, some of your more trusted AppVMs would have networking restrictions enforced by the [firewall VM](/doc/firewall/), and again they should not fear this proverbial `/usr/bin/firefox` being potentially buggy and easy to compromise.
+As far as the template's compromise is concerned, it doesn't really matter
+whether `/usr/bin/firefox` is buggy and can be exploited, or not. What matters
+is whether its *installation* scripts (such as %post in the rpm.spec) are
+benign or not. A template should be used only for installation of packages, and
+nothing more, so it should never get a chance to actually run
+`/usr/bin/firefox` and get infected from it, in case it was compromised. Also,
+some of your more trusted app qubes would have networking restrictions enforced
+by the [firewall qube](/doc/firewall/), and again they should not fear this
+proverbial `/usr/bin/firefox` being potentially buggy and easy to compromise.
> But why trust Fedora?
-Because we chose to use Fedora as a vendor for the Qubes OS foundation (e.g. for Dom0 packages and for AppVM packages).
-We also chose to trust several other vendors, such as Xen.org, kernel.org, and a few others whose software we use in Dom0.
-We had to trust *somebody* as we are unable to write all the software from scratch ourselves.
-But there is a big difference in trusting all Fedora packages to be non-malicious (in terms of installation scripts) vs. trusting all those packages are non-buggy and non-exploitable.
-We certainly do not assume the latter.
-
-> So, are the template VMs as trusted as Dom0?
-
-Not quite.
-Dom0 compromise is absolutely fatal, and it leads to Game OverTM.
-However, a compromise of a template affects only a subset of all your AppVMs (in case you use more than one template, or also some standalone VMs).
-Also, if your AppVMs are network disconnected, even though their filesystems might get compromised due to the corresponding template compromise, it still would be difficult for the attacker to actually leak out the data stolen in an AppVM.
-Not impossible (due to existence of cover channels between VMs on x86 architecture), but difficult and slow.
-
-### Note on treating TemplateBasedVMs' root filesystem non-persistence as a security feature
-
-Any TemplateBasedVM that is based on a TemplateVM has its root filesystem non-persistent across VM reboots.
-In other words, whatever changes the VM makes (or the malware running in this VM makes) to its root filesystem, are automatically discarded whenever one restarts the VM.
-
-This might seem like an excellent anti-malware mechanism to be used inside the VM.
-However, one should be careful with treating this property as a reliable way to keep the VM malware-free.
-This is because the non-persistence, in the case of normal VMs, applies only to the root filesystem and not to the user filesystem (on which the `/home`, `/rw`, and `/usr/local` are stored) for obvious reasons.
-It is possible that malware, especially malware that could be specifically written to target a Qubes-based VMs, could install its hooks inside the user home directory files only.
-Examples of obvious places for such hooks could be: `.bashrc`, the Firefox profile directory which contains the extensions, or some PDF or DOC documents that are expected to be opened by the user frequently (assuming the malware found an exploitable bug in the PDF or DOC reader), and surely many others places, all in the user's home directory.
-
-One advantage of the non-persistent rootfs though, is that the malware is still inactive before the user's filesystem gets mounted and "processed" by system/applications, which might theoretically allow for some scanning programs (or a skilled user) to reliably scan for signs of infections of the AppVM.
-But, of course, the problem of finding malware hooks in general is hard, so this would work likely only for some special cases (e.g. an AppVM which doesn't use Firefox, as otherwise it would be hard to scan the Firefox profile directory reliably to find malware hooks there).
-Also note that the user filesystem's metadata might got maliciously modified by malware in order to exploit a hypothetical bug in the AppVM kernel whenever it mounts the malformed filesystem.
-However, these exploits will automatically stop working (and so the infection might be cleared automatically) after the hypothetical bug got patched and the update applied (via template update), which is an exceptional feature of Qubes OS.
-
-Also note that DisposableVMs do not have persistent user filesystem, and so they start up completely "clean" every time.
-Note the word "clean" means in this context: the same as their template filesystem, of course.
+Because we chose to use Fedora as a vendor for the Qubes OS foundation (e.g.
+for dom0 packages and for app qube packages). We also chose to trust several
+other vendors, such as Xen.org, kernel.org, and a few others whose software we
+use in dom0. We had to trust *somebody* as we are unable to write all the
+software from scratch ourselves. But there is a big difference in trusting all
+Fedora packages to be non-malicious (in terms of installation scripts) vs.
+trusting all those packages are non-buggy and non-exploitable. We certainly do
+not assume the latter.
+
+> So, are the templates as trusted as dom0?
+
+Not quite. Dom0 compromise is absolutely fatal, and it leads to Game
+OverTM. However, a compromise of a template affects only a subset of
+all your app qubes (in case you use more than one template, or also some
+standalones). Also, if your app qubes are network disconnected, even though
+their filesystems might get compromised due to the corresponding template
+compromise, it still would be difficult for the attacker to actually leak out
+the data stolen in an app qube. Not impossible (due to existence of covert
+channels between VMs on x86 architecture), but difficult and slow.
+
+### Note on treating app qubes' root filesystem non-persistence as a security feature
+
+Any app qube that is based on a template has its root filesystem non-persistent
+across qube reboots. In other words, whatever changes the qube makes (or the
+malware running in this qube makes) to its root filesystem, are automatically
+discarded whenever one restarts the qube.
+
+This might seem like an excellent anti-malware mechanism to be used inside the
+qube. However, one should be careful with treating this property as a reliable
+way to keep the qube malware-free. This is because the non-persistence, in the
+case of normal qubes, applies only to the root filesystem and not to the user
+filesystem (on which the `/home`, `/rw`, and `/usr/local` are stored) for
+obvious reasons. It is possible that malware, especially malware that could be
+specifically written to target Qubes, could install its hooks
+inside the user home directory files only. Examples of obvious places for such
+hooks could be: `.bashrc`, the Firefox profile directory which contains the
+extensions, or some PDF or DOC documents that are expected to be opened by the
+user frequently (assuming the malware found an exploitable bug in the PDF or
+DOC reader), and surely many others places, all in the user's home directory.
+
+One advantage of the non-persistent rootfs though, is that the malware is still
+inactive before the user's filesystem gets mounted and "processed" by
+system/applications, which might theoretically allow for some scanning programs
+(or a skilled user) to reliably scan for signs of infections of the app qube.
+But, of course, the problem of finding malware hooks in general is hard, so
+this would work likely only for some special cases (e.g. an app qube which
+doesn't use Firefox, as otherwise it would be hard to scan the Firefox profile
+directory reliably to find malware hooks there). Also note that the user
+filesystem's metadata might got maliciously modified by malware in order to
+exploit a hypothetical bug in the app qube kernel whenever it mounts the
+malformed filesystem. However, these exploits will automatically stop working
+(and so the infection might be cleared automatically) after the hypothetical
+bug got patched and the update applied (via template update), which is an
+exceptional feature of Qubes OS.
+
+Also note that disposable qubes do not have persistent user filesystem, and so
+they start up completely "clean" every time. Note the word "clean" means in
+this context: the same as their template filesystem, of course.
### Important Notes
-* `qvm-trim-template` is no longer necessary or available in Qubes 4.0 and higher.
- All VMs are created in a thin pool and trimming is handled automatically.
- No user action is required.
- See [Disk Trim](/doc/disk-trim) for more information.
-
-* RPM-installed templates are "system managed" and therefore cannot be backed up using Qubes' built-in backup function.
- In order to ensure the preservation of your custom settings and the availability of a "known-good" backup template, you may wish to clone the default system template and use your clone as the default template for your AppVMs.
-
-* Some templates are available in ready-to-use binary form, but some of them are available only as source code, which can be built using the [Qubes Builder](/doc/qubes-builder/).
- In particular, some template "flavors" are available in source code form only.
- For the technical details of the template system, please see [TemplateVM Implementation](/doc/template-implementation/).
- Take a look at the [Qubes Builder](/doc/qubes-builder/) documentation for instructions on how to compile them.
-
+* `qvm-trim-template` is no longer necessary or available in Qubes 4.0 and
+ higher. All qubes are created in a thin pool and trimming is handled
+ automatically. No user action is required. See [Disk Trim](/doc/disk-trim)
+ for more information.
+
+* RPM-installed templates are "system managed" and therefore cannot be backed
+ up using Qubes' built-in backup function. In order to ensure the preservation
+ of your custom settings and the availability of a "known-good" backup
+ template, you may wish to clone the default system template and use your
+ clone as the default template for your app qubes.
+
+* Some templates are available in ready-to-use binary form, but some of them
+ are available only as source code, which can be built using the [Qubes
+ Builder](/doc/qubes-builder/). In particular, some template "flavors" are
+ available in source code form only. For the technical details of the template
+ system, please see [Template Implementation](/doc/template-implementation/).
+ Take a look at the [Qubes Builder](/doc/qubes-builder/) documentation for
+ instructions on how to compile them.
diff --git a/user/templates/xfce-templates.md b/user/templates/xfce-templates.md
index ce808dff9..cc5556b69 100644
--- a/user/templates/xfce-templates.md
+++ b/user/templates/xfce-templates.md
@@ -11,13 +11,12 @@ ref: 222
title: XFCE Templates
---
-
If you would like to use Xfce (more lightweight compared to GNOME desktop environment) Linux distribution in your qubes,
you can install one of the available Xfce templates for [Fedora](/doc/templates/fedora/), [CentOS](/doc/templates/centos/) or [Gentoo](/doc/templates/gentoo/).
## Installation
-The Fedora Xfce TemplateVMs can be installed with the following command (where `X` is your desired distro and version number):
+The Fedora Xfce templates can be installed with the following command (where `X` is your desired distro and version number):
```
[user@dom0 ~]$ sudo qubes-dom0-update qubes-template-X-xfce
@@ -45,5 +44,4 @@ You may wish to try again with the testing repository enabled:
The download may take a while depending on your connection speed.
-To reinstall a Xfce TemplateVM that is already installed in your system, see [How to Reinstall a TemplateVM](/doc/reinstall-template/).
-
+To reinstall a Xfce template that is already installed in your system, see [How to Reinstall a template](/doc/reinstall-template/).
diff --git a/user/troubleshooting/app-menu-shortcut-troubleshooting.md b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
index 8b62c69a2..a36e5677b 100644
--- a/user/troubleshooting/app-menu-shortcut-troubleshooting.md
+++ b/user/troubleshooting/app-menu-shortcut-troubleshooting.md
@@ -11,10 +11,10 @@ ref: 202
title: App Menu Shortcut Troubleshooting
---
-For ease of use Qubes aggregates shortcuts to applications that are installed in AppVMs and shows them in one application menu (aka "app menu" or "start menu") in dom0.
-Clicking on such shortcut runs the assigned application in its AppVM.
+For ease of use Qubes aggregates shortcuts to applications that are installed in app qubes and shows them in one application menu (aka "app menu" or "start menu") in dom0.
+Clicking on such shortcut runs the assigned application in its app qube.
-
+
To make applications newly installed via the OS's package manager show up in the menu, use the `qvm-sync-appmenus` command (Linux VMs do this automatically):
@@ -22,7 +22,7 @@ To make applications newly installed via the OS's package manager show up in the
After that, select the *Add more shortcuts* entry in the VM's submenu to customize which applications are shown:
-
+
The above image shows that Windows HVMs are also supported (provided that Qubes Tools are installed).
@@ -32,10 +32,10 @@ What if my application has not been automatically included in the list of availa
Some times applications may not have included a `.desktop` file and may not be detected by `qvm-sync-appmenus`.
Other times, you may want to make a web shortcut available from the Qubes start menu.
-You can manually create new entries in the "available applications" list of shortcuts for all AppVMs based on a TemplateVM.
+You can manually create new entries in the "available applications" list of shortcuts for all app qubes based on a template.
To do this:
-1. Open a terminal window to the TemplateVM.
+1. Open a terminal window to the template.
2. Create a custom `.desktop` file in `/usr/share/applications` (you may need to first create the subdirectory).
Look in `/usr/share/applications` for existing examples, or see the full [file specification](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
It will be something like:
@@ -53,17 +53,17 @@ To do this:
Exec=vuescan
```
-3. In dom0, run `qvm-sync-appmenus `.
-4. Go to VM Settings of the AppVM(s) to which you want to add the new shortcut, then the Applications tab.
+3. In dom0, run `qvm-sync-appmenus `.
+4. Go to VM Settings of the app qube(s) to which you want to add the new shortcut, then the Applications tab.
Move the newly created shortcut to the right under selected.
-If you only want to create a shortcut for a single AppVM, you can create a custom menu entry instead:
+If you only want to create a shortcut for a single app qube, you can create a custom menu entry instead:
1. Open a terminal window to Dom0.
2. Create a custom `.desktop` file in `~/.local/share/applications`.
Look in the same directory for existing examples, or see the full [file specification](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
You may use `qvm-run` inside the `.desktop` file; see [Behind the scenes](/doc/app-menu-shortcut-troubleshooting/#behind-the-scenes) for more details.
-3. Edit the `~/.config/menus/applications-merged/-vm.menu` file for the AppVM.
+3. Edit the `~/.config/menus/applications-merged/-vm.menu` file for the app qube.
4. Add a custom menu entry referring to your newly created `.desktop` file.
~~~
@@ -78,7 +78,7 @@ If you only want to create a shortcut for a single AppVM, you can create a custo
What about applications in DispVMs?
-----------------------------------
-[See here](/doc/disposablevm-customization/).
+[See here](/doc/disposable-customization/).
Fixing shortcuts
----------------
@@ -102,16 +102,16 @@ Behind the scenes
-----------------
`qvm-sync-appmenus` works by invoking *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain.
-This service enumerates installed applications and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates .desktop files in the AppVM/TemplateVM directory.
+This service enumerates installed applications and sends formatted info back to the dom0 script (`/usr/libexec/qubes-appmenus/qubes-receive-appmenus`) which creates .desktop files in the app qube/template directory.
For Linux VMs the service script is in `/etc/qubes-rpc/qubes.GetAppMenus`.
In Windows it's a PowerShell script located in `c:\Program Files\Invisible Things Lab\Qubes OS Windows Tools\qubes-rpc-services\get-appmenus.ps1` by default.
-The list of installed applications for each AppVM is stored in dom0's `~/.local/share/qubes-appmenus//apps.templates`.
+The list of installed applications for each app qube is stored in dom0's `~/.local/share/qubes-appmenus//apps.templates`.
Each menu entry is a file that follows the [.desktop file format](https://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html) with some wildcards (*%VMNAME%*, *%VMDIR%*).
Applications selected to appear in the menu are stored in `~/.local/share/qubes-appmenus//apps`.
Actual command lines for the menu shortcuts involve `qvm-run` command which starts a process in another domain.
Examples: `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_Manager` or `qvm-run -q -a --service -- %VMNAME% qubes.StartApp+firefox`
-Note that you can create a shortcut that points to a .desktop file in your AppVM with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
+Note that you can create a shortcut that points to a .desktop file in your app qube with e.g. `qvm-run -q -a --service -- personal qubes.StartApp+firefox`.
diff --git a/user/troubleshooting/autostart-troubleshooting.md b/user/troubleshooting/autostart-troubleshooting.md
new file mode 100644
index 000000000..3d67d6be5
--- /dev/null
+++ b/user/troubleshooting/autostart-troubleshooting.md
@@ -0,0 +1,36 @@
+---
+lang: en
+layout: doc
+permalink: /doc/autostart-troubleshooting/
+title: Autostart Troubleshooting
+---
+
+The following instructions are valid for **Qubes OS R4.0 legacy mode** and
+**Qubes OS R4.1 legacy and UEFI modes**. For **Qubes OS R4.0 in UEFI mode**,
+there is no GRUB, so manual boot from another operating system is needed.
+
+In several cases, there is a need to prevent `autostart=True` for qubes on
+boot. For example:
+
+* `sys-usb` was enabled, but the only keyboard is attached via USB, and the
+ `qubes.InputKeyboard` service is disabled.
+* A PCI device assigned to an autostarting qube crashes the system (e.g., a GPU
+ or RAID controller card).
+
+To address this, there is a `qubes.skip_autostart` option for the kernel
+command line. You can use it at the grub boot menu.
+
+[](/attachment/doc/grub1.png)
+
+Press the `E` key on the first prompt (or your custom prompt). Then, press the
+down arrow key multiple times to reach the line starting with `module2`.
+
+[](/attachment/doc/grub2.png)
+
+Append `qubes.skip_autostart` to the end of this line (generally after the
+`rhgb quiet` options).
+
+[](/attachment/doc/grub3.png)
+
+Press `Ctrl+X` to boot with the edited GRUB entry. The boot will proceed as
+usual from here, except that no qube will be autostarted.
diff --git a/user/troubleshooting/disk-troubleshooting.md b/user/troubleshooting/disk-troubleshooting.md
index 07a3a5160..d10eebeab 100644
--- a/user/troubleshooting/disk-troubleshooting.md
+++ b/user/troubleshooting/disk-troubleshooting.md
@@ -11,7 +11,6 @@ ref: 231
title: Disk Troubleshooting
---
-
## "Out of disk space" error ##
If the disk is completely full, you will get an `Out of disk space` error that may crash your system because Dom0 does not have enough disk space to work.
diff --git a/user/troubleshooting/gui-troubleshooting.md b/user/troubleshooting/gui-troubleshooting.md
index 95ee58e45..215fa61be 100644
--- a/user/troubleshooting/gui-troubleshooting.md
+++ b/user/troubleshooting/gui-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 233
title: GUI Troubleshooting
---
-
## Can't click on anything after connecting 4k external display
When you connect a 4K external display, you may be unable to click on anything but a small area in the upper-right corner.
diff --git a/user/troubleshooting/hardware-troubleshooting.md b/user/troubleshooting/hardware-troubleshooting.md
index ab2adda50..7d332f4cb 100644
--- a/user/troubleshooting/hardware-troubleshooting.md
+++ b/user/troubleshooting/hardware-troubleshooting.md
@@ -8,7 +8,6 @@ ref: 97
title: Hardware Troubleshooting
---
-
## Audio doesn't work / Troubleshooting newer hardware
By default, the kernel that is installed in dom0 comes from the `kernel` package, which is an older Linux LTS kernel.
@@ -51,4 +50,3 @@ Restarting `xorg` is required.
The most straightforward way is to reboot the system.
More information in [this discussion](https://groups.google.com/d/topic/qubes-devel/d8ZQ_62asKI/discussion) and [this GitHub issue](https://github.com/QubesOS/qubes-issues/issues/1396).
-
diff --git a/user/troubleshooting/hvm-troubleshooting.md b/user/troubleshooting/hvm-troubleshooting.md
index 4cafdee35..6f9fc4f08 100644
--- a/user/troubleshooting/hvm-troubleshooting.md
+++ b/user/troubleshooting/hvm-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 232
title: HVM Troubleshooting
---
-
## HVM pauses on boot, followed by kernel error
The HVM may pause on boot, showing a fixed cursor.
diff --git a/user/troubleshooting/installation-troubleshooting.md b/user/troubleshooting/installation-troubleshooting.md
index bcab8981c..51fa8b331 100644
--- a/user/troubleshooting/installation-troubleshooting.md
+++ b/user/troubleshooting/installation-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 224
title: Installation Troubleshooting
---
-
## "An unknown error has occurred" error during installation
Some people have encountered this error message when trying to install Qubes on drives that already have data on them.
@@ -105,4 +104,3 @@ If the setting is not configured correctly, it means that your hardware won’t
In Qubes 4.0, the default installation won't function properly without IOMMU, as default sys-net and sys-usb qubes require IOMMU. It is possible to configure them to reduce isolation and not use IOMMU by changing virtualization mode of these two VMs to "PV".
In Qubes 4.1, IOMMU is strictly required, even when the virtualization mode of a VM is changed to "PV"; it is not possible to use Qubes on a system without IOMMU.
-
diff --git a/user/troubleshooting/media-troubleshooting.md b/user/troubleshooting/media-troubleshooting.md
index b42e2080a..82234b8b3 100644
--- a/user/troubleshooting/media-troubleshooting.md
+++ b/user/troubleshooting/media-troubleshooting.md
@@ -6,12 +6,11 @@ ref: 235
title: Media Troubleshooting
---
-
## Can't play media videos in a VM due to missing codecs
If you’re having trouble playing a video file in a qube, you’re probably missing the required codecs.
The easiest way to resolve this is to install VLC Media Player and use that to play your video files.
-You can do this in multiple different TemplateVM distros by following the instructions [here](/faq/#how-do-i-play-video-files).
+You can do this in multiple different template distros by following the instructions [here](/faq/#how-do-i-play-video-files).
## Video lagging
diff --git a/user/troubleshooting/pci-troubleshooting.md b/user/troubleshooting/pci-troubleshooting.md
index a33ccd43e..18b8f2b8c 100644
--- a/user/troubleshooting/pci-troubleshooting.md
+++ b/user/troubleshooting/pci-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 230
title: PCI Troubleshooting
---
-
## DMA errors
VMs with attached PCI devices in Qubes have allocated a small buffer for DMA operations (called swiotlb).
@@ -151,5 +150,5 @@ Look at the [FAQs](/faq/#i-assigned-a-pci-device-to-a-qube-then-unassigned-itshu
You may have an adapter (wired, wireless), that is not compatible with open-source drivers shipped by Qubes.
You may need to install a binary blob, which provides drivers, from the linux-firmware package.
-Open a terminal and run `sudo dnf install linux-firmware` in the TemplateVM upon which your NetVM is based.
-You have to restart the NetVM after the TemplateVM has been shut down.
+Open a terminal and run `sudo dnf install linux-firmware` in the template upon which your NetVM is based.
+You have to restart the NetVM after the template has been shut down.
diff --git a/user/troubleshooting/resume-suspend-troubleshooting.md b/user/troubleshooting/resume-suspend-troubleshooting.md
index aede0f5a7..e44f57da4 100644
--- a/user/troubleshooting/resume-suspend-troubleshooting.md
+++ b/user/troubleshooting/resume-suspend-troubleshooting.md
@@ -9,7 +9,6 @@ ref: 94
title: Suspend/Resume Troubleshooting
---
-
## Network-Manager says “Device not ready” on suspend/resume
These instructions may help with suspend/resume issues for more devices than just wireless cards, that is just the (unfortunately not uncommon) example used here.
@@ -130,4 +129,4 @@ After the whole system gets suspended into S3 sleep and subsequently resumed, so
This can be achieved under a Windows HVM by opening the Device Manager, selecting the actual device (such as a USB controller), 'Disabling' the device, and then 'Enabling' the device again.
This is illustrated on the screenshot below:
-
+
diff --git a/user/troubleshooting/uefi-troubleshooting.md b/user/troubleshooting/uefi-troubleshooting.md
index c9835556d..2ac56fa20 100644
--- a/user/troubleshooting/uefi-troubleshooting.md
+++ b/user/troubleshooting/uefi-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 177
title: UEFI Troubleshooting
---
-
## Successfully installed in legacy mode, but had to change some kernel parameters
If you've installed successfully in legacy mode but had to change some kernel parameters for it to work, you should try installing in UEFI mode with the same parameters.
diff --git a/user/troubleshooting/update-troubleshooting.md b/user/troubleshooting/update-troubleshooting.md
index c6950d3b9..dc9015b4c 100644
--- a/user/troubleshooting/update-troubleshooting.md
+++ b/user/troubleshooting/update-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 239
title: Update Troubleshooting
---
-
## “Failed to synchronize cache for repo” errors when updating Fedora templates
This is general Fedora issue, not a Qubes-specific issue.
@@ -22,11 +21,11 @@ Here are some examples of non-Qubes reports about this problem:
More examples can be found by searching for "Failed to synchronize cache for repo" (with quotation marks) on your preferred search engine.
-## Lost internet access after a TemplateVM update
+## Lost internet access after a template update
-In earlier versions of Qubes, there were situations where qubes lost internet access after a TemplateVM update. The following fix should be applied in recent versions of Qubes.
+In earlier versions of Qubes, there were situations where qubes lost internet access after a template update. The following fix should be applied in recent versions of Qubes.
-Run `systemctl enable NetworkManager-dispatcher.service` in the TemplateVM upon which your NetVM is based.
+Run `systemctl enable NetworkManager-dispatcher.service` in the template upon which your NetVM is based.
You may have to reboot afterward for the change to take effect.
(Note: This is an upstream problem. See [this Redhat ticket](https://bugzilla.redhat.com/show_bug.cgi?id=974811)).
For details, see the qubes-users mailing list threads [here](https://groups.google.com/d/topic/qubes-users/xPLGsAJiDW4/discussion) and [here](https://groups.google.com/d/topic/qubes-users/uN9G8hjKrGI/discussion).)
@@ -37,12 +36,12 @@ This has nothing to do with Qubes.
It's a longstanding Windows bug.
More information about this issue and solutions can be found [here](https://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates).
-## Dom0 and/or TemplateVM update stalls when updating via the GUI tool
+## Dom0 and/or template update stalls when updating via the GUI tool
This can usually be fixed by updating via the command line.
In dom0, open a terminal and run `sudo qubes-dom0-update`.
-Depending on your operating system, open a terminal in the TemplateVMs and run:
+Depending on your operating system, open a terminal in the templates and run:
* Fedora: `sudo dnf upgrade`
* Debian: `apt-get update && apt-get dist-upgrade`
diff --git a/user/troubleshooting/updating-debian-and-whonix.md b/user/troubleshooting/updating-debian-and-whonix.md
index 97b150c64..9bbf5c9a7 100644
--- a/user/troubleshooting/updating-debian-and-whonix.md
+++ b/user/troubleshooting/updating-debian-and-whonix.md
@@ -6,10 +6,9 @@ ref: 98
title: Updating Debian and Whonix
---
-
Despite Qubes shipping with [Debian Templates](/doc/templates/debian/), most of Qubes core components run on Fedora and thus our documentation has better coverage for Fedora. However, Qubes has been working closely with the [Whonix](https://whonix.org) project which is based on Debian.
-This troubleshooting guide is collection of tips about updating Whonix that also pertain to updating the normal Debian package manager. If you plan to use Debian heavily, **we highly recommend you install the Whonix templates and use them to update your normal Debian TemplateVM.**
+This troubleshooting guide is collection of tips about updating Whonix that also pertain to updating the normal Debian package manager. If you plan to use Debian heavily, **we highly recommend you install the Whonix templates and use them to update your normal Debian template.**
*Note: some of the links on this page go to documentation on Whonix's website*
diff --git a/user/troubleshooting/usb-troubleshooting.md b/user/troubleshooting/usb-troubleshooting.md
index 04e5b7a7b..24ff7417f 100644
--- a/user/troubleshooting/usb-troubleshooting.md
+++ b/user/troubleshooting/usb-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 234
title: USB Troubleshooting
---
-
## disp-sys-usb does not start
If the disp-sys-usb does not start, it could be due to a PCI passthrough problem.
@@ -101,7 +100,7 @@ If your computer has a PS/2 port, you may instead use a PS/2 keyboard to enter t
When trying to [create and use a USB qube](/doc/how-to-use-usb-devices/#creating-and-using-a-usb-qube) with the `qubes-usb-proxy` package, you may receive this error: `ERROR: qubes-usb-proxy not installed in the VM`.
If you encounter this error, you can install the `qubes-usb-proxy` with the package manager in the VM you want to attach the USB device to.
-Depending on your operating system, open a terminal in the TemplateVM and enter one of the following commands:
+Depending on your operating system, open a terminal in the template and enter one of the following commands:
- Fedora: `sudo dnf install qubes-usb-proxy`
- Debian/Ubuntu: `sudo apt-get install qubes-usb-proxy`
diff --git a/user/troubleshooting/vm-troubleshooting.md b/user/troubleshooting/vm-troubleshooting.md
index 69f057ffe..d684e8ce5 100644
--- a/user/troubleshooting/vm-troubleshooting.md
+++ b/user/troubleshooting/vm-troubleshooting.md
@@ -8,7 +8,6 @@ ref: 223
title: VM Troubleshooting
---
-
## VM Kernel troubleshooting
This troubleshoot applies to the non-default kernel choice described in the [Managing VM docs](/doc/managing-vm-kernels/#using-kernel-installed-in-the-vm).
@@ -76,7 +75,7 @@ Common reasons that may be revealed are: too low memory, corrupted files or a VM
If the error occurs as a result of too little initial memory, increase the initial memory from 200MB to 400MB by navigating to VM settings » Advanced » Initial memory.
-## "No match found" when trying to install a TemplateVM
+## "No match found" when trying to install a template
For example:
diff --git a/user/troubleshooting/vpn-troubleshooting.md b/user/troubleshooting/vpn-troubleshooting.md
index 073ba53a3..ff2236291 100644
--- a/user/troubleshooting/vpn-troubleshooting.md
+++ b/user/troubleshooting/vpn-troubleshooting.md
@@ -6,7 +6,6 @@ ref: 240
title: VPN Troubleshooting
---
-
## Tips
* If using qubes-vpn, check the VPN service's log in the VPN VM by running: