Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<!--
Copyright (C) 2018 Red Hat, Inc.
Copyright (C) 2020 Collabora Ltd.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
Based on org.freedesktop.portal.Flatpak.
Author: Alexander Larsson <alexl@redhat.com>
-->
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<!--
com.steampowered.PressureVessel.Launcher1:
@short_description: Interface for process-launching
Methods on this interface can be invoked by processes outside
the game's container (and in particular Steam), to start and
control programs inside the container.
This documentation describes version 0 of this interface.
-->
<interface name='com.steampowered.PressureVessel.Launcher1'>
<property name="Version" type="u" access="read"/>
<!--
SupportedLaunchFlags:
A bitmask containing all the flags that can be passed to
the Launch() method.
-->
<property name="SupportedLaunchFlags" type="u" access="read"/>
<!--
Launch:
@cwd_path: the working directory for the new process, resolved
in the container's filesystem namespace. The empty string means
use whatever is the launcher's current working directory.
@argv: the argv for the new process, starting with the executable to launch
@fds: an array of file descriptors to pass to the new process
@envs: an array of variable/value pairs for the environment of the new process
@flags: flags
@options: Vardict with optional further information
@pid: the PID of the new process inside pressure-vessel's container
Start a new program in the container.
The following flags values are supported:
<variablelist>
<varlistentry>
<term>1</term>
<listitem><para>
Clear the environment. If set, the environment will be
exactly @envs, minus the eventual variables listed in
"unset-env" in @options, similar to `env - X=1 Y=2 COMMAND`.
If unset, @envs and the option "unset-env" are used to override
environment variables and any environment variable that is not
overridden is left unchanged, similar to `env X=1 Y=2 COMMAND`.
</para></listitem>
</varlistentry>
</variablelist>
Unknown (unsupported) flags are an error and will cause Launch()
to fail.
Unknown (unsupported) options are ignored.
The following options are supported:
<variablelist>
<varlistentry>
<term>terminate-after b</term>
<listitem><para>
If present and true, the process groups of any remaining
launched commands will be terminated by SIGTERM immediately
after this command exits, regardless of whether it exits
successfully or unsuccessfully.
</para></listitem>
</varlistentry>
<varlistentry>
<term>unset-env as</term>
<listitem><para>
If present, the given array of variables will be unset in the
environment of the new process.
</para></listitem>
</varlistentry>
</variablelist>
This method returns as soon as the process ID of the new process
is known, and before the process exits. If you need to know when
the process exits, subscribe to the ProcessExited signal before
calling this method, and use the returned process ID to correlate
signals with method calls.
-->
<method name="Launch">
<annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
<arg type='ay' name='cwd_path' direction='in'/>
<arg type='aay' name='argv' direction='in'/>
<arg type='a{uh}' name='fds' direction='in'/>
<arg type='a{ss}' name='envs' direction='in'/>
<arg type='u' name='flags' direction='in'/>
<arg type="a{sv}" name="options" direction="in"/>
<arg type='u' name='pid' direction='out'/>
</method>
<!--
SendSignal:
@pid: the PID inside the container to signal
@signal: the signal to send (see `signal(7)`)
@to_process_group: whether to send the signal to the process group
This method lets you send a Unix signal to a process
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
that was started with com.steampowered.PressureVessel.Launcher1.Launch().
The @pid argument here should be the PID that is returned
by the Launch() call: it is not necessarily valid in the caller's
PID namespace.
-->
<method name="SendSignal">
<arg type='u' name='pid' direction='in'/>
<arg type='u' name='signal' direction='in'/>
<arg type='b' name='to_process_group' direction='in'/>
</method>
<!--
ProcessExited:
@pid: the PID of the process that has ended
@wait_status: the wait status (see waitpid(2))
Emitted when a process started by
com.steampowered.PressureVessel.Launcher1.Launch() exits.
Use g_spawn_check_exit_status(), or the macros such as
`WIFEXITED` documented in `waitpid(2)`, to interpret
the @wait_status.
This signal is not emitted for processes that were not launched
directly by Launch(), for example if a process launched by
Launch() runs foreground or background child processes.
-->
<signal name="ProcessExited">
<arg type='u' name='pid'/>
<arg type='u' name='wait_status'/>
</signal>
<!--
Terminate:
Stop listening for Launch and SendSignal requests, terminate
child processes if any, and shut down gracefully.
-->
<method name="Terminate">
</method>
</interface>
</node>