-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes #28
- Loading branch information
Showing
1 changed file
with
26 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,49 @@ | ||
# host-spawn | ||
|
||
A reimplementation of `flatpak-spawn --host`. | ||
|
||
Run commands on your host machine from inside your flatpak sandbox, [toolbox](https://github.com/containers/toolbox) or [distrobox](https://github.com/89luca89/distrobox) containers. | ||
|
||
## Improvements over the original | ||
Originally started as a reimplementation of `flatpak-spawn --host`. | ||
|
||
* Allocates a pty for the spawned process, fixing the following upstream issues: https://github.com/flatpak/flatpak/issues/3697, https://github.com/flatpak/flatpak/issues/3285 and https://github.com/flatpak/flatpak-xdg-utils/issues/57 | ||
* Handles SIGWINCH (terminal size changes) | ||
* Passes through `$TERM` environment variable | ||
* Shims host binaries when symlinked, see section below | ||
## Recommended setup | ||
|
||
**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` | ||
|
||
## How to use | ||
|
||
* `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. | ||
|
||
## Creating shims for host binaries | ||
|
||
If there's a process that only makes sense to be executed on the host system, you can | ||
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 | ||
# 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 the flatpak command will always be executed on the host | ||
# 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`. See https://github.com/1player/host-spawn/issues/19 for details. | ||
|
||
**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`. | ||
|
||
## References | ||
## Improvements over flatpak-spawn --host | ||
|
||
* https://github.com/owtaylor/PurpleEgg/blob/master/common/host-command.c | ||
* https://github.com/gnunn1/tilix/blob/master/source/gx/tilix/terminal/terminal.d | ||
* Allocates a pty for the spawned process, fixing the following upstream issues: https://github.com/flatpak/flatpak/issues/3697, https://github.com/flatpak/flatpak/issues/3285 and https://github.com/flatpak/flatpak-xdg-utils/issues/57 | ||
* Handles SIGWINCH (terminal size changes) | ||
* Passes through `$TERM` environment variable | ||
* Shims host binaries when symlinked, see section above |