devtools/data/xvfb-run.sh
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 09 Apr 2014 17:15:25 +0200
changeset 9747 10108d9f502a
parent 8884 e750e5abd1c7
permissions -rwxr-xr-x
[repo] make it clear in internal_cnx that security is disabled as explained in its docstring. It was previously relying on internal connection's fake user (InternalManager) for read security and on disabling security hooks for write security. Using the security_enabled context manager is more readable and more reliable: while the older implementation works thanks to the InternalManager associated to the session, custom hooks should rely on session.[read|write]_security being correctly set. This change also allows selecting Password attributes in internal connections without explicitly disabling read security.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     1
#!/bin/sh
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     2
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     3
# This script starts an instance of Xvfb, the "fake" X server, runs a command
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     4
# with that server available, and kills the X server when done.  The return
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     5
# value of the command becomes the return value of this script.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     6
#
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     7
# If anyone is using this to build a Debian package, make sure the package
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
     8
# Build-Depends on xvfb and xauth.
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
     9
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    10
set -e
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    11
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    12
PROGNAME=xvfb-run
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    13
SERVERNUM=99
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    14
AUTHFILE=
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    15
ERRORFILE=/dev/null
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    16
XVFBARGS="-screen 0 640x480x8"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    17
LISTENTCP="-nolisten tcp"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    18
XAUTHPROTO=.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    19
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    20
# Query the terminal to establish a default number of columns to use for
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    21
# displaying messages to the user.  This is used only as a fallback in the event
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    22
# the COLUMNS variable is not set.  ($COLUMNS can react to SIGWINCH while the
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    23
# script is running, and this cannot, only being calculated once.)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    24
DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    25
if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    26
    DEFCOLUMNS=80
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    27
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    28
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    29
# Display a message, wrapping lines at the terminal width.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    30
message () {
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    31
    echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    32
}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    33
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    34
# Display an error message.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    35
error () {
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    36
    message "error: $*" >&2
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    37
}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    38
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    39
# Display a usage message.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    40
usage () {
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    41
    if [ -n "$*" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    42
        message "usage error: $*"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    43
    fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    44
    cat <<EOF
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    45
Usage: $PROGNAME [OPTION ...] COMMAND
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    46
Run COMMAND (usually an X client) in a virtual X server environment.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    47
Options:
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    48
-a        --auto-servernum          try to get a free server number, starting at
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    49
                                    --server-num
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    50
-e FILE   --error-file=FILE         file used to store xauth errors and Xvfb
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    51
                                    output (default: $ERRORFILE)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    52
-f FILE   --auth-file=FILE          file used to store auth cookie
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    53
                                    (default: ./.Xauthority)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    54
-h        --help                    display this usage message and exit
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    55
-n NUM    --server-num=NUM          server number to use (default: $SERVERNUM)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    56
-l        --listen-tcp              enable TCP port listening in the X server
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    57
-p PROTO  --xauth-protocol=PROTO    X authority protocol name to use
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    58
                                    (default: xauth command's default)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    59
-s ARGS   --server-args=ARGS        arguments (other than server number and
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    60
                                    "-nolisten tcp") to pass to the Xvfb server
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    61
                                    (default: "$XVFBARGS")
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    62
EOF
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    63
}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    64
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    65
# Find a free server number by looking at .X*-lock files in /tmp.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    66
find_free_servernum() {
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    67
    # Sadly, the "local" keyword is not POSIX.  Leave the next line commented in
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    68
    # the hope Debian Policy eventually changes to allow it in /bin/sh scripts
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    69
    # anyway.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    70
    #local i
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    71
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    72
    i=$SERVERNUM
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    73
    while [ -f /tmp/.X$i-lock ]; do
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    74
        i=$(($i + 1))
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    75
    done
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    76
    echo $i
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    77
}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    78
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    79
# Clean up files
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    80
clean_up() {
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    81
    if [ -e "$AUTHFILE" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    82
        XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >>"$ERRORFILE" 2>&1
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    83
    fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    84
    if [ -n "$XVFB_RUN_TMPDIR" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    85
        if ! rm -r "$XVFB_RUN_TMPDIR"; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    86
            error "problem while cleaning up temporary directory"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    87
            exit 5
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    88
        fi
8884
e750e5abd1c7 [devtools] protect xvfb-run.sh against clean_up being called twice
Julien Cristau <julien.cristau@logilab.fr>
parents: 8758
diff changeset
    89
        XVFB_RUN_TMPDIR=
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    90
    fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    91
    if [ -n "$XVFBPID" ]; then
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
    92
        kill "$XVFBPID"
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    93
    fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    94
}
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    95
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    96
# Parse the command line.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    97
ARGS=$(getopt --options +ae:f:hn:lp:s:w: \
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    98
       --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
    99
       --name "$PROGNAME" -- "$@")
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   100
GETOPT_STATUS=$?
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   101
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   102
if [ $GETOPT_STATUS -ne 0 ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   103
    error "internal error; getopt exited with status $GETOPT_STATUS"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   104
    exit 6
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   105
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   106
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   107
eval set -- "$ARGS"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   108
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   109
while :; do
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   110
    case "$1" in
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   111
        -a|--auto-servernum) SERVERNUM=$(find_free_servernum); AUTONUM="yes" ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   112
        -e|--error-file) ERRORFILE="$2"; shift ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   113
        -f|--auth-file) AUTHFILE="$2"; shift ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   114
        -h|--help) SHOWHELP="yes" ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   115
        -n|--server-num) SERVERNUM="$2"; shift ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   116
        -l|--listen-tcp) LISTENTCP="" ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   117
        -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   118
        -s|--server-args) XVFBARGS="$2"; shift ;;
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
   119
        -w|--wait) shift ;;
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   120
        --) shift; break ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   121
        *) error "internal error; getopt permitted \"$1\" unexpectedly"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   122
           exit 6
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   123
           ;;
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   124
    esac
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   125
    shift
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   126
done
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   127
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   128
if [ "$SHOWHELP" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   129
    usage
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   130
    exit 0
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   131
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   132
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   133
if [ -z "$*" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   134
    usage "need a command to run" >&2
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   135
    exit 2
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   136
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   137
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   138
if ! which xauth >/dev/null; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   139
    error "xauth command not found"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   140
    exit 3
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   141
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   142
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   143
# tidy up after ourselves
8758
3a0d91237e2c [devtools] fix a couple issues with xvfb-run
Julien Cristau <julien.cristau@logilab.fr>
parents: 8339
diff changeset
   144
trap clean_up EXIT TERM
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   145
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   146
# If the user did not specify an X authorization file to use, set up a temporary
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   147
# directory to house one.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   148
if [ -z "$AUTHFILE" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   149
    XVFB_RUN_TMPDIR="$(mktemp -d -t $PROGNAME.XXXXXX)"
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   150
    # Create empty file to avoid xauth warning
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   151
    AUTHFILE=$(tempfile -n "$XVFB_RUN_TMPDIR/Xauthority")
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   152
fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   153
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   154
# Start Xvfb.
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   155
MCOOKIE=$(mcookie)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   156
tries=10
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   157
while [ $tries -gt 0 ]; do
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   158
    tries=$(( $tries - 1 ))
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   159
    XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   160
add :$SERVERNUM $XAUTHPROTO $MCOOKIE
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   161
EOF
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
   162
    # handle SIGUSR1 so Xvfb knows to send a signal when it's ready to accept
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
   163
    # connections
8339
63348ead09fb [devtools] fix bashism in xvfb-run.sh
Julien Cristau <julien.cristau@logilab.fr>
parents: 8327
diff changeset
   164
    trap : USR1
63348ead09fb [devtools] fix bashism in xvfb-run.sh
Julien Cristau <julien.cristau@logilab.fr>
parents: 8327
diff changeset
   165
    (trap '' USR1; XAUTHORITY=$AUTHFILE exec Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" 2>&1) &
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   166
    XVFBPID=$!
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   167
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
   168
    wait || :
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   169
    if kill -0 $XVFBPID 2>/dev/null; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   170
        break
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   171
    elif [ -n "$AUTONUM" ]; then
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   172
        # The display is in use so try another one (if '-a' was specified).
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   173
        SERVERNUM=$((SERVERNUM + 1))
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   174
        SERVERNUM=$(find_free_servernum)
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   175
        continue
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   176
    fi
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   177
    error "Xvfb failed to start" >&2
8327
4d76492508f3 [devtools] make xvfb-run not wait 3s each time (closes #2265710)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8261
diff changeset
   178
    XVFBPID=
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   179
    exit 1
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   180
done
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   181
8758
3a0d91237e2c [devtools] fix a couple issues with xvfb-run
Julien Cristau <julien.cristau@logilab.fr>
parents: 8339
diff changeset
   182
# Start the command
3a0d91237e2c [devtools] fix a couple issues with xvfb-run
Julien Cristau <julien.cristau@logilab.fr>
parents: 8339
diff changeset
   183
DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 &
3a0d91237e2c [devtools] fix a couple issues with xvfb-run
Julien Cristau <julien.cristau@logilab.fr>
parents: 8339
diff changeset
   184
wait $!
8261
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   185
d4d9c88d4a5f [devtools] make a copy of the xvfb-run script so we can kill it properly
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff changeset
   186
# vim:set ai et sts=4 sw=4 tw=80: