diff options
Diffstat (limited to 'etc/private/vm-login')
-rwxr-xr-x | etc/private/vm-login | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/etc/private/vm-login b/etc/private/vm-login new file mode 100755 index 0000000..28e8864 --- /dev/null +++ b/etc/private/vm-login @@ -0,0 +1,33 @@ +#! /usr/bin/env bash + +# Get virtual machine console (using screen). +# +# Note: use Ctrl-a k to exit screen (or Ctrl-a a k if running inside screen). +# +usage="usage: $0 <console-socket>" + +trap "{ exit 1; }" ERR +set -o errtrace # Trap in functions. + +function info () { echo "$*" 1>&2; } +function error () { info "$*"; exit 1; } + +con="$1" + +if [ -z "$con" ]; then + error "missing console socket" +fi + +pty="$(dirname "$con")/$(basename -s .sock "$con").pty" + +socat "UNIX-CONNECT:$con" "PTY,link=$pty" & +pid="$!" + +# Hack around terminal permission issue when running under `su - <user>`. +# +script -q -c "screen $pty" /dev/null + +# Note: socat may have already terminated (e.g., VM was shut down). +# +kill "$pid" 2>/dev/null || true +wait |