This file is indexed.

/etc/x2go/Xsession is in x2goserver-xsession 4.1.0.0-3.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#!/bin/bash
#
# /etc/x2go/Xsession
#
# X2Go Xsession file -- used by x2goserver Xsession.d add-on.

# This file has been derived from the global Xsession file in Debian squeeze

set -e

X2GO_LIBEXEC_PATH="$(x2gopath libexec)";

PROGNAME=XSession-x2go

message () {
	# pretty-print messages of arbitrary length; use xmessage if it
	# is available and $DISPLAY is set
	MESSAGE="$PROGNAME: $*"
	echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2
	if [ -n "$DISPLAY" ] && which xmessage 1> /dev/null 2>&1; then
		echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
	fi
}

message_nonl () {
	# pretty-print messages of arbitrary length (no trailing newline); use
	# xmessage if it is available and $DISPLAY is set
	MESSAGE="$PROGNAME: $*"
	printf '%s' "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2;
	if [ -n "$DISPLAY" ] && which xmessage 1> /dev/null 2>&1; then
		printf '%s' "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file -
	fi
}

errormsg () {
	# exit script with error
	message "$*"
	exit 1
}

internal_errormsg () {
	# exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
	# One big call to message() for the sake of xmessage; if we had two then
	# the user would have dismissed the error we want reported before seeing the
	# request to report it.
	errormsg "$*" \
	   "Please report the installed version of the \"X2Go Server\"" \
	   "package and the complete text of this error message to" \
	   "<x2go-dev@lists.x2go.org>."
}

# Load profile
for file in "/etc/profile" "$HOME/.profile" "/etc/xprofile" "$HOME/.xprofile"; do
	if [ -f "$file" ]; then
		echo "Loading profile from $file";
		set +e
		. "$file"
		set -e
	fi
done

cur_hostname="$(hostname)"
if [ -z "${cur_hostname}" ] || [ "${cur_hostname}" = "(none)" ] || [ "${cur_hostname}" = "localhost" ]; then
	errormsg "Hostname not set correctly; aborting."
fi

# initialize variables for use by all session scripts

OPTIONFILE=/etc/x2go/Xsession.options

SYSRESOURCES=/etc/x2go/Xresources
USRRESOURCES=$HOME/.Xresources-x2go

SYSSESSIONDIR=/etc/x2go/Xsession.d
USERXSESSION=$HOME/.xsession-x2go
USERXSESSIONRC=$HOME/.xsessionrc-x2go
ALTUSERXSESSION=$HOME/.Xsession-x2go
ERRFILE="${HOME}/.xsession-x2go-${cur_hostname}-errors"

# Move the old error log file away.
if [ -f "${ERRFILE}" ]; then
	if [ -L "${ERRFILE}" ]; then
		resolved_errfile="$(perl -e 'use Cwd qw (abs_path); print abs_path ("' "${ERRFILE}" '") . "\n";')"
		mv "${resolved_errfile}" "${resolved_errfile}.old" || errormsg "Unable to move symlinked old log/error file '${resolved_errfile}'; aborting."
	else
		mv "${ERRFILE}" "${ERRFILE}.old" || errormsg "Unable to move old log/error file '${ERRFILE}'; aborting."
	fi
fi

# attempt to create an error file; abort if we cannot
if (umask 177 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] && [ ! -L "$ERRFILE" ]; then
	chmod 600 "$ERRFILE"
elif ERRFILE=$(umask 077 && mktemp 2> /dev/null); then
	if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-x2go-${cur_hostname}-$USER"; then
		message "warning: unable to symlink \"$TMPDIR/xsession-x2go-${cur_hostname}-$USER\" to" \
		        "\"$ERRFILE\"; look for session log/errors in" \
		        "\"$TMPDIR/xsession-x2go-$USER\"."
	fi
else
	errormsg "unable to create X session (X2Go) log/error file; aborting."
fi

exec >>"$ERRFILE" 2>&1

echo "$PROGNAME: X session started for $LOGNAME at $(date)"


# Attempt to create a file of non-zero length in /tmp; a full filesystem can
# cause mysterious X session failures.  We do not use touch, :, or test -w
# because they won't actually create a file with contents.  We also let standard
# error from mktemp and echo go to the error file to aid the user in
# determining what went wrong.
WRITE_TEST=$(mktemp)
if ! echo "*" >>"$WRITE_TEST"; then
	message "warning: unable to write to ${WRITE_TEST%/*}; X session (X2Go) may" \
	        "exit with an error"
fi
rm -f "$WRITE_TEST"


if [ -f /etc/debian_version ] || [ -f /etc/devuan_version ]; then

	# sanity check; is our session script directory present?
	if [ ! -d "$SYSSESSIONDIR" ]; then
		errormsg "no \"$SYSSESSIONDIR\" directory found; aborting."
	fi

	# use run-parts to source every file in the session directory; we source
	# instead of executing so that the variables and functions defined above
	# are available to the scripts, and so that they can pass variables to each
	# other

	SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
	SYSSESSIONDIR=/etc/x2go/Xsession.d

	SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)

	### source Xsession files
	if [ -n "$SESSIONFILES" ]; then

		set +e
		for SESSIONFILE in $SESSIONFILES; do
			"$X2GO_LIBEXEC_PATH/x2gosyslog" "$0" "info" "executing $SESSIONFILE"
			. $SESSIONFILE
		done
		set -e
	fi
elif [ -f /etc/redhat-release ] || [ -f /etc/gentoo-release ] || [ -f /etc/SUSE-brand ] || [ -f /etc/SuSE-release ] || [ -f /etc/os-rt-release ]; then

	# define a fallback... (should never be needed). The XSESSION_EXEC var gets set in
	# X2Go's x2goruncommand script and can be used with obsolete switchdesk or with
	# Xclients.d scripts (also rarely used, see below...).
	XSESSION_EXEC=${XSESSION_EXEC:-xterm}

	# Set up i18n environment
	if [ -r /etc/profile.d/lang.sh ]; then
		set +e
		. /etc/profile.d/lang.sh
		set -e
	fi

	# merge in defaults
	[ -r "$SYSRESOURCES" ] && xrdb -nocpp -merge "$SYSRESOURCES"
	[ -r "$USRRESOURCES" ] && xrdb -merge "$USRRESOURCES"

	# RHEL's Xsession file for X11 allows playing with setxkbmap / xmodmap
	# We provide this for compat, but disrecommend using it. Make sure to
	# disable any Keyboard setup in X2Go Client / PyHoca-GUI if you want to
	# use server-side key mappings.
	USRMODMAP=$HOME/.Xmodmap-x2go
	USRXKBMAP=$HOME/.Xkbmap-x2go

	SYSMODMAP=/etc/x2go/Xmodmap
	SYSXKBMAP=/etc/x2go/Xkbmap

	# merge in keymaps
	if [ -r "$SYSXKBMAP" ]; then
		setxkbmap $(cat "$SYSXKBMAP")
		XKB_IN_USE=yes
	fi

	if [ -r "$USRXKBMAP" ]; then
		setxkbmap $(cat "$USRXKBMAP")
		XKB_IN_USE=yes
	fi

	# xkb and xmodmap don't play nice together
	if [ -z "$XKB_IN_USE" ]; then
		[ -r "$SYSMODMAP" ] && xmodmap "$SYSMODMAP"
		[ -r "$USRMODMAP" ] && xmodmap "$USRMODMAP"
	fi

	unset XKB_IN_USE

	# run all system xinitrc shell scripts.
	for file in /etc/x2go/xinitrc.d/* ; do
		set +e
		[ -r "$file" ] && . $file
		set -e
	done

	# Prefix launch of session with ssh-agent if available and not already running.
	SSH_AGENT=
	if [ -x /usr/bin/ssh-agent -a -z "$SSH_AGENT_PID" ]; then
		if [ "x$TMPDIR" != "x" ]; then
			SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
		else
			SSH_AGENT="/usr/bin/ssh-agent"
		fi
	fi

	CK_XINIT_SESSION=
	if [ -x /usr/bin/ck-xinit-session -a -z "$XDG_SESSION_COOKIE" ]; then
		CK_XINIT_SESSION="/usr/bin/ck-xinit-session"
	fi

	# At the time of integrating X2Go Xsession support for RHEL6 / Fedora
	# the Xsession stuff in Fedora/RHEL6 seems to be a little mess.
	# The proposed strategy is to have Xclients.$WM.sh files in 
	# /etc/X11/xinit/Xclients.d. Currently, only wmx uses this mechanism.
	# As it is a described but rather unused ,,standard'' we will not support it
	# in X2Go for now, but leave it here as a reminder...

	# XCLIENTS_D=/etc/x2go/Xclients.d
	#if [ -d "$XCLIENTS_D" -a -x "$XCLIENTS_D/Xclients.${XSESSION_EXEC}.sh" ]; then
	#	exec /bin/bash -c "exec -l \"$SHELL\" -c \"$CK_XINIT_SESSION $SSH_AGENT $XCLIENTS_D/Xclients.$1.sh\""
	#fi

	# switchdesk support is also totally deprecated in RHEL, but we leave it here
	# as a reminder, as well, in case we need it in the future for special setups...
	#if [ -x "$SWITCHDESKPATH/Xclients.${XSESSION_EXEC}" ]; then
	#	exec /bin/bash -c "exec -l \"$SHELL\" -c \"$SWITCHDESKPATH/Xclients.${XSESSION_EXEC}\""
	#fi

	exec $CK_XINIT_SESSION $SSH_AGENT /bin/bash -c "exec -l \"$SHELL\" -c \"$STARTUP\""
else
	errormsg 'Unknown operating system, XSession startup not implemented!'
fi

exit 0