| 1 | #!/bin/sh
|
|---|
| 2 | # Start a virtual X display with a window manager for shoot.py:
|
|---|
| 3 | # Xvfb (2600x1800) and openbox on $BNC_SHOT_DISPLAY (default :99).
|
|---|
| 4 | #
|
|---|
| 5 | # Xvfb, openbox and xdotool are taken from the system if installed. Otherwise
|
|---|
| 6 | # their Debian/Ubuntu packages are downloaded (apt-get download, no root needed)
|
|---|
| 7 | # and unpacked into $BNC_SHOT_PREFIX (default ~/.cache/bnc_screenshot_tools);
|
|---|
| 8 | # shoot.py finds xdotool there via the same variable.
|
|---|
| 9 | #
|
|---|
| 10 | # scripts/helpScreenshots/start_display.sh start
|
|---|
| 11 | # scripts/helpScreenshots/start_display.sh stop end Xvfb and openbox again
|
|---|
| 12 |
|
|---|
| 13 | set -e
|
|---|
| 14 | DISP=${BNC_SHOT_DISPLAY:-:99}
|
|---|
| 15 | PREFIX=${BNC_SHOT_PREFIX:-$HOME/.cache/bnc_screenshot_tools}
|
|---|
| 16 | PIDS=${PREFIX}/display${DISP#:}.pids
|
|---|
| 17 |
|
|---|
| 18 | if [ "$1" = "stop" ]; then
|
|---|
| 19 | [ -f "$PIDS" ] && kill $(cat "$PIDS") 2>/dev/null || true
|
|---|
| 20 | rm -f "$PIDS"
|
|---|
| 21 | echo "display $DISP stopped"
|
|---|
| 22 | exit 0
|
|---|
| 23 | fi
|
|---|
| 24 |
|
|---|
| 25 | XVFB=$(command -v Xvfb || true)
|
|---|
| 26 | OPENBOX=$(command -v openbox || true)
|
|---|
| 27 | XDOTOOL=$(command -v xdotool || true)
|
|---|
| 28 | LIBS=""
|
|---|
| 29 | if [ -z "$XVFB" ] || [ -z "$OPENBOX" ] || [ -z "$XDOTOOL" ]; then
|
|---|
| 30 | if [ ! -x "$PREFIX/root/usr/bin/xdotool" ]; then
|
|---|
| 31 | echo "downloading Xvfb, openbox and xdotool packages to $PREFIX ..."
|
|---|
| 32 | mkdir -p "$PREFIX/debs" "$PREFIX/root"
|
|---|
| 33 | (cd "$PREFIX/debs" && apt-get download xvfb xdotool libxdo3 openbox libobrender32v5 \
|
|---|
| 34 | libobt2v5 libimlib2 libstartup-notification0 libxcb-util1)
|
|---|
| 35 | for f in "$PREFIX"/debs/*.deb; do dpkg -x "$f" "$PREFIX/root"; done
|
|---|
| 36 | fi
|
|---|
| 37 | [ -n "$XVFB" ] || XVFB=$PREFIX/root/usr/bin/Xvfb
|
|---|
| 38 | [ -n "$OPENBOX" ] || OPENBOX=$PREFIX/root/usr/bin/openbox
|
|---|
| 39 | LIBS=$PREFIX/root/usr/lib/x86_64-linux-gnu
|
|---|
| 40 | fi
|
|---|
| 41 |
|
|---|
| 42 | mkdir -p "$PREFIX"
|
|---|
| 43 | "$XVFB" "$DISP" -screen 0 2600x1800x24 -nolisten tcp > "$PREFIX/xvfb.log" 2>&1 &
|
|---|
| 44 | echo $! > "$PIDS"
|
|---|
| 45 | for i in 1 2 3 4 5 6 7 8 9 10; do
|
|---|
| 46 | [ -e "/tmp/.X11-unix/X${DISP#:}" ] && break
|
|---|
| 47 | sleep 1
|
|---|
| 48 | done
|
|---|
| 49 | env DISPLAY="$DISP" LD_LIBRARY_PATH="$LIBS" XDG_CONFIG_DIRS="$PREFIX/root/etc/xdg:/etc/xdg" \
|
|---|
| 50 | XDG_DATA_DIRS="$PREFIX/root/usr/share:/usr/share" "$OPENBOX" > "$PREFIX/openbox.log" 2>&1 &
|
|---|
| 51 | echo $! >> "$PIDS"
|
|---|
| 52 | sleep 2
|
|---|
| 53 | echo "display $DISP running (Xvfb + openbox); stop with: $0 stop"
|
|---|