QEMU/KVM on ThinkPad X230T Laptop with Dual-boot: Difference between revisions

From WikiMLT
Line 17: Line 17:
<disk type="block" device="disk">
<disk type="block" device="disk">
   <driver name="qemu" type="raw" cache="none" discard="unmap"/>
   <driver name="qemu" type="raw" cache="none" discard="unmap"/>
   <source dev="/dev/sda"/>
   <source dev="/dev/disk/by-id/ata-ADATA_SU800_2I0220056120"/>
   <target dev="sda" bus="sata"/>
   <target dev="sda" bus="sata"/>
   <address type="drive" controller="0" bus="0" target="0" unit="0"/>
   <address type="drive" controller="0" bus="0" target="0" unit="0"/>
</disk>
</disk>
</syntaxhighlight>
</syntaxhighlight>
* In order to get the physical by id you can use the command <code>la -l /dev/disk/by-id/</code>.
* In order to get the physical by id you can use the command <code>la -l /dev/disk/by-id/</code>.
Note you don't need to type the 5th line if your using <code>virt-manager</code> to edit the XML entry for the drive - it will be generated automatically on save.
Note you don't need to type the 5th line if your using <code>virt-manager</code> to edit the XML entry for the drive - it will be generated automatically on save.
In most how-to manuals they propose to use <code><target dev="vdX" bus="virtio"/></code>, but it is not possible to use <code>virtio</code> while there is not driver installed within the Windows 10 OS. So you need to install the driver first... or during the installation of Windows if it is new installation.
In most how-to manuals they propose to use <code><target dev="vdX" bus="virtio"/></code>, but it is not possible to use <code>virtio</code> while there is not driver installed within the Windows 10 OS. So you need to install the driver first... or during the installation of Windows if it is new installation.
<syntaxhighlight lang="shell" line="1">
la -l /dev/disk/by-id
</syntaxhighlight>
== Install the guest tools ==
== Install the guest tools ==
The final step of the setup is installing the [[QEMU/KVM Guest tools#Windows Guest tools|QEMU/KVM Guest tools for Windows]], thus the screen will be automatically resized within the SPICE client of <code>virt-manager</code>.
The final step of the setup is installing the [[QEMU/KVM Guest tools#Windows Guest tools|QEMU/KVM Guest tools for Windows]], thus the screen will be automatically resized within the SPICE client of <code>virt-manager</code>.
== The final configuration of the VM ==
== The final configuration of the VM ==
<syntaxhighlight lang="shell" line="1">
<syntaxhighlight lang="shell" line="1">
virsh dumpxml "Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97" | tee "Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97_2021.07.04_img.xml"
virsh --connect qemu:///system dumpxml "Win10.SSD.PT" | tee "Win10.SSD.PT.xml"
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="xml" line="1" highlight="" class="mlw-pre-max-height-320">
<syntaxhighlight lang="xml" line="1" highlight="" class="mlw-pre-max-height-320">
<domain type='kvm'>
<domain type='kvm'>
   <name>Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97</name>
   <name>Win10.SSD.PT</name>
   <uuid>55e58096-7aa3-4ca8-b18c-cb35aeadfde5</uuid>
   <uuid>f45cd48b-449a-460c-bbfe-fdf06052f30e</uuid>
   <title>Windows10 edk2.OVMF.CSM QXL.SPICE.AC97</title>
   <title>Windows 10, Physical Disk Passthrough, Q35/UEFI</title>
   <description>UEFI: https://www.kraxel.org/repos/jenkins/edk2/</description>
   <description>https://wiki.metalevel.tech/wiki/QEMU/KVM_on_Kali_Linux_2022_at_ThinkPad_X230T</description>
   <metadata>
   <metadata>
     <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
     <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
Line 48: Line 42:
     </libosinfo:libosinfo>
     </libosinfo:libosinfo>
   </metadata>
   </metadata>
   <memory unit='KiB'>8388608</memory>
   <memory unit='KiB'>4194304</memory>
   <currentMemory unit='KiB'>8388608</currentMemory>
   <currentMemory unit='KiB'>4194304</currentMemory>
   <vcpu placement='static'>8</vcpu>
   <vcpu placement='static'>2</vcpu>
  <iothreads>1</iothreads>
   <os>
   <os>
     <type arch='x86_64' machine='pc-q35-4.2'>hvm</type>
     <type arch='x86_64' machine='pc-q35-7.0'>hvm</type>
     <loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-with-csm.fd</loader>
     <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE_4M.ms.fd</loader>
     <nvram>/var/lib/libvirt/qemu/nvram/Windows10_edk2.OVMF.CSM_QXL.SPICE.AC97_VARS.fd</nvram>
     <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
     <boot dev='hd'/>
     <boot dev='hd'/>
    <bootmenu enable='yes'/>
   </os>
   </os>
   <features>
   <features>
     <acpi/>
     <acpi/>
     <apic/>
     <apic/>
     <hyperv>
     <hyperv mode='custom'>
       <relaxed state='on'/>
       <relaxed state='on'/>
       <vapic state='on'/>
       <vapic state='on'/>
       <spinlocks state='on' retries='8191'/>
       <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <synic state='on'/>
      <stimer state='on'/>
      <reset state='on'/>
      <vendor_id state='on' value='1234567890ab'/>
      <frequencies state='on'/>
     </hyperv>
     </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
     <vmport state='off'/>
     <vmport state='off'/>
    <ioapic driver='kvm'/>
   </features>
   </features>
   <cpu mode='host-passthrough' check='partial'>
   <cpu mode='host-passthrough' check='none' migratable='on'>
     <topology sockets='1' cores='4' threads='2'/>
     <topology sockets='1' dies='1' cores='2' threads='1'/>
   </cpu>
   </cpu>
   <clock offset='localtime'>
   <clock offset='localtime'>
Line 96: Line 80:
   <devices>
   <devices>
     <emulator>/usr/bin/qemu-system-x86_64</emulator>
     <emulator>/usr/bin/qemu-system-x86_64</emulator>
     <disk type='file' device='disk'>
     <disk type='block' device='disk'>
       <driver name='qemu' type='raw' cache='writeback' io='threads' discard='ignore'/>
       <driver name='qemu' type='raw' cache='none' discard='unmap'/>
       <source file='/mnt/vm-pool/vms/Windows10.img'/>
       <source dev='/dev/disk/by-id/ata-ADATA_SU800_2I0220056120'/>
      <target dev='vda' bus='virtio'/>
       <target dev='sda' bus='sata'/>
      <address type='pci' domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/vm-pool/images/virtio-win-0.1.185--spice-guest-tools--w10-dla.iso'/>
       <target dev='sdb' bus='sata'/>
      <readonly/>
       <address type='drive' controller='0' bus='0' target='0' unit='2'/>
     </disk>
     </disk>
     <controller type='usb' index='0' model='qemu-xhci' ports='15'>
     <controller type='usb' index='0' model='qemu-xhci' ports='15'>
       <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
     </controller>
     </controller>
     <controller type='pci' index='0' model='pcie-root'/>
     <controller type='pci' index='0' model='pcie-root'/>
Line 146: Line 120:
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
     </controller>
     </controller>
     <controller type='pci' index='7' model='pcie-to-pci-bridge'>
     <controller type='pci' index='7' model='pcie-root-port'>
       <model name='pcie-pci-bridge'/>
       <model name='pcie-root-port'/>
       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      <target chassis='7' port='0x16'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
     </controller>
     </controller>
     <controller type='pci' index='8' model='pcie-root-port'>
     <controller type='pci' index='8' model='pcie-root-port'>
       <model name='pcie-root-port'/>
       <model name='pcie-root-port'/>
       <target chassis='8' port='0x16'/>
       <target chassis='8' port='0x17'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
     </controller>
     </controller>
     <controller type='pci' index='9' model='pcie-root-port'>
     <controller type='pci' index='9' model='pcie-root-port'>
       <model name='pcie-root-port'/>
       <model name='pcie-root-port'/>
       <target chassis='9' port='0x17'/>
       <target chassis='9' port='0x18'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
     </controller>
     </controller>
     <controller type='pci' index='10' model='pcie-root-port'>
     <controller type='pci' index='10' model='pcie-root-port'>
       <model name='pcie-root-port'/>
       <model name='pcie-root-port'/>
       <target chassis='10' port='0x18'/>
       <target chassis='10' port='0x19'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
    </controller>
    <controller type='pci' index='11' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='11' port='0x1a'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
    </controller>
    <controller type='pci' index='12' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='12' port='0x1b'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
    </controller>
    <controller type='pci' index='13' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='13' port='0x1c'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
    </controller>
    <controller type='pci' index='14' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='14' port='0x1d'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
     </controller>
     </controller>
     <controller type='virtio-serial' index='0'>
     <controller type='virtio-serial' index='0'>
       <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
       <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
     </controller>
     </controller>
    <controller type='scsi' index='0' model='lsilogic'>
     <interface type='network'>
      <address type='pci' domain='0x0000' bus='0x07' slot='0x01' function='0x0'/>
       <mac address='52:54:00:e0:6e:b1'/>
    </controller>
       <source network='default'/>
     <interface type='direct'>
      <model type='e1000e'/>
       <mac address='52:54:00:1c:0e:3a'/>
       <link state='up'/>
       <source dev='eno2' mode='bridge'/>
       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
       <model type='virtio'/>
       <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
     </interface>
     </interface>
     <serial type='pty'>
     <serial type='pty'>
Line 189: Line 185:
       <address type='virtio-serial' controller='0' bus='0' port='1'/>
       <address type='virtio-serial' controller='0' bus='0' port='1'/>
     </channel>
     </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
     <input type='mouse' bus='ps2'/>
     <input type='mouse' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <input type='keyboard' bus='ps2'/>
     <graphics type='spice' autoport='yes'>
     <graphics type='spice' autoport='yes'>
       <listen type='address'/>
       <listen type='address'/>
       <gl enable='no'/>
       <image compression='off'/>
     </graphics>
     </graphics>
     <sound model='ac97'>
     <sound model='ich9'>
       <address type='pci' domain='0x0000' bus='0x07' slot='0x02' function='0x0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
     </sound>
     </sound>
    <audio id='1' type='spice'/>
     <video>
     <video>
       <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
       <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
Line 213: Line 213:
   </devices>
   </devices>
</domain>
</domain>
</syntaxhighlight>
</syntaxhighlight>
== References ==
== References ==
* Ubuntu Wiki: [https://help.ubuntu.com/community/KVM/Managing KVM Managing]
* Ask Ubuntu: [https://askubuntu.com/questions/144894/add-physical-disk-to-kvm-virtual-machine Add physical disk to KVM virtual machine]
* Ask Ubuntu: [https://askubuntu.com/questions/144894/add-physical-disk-to-kvm-virtual-machine Add physical disk to KVM virtual machine]
* Ask Fedora: [https://ask.fedoraproject.org/t/why-does-virt-manager-ask-for-authentication-password/11100/2 Why does virt-manager ask for authentication password?]
* Ronaldevers.nl: [https://ronaldevers.nl/2012/10/14/adding-a-physical-disk-kvm-libvirt.html Adding a Physical Disk to a Guest with Libvirt / KVM]
* Ronaldevers.nl: [https://ronaldevers.nl/2012/10/14/adding-a-physical-disk-kvm-libvirt.html Adding a Physical Disk to a Guest with Libvirt / KVM]
* Charleslabri.com: [https://www.charleslabri.com/adding-passthrough-physical-disk-in-kvm-guests/ Adding Passthrough Physical Disk in KVM Guests]
* Charleslabri.com: [https://www.charleslabri.com/adding-passthrough-physical-disk-in-kvm-guests/ Adding Passthrough Physical Disk in KVM Guests]
* Ask Fedora: [https://ask.fedoraproject.org/t/why-does-virt-manager-ask-for-authentication-password/11100/2 Why does virt-manager ask for authentication password?]
<noinclude>
<noinclude>
<div id="devStage">
<div id="devStage">

Revision as of 10:28, 13 August 2022

I was in need to ac­cess Win­dows 10 from Kali Lin­ux on my dual boot­ed Leno­vo ThinkPad X230T de­vice. So here are the things I've done to achieve that.

Test the Vir­tu­al­iza­tion Ca­pa­bil­i­ties of the Sys­tem

Check weath­er the sys­tem sup­ports vir­tu­al­iza­tion and it is en­abled via the BIOS. The fol­low­ing com­mand must re­turn at least 1:

egrep -c '(vmx|svm)' /proc/cpuinfo

In­stall QE­MU, KVM, LIB­VIRT

With­in the old­er ver­sions of De­bian based OS, like as Ubun­tu 20.04, we was in need to in­stall the pack­ages qe­mu qe­mu-kvm, but in mot re­cent op­er­at­ing sys­tems as Kali 2022 we need to in­stall qe­mu-sys­tem-x86 in­stead.

sudo apt install qemu-system-x86 libvirt-daemon libvirt-clients bridge-utils virt-manager virtinst libosinfo-bin ovmf remmina

In or­der to get rid of the pass­word di­a­logue for virt-man­ag­er"Sys­tem pol­i­cy pre­vents man­age­ment of lo­cal vir­tu­al­iza­tion sys­tems" – I've added my Lin­ux user to the lib­virt group.

sudo usermod -aG libvirt $USER

Set­up the vir­tu­al ma­chine

The set­up of the vir­tu­al ma­chine is done via the virt-man­ag­er GUI. The first "spe­cial" thing ac­cord­ing to my set­up is that both op­er­at­ing sys­tems are in­stalled in UE­FI mode, so the vir­tu­al ma­chine should be UE­FI with chipset Q35. In or­der to pass-through the phys­i­cal SSD/HDD you need to do set­up ad fol­low.

<disk type="block" device="disk">
  <driver name="qemu" type="raw" cache="none" discard="unmap"/>
  <source dev="/dev/disk/by-id/ata-ADATA_SU800_2I0220056120"/>
  <target dev="sda" bus="sata"/>
  <address type="drive" controller="0" bus="0" target="0" unit="0"/>
</disk>
  • In or­der to get the phys­i­cal by id you can use the com­mand la ‑l /de­v/disk/­by-id/.

Note you don't need to type the 5th line if your us­ing virt-man­ag­er to ed­it the XML en­try for the dri­ve – it will be gen­er­at­ed au­to­mat­i­cal­ly on save. In most how-to man­u­als they pro­pose to use <tar­get dev="vdX" bus="virtio"/>, but it is not pos­si­ble to use vir­tio while there is not dri­ver in­stalled with­in the Win­dows 10 OS. So you need to in­stall the dri­ver first… or dur­ing the in­stal­la­tion of Win­dows if it is new in­stal­la­tion.

In­stall the guest tools

The fi­nal step of the set­up is in­stalling the QEMU/KVM Guest tools for Win­dows, thus the screen will be au­to­mat­i­cal­ly re­sized with­in the SPICE client of virt-man­ag­er.

The fi­nal con­fig­u­ra­tion of the VM

virsh --connect qemu:///system dumpxml "Win10.SSD.PT" | tee "Win10.SSD.PT.xml"
<domain type='kvm'>
  <name>Win10.SSD.PT</name>
  <uuid>f45cd48b-449a-460c-bbfe-fdf06052f30e</uuid>
  <title>Windows 10, Physical Disk Passthrough, Q35/UEFI</title>
  <description>https://wiki.metalevel.tech/wiki/QEMU/KVM_on_Kali_Linux_2022_at_ThinkPad_X230T</description>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://microsoft.com/win/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-7.0'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE_4M.ms.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv mode='custom'>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='2' threads='1'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' discard='unmap'/>
      <source dev='/dev/disk/by-id/ata-ADATA_SU800_2I0220056120'/>
      <target dev='sda' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x11'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0x14'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0x15'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
    </controller>
    <controller type='pci' index='7' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='7' port='0x16'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
    </controller>
    <controller type='pci' index='8' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='8' port='0x17'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
    </controller>
    <controller type='pci' index='9' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='9' port='0x18'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='10' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='10' port='0x19'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
    </controller>
    <controller type='pci' index='11' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='11' port='0x1a'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
    </controller>
    <controller type='pci' index='12' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='12' port='0x1b'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
    </controller>
    <controller type='pci' index='13' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='13' port='0x1c'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
    </controller>
    <controller type='pci' index='14' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='14' port='0x1d'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:e0:6e:b1'/>
      <source network='default'/>
      <model type='e1000e'/>
      <link state='up'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich9'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
    </sound>
    <audio id='1' type='spice'/>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Ref­er­ences