diff --git a/.devcontainer/bin/init-dev-container.sh b/.devcontainer/bin/init-dev-container.sh index 43acc5fe543..3a2603d2d6e 100644 --- a/.devcontainer/bin/init-dev-container.sh +++ b/.devcontainer/bin/init-dev-container.sh @@ -8,15 +8,24 @@ startInBackgroundIfNotRunning() { log "Starting $1." echo -e "\n** $(date) **" | sudoIf tee -a /tmp/$1.log > /dev/null - if [ ! -f "/tmp/$1.pid" ] || ! ps -p $(cat /tmp/$1.pid) > /dev/null; then - ($2 sh -c "while :; do echo [\$(date)] Process started.; $3; echo [\$(date)] Process exited!; sleep 5; done 2>&1" | sudoIf tee -a /tmp/$1.log > /dev/null & echo "$!" | sudoIf tee /tmp/$1.pid > /dev/null) - log "$1 started." + if ! pidof $1 > /dev/null; then + keepRunningInBackground "$@" else echo "$1 is already running." | sudoIf tee -a /tmp/$1.log > /dev/null log "$1 is already running." fi } +# Keep command running in background +keepRunningInBackground() +{ + ($2 sh -c "while :; do echo [\$(date)] Process started.; $3; echo [\$(date)] Process exited!; sleep 5; done 2>&1" | sudoIf tee -a /tmp/$1.log > /dev/null & echo "$!" | sudoIf tee /tmp/$1.pid > /dev/null) + while ! pidof $1 > /dev/null; do + sleep 1 + done + log "$1 started." +} + # Use sudo to run as root when required sudoIf() { @@ -47,7 +56,7 @@ log "** SCRIPT START **" # Start dbus. log 'Running "/etc/init.d/dbus start".' -if [ -f "/var/run/dbus/pid" ] && ! ps -p $(cat /var/run/dbus/pid) > /dev/null; then +if [ -f "/var/run/dbus/pid" ] && ! pidof dbus-daemon > /dev/null; then sudoIf rm -f /var/run/dbus/pid fi sudoIf /etc/init.d/dbus start 2>&1 | sudoIf tee -a /tmp/dbus-daemon-system.log > /dev/null @@ -57,31 +66,19 @@ done # Set up Xvfb. startInBackgroundIfNotRunning "Xvfb" sudoIf "Xvfb ${DISPLAY:-:1} +extension RANDR -screen 0 ${MAX_VNC_RESOLUTION:-1920x1080x16}" -while ! pidof Xvfb > /dev/null; do - sleep 1 -done # Start fluxbox as a light weight window manager. startInBackgroundIfNotRunning "fluxbox" sudoUserIf "dbus-launch startfluxbox" -while ! pidof fluxbox > /dev/null; do - sleep 1 -done # Set resolution /usr/local/bin/set-resolution ${VNC_RESOLUTION:-1280x720} ${VNC_DPI:-72} -# Start x11vnc if installed. -if type x11vnc 2>&1 > /dev/null; then - startInBackgroundIfNotRunning "x11vnc" sudoIf "x11vnc -display ${DISPLAY:-:1} -rfbport ${VNC_PORT:-5901} -listen localhost -rfbportv6 ${VNC_PORT:-5901} -listenv6 localhost -xkb -shared -forever -nopw" -else - log "Skipping x11vnc - not installed." -fi +# Start x11vnc +startInBackgroundIfNotRunning "x11vnc" sudoIf "x11vnc -display ${DISPLAY:-:1} -rfbport ${VNC_PORT:-5901} -localhost -no6 -xkb -shared -forever -nopw" -# Spin up noVNC if installed. -if [ -d "/usr/local/novnc" ]; then - startInBackgroundIfNotRunning "noVNC" sudoIf "/usr/local/novnc/noVNC*/utils/launch.sh --listen ${NOVNC_PORT:-6080} --vnc localhost:${VNC_PORT:-5901}" -else - log "Skipping noVNC - not installed." +# Spin up noVNC if installed and not runnning. +if [ -d "/usr/local/novnc" ] && [ "$(ps -ef | grep /usr/local/novnc/noVNC*/utils/launch.sh)" = "" ]; then + keepRunningInBackground "noVNC" sudoIf "/usr/local/novnc/noVNC*/utils/launch.sh --listen ${NOVNC_PORT:-6080} --vnc localhost:${VNC_PORT:-5901}" fi # Run whatever was passed in