summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViorel Munteanu <ceamac@gentoo.org>2023-06-02 20:09:34 +0300
committerViorel Munteanu <ceamac@gentoo.org>2023-06-24 12:02:37 +0300
commit8c9e7c2263068ab5d074c7652431e7952ccf7eba (patch)
treeacfd27ee7a2f1e54c9f8172db69d1d131876ebdf /net-misc/tigervnc
parentdev-libs/rinutils: Keyword 0.10.2-r1 riscv, #909051 (diff)
downloadgentoo-8c9e7c2263068ab5d074c7652431e7952ccf7eba.tar.gz
gentoo-8c9e7c2263068ab5d074c7652431e7952ccf7eba.tar.bz2
gentoo-8c9e7c2263068ab5d074c7652431e7952ccf7eba.zip
net-misc/tigervnc: one service per display
Change configuration for openrc users. Currently, it has 3 drawbacks: - the sessions must be defined in 2 places - if a display crashes, it cannot be restarted without stopping all of them - openrc only keeps track of the last display started, so if any other display crashes, it will not show as crashed. The first issue is solved by no longer using DISPLAYS fron conf.d, and parsing /etc/tigervnc/vncserver.users directly. The other two by switching to a one service per display model. Closes: https://github.com/gentoo/gentoo/pull/31277 Signed-off-by: Viorel Munteanu <ceamac@gentoo.org>
Diffstat (limited to 'net-misc/tigervnc')
-rw-r--r--net-misc/tigervnc/files/tigervnc-1.13.1.confd13
-rw-r--r--net-misc/tigervnc/files/tigervnc-1.13.1.initd88
-rw-r--r--net-misc/tigervnc/tigervnc-1.13.1-r3.ebuild230
-rw-r--r--net-misc/tigervnc/tigervnc-9999.ebuild11
4 files changed, 336 insertions, 6 deletions
diff --git a/net-misc/tigervnc/files/tigervnc-1.13.1.confd b/net-misc/tigervnc/files/tigervnc-1.13.1.confd
new file mode 100644
index 000000000000..bb6dae7df032
--- /dev/null
+++ b/net-misc/tigervnc/files/tigervnc-1.13.1.confd
@@ -0,0 +1,13 @@
+# Config file for /etc/init.d/tigervnc
+
+# Add the user(s) Xvnc(1) should be run for to /etc/tigervnc/vncserver.users
+# DISPLAYS is no loger used.
+
+# Optionally override the default Xsession file
+# TIGERVNC_XSESSION_FILE="/usr/share/sddm/scripts/Xsession"
+# TIGERVNC_XSESSION_FILE="/etc/gdm/Xsession"
+# TIGERVNC_XSESSION_FILE="/etc/lightdm/Xsession"
+# TIGERVNC_XSESSION_FILE="/usr/share/slim/Xsession"
+
+# vncsession no longer supports VNC_OPTS
+# Use /etc/tigervnc/vncserver-config-defaults or $HOME/.vnc/config instead
diff --git a/net-misc/tigervnc/files/tigervnc-1.13.1.initd b/net-misc/tigervnc/files/tigervnc-1.13.1.initd
new file mode 100644
index 000000000000..f7e72fa84c07
--- /dev/null
+++ b/net-misc/tigervnc/files/tigervnc-1.13.1.initd
@@ -0,0 +1,88 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+# shellcheck shell=sh
+
+# Create symlinks for all displays.
+# For example for display :1, run `ln -s tigervnc /etc/init.d/tigervnc.1`
+# Then `rc-update add tigervnc.1 default`
+# For compatibility, /etc/init.d/tigervnc will start all displays.
+
+DISPLAYS=${SVCNAME#*.}
+if [ "$DISPLAYS" = "tigervnc" ]; then
+ should_warn=1
+ DISPLAYS=$(grep -v "^#" /etc/tigervnc/vncserver.users | sed -e 's/=.*//' -e 's/^://')
+fi
+
+depend() {
+ need net
+}
+
+checkconfig() {
+ if [ -n "${DISPLAYS}" ]; then
+ if [ "$1" = "start" ]; then
+ for display in $DISPLAYS; do
+ user="$(grep "^:${display}" /etc/tigervnc/vncserver.users)"
+ user=${user#*=}
+ # bug #690046
+ if [ -z "${user}" ]; then
+ eerror "User is not defined for display :${display} in /etc/tigervnc/vncserver.users"
+ return 1
+ elif ! runuser -l "${user}" -c "[ -f ~/.vnc/passwd ]"; then
+ eerror "There are no passwords defined for user ${user}."
+ return 1
+ elif [ -e "/tmp/.X11-unix/X${display}" ]; then
+ eerror "Display :${display} appears to be already in use because of /tmp/.X11-unix/X${display}"
+ eerror "Remove this file if there is no X server for :${display}"
+ return 1
+ elif [ -e "/tmp/.X${display}-lock" ]; then
+ eerror "Display :${display} appears to be already in use because of /tmp/.X${display}-lock"
+ eerror "Remove this file if there is no X server for :${display}"
+ return 1
+ fi
+ FREEDISPLAYS="${FREEDISPLAYS} ${display}"
+ done
+ fi
+ return 0
+ else
+ eerror 'There are no displays configured in /etc/tigervnc/vncserver.users'
+ return 1
+ fi
+}
+
+checkwarn() {
+ if [ "${should_warn}" = "1" ]; then
+ ewarn 'Running /etc/init.d/tigervnc in compatibility mode'
+ ewarn 'Please migrate to one service per display as detailed here:'
+ ewarn 'https://wiki.gentoo.org/wiki/TigerVNC#Migrating_from_1.13.1-r2_or_lower:'
+ fi
+}
+
+start() {
+ checkwarn
+ FREEDISPLAYS=""
+ checkconfig start || return 1
+ for display in $FREEDISPLAYS; do
+ [ -n "${TIGERVNC_XSESSION_FILE}" ] && export TIGERVNC_XSESSION_FILE
+ ebegin "Starting TigerVNC server :${display}"
+ start-stop-daemon --start --pidfile=/run/vncsession-":${display}".pid /usr/libexec/vncsession-start -- ":${display}"
+ eend $?
+ done
+}
+
+stop() {
+ checkconfig stop || return 2
+ for display in $DISPLAYS; do
+ ebegin "Stopping TigerVNC server :${display}"
+ start-stop-daemon --stop --pidfile=/run/vncsession-":${display}".pid
+ eend $?
+ done
+ # Do not fail if a server is missing
+ /bin/true
+}
+
+restart() {
+ svc_stop
+ svc_start
+}
diff --git a/net-misc/tigervnc/tigervnc-1.13.1-r3.ebuild b/net-misc/tigervnc/tigervnc-1.13.1-r3.ebuild
new file mode 100644
index 000000000000..14114aae2041
--- /dev/null
+++ b/net-misc/tigervnc/tigervnc-1.13.1-r3.ebuild
@@ -0,0 +1,230 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CMAKE_IN_SOURCE_BUILD=1
+inherit autotools cmake flag-o-matic java-pkg-opt-2 optfeature systemd xdg
+
+XSERVER_VERSION="21.1.8"
+XSERVER_PATCH_VERSION="21.1.1"
+
+DESCRIPTION="Remote desktop viewer display system"
+HOMEPAGE="https://tigervnc.org"
+SRC_URI="server? ( ftp://ftp.freedesktop.org/pub/xorg/individual/xserver/xorg-server-${XSERVER_VERSION}.tar.xz )"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/TigerVNC/tigervnc/"
+else
+ SRC_URI+=" https://github.com/TigerVNC/tigervnc/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="dri3 +drm gnutls java nls +opengl +server +viewer xinerama"
+REQUIRED_USE="
+ dri3? ( drm )
+ java? ( viewer )
+ opengl? ( server )
+ || ( server viewer )
+"
+
+# TODO: sys-libs/libselinux
+COMMON_DEPEND="
+ dev-libs/gmp:=
+ dev-libs/nettle:=
+ media-libs/libjpeg-turbo:=
+ sys-libs/zlib:=
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXrandr
+ x11-libs/pixman
+ gnutls? ( net-libs/gnutls:= )
+ nls? ( virtual/libiconv )
+ server? (
+ dev-libs/libbsd
+ dev-libs/openssl:0=
+ sys-libs/pam
+ x11-libs/libXau
+ x11-libs/libXdamage
+ x11-libs/libXdmcp
+ x11-libs/libXfixes
+ x11-libs/libXfont2
+ x11-libs/libXtst
+ x11-libs/pixman
+ x11-apps/xauth
+ x11-apps/xinit
+ x11-apps/xkbcomp
+ x11-apps/xsetroot
+ x11-misc/xkeyboard-config
+ opengl? ( media-libs/libglvnd[X] )
+ !net-misc/turbovnc[server]
+ )
+ viewer? (
+ media-video/ffmpeg:=
+ x11-libs/fltk:1
+ x11-libs/libXi
+ x11-libs/libXrender
+ !net-misc/turbovnc[viewer]
+ )
+"
+RDEPEND="${COMMON_DEPEND}
+ java? ( >=virtual/jre-1.8:* )
+ server? ( dev-lang/perl )
+"
+DEPEND="${COMMON_DEPEND}
+ java? ( >=virtual/jdk-1.8:* )
+ drm? ( x11-libs/libdrm )
+ server? (
+ media-fonts/font-util
+ x11-base/xorg-proto
+ x11-libs/libxcvt
+ x11-libs/libXi
+ x11-libs/libxkbfile
+ x11-libs/libXrender
+ x11-libs/xtrans
+ x11-misc/util-macros
+ opengl? ( media-libs/mesa )
+ )
+"
+BDEPEND="
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+
+PATCHES=(
+ # Restore Java viewer
+ "${FILESDIR}"/${PN}-1.11.0-install-java-viewer.patch
+ "${FILESDIR}"/${PN}-1.12.0-xsession-path.patch
+ "${FILESDIR}"/${PN}-1.12.80-disable-server-and-pam.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == *9999 ]]; then
+ git-r3_src_unpack
+ use server && unpack xorg-server-${XSERVER_VERSION}.tar.xz
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ if use server; then
+ cp -r "${WORKDIR}"/xorg-server-${XSERVER_VERSION}/. unix/xserver || die
+ fi
+
+ cmake_src_prepare
+
+ if use server; then
+ cd unix/xserver || die
+ eapply ../xserver${XSERVER_PATCH_VERSION}.patch
+ eautoreconf
+ sed -i 's:\(present.h\):../present/\1:' os/utils.c || die
+ sed -i '/strcmp.*-fakescreenfps/,/^ \}/d' os/utils.c || die
+
+ if use drm; then
+ cd "${WORKDIR}" && \
+ sed -i 's:\(drm_fourcc.h\):libdrm/\1:' $(grep drm_fourcc.h -rl .) || die
+ fi
+ fi
+}
+
+src_configure() {
+ if use arm || use hppa; then
+ append-flags "-fPIC"
+ fi
+
+ local mycmakeargs=(
+ -DENABLE_GNUTLS=$(usex gnutls)
+ -DENABLE_NLS=$(usex nls)
+ -DBUILD_JAVA=$(usex java)
+ -DBUILD_SERVER=$(usex server)
+ -DBUILD_VIEWER=$(usex viewer)
+ )
+
+ cmake_src_configure
+
+ if use server; then
+ cd unix/xserver || die
+ econf \
+ $(use_enable opengl glx) \
+ $(use_enable drm libdrm) \
+ --disable-config-hal \
+ --disable-config-udev \
+ --disable-devel-docs \
+ --disable-dri \
+ $(use_enable dri3) \
+ --disable-glamor \
+ --disable-kdrive \
+ --disable-libunwind \
+ --disable-linux-acpi \
+ --disable-record \
+ --disable-selective-werror \
+ --disable-static \
+ --disable-unit-tests \
+ --disable-xephyr \
+ $(use_enable xinerama) \
+ --disable-xnest \
+ --disable-xorg \
+ --disable-xvfb \
+ --disable-xwin \
+ --enable-dri2 \
+ --with-pic \
+ --without-dtrace \
+ --disable-present \
+ --with-sha1=libcrypto
+ fi
+}
+
+src_compile() {
+ cmake_src_compile
+
+ if use server; then
+ # deps of the vnc module and the module itself
+ local d subdirs=(
+ fb xfixes Xext dbe $(usex opengl glx "") $(usev dri3) randr render
+ damageext miext Xi xkb composite dix mi os hw/vnc
+ )
+ for d in "${subdirs[@]}"; do
+ emake -C unix/xserver/"${d}"
+ done
+ fi
+}
+
+src_install() {
+ cmake_src_install
+
+ if use server; then
+ emake -C unix/xserver/hw/vnc DESTDIR="${D}" install
+ rm -v "${ED}"/usr/$(get_libdir)/xorg/modules/extensions/libvnc.la || die
+
+ newconfd "${FILESDIR}"/${PN}-1.13.1.confd ${PN}
+ newinitd "${FILESDIR}"/${PN}-1.13.1.initd ${PN}
+
+ systemd_douserunit unix/vncserver/vncserver@.service
+
+ # comment out pam_selinux.so, the server does not start if missing
+ # part of bug #746227
+ sed -i -e '/pam_selinux/s/^/#/' "${ED}"/etc/pam.d/tigervnc || die
+
+ # install vncserver to /usr/bin too, see bug #836620
+ dosym -r /usr/libexec/vncserver /usr/bin/vncserver
+ fi
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ use server && {
+ elog 'OpenRC users: please migrate to one service per display as documented here:'
+ elog 'https://wiki.gentoo.org/wiki/TigerVNC#Migrating_from_1.13.1-r2_or_lower:'
+ }
+
+ local OPTIONAL_DM="gnome-base/gdm x11-misc/lightdm x11-misc/sddm x11-misc/slim"
+ use server && \
+ optfeature "keeping track of the xorg-server module" net-misc/tigervnc-xorg-module && \
+ optfeature_header "Install any additional display manager package:" && \
+ optfeature "proper session support" ${OPTIONAL_DM}
+}
diff --git a/net-misc/tigervnc/tigervnc-9999.ebuild b/net-misc/tigervnc/tigervnc-9999.ebuild
index a1d75fef3750..23b38081e296 100644
--- a/net-misc/tigervnc/tigervnc-9999.ebuild
+++ b/net-misc/tigervnc/tigervnc-9999.ebuild
@@ -72,10 +72,7 @@ COMMON_DEPEND="
"
RDEPEND="${COMMON_DEPEND}
java? ( >=virtual/jre-1.8:* )
- server? (
- dev-lang/perl
- sys-process/psmisc
- )
+ server? ( dev-lang/perl )
"
DEPEND="${COMMON_DEPEND}
java? ( >=virtual/jdk-1.8:* )
@@ -203,8 +200,8 @@ src_install() {
emake -C unix/xserver/hw/vnc DESTDIR="${D}" install
rm -v "${ED}"/usr/$(get_libdir)/xorg/modules/extensions/libvnc.la || die
- newconfd "${FILESDIR}"/${PN}-1.12.0.confd ${PN}
- newinitd "${FILESDIR}"/${PN}-1.12.0.initd ${PN}
+ newconfd "${FILESDIR}"/${PN}-1.13.1.confd ${PN}
+ newinitd "${FILESDIR}"/${PN}-1.13.1.initd ${PN}
systemd_douserunit unix/vncserver/vncserver@.service
@@ -220,6 +217,8 @@ src_install() {
pkg_postinst() {
xdg_pkg_postinst
+ use server && elog 'OpenRC users: please migrate to one service per display as documented here' #FIXME: add link
+
local OPTIONAL_DM="gnome-base/gdm x11-misc/lightdm x11-misc/sddm x11-misc/slim"
use server && \
optfeature "keeping track of the xorg-server module" net-misc/tigervnc-xorg-module && \