## org.freedesktop.Flatpak.Development

org.freedesktop.Flatpak.Development — Flatpak development interface

## Methods

    HostCommand       (IN  ay    cwd_path,
                       IN  aay   argv,
                       IN  a{uh} fds,
                       IN  a{ss} envs,
                       IN  u     flags,
                       OUT u     pid);
    HostCommandSignal (IN  u     pid,
                       IN  u     signal,
                       IN  b     to_process_group);

## Signals

    HostCommandExited (u pid,
                       u exit_status);

## Properties

    version  readable   u

## Description

The Development interface lets any client, possibly in a sandbox if it has access to the session helper, spawn a process on the host, outside any sandbox.

Clearly this is not something you typically want a sandboxed app to do: it is a sandbox escape allowing arbitrary code execution, and must not be allowed for applications where sandboxing is intended to be a security boundary.

However, it is very useful when using Flatpak for distribution and choice of runtime library stack, without intending to create a security boundary. For instance, if an IDE like GNOME Builder is distributed as a trusted Flatpak app and will be used to build other Flatpak apps, it needs to use this facility to launch a Flatpak build operation inside the sandbox, because otherwise recursive calls to flatpak will not work.

This interface is provided on the D-Bus session bus by the well-known D-Bus name org.freedesktop.Flatpak, at the object path /org/freedesktop/Flatpak/Development.

This documentation describes version 1 of this interface.

## Method Details

### The HostCommand() method

    HostCommand (IN  ay    cwd_path,
                 IN  aay   argv,
                 IN  a{uh} fds,
                 IN  a{ss} envs,
                 IN  u     flags,
                 OUT u     pid);

This method lets trusted applications (insider or outside a sandbox) run arbitrary commands in the user's session, outside any sandbox.

The following flags values are supported:

1 (FLATPAK_HOST_COMMAND_FLAGS_CLEAR_ENV) | Clear the environment.
2 (FLATPAK_HOST_COMMAND_FLAGS_WATCH_BUS) | Kill the sandbox when the caller disappears from the session bus.

Unknown (unsupported) flags are an error and will cause HostCommand() to fail.

Note that unlike org.freedesktop.portal.Flatpak.Spawn(), there is no options parameter here.

`IN ay `cwd_path``: | the working directory for the new process
`IN aay `argv``: | the argv for the new process, starting with the executable to launch
`IN a{uh} `fds``: | an array of file descriptors to pass to the new process
`IN a{ss} `envs``: | an array of variable/value pairs for the environment of the new process
`IN u `flags``: | flags
`OUT u `pid``: | the PID of the new process

### The HostCommandSignal() method

    HostCommandSignal (IN  u pid,
                       IN  u signal,
                       IN  b to_process_group);

This method lets you send a Unix signal to a process that was started with HostCommand(). The `pid` argument here must be a PID that was returned by a call to HostCommand() from the same sender: terminating unrelated processes is not allowed.

`IN u `pid``: | the process ID on the host system
`IN u `signal``: | the signal to send (see signal(7))
`IN b `to_process_group``: | whether to send the signal to the process group

## Signal Details

### The "HostCommandExited" signal

    HostCommandExited (u pid,
                       u exit_status);

Emitted when a process started by HostCommand() exits. Use g_spawn_check_exit_status(), or the macros such as WIFEXITED documented in waitpid(2), to interpret the `exit_status`.

This signal is not emitted for processes that were not launched directly by HostCommand(), for example if a process launched by HostCommand() runs foreground or background child processes.

`u `pid``: | the PID of the process that has ended
`u `exit_status``: | the wait status (see waitpid(2))

## Property Details

### The "version" property

    version  readable   u

The API version number. This documentation describes version 1 of this interface.