qrexec-policy-agent

Protocol

The policy agent works as a socket-based service. It handles the following Qubes RPC calls:

policy.Ask

Display a prompt about whether to allow an action.

The request is a JSON dictionary with the following keys:

  • source - source domain ("work")

  • service - name of service without argument ("qubes.Filecopy")

  • argument - argument, always starts with + ("+arg", "+" if empty)

  • targets - list of possible targets (["personal", "@dispvm:work"])

  • default_target - initially chosen target ("personal") or empty string ("")

  • icons - a dictionary icon names (recognizable by GTK) for all domains mentioned in other keys ({"personal": "red", "work": "green", ...})

The response is plain ASCII. It’s either allow: followed by a chosen target (allow:personal) or deny.

policy.Notify

Display a notification regarding an action.

The request is a JSON dictionary with the following keys:

  • resolution - one of:

    • “allow” - the service was allowed to run

    • “deny” - the service was denied

    • “fail” - the service was allowed, but failed to start

  • source - source domain (“work”)

  • service - name of service without argument ("qubes.Filecopy")

  • argument - argument, always starts with + ("+arg", "+" if empty)

  • target - target, either intended (in case of "deny") or actual (otherwise)

The response is empty.