Run commands on your host machine from inside your flatpak sandbox, toolbox or distrobox containers.
Originally started as a reimplementation of flatpak-spawn --host
.
Note: Distrobox already ships with host-spawn. You might be better served by using their wrapper distrobox-host-exec
which runs host-spawn under the hood.
- Install host-spawn in a location visible only to the container. I recommend
/usr/local/bin
. - Make sure it is executable with
chmod +x host-spawn
host-spawn
with no argument will open a shell on your host.host-spawn command...
will run the command on your host.
Run host-spawn -h
for more options.
If there's a process that you always want to execute on the host system, you can
create a symlink to it somewhere in your $PATH and it'll always be executed through host-spawn
.
Example of creating a shim for the flatpak
command:
# Inside your container:
$ flatpak --version
zsh: command not found: flatpak
# Have host-spawn handle any flatpak command
$ ln -s /usr/local/bin/host-spawn /usr/local/bin/flatpak
# Now flatpak will always be executed on the host
$ flatpak --version
Flatpak 1.12.7
Note: you will want to store the symlink in a location visible only to the container, to avoid an infinite loop. If you are using toolbox/distrobox, this means anywhere outside your home directory. I recommend /usr/local/bin
.
- Allocates a pty for the spawned process, fixing the following upstream issues: flatpak/flatpak#3697, flatpak/flatpak#3285 and flatpak/flatpak-xdg-utils#57
- Handles SIGWINCH (terminal size changes)
- Passes through
$TERM
environment variable - Shims host binaries when symlinked, see section above