#!/bin/sh if [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/X11/xserverrc" ]; then server=${XDG_CONFIG_HOME:-$HOME/.config}/X11/xserverrc elif [ -r "$HOME/.xserverrc" ]; then server=$HOME/.xserverrc else server=/etc/X11/xinit/xserverrc fi if [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/X11/xsession" ]; then client=${XDG_CONFIG_HOME:-$HOME/.config}/X11/xsession elif [ -r "$HOME/.xsession" ]; then client="$HOME/.xsession" else client=/etc/X11/xinit/xinitrc fi # Automatically determine an unused $DISPLAY d=0 while true; do [ -e "/tmp/.X$d-lock" ] || [ -S "/tmp/.X11-unix/X$d" ] || break d=$((d + 1)) done display=":$d" unset d if [ -z "${XAUTHORITY+x}" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi removelist= # check for GNU hostname if hostname --version >/dev/null 2>&1; then if ! hostname --version 2>&1 | grep GNU -q; then hostname=$(hostname -f) fi fi if [ -z "$hostname" ]; then hostname=$(hostname) fi authdisplay=${display:-:0} mcookie=$(/usr/bin/mcookie) if [ -z "${mcookie+x}" ]; then echo "Couldn't create cookie" exit 1 fi dummy=0 # create a file with auth information for the server. ':0' is a dummy. xserverauthfile=$(mktemp --tmpdir serverauth.XXXXXXXXXX) trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP BUS TERM xauth -q -f "$xserverauthfile" <<EOF add :$dummy . $mcookie EOF serverargs=${serverargs}" -auth "${xserverauthfile} # now add the same credentials to the client authority file # if '$displayname' already exists do not overwrite it as another # server may need it. Add them to the '$xserverauthfile' instead. for displayname in $authdisplay $hostname$authdisplay; do authcookie=$(xauth list "$displayname" | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p") 2>/dev/null if [ -n "${authcookie+x}" ]; then xauth -q <<EOF add $displayname . $mcookie EOF removelist="$displayname $removelist" else dummy=$((dummy + 1)) xauth -q -f "$xserverauthfile" <<EOF add :$dummy . $authcookie EOF fi done xinit $client -- $server $serverargs $display retval=$? if [ -z "${removelist+x}" ]; then xauth remove $removelist fi if [ x"$xserverauthfile" != x ]; then rm -f "$xserverauthfile" fi if command -v deallocvt >/dev/null 2>&1; then deallocvt fi exit $retval