diff options
-rw-r--r-- | .SRCINFO | 89 | ||||
-rw-r--r-- | PKGBUILD | 158 | ||||
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | nvidia-drm-outputclass.conf | 6 | ||||
-rw-r--r-- | xorg-server-git.install | 4 | ||||
-rw-r--r-- | xorg-server.install | 18 | ||||
-rw-r--r-- | xvfb-run | 88 |
7 files changed, 158 insertions, 213 deletions
@@ -1,19 +1,21 @@ pkgbase = xorg-server-git - pkgver = 1.20.0.r755.g28ed4b95e + pkgver = 21.1.99.1.r256.g6907b6ea2 pkgrel = 1 - url = https://gitlab.freedesktop.org/xorg/xserver.git + url = https://xorg.freedesktop.org arch = x86_64 groups = xorg license = custom - makedepends = xorgproto + makedepends = xorgproto-git makedepends = pixman makedepends = libx11 makedepends = mesa + makedepends = mesa-libgl makedepends = xtrans makedepends = libxkbfile makedepends = libxfont2 makedepends = libpciaccess makedepends = libxv + makedepends = libxcvt makedepends = libxmu makedepends = libxrender makedepends = libxi @@ -32,20 +34,19 @@ pkgbase = xorg-server-git makedepends = libxshmfence makedepends = libunwind makedepends = systemd - makedepends = wayland-protocols - makedepends = egl-wayland makedepends = meson makedepends = git + options = debug source = git+https://gitlab.freedesktop.org/xorg/xserver.git source = xvfb-run source = xvfb-run.1 - sha256sums = SKIP - sha256sums = ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9 - sha256sums = 2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776 + sha512sums = SKIP + sha512sums = 87c79b4a928e74463f96f58d277558783eac9b8ea6ba00d6bbbb67ad84c4d65b3792d960ea2a70089ae18162e82ae572a49ad36df169c974cc99dbaa51f63eb2 + sha512sums = de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22 pkgname = xorg-server-git pkgdesc = Xorg X server (git version) - install = xorg-server.install + install = xorg-server-git.install depends = libepoxy depends = libxfont2 depends = pixman @@ -58,11 +59,12 @@ pkgname = xorg-server-git depends = libpciaccess depends = libdrm depends = libxshmfence - provides = xorg-server - provides = X-ABI-VIDEODRV_VERSION=24.0 - provides = X-ABI-XINPUT_VERSION=24.1 + depends = libxcvt + provides = X-ABI-VIDEODRV_VERSION=25.3 + provides = X-ABI-XINPUT_VERSION=24.4 provides = X-ABI-EXTENSION_VERSION=10.0 provides = x-server + provides = xorg-server conflicts = xorg-server conflicts = nvidia-utils<=331.20 conflicts = glamor-egl @@ -70,6 +72,23 @@ pkgname = xorg-server-git replaces = glamor-egl replaces = xf86-video-modesetting +pkgname = xorg-server-common-git + pkgdesc = Xorg server common files (git version) + depends = xkeyboard-config + depends = xorg-xkbcomp + depends = xorg-setxkbmap + provides = xorg-server-common + conflicts = xorg-server-common + +pkgname = xorg-server-devel-git + pkgdesc = Development files for the X.Org X server (git version) + depends = xorgproto-git + depends = mesa + depends = libpciaccess + depends = xorg-util-macros + provides = xorg-server-devel + conflicts = xorg-server-devel + pkgname = xorg-server-xephyr-git pkgdesc = A nested X server that runs as an X application (git version) depends = libxfont2 @@ -89,57 +108,29 @@ pkgname = xorg-server-xephyr-git provides = xorg-server-xephyr conflicts = xorg-server-xephyr -pkgname = xorg-server-xvfb-git - pkgdesc = Virtual framebuffer X server (git version) - depends = libxfont2 - depends = libunwind - depends = pixman - depends = xorg-server-common-git - depends = xorg-xauth - depends = libgl - depends = nettle - provides = xorg-server-xvfb - conflicts = xorg-server-xvfb - pkgname = xorg-server-xnest-git pkgdesc = A nested X server that runs as an X application (git version) depends = libxfont2 + depends = libunwind depends = libxext depends = pixman depends = xorg-server-common-git depends = nettle depends = libtirpc + depends = systemd-libs provides = xorg-server-xnest conflicts = xorg-server-xnest -pkgname = xorg-server-xwayland-git - pkgdesc = run X clients under wayland (git version) +pkgname = xorg-server-xvfb-git + pkgdesc = Virtual framebuffer X server (git version) depends = libxfont2 - depends = libepoxy depends = libunwind - depends = systemd-libs - depends = libgl depends = pixman depends = xorg-server-common-git + depends = xorg-xauth + depends = libgl depends = nettle depends = libtirpc - provides = xorg-server-xwayland - conflicts = xorg-server-xwayland - -pkgname = xorg-server-common-git - pkgdesc = Xorg server common files (git version) - depends = xkeyboard-config - depends = xorg-xkbcomp - depends = xorg-setxkbmap - provides = xorg-server-common - conflicts = xorg-server-common - -pkgname = xorg-server-devel-git - pkgdesc = Development files for the X.Org X server (git version) - depends = xorgproto - depends = mesa - depends = libpciaccess - depends = xorg-util-macros - provides = xorg-server-devel - conflicts = xorg-server-devel - + depends = systemd-libs + provides = xorg-server-xvfb + conflicts = xorg-server-xvfb @@ -1,47 +1,54 @@ # Maintainer: JustKidding <jk@vin.ovh> -# Contributor: Yurii Kolesnykov <root@yurikoles.com> -# Contributor: AndyRTR <andyrtr@archlinux.org> -# Contributor: Jan de Groot <jgc@archlinux.org> +# Co-maintainer: Yurii Kolesnykov <root@yurikoles.com> +# Based on extra/xorg-server by +# AndyRTR <andyrtr@archlinux.org> +# Jan de Groot <jgc@archlinux.org> pkgbase=xorg-server-git pkgname=( 'xorg-server-git' + 'xorg-server-common-git' + 'xorg-server-devel-git' 'xorg-server-xephyr-git' - 'xorg-server-xvfb-git' 'xorg-server-xnest-git' - 'xorg-server-xwayland-git' - 'xorg-server-common-git' - 'xorg-server-devel-git') + 'xorg-server-xvfb-git' +) _pkgbase='xserver' -pkgver=1.20.0.r755.g28ed4b95e +pkgver=21.1.99.1.r256.g6907b6ea2 pkgrel=1 arch=('x86_64') license=('custom') groups=('xorg') -url="https://gitlab.freedesktop.org/xorg/xserver.git" -makedepends=('xorgproto' 'pixman' 'libx11' 'mesa' 'xtrans' - 'libxkbfile' 'libxfont2' 'libpciaccess' 'libxv' +url="https://xorg.freedesktop.org" +options=('debug') +makedepends=('xorgproto-git' 'pixman' 'libx11' 'mesa' 'mesa-libgl' 'xtrans' + 'libxkbfile' 'libxfont2' 'libpciaccess' 'libxv' 'libxcvt' 'libxmu' 'libxrender' 'libxi' 'libxaw' 'libxtst' 'libxres' 'xorg-xkbcomp' 'xorg-util-macros' 'xorg-font-util' 'libepoxy' 'xcb-util' 'xcb-util-image' 'xcb-util-renderutil' 'xcb-util-wm' 'xcb-util-keysyms' - 'libxshmfence' 'libunwind' 'systemd' 'wayland-protocols' 'egl-wayland' 'meson' 'git') -_srcurl="git+https://gitlab.freedesktop.org/xorg/xserver.git" + 'libxshmfence' 'libunwind' 'systemd' 'meson' 'git') +_srcurl=git+https://gitlab.freedesktop.org/xorg/xserver.git source=($_srcurl - xvfb-run - xvfb-run.1) -sha256sums=('SKIP' - 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' - '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776') + xvfb-run # with updates from FC master + xvfb-run.1 +) +sha512sums=('SKIP' + '87c79b4a928e74463f96f58d277558783eac9b8ea6ba00d6bbbb67ad84c4d65b3792d960ea2a70089ae18162e82ae572a49ad36df169c974cc99dbaa51f63eb2' + 'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22') pkgver() { cd "${_pkgbase}" + + # replace latest tag with version from meson + local _meson_ver=`grep -m 1 version meson.build | cut -d\' -f 2` # cutting off 'xorg.server.' prefix that presents in the git tag - git describe --long --tags| sed 's/^xorg.server.//;s/\([^-]*-g\)/r\1/;s/-/./g' + local _git_ver=`git describe --long --tags | sed 's/^xorg.server.//;s/\([^-]*-g\)/r\1/;s/-/./g'` + local _git_tag=`git describe --tags --abbrev=0 | sed 's/^xorg.server.//'` + + printf "${_git_ver/$_git_tag/$_meson_ver}" } -prepare() { - cd "${_pkgbase}" - cd .. +build() { # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf # With them, module fail to load with undefined symbol. # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 @@ -49,127 +56,108 @@ prepare() { export CXXFLAGS=${CXXFLAGS/-fno-plt} export LDFLAGS=${LDFLAGS/,-z,now} - export CFLAGS="$CFLAGS -fplt -fno-lto" - export CXXFLAGS="$CXXFLAGS -fplt -fno-lto" - export LDFLAGS="$LDFLAGS,-fno-lto" - - arch-meson ${_pkgbase} build \ - $mesonFlags \ - -D os_vendor="Arch Linux" \ + arch-meson "${_pkgbase}" build \ -D ipv6=true \ -D xvfb=true \ -D xnest=true \ -D xcsecurity=true \ -D xorg=true \ -D xephyr=true \ - -D xwayland=true \ - -D xwayland_eglstream=true \ -D glamor=true \ -D udev=true \ + -D dtrace=false \ -D systemd_logind=true \ -D suid_wrapper=true \ -D xkb_dir=/usr/share/X11/xkb \ -D xkb_output_dir=/var/lib/xkb \ - -D b_lto=false \ - -D b_lundef=false + -D libunwind=true # Print config meson configure build -} - -build() { - msg2 "Please confirm" - for VAR in VIDEODRV XINPUT EXTENSION; do - echo "X-ABI-${VAR}_VERSION=$(grep -Po "${VAR}_V.*\(\K[^)]*" xserver/hw/xfree86/common/xf86Module.h |& sed 's/, /./')" - done - - export CFLAGS=${CFLAGS/-fno-plt} - export CXXFLAGS=${CXXFLAGS/-fno-plt} - export LDFLAGS=${LDFLAGS/,-z,now} - ninja -C build # fake installation to be seperated into packages DESTDIR="${srcdir}/fakeinstall" ninja -C build install } +check() { + meson test -C build +} + _install() { local src f dir for src; do f="${src#fakeinstall/}" dir="${pkgdir}/${f%/*}" install -m755 -d "${dir}" - mv -v "${src}" "${dir}/" + # use copy so a new file is created and fakeroot can track properties such as setuid + cp -av "${src}" "${dir}/" + rm -rf "${src}" done } package_xorg-server-common-git() { - _pkgname='xorg-server-common' - provides=('xorg-server-common') - conflicts=('xorg-server-common') pkgdesc="Xorg server common files (git version)" depends=(xkeyboard-config xorg-xkbcomp xorg-setxkbmap) + provides=('xorg-server-common') + conflicts=('xorg-server-common') _install fakeinstall/usr/lib/xorg/protocol.txt _install fakeinstall/usr/share/man/man1/Xserver.1 install -m644 -Dt "${pkgdir}/var/lib/xkb/" "${_pkgbase}"/xkb/README.compiled # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING } package_xorg-server-git() { - _pkgname='xorg-server' pkgdesc="Xorg X server (git version)" depends=(libepoxy libxfont2 pixman xorg-server-common-git libunwind dbus libgl xf86-input-libinput nettle - libpciaccess libdrm libxshmfence) # FS#52949 - + libpciaccess libdrm libxshmfence libxcvt) # FS#52949 # see xorg-server-*/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on # and /usr/lib/pkgconfig/xorg-server.pc in xorg-server-devel pkg - provides=('xorg-server' 'X-ABI-VIDEODRV_VERSION=24.0' 'X-ABI-XINPUT_VERSION=24.1' 'X-ABI-EXTENSION_VERSION=10.0' 'x-server') + provides=('X-ABI-VIDEODRV_VERSION=25.3' 'X-ABI-XINPUT_VERSION=24.4' 'X-ABI-EXTENSION_VERSION=10.0' 'x-server' 'xorg-server') conflicts=('xorg-server' 'nvidia-utils<=331.20' 'glamor-egl' 'xf86-video-modesetting') replaces=('glamor-egl' 'xf86-video-modesetting') - install=xorg-server.install + install=xorg-server-git.install - _install fakeinstall/usr/bin/{Xorg,cvt,gtf} - ln -s /usr/bin/Xorg "${pkgdir}/usr/bin/X" + _install fakeinstall/usr/bin/{X,Xorg,gtf} _install fakeinstall/usr/lib/Xorg{,.wrap} _install fakeinstall/usr/lib/xorg/modules/* _install fakeinstall/usr/share/X11/xorg.conf.d/10-quirks.conf - _install fakeinstall/usr/share/man/man1/{Xorg,Xorg.wrap,cvt,gtf}.1 - _install fakeinstall/usr/share/man/man4/{exa,fbdevhw,modesetting}.4 + _install fakeinstall/usr/share/man/man1/{Xorg,Xorg.wrap,gtf}.1 + _install fakeinstall/usr/share/man/man4/{exa,fbdevhw,inputtestdrv,modesetting}.4 _install fakeinstall/usr/share/man/man5/{Xwrapper.config,xorg.conf,xorg.conf.d}.5 # distro specific files must be installed in /usr/share/X11/xorg.conf.d install -m755 -d "${pkgdir}/etc/X11/xorg.conf.d" # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING } package_xorg-server-xephyr-git() { - _pkgname='xorg-server-xephyr' - provides=('xorg-server-xephyr') - conflicts=('xorg-server-xephyr') pkgdesc="A nested X server that runs as an X application (git version)" depends=(libxfont2 libgl libepoxy libunwind systemd-libs libxv pixman xorg-server-common-git xcb-util-image xcb-util-renderutil xcb-util-wm xcb-util-keysyms nettle libtirpc) + provides=('xorg-server-xephyr') + conflicts=('xorg-server-xephyr') _install fakeinstall/usr/bin/Xephyr _install fakeinstall/usr/share/man/man1/Xephyr.1 # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING } package_xorg-server-xvfb-git() { - _pkgname='org-server-xvfb' + pkgdesc="Virtual framebuffer X server (git version)" + depends=(libxfont2 libunwind pixman xorg-server-common-git xorg-xauth + libgl nettle libtirpc systemd-libs) provides=('xorg-server-xvfb') conflicts=('xorg-server-xvfb') - pkgdesc="Virtual framebuffer X server (git version)" - depends=(libxfont2 libunwind pixman xorg-server-common-git xorg-xauth libgl nettle) _install fakeinstall/usr/bin/Xvfb _install fakeinstall/usr/share/man/man1/Xvfb.1 @@ -178,55 +166,37 @@ package_xorg-server-xvfb-git() { install -m644 "${srcdir}/xvfb-run.1" "${pkgdir}/usr/share/man/man1/" # outda # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING } package_xorg-server-xnest-git() { - _pkgname='xorg-server-xnest' + pkgdesc="A nested X server that runs as an X application (git version)" + depends=(libxfont2 libunwind libxext pixman xorg-server-common-git nettle libtirpc systemd-libs) provides=('xorg-server-xnest') conflicts=('xorg-server-xnest') - pkgdesc="A nested X server that runs as an X application (git version)" - depends=(libxfont2 libxext pixman xorg-server-common-git nettle libtirpc) _install fakeinstall/usr/bin/Xnest _install fakeinstall/usr/share/man/man1/Xnest.1 # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING -} - -package_xorg-server-xwayland-git() { - _pkgname='xorg-server-xwayland' - provides=('xorg-server-xwayland') - conflicts=('xorg-server-xwayland') - pkgdesc="run X clients under wayland (git version)" - depends=(libxfont2 libepoxy libunwind systemd-libs libgl pixman xorg-server-common-git - nettle libtirpc) - - _install fakeinstall/usr/bin/Xwayland - _install fakeinstall/usr/share/man/man1/Xwayland.1 - - # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING } package_xorg-server-devel-git() { - _pkgname='xorg-server-devel' - provides=('xorg-server-devel') - conflicts=('xorg-server-devel') pkgdesc="Development files for the X.Org X server (git version)" - depends=('xorgproto' 'mesa' 'libpciaccess' + depends=('xorgproto-git' 'mesa' 'libpciaccess' # not technically required but almost every Xorg pkg needs it to build 'xorg-util-macros') + provides=('xorg-server-devel') + conflicts=('xorg-server-devel') _install fakeinstall/usr/include/xorg/* _install fakeinstall/usr/lib/pkgconfig/xorg-server.pc - _install fakeinstall/usr/lib/pkgconfig/xwayland.pc _install fakeinstall/usr/share/aclocal/xorg-server.m4 # license - install -m644 -Dt "${pkgdir}/usr/share/licenses/${_pkgname}" "${_pkgbase}"/COPYING + install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${_pkgbase}"/COPYING # make sure there are no files left to install - find fakeinstall -depth -print0 | xargs -0 rmdir + #find fakeinstall -depth -print0 | xargs -0 rmdir } diff --git a/README.md b/README.md deleted file mode 100644 index e352d4b7658c..000000000000 --- a/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# xorg-server-git -Package for Arch AUR - - -## Build - -* Clone this repository -* launch `makepkg -si` diff --git a/nvidia-drm-outputclass.conf b/nvidia-drm-outputclass.conf deleted file mode 100644 index 40c1e08b5f41..000000000000 --- a/nvidia-drm-outputclass.conf +++ /dev/null @@ -1,6 +0,0 @@ -Section "OutputClass" - Identifier "nvidia" - MatchDriver "nvidia-drm" - Driver "nvidia" -EndSection - diff --git a/xorg-server-git.install b/xorg-server-git.install index d4bd71ef3347..46bf5a90ae8a 100644 --- a/xorg-server-git.install +++ b/xorg-server-git.install @@ -1,11 +1,7 @@ post_upgrade() { if (( $(vercmp $2 1.16.0-3) < 0 )); then post_install - echo fi - - echo ":: This package may work better with other X stack Git - components (e.g. xf86-input-*-git, xf86-video-*-git)." } post_install() { diff --git a/xorg-server.install b/xorg-server.install deleted file mode 100644 index 46bf5a90ae8a..000000000000 --- a/xorg-server.install +++ /dev/null @@ -1,18 +0,0 @@ -post_upgrade() { - if (( $(vercmp $2 1.16.0-3) < 0 )); then - post_install - fi -} - -post_install() { - cat <<MSG ->>> xorg-server has now the ability to run without root rights with - the help of systemd-logind. xserver will fail to run if not launched - from the same virtual terminal as was used to log in. - Without root rights, log files will be in ~/.local/share/xorg/ directory. - - Old behavior can be restored through Xorg.wrap config file. - See Xorg.wrap man page (man xorg.wrap). -MSG -} - @@ -1,6 +1,21 @@ #!/bin/sh - -# $Id: xvfb-run 2027 2004-11-16 14:54:16Z branden $ +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run # This script starts an instance of Xvfb, the "fake" X server, runs a command # with that server available, and kills the X server when done. The return @@ -16,7 +31,7 @@ SERVERNUM=99 AUTHFILE= ERRORFILE=/dev/null STARTWAIT=3 -XVFBARGS="-screen 0 640x480x8" +XVFBARGS="-screen 0 640x480x24" LISTENTCP="-nolisten tcp" XAUTHPROTO=. @@ -49,7 +64,10 @@ Usage: $PROGNAME [OPTION ...] COMMAND Run COMMAND (usually an X client) in a virtual X server environment. Options: -a --auto-servernum try to get a free server number, starting at - --server-num + --server-num (deprecated, use --auto-display + instead) +-d --auto-display use the X server to find a display number + automatically -e FILE --error-file=FILE file used to store xauth errors and Xvfb output (default: $ERRORFILE) -f FILE --auth-file=FILE file used to store auth cookie @@ -81,22 +99,9 @@ find_free_servernum() { echo $i } -# Clean up files -clean_up() { - if [ -e "$AUTHFILE" ]; then - XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >>"$ERRORFILE" 2>&1 - fi - if [ -n "$XVFB_RUN_TMPDIR" ]; then - if ! rm -r "$XVFB_RUN_TMPDIR"; then - error "problem while cleaning up temporary directory" - exit 5 - fi - fi -} - # Parse the command line. -ARGS=$(getopt --options +ae:f:hn:lp:s:w: \ - --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ +ARGS=$(getopt --options +ade:f:hn:lp:s:w: \ + --long auto-servernum,auto-display,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ --name "$PROGNAME" -- "$@") GETOPT_STATUS=$? @@ -110,6 +115,7 @@ eval set -- "$ARGS" while :; do case "$1" in -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;; + -d|--auto-display) AUTO_DISPLAY=1 ;; -e|--error-file) ERRORFILE="$2"; shift ;; -f|--auth-file) AUTHFILE="$2"; shift ;; -h|--help) SHOWHELP="yes" ;; @@ -136,44 +142,58 @@ if [ -z "$*" ]; then exit 2 fi -if ! which xauth >/dev/null; then +if ! type xauth >/dev/null; then error "xauth command not found" exit 3 fi -# tidy up after ourselves -trap clean_up EXIT - +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" # If the user did not specify an X authorization file to use, set up a temporary # directory to house one. if [ -z "$AUTHFILE" ]; then - XVFB_RUN_TMPDIR="$(mktemp -d -t $PROGNAME.XXXXXX)" - AUTHFILE="$XVFB_RUN_TMPDIR/Xauthority" + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) fi # Start Xvfb. MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 1 $XVFBARGS $LISTENTCP \ + 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 add :$SERVERNUM $XAUTHPROTO $MCOOKIE EOF -XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ - 2>&1 & -XVFBPID=$! -sleep "$STARTWAIT" -if ! kill -0 $XVFBPID 2>/dev/null; then - echo "Xvfb failed to start" >&2 - exit 1 -fi # Start the command and save its exit status. set +e -DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" RETVAL=$? set -e # Kill Xvfb now that the command has exited. kill $XVFBPID +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + # Return the executed command's exit status. exit $RETVAL |