[libvirt-users] Qemu-guest agent

Michal Privoznik mprivozn at redhat.com
Fri May 22 09:10:54 UTC 2015

On 21.05.2015 12:33, Umer Khan wrote:
> Hi all,
> I am new to libvirt, I am trying to execute some commands inside guest
> domains from my host machine using libvirt-Python API. So far I have been
> able to open up a stream but I am not sure how to send commands on the
> stream (through virDomainOpenConsole). After hours of searching through
> different forums I found out that there is a utlity called qemu-guest agent
> which can solve my problem. But I am not sure how to enable this agent on
> host and domain, and how this will be used to communicate to guest domains.
> Any help in this matter will be really appreciated.
> Thanks


After you've set up the guest agent (both in libvirt and in guest), you
can passtrhough an arbitrary guest agent commands too:


Although I should warn you that qemu-ga does not allow arbitrary OS
command execution. To do that you'd need to use a console. I think virsh
is a good example on that:


Long story short, you create a new stream @st by calling virStreamNew().
Then you open a console and connect the stream onto it:
virDomainOpenConsole(dom, dev_name, st, flags); then you register two
events into the event loop, one to watch if STDIN is readable (= has
some data to send = somebody typed something), the other to watch if
STDOUT is writable (it can be redirected to a file or whatever, which is
not necessarily always writable). The third event you register is to
handle the stream. This is the idea:

streamEvent() {
  if (stream_readable) {
    read data from stream into terminal buffer
    make STDOUT handler listen to writable event
  if (stream_writable and stream buffer != empty) {
    send data to stream from stream buffer
  if (terminal buffer == empty)
    make stream handler listen to readable event

stdin_event() {
  read data from STDIN into stream buffer
  make stream handler listen to readable | writable event

stdout_event() {
  write data from terminal buffer to STDOUT
  if (terminal buffer == empty)
    temporarily disable stdout handler

I hope this makes it something clearer.


More information about the libvirt-users mailing list