QEMU-GA(8)

πŸ’… qemu-ga β€” the QEMU Guest Agent, explained by your favorite Unix bestie

okay so this is page qemu-ga(8) from the QEMU manual set, and honestly? it's kind of a baddie. let's get into it ✨


🌸 NAME 🌸

qemu-ga β€” the QEMU Guest Agent. that's it, that's the whole name, and she ate πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

qemu-ga [OPTIONS]

that's literally it. options in, daemon out. no cap ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

so the QEMU Guest Agent is a daemon β€” like, a little background bestie β€” that's intended to be run within virtual machines. and the whole point of her existence is that she lets the hypervisor host do a bunch of operations inside the guest. the guest and the host are in a long-distance relationship and qemu-ga is the group chat 🫢

here's the vibe of what the host can do through her:

  • get information from the guest
  • set the guest's system time
  • read/write a file
  • sync and freeze the filesystems
  • suspend the guest
  • reconfigure guest local processors
  • set user's password
  • … and like, more. the "…" is doing a lot of work here and honestly? iconic. πŸ‘‘

on startup, qemu-ga will read a system configuration file β€” the default lives at /etc/qemu/qemu-ga.conf β€” and then she parses the remaining configuration options on the command line. so it's conf file first, then CLI. and here's the rule for conflicts, bestie, write it down:

For the same key, the last option wins, but the lists accumulate. (there's a config file format section down in FILES, keep scrolling πŸ’–)

now the RPC permission drama, which is genuinely the most main-character part of this whole page 🎭:

  • If an allowed RPCs list is defined in the configuration, then all RPCs will be blocked by default, except for the allowed list. so it's a velvet rope situation β€” nope by default, yes only for the list πŸ’…
  • If a blocked RPCs list is defined in the configuration, then all RPCs will be allowed by default, except for the blocked list. opposite energy β€” everyone welcome except these people πŸ™ˆ
  • If both allowed and blocked RPCs lists are defined in the configuration, then all RPCs will be blocked by default, then the allowed list will be applied, followed by the blocked list. yes, order matters. blocked has the final say. she gets the last word, periodt πŸ”₯

and one more thing, super important, not a drill:

While filesystems are frozen, all except for a designated safe set of RPCs will be blocked, regardless of what the general configuration declares. so the frozen state overrides your config, no exceptions, don't argue with her πŸ’€

✨ OPTIONS ✨

okay bestie, here's the full roster. every single one. no skipping 🫢

  • -c, --config=PATH β€” configuration file path. the default is /etc/qemu/qemu-ga.conf, unless it's overridden by the QGA_CONF environment variable 🌸
  • -m, --method=METHOD β€” the transport method. one of unix-listen, virtio-serial, or isa-serial, or vsock-listen. virtio-serial is the default ⭐
  • -p, --path=PATH β€” device/socket path. the default for virtio-serial is /dev/virtio-ports/org.qemu.guest_agent.0, and the default for isa-serial is /dev/ttyS0. and for vsock-listen, socket addresses are written as <cid>:<port> πŸŽ€
  • -l, --logfile=PATH β€” set the log file path. the default is stderr πŸ’–
  • -f, --pidfile=PATH β€” specify the pid file. the default is /var/run/qemu-ga.pid πŸ¦‹
  • -F, --fsfreeze-hook=PATH β€” enable the fsfreeze hook. she accepts an optional argument that specifies the script to run on freeze/thaw. the script will be called with 'freeze'/'thaw' arguments accordingly. the default is /etc/qemu/fsfreeze-hook.
⚠️ real talk: if you're using -F with an argument, do not follow -F with a space. like literally do it like this: -F/var/run/fsfreezehook.sh. no space. i'm serious. πŸ™ˆ
  • -t, --statedir=PATH β€” specify the directory to store state information. absolute paths only, bestie. the default is /var/run 🌈
  • -v, --verbose β€” log extra debugging information. she gets chatty. love that for her πŸ’œ
  • -V, --version β€” print version information and exit πŸ‘‹
  • -d, --daemon β€” daemonize after startup, aka detach from the terminal. she's leaving the group chat to go be mysterious 🧚
  • -b, --block-rpcs=LIST β€” comma-separated list of RPCs to disable. no spaces, and use --block-rpcs=help to list the available RPCs. very demure, very "here's the menu" πŸ’…
  • -a, --allow-rpcs=LIST β€” comma-separated list of RPCs to enable. again, no spaces, and use --allow-rpcs=help to list the available RPCs 🌸
  • -D, --dump-conf β€” dump the configuration in a format compatible with qemu-ga.conf and exit. she's showing you her whole outfit and then leaving πŸ”₯
  • -h, --help β€” display this help and exit. the classic. the icon πŸ‘‘

🌟 FILES 🌟

so the syntax of the qemu-ga.conf configuration file follows the Desktop Entry Specification. here's the quick summary, bestie: it consists of groups of key-value pairs, interspersed with comments. that's it, that's the whole format πŸŽ€

# qemu-ga configuration sample
[general]
daemonize = 0
pidfile = /var/run/qemu-ga.pid
verbose = 0
method = virtio-serial
path = /dev/virtio-ports/org.qemu.guest_agent.0
statedir = /var/run

(copy that sample exactly btw, it's literally the one from the page β€” don't freestyle it πŸ’–)

and the list of keys follows the command line options. here's the key + key type lineup, translated from the little box-table situation into a list so it reads pretty on your terminal πŸ¦‹

  • daemon β€” key type: boolean
  • method β€” key type: string
  • path β€” key type: string
  • logfile β€” key type: string
  • pidfile β€” key type: string
  • fsfreeze-hook β€” key type: string
  • statedir β€” key type: string
  • verbose β€” key type: boolean
  • block-rpcs β€” key type: string list
  • allow-rpcs β€” key type: string list

πŸ‘€ SEE ALSO πŸ‘€

  • qemu(1) β€” go read that one next, i'm obsessed with her πŸ’œ

🫢 Author 🫢

Michael Roth <mdroth@linux.vnet.ibm.com> β€” thank you for your service, king πŸ‘‘


2026, The QEMU Project Developers 🌈


okay that's the whole page, you're officially educated πŸ’… now go forth and freeze some filesystems (responsibly, bestie, and remember there's a safe set of RPCs while frozen whether you like it or not 😭).

this was qemu-ga out of version 11.1.3, dated Oct 29, 2026 β€” mwah, go slay βœ¨πŸ“

πŸ“¦ where this page comes from
  • arch rolling: qemu-guest-agent 11.1.3-1 Β· BSD-2-Clause AND BSD-2-Clause-Patent AND BSD-3-Clause AND CC0-1.0 AND FSFAP AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-only WITH Linux-syscall-note AND GPL-2.0-only WITH Linux-syscall-note OR BSD-2-Clause AND GPL-2.0-only WITH Linux-syscall-note OR BSD-3-Clause AND GPL-2.0-or-later AND GPL-2.0-or-later OR BSD-3-Clause AND GPL-2.0-or-later WITH Linux-syscall-note AND ISC AND LGPL-2.1-only OR BSD-3-Clause AND LGPL-2.0-or-later AND LGPL-2.1-or-later AND LicenseRef-Public-Domain AND MIT
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms