summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO89
-rw-r--r--PKGBUILD158
-rw-r--r--README.md8
-rw-r--r--nvidia-drm-outputclass.conf6
-rw-r--r--xorg-server-git.install4
-rw-r--r--xorg-server.install18
-rw-r--r--xvfb-run88
7 files changed, 158 insertions, 213 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 45905743d73b..5e82fee73250 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 07fa757610b7..87957b76a75d 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
-}
-
diff --git a/xvfb-run b/xvfb-run
index 4c2f4e0d3a4d..6bc62d094993 100644
--- a/xvfb-run
+++ b/xvfb-run
@@ -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