21

I have the current libvirt 1.2.20 i want to pass to my machine create with virt-manager some qemu flags. I edited the file and add

  </devices>
  <qemu:commandline>
          <qemu:arg value='-L pc-bios'/>
  </qemu:commandline>
</domain>

But doesn't work i also tried to edit from virsh

virsh edit domain

and put

<qemu:commandline>
          <qemu:arg value='-L pc-bios'/>
  </qemu:commandline>

But give me this error

errore: XML document failed to validate against schema: Unable to validate doc against /usr/share/libvirt/schemas/domain.rng
Element domain has extra content: qemu:commandline

Failed. Try again? [y,n,i,f,?]: 

How to pass correctly qemu command line? Thanks

3 Answers 3

24

elbarna's own answer is the way to go for configuration options "natively" supported by libvirt (and thus its domain XML). For qemu commandline arguments (and more) not supported by libvirt, you need to include qemu's XML namespace declaration in the 'domain' root element:

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

Reference: https://libvirt.org/drvqemu.html#qemucommand

7
  • for servers who don't support kvm natively you can use type='qemu' Commented Feb 15, 2017 at 14:10
  • 2
    That schema is 404 now. Commented May 19, 2018 at 16:41
  • Seems they migrated to RelaxNG for the XML schemas. Though IDK if replacing above URL with https://libvirt.org/schemas/domain.rng works, if required at all.
    – argonym
    Commented Jun 1, 2018 at 12:56
  • 1
    I would add that in my case, parameters containing a space trigger an error, and must be given with multiple <qemu:arg value= lines
    – Alex F
    Commented Jan 22, 2020 at 10:28
  • 1
    This still works, even if the schema is a 404.
    – Wieland
    Commented Jun 7, 2020 at 0:53
7

If you have virt-xml 1.4.1 (released in 2017, so should be widespread by now) or later in your path (provided by community/virt-install in Arch), you can use:

virt-xml $DOMAIN --edit --confirm --qemu-commandline '-my-args 1234'
virt-xml $DOMAIN --edit --confirm --qemu-commandline 'env=MY-ENV=1234'

to automatically add the XML corresponding to env vars and/or args, including the namespace. --confirm allows you to preview the changes before committing.

This is much more convenient than trying to manually paste in the XML namespace, and worked for me even though virsh edit was no longer accepting identical manual changes.

Ref: https://blog.wikichoon.com/2017/03/easy-qemu-commandline-passthrough-with.html

3

Found solution using this workaround

Converting QEMU arguments to domain XML

After converting to xml import with

virsh create file.xml

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .