diff --git a/host-shell.sh b/host-shell.sh index e2c2196..129a6d2 100755 --- a/host-shell.sh +++ b/host-shell.sh @@ -9,9 +9,18 @@ # The inner resolution runs ON THE HOST: flatpak-spawn forwards the sandbox # environment, so $SHELL would still point at this script — resolve the user's # real login shell from passwd instead and fix up $SHELL before exec'ing it. +# +# The PTY itself was allocated inside the sandbox (its own devpts instance), +# so on the host the forwarded fd cannot be named (`tty` fails, no +# controlling terminal, tools that open /dev/tty break). script(1) allocates a +# second, host-side PTY for the shell and relays through the forwarded one; +# util-linux >= 2.35 also passes window-size changes along. exec flatpak-spawn --host /bin/sh -c ' shell="$(getent passwd "$(id -un)" | cut -d: -f7)" [ -x "$shell" ] || shell=/bin/sh export SHELL="$shell" + if command -v script >/dev/null 2>&1; then + exec script -q -e -c "exec \"$shell\" -l" /dev/null + fi exec "$shell" -l '