Co-authored-by: codegirl007 <codegirl-007@users.noreply.github.com>
64 lines
1.3 KiB
Bash
64 lines
1.3 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
export HOME=/tmp/home
|
|
export XDG_RUNTIME_DIR=/tmp/runtime
|
|
mkdir -p "$HOME" "$XDG_RUNTIME_DIR"
|
|
chmod 0700 "$XDG_RUNTIME_DIR"
|
|
|
|
cleanup() {
|
|
rm -f /tmp/agentbox-ready
|
|
kill "${OPENBOX_PID:-}" "${XVFB_PID:-}" 2>/dev/null || true
|
|
wait "${OPENBOX_PID:-}" "${XVFB_PID:-}" 2>/dev/null || true
|
|
}
|
|
|
|
terminate() {
|
|
trap - EXIT INT TERM
|
|
cleanup
|
|
exit 0
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
trap terminate INT TERM
|
|
|
|
Xvfb "$DISPLAY" -screen 0 640x480x24 -nolisten tcp -noreset &
|
|
XVFB_PID=$!
|
|
|
|
attempt=0
|
|
until xdpyinfo -display "$DISPLAY" >/dev/null 2>&1; do
|
|
attempt=$((attempt + 1))
|
|
if [ "$attempt" -ge 100 ]; then
|
|
echo "Xvfb did not become ready" >&2
|
|
exit 1
|
|
fi
|
|
sleep 0.05
|
|
done
|
|
|
|
openbox --sm-disable >/tmp/openbox.log 2>&1 &
|
|
OPENBOX_PID=$!
|
|
|
|
attempt=0
|
|
while :; do
|
|
wm_info=$(xprop -root _NET_SUPPORTING_WM_CHECK 2>/dev/null || true)
|
|
case "$wm_info" in
|
|
*"window id #"*) break ;;
|
|
esac
|
|
if ! kill -0 "$OPENBOX_PID" 2>/dev/null; then
|
|
echo "Openbox exited before becoming ready" >&2
|
|
exit 1
|
|
fi
|
|
attempt=$((attempt + 1))
|
|
if [ "$attempt" -ge 100 ]; then
|
|
echo "Openbox did not become ready" >&2
|
|
exit 1
|
|
fi
|
|
sleep 0.05
|
|
done
|
|
|
|
touch /tmp/agentbox-ready
|
|
|
|
while :; do
|
|
sleep 3600 &
|
|
wait $!
|
|
done
|