<p>QEMU (quick emulator) is a virtualization software to emulate hardware of a computer.</p>

<h3>Contents</h3>
<ul>
<li><a href="#install">Installation</a></li>
<li><a href="#imgcreate">Image creation</a></li>
<li><a href="#cliopt">CLI options</a>
<ul>
<li><a href="#cliopt_example">Example</a></li>
<li><a href="#cliopt_kvm">KVM</a></li>
<li><a href="#cliopt_m">RAM size for guest</a></li>
<li><a href="#cliopt_cdrom">Image to install guest OS</a></li>
<li><a href="#cliopt_display">Video output on host</a></li>
<li><a href="#cliopt_vga">Video card for guest</a>
<ul>
<li><a href="#cliopt_vga_gl">GL acceleration</a></li>
</ul>
</li>
<li><a href="#cliopt_audio">Audio output on host and sound card for guest</a></li>
<li><a href="#cliopt_nicuser">User-mode network</a>
<ul>
<li><a href="#cliopt_nicuser_restrict">Restrict network access</a></li>
<li><a href="#cliopt_nicuser_smb">Share directory via SMB</a></li>
<li><a href="#cliopt_nicuser_hostfwd">Host port forwarding to guest</a></li>
<li><a href="#cliopt_nicuser_model">Network card for guest</a></li>
</ul>
</li>
<li><a href="#cliopt_snapshot">Use image read-only</a></li>
</ul>
</li>
<li><a href="#keycombos">Key combinations</a></li>
<li><a href="#links">External links for further information</a></li>
</ul>

<h3 id="install">Installation</h3>
<p>
<code class="command">apt install qemu-system</code>
</p>

<h3 id="imgcreate">Image creation</h3>
<p>
<code class="command">qemu-img create -f qcow2 debian10.qcow2 60G</code>
</p>

<h3 id="cliopt">CLI options</h3>
<p>The configuration is specified using command line interface (CLI) options.<br />
There is no configuration file.</p>

<h4 id="cliopt_example">Example</h4>
<p>
<code class="command">qemu-system-x86_64 \
  -machine accel=kvm \
  -m 2048 \
  -cdrom debian-10.0.0-amd64-DVD-1.iso \
  -display gtk,gl=on \
  -vga virtio \
  -audio pa,model=hda \
  -nic user,model=e1000 \
    debian10.qcow2
</code>
</p>

<h4 id="cliopt_kvm">KVM</h4>
<p>The kernel-based virtual machine (KVM) significantly accelerates the virtualization.<br />
On the host, virtualization support needs to be enabled in BIOS settings.</p>
<p><code class="command">-machine accel=kvm</code></p>

<h4 id="cliopt_m">RAM size for guest</h4>
<p><code class="command">-m </code><code>megs</code></p>

<h4 id="cliopt_cdrom">Image to install guest OS</h4>
<p><code class="command">-cdrom </code><code>file</code></p>

<h4 id="cliopt_display">Video output on host</h4>
<p><code class="command">-display </code><code>type</code></p>
<div class="table">
<table class="cellborders">
<tr><th><code>type</code></th><th>Description</th></tr>
<tr><td><code>none</code></td><td>Do not display video output</td></tr>
<tr><td><code>gtk</code></td><td>Display video output in a GTK window</td></tr>
<tr><td><code>sdl</code></td><td>Display video output via SDL</td></tr>
<tr><td><code>egl-headless</code></td><td>Offload all OpenGL operations to a local DRI device</td></tr>
<tr><td><code>curses</code></td><td>Display video output via curses</td></tr>
<tr><td><code>spice-app</code></td><td></td></tr>
<tr><td><code>dbus</code></td><td></td></tr>
</table>
</div>

<h4 id="cliopt_vga">Video card for guest</h4>
<p><code class="command">-vga </code><code>type</code></p>
<div class="table">
<table class="cellborders">
<tr><th><code>type</code></th><th>Description</th><th>Comment</th></tr>
<tr><td><code>none</code></td><td>Disable VGA card</td><td></td></tr>  
<tr><td><code>std</code></td><td>Standard VGA card with Bochs VBE extensions</td><td>Default; Works well for Windows XP and Windows 7</td></tr>
<tr><td><code>cirrus</code></td><td>Cirrus Logic GD5446 Video card</td><td></td></tr>
<tr><td><code>vmware</code></td><td>VMWare SVGA-II compatible adapter</td><td></td></tr>
<tr><td><code>qxl</code></td><td>QXL paravirtual graphic card</td><td></td></tr>
<tr><td><code>virtio</code></td><td>Virtio VGA card</td><td>Needed for GL acceleration; Works well for Linux</td></tr>
</table>
</div>

<h5 id="cliopt_vga_gl">GL acceleration</h5>
<ul>
<li><code class="command">-display gtk,gl=on -vga=virtio</code><br/>
Unfortunately, <code class="command">-display gtk,gl=on</code> does not work with NVIDIA proprietary drivers.<br />
The display stays black. Tested combinations:
<ul>
<li>qemu 3.1.0 and nvidia-driver 440.82</li>
<li>qemu 4.1.0 and nvidia-driver 390.132</li>
</ul>
</li>
<li><code class="command">-display sdl,gl=on -vga=virtio</code></li>
</ul>

<h4 id="cliopt_audio">Audio output on host and sound card for guest</h4>
<p><code class="command">-audio driver=</code><code>driver</code><code class="command">,model=</code><code>model</code></p>
<div class="table">
<table class="cellborders">
<tr><th><code>driver</code></th><th>Description</th><th>Comment</th></tr>
<tr><td><code>none</code></td><td>Discard all audio outputs</td><td></td></tr>
<tr><td><code>alsa</code></td><td>ALSA</td><td>Only on Linux</td></tr>
<tr><td><code>oss</code></td><td>OSS</td><td>Available on Unix-like systems</td></tr>
<tr><td><code>pa</code></td><td>PulseAudio</td><td></td></tr>
<tr><td><code>sdl</code></td><td>SDL</td><td></td></tr>
<tr><td><code>sndio</code></td><td>SNDIO</td><td>Available on OpenBSD</td></tr>
<tr><td><code>spice</code></td><td>Send audio through SPICE</td><td></td></tr>
<tr><td><code>wav</code></td><td>Write a WAV file</td><td></td></tr>
<tr><td><code>dbus</code></td><td></td><td></td></tr>
<tr><td><code>jack</code></td><td></td><td></td></tr>
</table>
</div>
<p></p>
<div class="table">
<table class="cellborders">
<tr><th><code>model</code></th><th>Description</th><th>Comment</th></tr>
<tr><td><code>ac97</code></td><td>Intel 82801AA AC97 Audio</td><td></td></tr>
<tr><td><code>adlib</code></td><td>Yamaha YM3812 (OPL2)</td><td></td></tr>
<tr><td><code>cs4231a</code></td><td>CS4231A</td><td></td></tr>
<tr><td><code>es1370</code></td><td>ENSONIQ AudioPCI ES1370</td><td>Works well for Windows XP</td></tr>
<tr><td><code>gus</code></td><td>Gravis Ultrasound GF1</td><td></td></tr>
<tr><td><code>hda</code></td><td>Intel HD Audio</td><td></td></tr>
<tr><td><code>sb16</code></td><td>Creative Sound Blaster 16</td><td></td></tr>
</table>
</div>

<h4 id="cliopt_nicuser">User-mode network</h4>
<p><code class="command">-nic user</code></p>
<div class="table">
<table class="cellborders">
<tr><th>Description</th><th>IPv4</th></tr>
<tr><td>Guest</td><td>10.0.2.15</td></tr>
<tr><td>Gateway / DHCP server</td><td>10.0.2.2</td></tr>
<tr><td>DNS server</td><td>10.0.2.3</td></tr>
<tr><td>SMB server (optional)</td><td>10.0.2.4</td></tr>
</table>
</div>

<h5 id="cliopt_nicuser_restrict">Restrict network access</h5>
<p><code class="command">-nic user,restrict=on</code></p>

<h5 id="cliopt_nicuser_smb">Share directory via SMB</h5>
<p><code class="command">-nic user,smb=</code><code>dir</code></p>

<h5 id="cliopt_nicuser_hostfwd">Host port forwarding to guest</h5>
<p><code class="command">-nic user,hostfwd=tcp::</code><code>hostport</code><code class="command">-:</code><code>guestport</code></p>

<h5 id="cliopt_nicuser_model">Network card for guest</h5>
<p><code class="command">-nic user,model=</code><code>modelname</code></p>
<div class="table">
<table class="cellborders">
<tr><th><code>modelname</code></th><th>Description</th><th>Comment</th></tr>
<tr><td><code>e1000</code></td><td>Intel Gigabit Ethernet</td><td>Default</td></tr>
<tr><td><code>e1000-82544gc</code></td><td></td><td></td></tr>
<tr><td><code>e1000-82545em</code></td><td></td><td></td></tr>
<tr><td><code>e1000e</code></td><td></td><td></td></tr>
<tr><td><code>i82550</code></td><td>Intel 8255x 10/100 Mbps Ethernet</td><td></td></tr>
<tr><td><code>i82551</code></td><td></td><td></td></tr>
<tr><td><code>i82557a</code></td><td></td><td></td></tr>
<tr><td><code>i82557b</code></td><td></td><td></td></tr>
<tr><td><code>i82557c</code></td><td></td><td></td></tr>
<tr><td><code>i82558a</code></td><td></td><td></td></tr>
<tr><td><code>i82558b</code></td><td></td><td></td></tr>
<tr><td><code>i82559a</code></td><td></td><td></td></tr>
<tr><td><code>i82559b</code></td><td></td><td></td></tr>
<tr><td><code>i82559c</code></td><td></td><td></td></tr>
<tr><td><code>i82559er</code></td><td></td><td></td></tr>
<tr><td><code>i82562</code></td><td>Intel Fast Ethernet Controller</td><td></td></tr>
<tr><td><code>i82801</code></td><td></td><td></td></tr>
<tr><td><code>ne2k_pci</code></td><td>NE2000</td><td>Works well for Windows XP</td></tr>
<tr><td><code>pcnet</code></td><td>AMD Ethernet Card</td><td></td></tr>
<tr><td><code>pvrdma</code></td><td></td><td></td></tr>
<tr><td><code>rtl8139</code></td><td>Realtek Fast Ethernet</td><td>Works well for Windows 7</td></tr>
<tr><td><code>rulip</code></td><td></td><td></td></tr>
<tr><td><code>virtio-net-pci</code></td><td></td><td></td></tr>
<tr><td><code>virtio-net-pci-non-transitional</code></td><td></td><td></td></tr>
<tr><td><code>virtio-net-pci-transitional</code></td><td></td><td></td></tr>
<tr><td><code>vmxnet3</code></td><td></td><td></td></tr>
</table>
</div>

<h4 id="cliopt_snapshot">Use image read-only</h4>
<p><code class="command">-snapshot</code></p>

<h3 id="keycombos">Key combinations</h3>
<div class="table">
<table class="cellborders">
<tr><td>Ctrl-Alt-g</td><td>Release mouse pointer</td></tr>
<tr><td>Ctrl-Alt-f</td><td>Toggle full screen</td></tr>
<tr><td>Ctrl-Alt-u</td><td>Restore the screen's unscaled size</td></tr>
<tr><td>Ctrl-Alt-2</td><td>Switch to QEMU console</td></tr>
<tr><td>Ctrl-Alt-1</td><td>Switch to guest display</td></tr>
</table>
</div>

<h3 id="links">External links for further information</h3>
<ul>
<li><a href="https://www.qemu.org/docs/master/system/invocation.html" target="_blank">
https://www.qemu.org/docs/master/system/invocation.html</a></li>
<li><a href="https://www.qemu.org/docs/master/system/net.html" target="_blank">
https://www.qemu.org/docs/master/system/net.html</a></li>
<li><a href="https://www.qemu.org/docs/master/system/keys.html" target="_blank">
https://www.qemu.org/docs/master/system/keys.html</a></li>
</ul>