The branch, build-main has been updated via de739c1953ed6cd7ee0c04cdd25aad07cb79c7ca (commit) from 2dbdac6e103ca0cad609729bd0310ab679998391 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: debian/changelog | 1 + x2goserver-xsession/Makefile | 8 +- x2goserver-xsession/etc/Xsession | 207 +++++++++++++++++++++++++++----------- x2goserver/bin/x2goruncommand | 2 +- 4 files changed, 154 insertions(+), 64 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index bd417b8..c4fcebf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,6 +14,7 @@ x2goserver (4.0.1.10-0x2go1) UNRELEASED; urgency=low - Use xkb ruleset 'base' rather than xfree86 as on RHEL systems the xfree86 symlink to base rulset does not exist. - Grab systemd service file from Fedora and ship it upstream. + - Provide RHEL/Fedora support in x2goserver-xsession. * x2goserver.spec: + Ship x2goserver.spec (RPM package definitions) in upstream project. (Thanks to the Fedora package maintainers). File differs from the Fedora diff --git a/x2goserver-xsession/Makefile b/x2goserver-xsession/Makefile index 07921e0..b729d04 100755 --- a/x2goserver-xsession/Makefile +++ b/x2goserver-xsession/Makefile @@ -22,6 +22,8 @@ SHAREDIR=$(PREFIX)/share/x2go XSESSIONDIR ?= /etc/X11/Xsession.d XSESSIONOPTIONFILE ?= /etc/X11/Xsession.options +XINITRCDIR ?= /etc/X11/xinit/xinitrc.d +XCLIENTSDIR ?= /etc/X11/xinit/Xclients.d ETC_FILES=$(shell cd etc && echo *) FEATURE_SCRIPTS=$(shell cd share/x2gofeature.d && echo *.features) @@ -60,8 +62,10 @@ install_config: # provide target dirs for X11 related symlinks $(INSTALL_PROGRAM) etc/Xsession $(DESTDIR)$(ETCDIR)/ $(INSTALL_SYMLINK) /etc/X11/Xresources $(DESTDIR)$(ETCDIR)/ - if [ -e $(XSESSIONOPTIONFILE) ]; then $(INSTALL_SYMLINK) $(XSESSIONOPTIONFILE) $(DESTDIR)$(ETCDIR)/Xsession.options; else touch $(DESTDIR)$(ETCDIR)/Xsession.options; fi - if [ -d $(XSESSIONDIR) ]; then $(INSTALL_SYMLINK) $(XSESSIONDIR) $(DESTDIR)$(ETCDIR)/Xsession.d; else $(INSTALL_DIR) $(DESTDIR)$(ETCDIR)/Xsession.d; fi + if [ -e /etc/debian_version ]; if [ -e $(XSESSIONOPTIONFILE) ]; then $(INSTALL_SYMLINK) $(XSESSIONOPTIONFILE) $(DESTDIR)$(ETCDIR)/Xsession.options; else touch $(DESTDIR)$(ETCDIR)/Xsession.options; fi; fi + if [ -e /etc/debian_version ]; if [ -d $(XSESSIONDIR) ]; then $(INSTALL_SYMLINK) $(XSESSIONDIR) $(DESTDIR)$(ETCDIR)/Xsession.d; else $(INSTALL_DIR) $(DESTDIR)$(ETCDIR)/Xsession.d; fi; fi + if [ -e /etc/redhat-release ]; if [ -d $(XINITRCDIR) ]; then $(INSTALL_SYMLINK) $(XINITRCDIR) $(DESTDIR)$(ETCDIR)/xinitrc.d; else $(INSTALL_DIR) $(DESTDIR)$(ETCDIR)/xinitrc.d; fi; fi + if [ -e /etc/redhat-release ]; if [ -d $(XCLIENTSDIR) ]; then $(INSTALL_SYMLINK) $(XCLIENTSDIR) $(DESTDIR)$(ETCDIR)/Xclients.d; else $(INSTALL_DIR) $(DESTDIR)$(ETCDIR)/Xclients.d; fi; fi install_man: # $(INSTALL_DIR) $(DESTDIR)$(MANDIR) diff --git a/x2goserver-xsession/etc/Xsession b/x2goserver-xsession/etc/Xsession index 47ec40e..243be76 100755 --- a/x2goserver-xsession/etc/Xsession +++ b/x2goserver-xsession/etc/Xsession @@ -13,48 +13,48 @@ 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 > /dev/null 2>&1; then - echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file - - fi + # 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 > /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: $*" - echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2; - if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then - echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file - - fi + # pretty-print messages of arbitrary length (no trailing newline); use + # xmessage if it is available and $DISPLAY is set + MESSAGE="$PROGNAME: $*" + echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2; + if [ -n "$DISPLAY" ] && which xmessage > /dev/null 2>&1; then + echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | xmessage -center -file - + fi } errormsg () { - # exit script with error - message "$*" - exit 1 + # 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 \"x2goserver\"" \ - "package and the complete text of this error message to" \ - "<x2go-dev@lists.x2go.org>." + # 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"; - . "$file" - fi + if [ -f "$file" ]; then + echo "Loading profile from $file"; + . "$file" + fi done # initialize variables for use by all session scripts @@ -71,17 +71,16 @@ ALTUSERXSESSION=$HOME/.Xsession-x2go ERRFILE=$HOME/.xsession-x2go-errors # attempt to create an error file; abort if we cannot -if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] && - [ ! -L "$ERRFILE" ]; then - chmod 600 "$ERRFILE" +if (umask 077 && touch "$ERRFILE") 2> /dev/null && [ -w "$ERRFILE" ] && [ ! -L "$ERRFILE" ]; then + chmod 600 "$ERRFILE" elif ERRFILE=$(mktemp 2> /dev/null); then - if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-x2go-$USER"; then - message "warning: unable to symlink \"$TMPDIR/xsession-x2go-$USER\" to" \ - "\"$ERRFILE\"; look for session log/errors in" \ - "\"$TMPDIR/xsession-x2go-$USER\"." - fi + if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-x2go-$USER"; then + message "warning: unable to symlink \"$TMPDIR/xsession-x2go-$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." + errormsg "unable to create X session (X2Go) log/error file; aborting." fi exec >>"$ERRFILE" 2>&1 @@ -90,7 +89,7 @@ echo "$PROGNAME: X session started for $LOGNAME at $(date)" # sanity check; is our session script directory present? if [ ! -d "$SYSSESSIONDIR" ]; then - errormsg "no \"$SYSSESSIONDIR\" directory found; aborting." + errormsg "no \"$SYSSESSIONDIR\" directory found; aborting." fi # Attempt to create a file of non-zero length in /tmp; a full filesystem can @@ -100,32 +99,118 @@ fi # 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" + message "warning: unable to write to ${WRITE_TEST%/*}; X session (X2Go) may" \ + "exit with an error" fi rm -f "$WRITE_TEST" -# 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 +if [ -f /etc/debian_version ]; then + + # 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 ]; 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 + . /etc/profile.d/lang.sh + 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/xinit/xinitrc.d/* ; do + . $file + 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 -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 -l "$SHELL" -c "$SWITCHDESKPATH/Xclients.${XSESSION_EXEC}"; + #fi + + exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$STARTUP\"" fi exit 0 - -# vim:set ai et sts=2 sw=2 tw=80: diff --git a/x2goserver/bin/x2goruncommand b/x2goserver/bin/x2goruncommand index ea22c49..3fb5c84 100755 --- a/x2goserver/bin/x2goruncommand +++ b/x2goserver/bin/x2goruncommand @@ -226,7 +226,7 @@ if [ "$EXEC" != "" ] && [ -x $EXEC ]; then x2gofeature X2GO_XSESSION &>/dev/null && [ "x$X2GO_SESS_TYPE" = "xD" ] && { STARTUP="$cmd$args" $X2GO_LIB_PATH/x2gosyslog "$0" "notice" "launching session with Xsession-x2go mechanism, using STARTUP=\"$STARTUP\"" - STARTUP="/usr/bin/env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ${STARTUP}" /etc/x2go/Xsession + XSESSION_EXEC="$cmd" STARTUP="/usr/bin/env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ${STARTUP}" /etc/x2go/Xsession } || { $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "executing command \"$cmd$args\"..." $EXEC_WRAPPER $cmd$args hooks/post-receive -- x2goserver.git (X2Go Server) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2goserver.git" (X2Go Server).