The branch, build-main has been updated via dc092a92bb23b613d76c6357022fc04c30acd213 (commit) via f9d2dc4b501f959472d20899732bd25d8f269c9a (commit) via 2e471b45ddf6a9cd7dca06d3b0f276ef35a3788a (commit) via 266caa371a9fa8b393a0cf3ae7c5126531f95cc0 (commit) via 256fe8a5e2f9211367ecaf0e5a40cf7fee334d42 (commit) via 9a49f7672ec2bbde2b70c891fc5d005782efd7b6 (commit) via 5de98c2ed290873f044368348d310522ccda3004 (commit) via c27e35304f21a73a85d7bc1c4191fed696d4c0a0 (commit) via b022803cb5b4dc10c740c52bd5845f9a52b7d9b9 (commit) via ccdd4364d44b187c1f5cd24b4f1c2aa487110cac (commit) via 3fa5425554f3c40e1d4a2717f575c406f471c1a3 (commit) via 1af7be02935673fbe6afe3f4ba75d3ae65f6f62e (commit) via b81c5c9784ac0a999d2183b275e0a52300a90184 (commit) via 147d22c44167b9b2d4afbdaf17262555a7af713b (commit) via ea355064c9a388987117c8765501be55061e47c9 (commit) via 389c5d45a7b379904537016979b7232151484824 (commit) via e07883826b637ad0d6d82db3d515d22b6e8d1481 (commit) via 22d7413c1ee6133326095ed344e0c47a391c4deb (commit) via 36cae2ee8140e7afc3103ceb6e22e17af97f465b (commit) via 3b0fc54b49b2e3dc5617e4fc2ce7ddaa0c29faa4 (commit) via 077700a44d18794fce590395fbc4b84eb818f1f4 (commit) via c13ffe1cb2c39edfacab52bc62e278469da19c9e (commit) via 91c4bb8568bb649fcef89484b19a556453b57e04 (commit) via 90878489a1334d9d840556e0b2e69a47425c1658 (commit) via 5fc6add53c7495f331f9e381324c34b1ffd21d75 (commit) via 3d7ab5ee559139653ad299bdb6779c313f3861cc (commit) via 5fc633c06d3c39bf77c95afde55ed3c6236cde0c (commit) via eddd060e73c5011585af52f8fdb74c63f3993e12 (commit) from 3106896d148a55969c98be317595e8911191a163 (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 | 35 +++++++++ debian/control | 2 +- debian/x2goserver-pyhoca.docs | 2 +- debian/x2goserver-pyhoca.install | 4 +- debian/x2goserver-pyhoca.manpages | 2 +- debian/x2goserver.preinst | 4 +- x2goserver-compat/VERSION.x2goserver-compat | 2 +- .../VERSION.x2goserver-extensions | 2 +- .../VERSION.x2goserver-fmbindings | 2 +- x2goserver-printing/VERSION.x2goserver-printing | 2 +- x2goserver-pyhoca/Makefile | 36 +++++----- x2goserver-pyhoca/VERSION.x2goserver-pyhoca | 2 +- x2goserver-pyhoca/man/man8/x2gosetkeyboard.8 | 34 --------- .../share/x2gofeature.d/x2goserver-pyhoca.features | 1 - x2goserver-xsession/VERSION.x2goserver-xsession | 2 +- x2goserver/VERSION.x2goserver | 2 +- x2goserver/bin/x2gocmdexitmessage | 9 ++- x2goserver/bin/x2gogetapps | 2 +- x2goserver/bin/x2gomountdirs | 7 ++- x2goserver/bin/x2goresume-session | 13 +++- x2goserver/bin/x2goruncommand | 73 +++++++++++++++++++- .../bin/x2gosetkeyboard | 38 +++++++++-- x2goserver/bin/x2gostartagent | 15 +++-- x2goserver/bin/x2goumount-session | 35 ++++++++-- x2goserver/lib/x2godbwrapper.pm | 21 ++++++- x2goserver/lib/x2gosqlitewrapper.pl | 14 ++++ x2goserver/share/x2gofeature.d/x2goserver.features | 2 + 27 files changed, 268 insertions(+), 95 deletions(-) delete mode 100644 x2goserver-pyhoca/man/man8/x2gosetkeyboard.8 rename {x2goserver-pyhoca => x2goserver}/bin/x2gosetkeyboard (66%) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 75fa83a..845e2b7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,38 @@ +x2goserver (3.1.1.1-0~x2go1) unstable; urgency=low + + [ Mike Gabriel ] + * New upstream version (3.1.1.1): + - Add/fix Python X2Go folder sharing/unsharing support from Windows. + - Handle whitespace in folder names appropriately. + - Allow .desktop file parameter Terminal=... to pass through to X2Go + client-side. + - Avoid error messages in x2gocmdexistmessage if cmdoutput file could + not be found. + - Provide nx-X11 libraries for applications launched via x2goruncommand. + - Add feature X2GO_SERVERSIDE_DESKTOPCOMMANDS. Let client provide a generic + desktop shell command (GNOME, UNITRY, KDE, etc.) which then gets + translated into an executable command by x2goruncommand. + - Detect desktop session mode to use for Ubuntu precise and later. + - Complete UNITY/GNOME support for Ubuntu/Debian. + - Use ,,-nolisten tcp'' option when evoking x2goagent from within + x2gostartagent. + - Export NX_ROOT=$HOME/.x2go in x2gostartagent. Makes the keyboard file + in X2Go session cache directory. + - Add support for client-side keyboard detection. Moved script + x2gosetkeyboard from x2goserver-pyhoca into x2goserver package. + - Make x2gosetkeyboard set the client-side keyboard on session start and + resume if usekbd is set to True and the keyboard type is set ,,auto''. + - Reset keyboard settings to pc104/us before setting client-side keyboard + parameters. + - For finished sessions purge all mount points that still hover in the + DB's mounts table. + - Make sure we run fusermount from within a directory that the user has read + access to. + * Depend on x2goagent (>= 2:3.5.0.12), make sure that x2goagent has the patch + 105_nxagent_export-remote-keyboard-config.full.patch included. + + -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Thu, 21 Jun 2012 14:16:08 +0200 + x2goserver (3.1.1.0-0~x2go1) unstable; urgency=low [ Mike Gabriel ] diff --git a/debian/control b/debian/control index cc3af44..0b73ef4 100644 --- a/debian/control +++ b/debian/control @@ -17,7 +17,7 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - x2goagent, + x2goagent (>= 2:3.5.0.12), lsof, openssh-client, openssh-server, diff --git a/debian/x2goserver-pyhoca.docs b/debian/x2goserver-pyhoca.docs index 6652b35..3a19506 100644 --- a/debian/x2goserver-pyhoca.docs +++ b/debian/x2goserver-pyhoca.docs @@ -1 +1 @@ -x2goserver-pyhoca/.build_man2html/html +#x2goserver-pyhoca/.build_man2html/html diff --git a/debian/x2goserver-pyhoca.install b/debian/x2goserver-pyhoca.install index 7ba0b60..69985ca 100644 --- a/debian/x2goserver-pyhoca.install +++ b/debian/x2goserver-pyhoca.install @@ -1,3 +1,3 @@ -x2goserver-pyhoca/bin/x2go* /usr/bin/ +#x2goserver-pyhoca/bin/x2go* /usr/bin/ x2goserver-pyhoca/VERSION.x2goserver-pyhoca /usr/share/x2go/versions/ -x2goserver-pyhoca/share/x2gofeature.d/* /usr/share/x2go/x2gofeature.d/ +#x2goserver-pyhoca/share/x2gofeature.d/* /usr/share/x2go/x2gofeature.d/ diff --git a/debian/x2goserver-pyhoca.manpages b/debian/x2goserver-pyhoca.manpages index 845a36c..6f35882 100644 --- a/debian/x2goserver-pyhoca.manpages +++ b/debian/x2goserver-pyhoca.manpages @@ -1 +1 @@ -x2goserver-pyhoca/man/man8/* \ No newline at end of file +#x2goserver-pyhoca/man/man8/* \ No newline at end of file diff --git a/debian/x2goserver.preinst b/debian/x2goserver.preinst index 117bb2c..fdff7bf 100755 --- a/debian/x2goserver.preinst +++ b/debian/x2goserver.preinst @@ -23,8 +23,8 @@ case "$1" in # cleanup old x2goserver installations rm -Rfv /var/db/x2go/ if getent group x2gousers >/dev/null; then - echo "The ,,x2gousers'' is no longer used by x2go and can be" - echo "removed as soon as no users are members of this group" + echo "The group ,,x2gousers'' is no longer used by X2Go and can be" + echo "removed as soon as no users are members of this group anymore." fi ;; abort-upgrade) diff --git a/x2goserver-compat/VERSION.x2goserver-compat b/x2goserver-compat/VERSION.x2goserver-compat index b8f4d84..164a848 100644 --- a/x2goserver-compat/VERSION.x2goserver-compat +++ b/x2goserver-compat/VERSION.x2goserver-compat @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver-extensions/VERSION.x2goserver-extensions b/x2goserver-extensions/VERSION.x2goserver-extensions index b8f4d84..164a848 100644 --- a/x2goserver-extensions/VERSION.x2goserver-extensions +++ b/x2goserver-extensions/VERSION.x2goserver-extensions @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver-fmbindings/VERSION.x2goserver-fmbindings b/x2goserver-fmbindings/VERSION.x2goserver-fmbindings index 78df7c8..646c786 100644 --- a/x2goserver-fmbindings/VERSION.x2goserver-fmbindings +++ b/x2goserver-fmbindings/VERSION.x2goserver-fmbindings @@ -1 +1 @@ -3.1.1.0 +3.1.1.1 diff --git a/x2goserver-printing/VERSION.x2goserver-printing b/x2goserver-printing/VERSION.x2goserver-printing index b8f4d84..164a848 100644 --- a/x2goserver-printing/VERSION.x2goserver-printing +++ b/x2goserver-printing/VERSION.x2goserver-printing @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver-pyhoca/Makefile b/x2goserver-pyhoca/Makefile index 8fc06fa..c24be41 100755 --- a/x2goserver-pyhoca/Makefile +++ b/x2goserver-pyhoca/Makefile @@ -39,25 +39,25 @@ build-indep: build_man2html build-arch: build_man2html: - mkdir -p $(MAN2HTML_DEST) - for man_page in $(man_pages); do mkdir -p `dirname $(MAN2HTML_DEST)/$$man_page`; done - for man_page in $(man_pages); do $(MAN2HTML_BIN) $(MAN2HTML_SRC)/$$man_page > $(MAN2HTML_DEST)/$$man_page.html; done +# mkdir -p $(MAN2HTML_DEST) +# for man_page in $(man_pages); do mkdir -p `dirname $(MAN2HTML_DEST)/$$man_page`; done +# for man_page in $(man_pages); do $(MAN2HTML_BIN) $(MAN2HTML_SRC)/$$man_page > $(MAN2HTML_DEST)/$$man_page.html; done clean: clean_man2html clean_man2html: - rm -rf `dirname $(MAN2HTML_DEST)` +# rm -rf `dirname $(MAN2HTML_DEST)` install: install_scripts install_config install_man install_version install_scripts: - $(INSTALL_DIR) $(DESTDIR)$(BINDIR) +# $(INSTALL_DIR) $(DESTDIR)$(BINDIR) # $(INSTALL_DIR) $(DESTDIR)$(SBINDIR) - $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR) - $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/x2gofeature.d - $(INSTALL_PROGRAM) bin/* $(DESTDIR)$(BINDIR)/ +# $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR) +# $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/x2gofeature.d +# $(INSTALL_PROGRAM) bin/* $(DESTDIR)$(BINDIR)/ # $(INSTALL_PROGRAM) sbin/* $(DESTDIR)$(SBINDIR)/ - $(INSTALL_PROGRAM) share/x2gofeature.d/*.features $(DESTDIR)$(SHAREDIR)/x2gofeature.d/ +# $(INSTALL_PROGRAM) share/x2gofeature.d/*.features $(DESTDIR)$(SHAREDIR)/x2gofeature.d/ install_config: # $(INSTALL_DIR) $(DESTDIR)$(ETCDIR) @@ -67,10 +67,10 @@ install_config: # $(INSTALL_FILE) etc/x2gosql/sql $(DESTDIR)$(ETCDIR)/x2gosql install_man: - $(INSTALL_DIR) $(DESTDIR)$(MANDIR) - $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man8 - $(INSTALL_FILE) man/man8/*.8 $(DESTDIR)$(MANDIR)/man8 - gzip -f $(DESTDIR)$(MANDIR)/man8/x2go*.8 +# $(INSTALL_DIR) $(DESTDIR)$(MANDIR) +# $(INSTALL_DIR) $(DESTDIR)$(MANDIR)/man8 +# $(INSTALL_FILE) man/man8/*.8 $(DESTDIR)$(MANDIR)/man8 +# gzip -f $(DESTDIR)$(MANDIR)/man8/x2go*.8 install_version: $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR) @@ -80,10 +80,10 @@ install_version: uninstall: uninstall_scripts uninstall_config uninstall_man uninstall_version uninstall_scripts: - for file in $(BIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(BINDIR)/$$file; done +# for file in $(BIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(BINDIR)/$$file; done # for file in $(SBIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(SBINDIR)/$$file; done # for file in $(LIB_FILES); do $(RM_FILE) $(DESTDIR)$(LIBDIR)/$$file; done - for file in $(FEATURE_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(SHAREDIR)/x2gofeature.d/$$file; done +# for file in $(FEATURE_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(SHAREDIR)/x2gofeature.d/$$file; done uninstall_config: # $(RM_FILE) $(DESTDIR)$(ETCDIR)/x2goserver.conf @@ -93,9 +93,9 @@ uninstall_config: # $(RM_DIR) $(DESTDIR)$(ETCDIR)/x2gosql || true uninstall_man: - for file in $(BIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(MANDIR)/man8/$$file.8.gz; done - for file in $(SBIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(MANDIR)/man8/$$file.8.gz; done - $(RM_DIR) $(DESTDIR)$(MANDIR) || true +# for file in $(BIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(MANDIR)/man8/$$file.8.gz; done +# for file in $(SBIN_SCRIPTS); do $(RM_FILE) $(DESTDIR)$(MANDIR)/man8/$$file.8.gz; done +# $(RM_DIR) $(DESTDIR)$(MANDIR) || true uninstall_version: $(RM_FILE) $(DESTDIR)$(SHAREDIR)/versions/VERSION.x2goserver-pyhoca diff --git a/x2goserver-pyhoca/VERSION.x2goserver-pyhoca b/x2goserver-pyhoca/VERSION.x2goserver-pyhoca index b8f4d84..164a848 100644 --- a/x2goserver-pyhoca/VERSION.x2goserver-pyhoca +++ b/x2goserver-pyhoca/VERSION.x2goserver-pyhoca @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver-pyhoca/man/man8/x2gosetkeyboard.8 b/x2goserver-pyhoca/man/man8/x2gosetkeyboard.8 deleted file mode 100644 index 3e9baaf..0000000 --- a/x2goserver-pyhoca/man/man8/x2gosetkeyboard.8 +++ /dev/null @@ -1,34 +0,0 @@ -'\" -*- coding: utf-8 -*- -.if \n(.g .ds T< \\FC -.if \n(.g .ds T> \\F[\n[.fam]] -.de URL -\\$2 \(la\\$1\(ra\\$3 -.. -.if \n(.g .mso www.tmac -.TH x2gosetkeyboard 8 "Mar 2012" "Version 3.1.1.x" "X2Go Server Tool (PyHoca)" -.SH NAME -x2gosetkeyboard \- Allow server-side Keyboard Setting Updates issued by X2Go Client -.SH SYNOPSIS -'nh -.fi -.ad l -x2gosetkeyboard - -.SH DESCRIPTION -\fBx2gosetkeyboard\fR looks for a 'keyboard' file in the X2Go session directory and introspects -the X2Go session keyboard settings requested from the client side. -.PP -If no 'keyboard' file is present in the X2Go session directory, nothing happens (i.e. no error -will be raised). -.SH RETURN VALUES -If \fBx2gosetkeyboard\fR successfully sets the session's keyboard parameters an exit code of 0 is -returned. Also, if the file ${HOME}/.x2go/C-${X2GO_SESSION}/keyboard is not presented at the -expected location, a zero-exitcode is returned. -.PP -If the command fails on its way, then the exitcode of the failing command is returned. -.SH FILES -${HOME}/.x2go/C-${X2GO_SESSION}/keyboard -.PP -.SH AUTHOR -This manual has been written by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> for the X2Go project -(http://www.x2go.org). diff --git a/x2goserver-pyhoca/share/x2gofeature.d/x2goserver-pyhoca.features b/x2goserver-pyhoca/share/x2gofeature.d/x2goserver-pyhoca.features index 1737ad8..2411c0e 100755 --- a/x2goserver-pyhoca/share/x2gofeature.d/x2goserver-pyhoca.features +++ b/x2goserver-pyhoca/share/x2gofeature.d/x2goserver-pyhoca.features @@ -29,7 +29,6 @@ X2GO_FEATURE=$1 # check for X2Go server core features case "$X2GO_FEATURE" in - "X2GO_SET_KEYBOARD") echo "ok"; exit 0;; *) exit -1;; esac diff --git a/x2goserver-xsession/VERSION.x2goserver-xsession b/x2goserver-xsession/VERSION.x2goserver-xsession index b8f4d84..164a848 100644 --- a/x2goserver-xsession/VERSION.x2goserver-xsession +++ b/x2goserver-xsession/VERSION.x2goserver-xsession @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver/VERSION.x2goserver b/x2goserver/VERSION.x2goserver index b8f4d84..164a848 100644 --- a/x2goserver/VERSION.x2goserver +++ b/x2goserver/VERSION.x2goserver @@ -1 +1 @@ -3.1.1.0 \ No newline at end of file +3.1.1.1 \ No newline at end of file diff --git a/x2goserver/bin/x2gocmdexitmessage b/x2goserver/bin/x2gocmdexitmessage index e8002ee..a17bb9f 100755 --- a/x2goserver/bin/x2gocmdexitmessage +++ b/x2goserver/bin/x2gocmdexitmessage @@ -25,7 +25,10 @@ X2GO_ROOT=${HOME}/.x2go MESSAGE_FILE=$X2GO_ROOT/C-$1/cmdoutput $X2GO_LIB_PATH/x2gosyslog "$0" "info" "$(basename $0) called with options: $@" -$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "command output starts with: $(head -n5 $MESSAGE_FILE | sed s/\n/ /g)" -# return command output of the command that was issued by x2goruncommand -cat "$MESSAGE_FILE" +test -f "$MESSAGE_FILE" && { + $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "command output starts with: $(head -n5 $MESSAGE_FILE | sed 's/\n/ /g')" + + # return command output of the command that was issued by x2goruncommand + cat "$MESSAGE_FILE" +} diff --git a/x2goserver/bin/x2gogetapps b/x2goserver/bin/x2gogetapps index f95a1ee..9460cd3 100755 --- a/x2goserver/bin/x2gogetapps +++ b/x2goserver/bin/x2gogetapps @@ -120,7 +120,7 @@ sub proc_desktop_file while(!eof(F)) { my $line=<F>; - if( $line=~m/^Categories/i || $line=~m/^Name/i || $line=~m/^Comment/i || $line=~m/^Exec/i) + if( $line=~m/^Categories/i || $line=~m/^Name/i || $line=~m/^Terminal/i || $line=~m/^Comment/i || $line=~m/^Exec/i) { print $line; } diff --git a/x2goserver/bin/x2gomountdirs b/x2goserver/bin/x2gomountdirs index 58f3590..88948e3 100755 --- a/x2goserver/bin/x2gomountdirs +++ b/x2goserver/bin/x2gomountdirs @@ -232,7 +232,8 @@ for (my $i=0;$i<@dirs;$i++) } $p=~s/\//_/g; $p=~s/ /_/g; - $p=~s/_cygdrive_//g; + $p=~s/~_cygdrive_//; + $p=~s/~_windrive_//; $p=~s/~//g; mkdir("$mdir/$p"); $mntpath="$mdir/$p"; @@ -283,7 +284,9 @@ for (my $i=0;$i<@dirs;$i++) } my $p=@dirs[$i]; - $p=~s/\/cygdrive\///g; + $p=~s/\/cygdrive\///; + $p=~s/\/windrive\///; + $p=~s/ /_/g; $p=~s/\//_/g; $fname="$fname/$p"; if ("$current_desktop" ne "NONE") diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session index 50cb638..3a9772f 100755 --- a/x2goserver/bin/x2goresume-session +++ b/x2goserver/bin/x2goresume-session @@ -128,8 +128,7 @@ LISTSTR=`echo "$OPTIONS" | awk -F, {'print $17'}` KTSTR=`echo "$KTSTR" | sed "s/\//\\\\\\\\\//"` X2GO_KBD_TYPE=`echo "$X2GO_KBD_TYPE" | sed "s/\//\\\\\\\\\//"` -if [ "$X2GO_SET_KBD" == "0" ] -then +if [ "$X2GO_SET_KBD" == "0" ] || [ "$X2GO_KBD_TYPE" == "auto" ]; then X2GO_KBD_TYPE="null\/null" fi @@ -152,6 +151,9 @@ echo "$NEWOPTIONS" >"${SESSION_DIR}/options" # run x2goserver-extensions for pre-resume x2gofeature X2GO_RUN_EXTENSIONS &>/dev/null && x2goserver-run-extensions "$SESSION_NAME" pre-resume || true +# clear old keyboard file +rm -Rf $SESSION_DIR/keyboard + kill -HUP $X2GO_AGENT_PID &>/dev/null && { $X2GO_LIB_PATH/x2gosyslog "$0" "notice" "client $X2GO_CLIENT has successfully resumed session with ID $SESSION_NAME" @@ -171,6 +173,13 @@ kill -HUP $X2GO_AGENT_PID &>/dev/null && { #done (sleep 1; $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" > /dev/null;) + # set client-side keyboard model, type, variant, etc. + if [ "$X2GO_SET_KBD" != "0" ] && [ "$X2GO_KBD_TYPE" == "auto" ]; then + X2GO_DISPLAY=$(echo $SESSION_NAME | cut -d"-" -f2) + export DISPLAY=:$X2GO_DISPLAY.0 + x2gosetkeyboard "$SESSION_NAME" >/dev/null 2>/dev/null & + fi + # resume x2godesktopsharing, if it has been in use before the session got suspended x2gofeature X2GO_DESKTOPSHARING &>/dev/null && x2goresume-desktopsharing "$SESSION_NAME" || true diff --git a/x2goserver/bin/x2goruncommand b/x2goserver/bin/x2goruncommand index 2f70633..012f713 100755 --- a/x2goserver/bin/x2goruncommand +++ b/x2goserver/bin/x2goruncommand @@ -35,6 +35,7 @@ export DISPLAY export X2GO_AGENT_PID export X2GO_SESSION cmd=`echo $cmd |sed 's/X2GO_SPACE_CHAR/ /g'` +args='' X2GO_ROOT="${HOME}/.x2go" MESSAGE_FILE="$X2GO_ROOT/C-$X2GO_SESSION/cmdoutput" @@ -52,7 +53,9 @@ export QT_GRAPHICSSYSTEM=native IMEXIT="false" NX_XINERAMA_LIBS=/usr/lib/nx/X11/Xinerama -test -n "$LD_LIBRARY_PATH" && LD_LIBRARY_PATH=$NX_XINERAMA_LIBS:$LD_LIBRARY_PATH || LD_LIBRARY_PATH="$NX_XINERAMA_LIBS" +NX_LIBS=/usr/lib/nx/X11 +test -n "$LD_LIBRARY_PATH" && LD_LIBRARY_PATH=$NX_XINERAMA_LIBS:$NX_LIBS:$LD_LIBRARY_PATH || LD_LIBRARY_PATH="$NX_XINERAMA_LIBS:$NX_LIBS" +$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "exporting LD_LIBRARY_PATH=$LD_LIBRARY_PATH" export LD_LIBRARY_PATH if [ "$sndsys" == "esd" ]; then @@ -61,6 +64,67 @@ elif [ "$sndsys" == "arts" ]; then export ARTS_SERVER=localhost:$4 fi +# detect Ubuntu version via /etc/lsb-release (not supported by Debian) +if [ -e "/etc/lsb-release" ]; then + source /etc/lsb-release +fi + +# let x2goruncommand choose what command to use for a given desktop shell name (GNOME, UNITY, KDE, XFCE4, LXDE, TRINITY) + +# NOTES on GNOME startup behaviour in different distributions +# =========================================================== + +# Debian launches GNOME3 (in accelerated mode) when calling gnome-session + +# Ubuntu launches Unity (in accelerated mode) when calling gnome-session. +# To make the GNOME variants start up properly on Debian/Ubuntu we have to make the following differentiations + +# before and with Ubuntu 10.10 (maverick): GNOME -> gnome-session (would start GNOME2) +# Ubuntu 11.04 (natty): GNOME -> gnome-session --session=2d-gnome, UNITY -> gnome-session --session=2d-ubuntu (GNOME3 based desktop shells) +# Ubuntu 11.10 (oneiric) or later: GNOME -> gnome-session --session=gnome-fallback, UNITY -> gnome-session --session=ubuntu-2d (GNOME3 based desktop shells) + +# before and with Debian squeeze: GNOME -> gnome-session (would start GNOME2) +# Debian wheezy: GNOME -> gnome-session --session=gnome-fallback, UNITY: not available (GNOME3 based desktop shells) + +if [ "$cmd" == "GNOME" ] || [ "$cmd" == "gnome-session" ]; then + + cmd="/usr/bin/gnome-session" + if [ "$DISTRIB_ID" == "Ubuntu" ] && echo "$DISTRIB_CODENAME" | egrep "^[a-m].*" >/dev/null; then + export DESKTOP_SESSION="gnome" + elif [ "$DISTRIB_ID" == "Ubuntu" ] && echo "$DISTRIB_CODENAME" | egrep "^n.*" >/dev/null; then + export DESKTOP_SESSION="2d-gnome" + args=" --session=$DESKTOP_SESSION" + elif [ "$DISTRIB_ID" == "Ubuntu" ] && echo "$DISTRIB_CODENAME" | egrep -v "^[a-n].*" >/dev/null; then + export DESKTOP_SESSION="gnome-fallback" + args=" --session=$DESKTOP_SESSION" + elif cat /etc/debian_version | egrep "^(squeeze|6\.).*" >/dev/null; then + export DESKTOP_SESSION="gnome" + elif cat /etc/debian_version | egrep "^(wheezy|7\.).*" >/dev/null; then + export DESKTOP_SESSION="gnome-fallback" + args=" --session=$DESKTOP_SESSION" + fi + +elif ([ "$cmd" == "UNITY" ] || [ "$cmd" == "unity" ]); then + cmd="/usr/bin/gnome-session" + if [ "$DISTRIB_ID" == "Ubuntu" ] && echo "$DISTRIB_CODENAME" | egrep -v "^[a-n].*" >/dev/null; then + export DESKTOP_SESSION="ubuntu-2d" + args=" --session=$DESKTOP_SESSION" + elif [ "$DISTRIB_ID" == "Ubuntu" ] && echo "$DISTRIB_CODENAME" | egrep -v "^n.*" >/dev/null; then + export DESKTOP_SESSION="2d-ubuntu" + args=" --session=$DESKTOP_SESSION" + fi + # on earlier Ubuntu versions or with non-Ubuntu Distros the ,,UNITY'' command in X2Go will launch the GNOME2 desktop shell + +elif [ "$cmd" == "KDE" ]; then + cmd="/usr/bin/startkde" +elif [ "$cmd" == "XFCE4" ]; then + cmd="/usr/bin/xfce4-session" +elif [ "$cmd" == "LXDE" ]; then + cmd="/usr/bin/startlxde" +elif [ "$cmd" == "TRINITY" ]; then + cmd="/usr/bin/starttrinity" +fi + if [ "$cmd" == "WWWBROWSER" ]; then if [ -e "/usr/bin/firefox" ]; then cmd="/usr/bin/firefox" @@ -136,12 +200,15 @@ sucessful_run=false if [ "$EXEC" != "" ] && [ -x $EXEC ]; then $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "running command $EXEC" + x2gosetkeyboard >/dev/null 2>/dev/null & + x2gofeature X2GO_XSESSION &>/dev/null && [ "x$X2GO_SESS_TYPE" = "xD" ] && { - STARTUP=$cmd + STARTUP="$cmd$args" $X2GO_LIB_PATH/x2gosyslog "$0" "notice" "launching session with Xsession-x2go mechanism, using STARTUP=\"$STARTUP\"" STARTUP="$STARTUP" /etc/x2go/Xsession } || { - $cmd + $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "executing command \"$cmd$args\"..." + $cmd$args } #### some applications can quit immediately, we will wait here as long as x2goagent exists diff --git a/x2goserver-pyhoca/bin/x2gosetkeyboard b/x2goserver/bin/x2gosetkeyboard similarity index 66% rename from x2goserver-pyhoca/bin/x2gosetkeyboard rename to x2goserver/bin/x2gosetkeyboard index 481d01a..949af5e 100755 --- a/x2goserver-pyhoca/bin/x2gosetkeyboard +++ b/x2goserver/bin/x2gosetkeyboard @@ -17,23 +17,41 @@ # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # +# Copyright (C) 2011-2012 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> # Copyright (C) 2011-2012 Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> # Copyright (C) 2011-2012 Heinz-Markus Graesing <heinz-m.graesing@obviously-nice.de> -set -e - X2GO_LIB_PATH=`echo -n \$(x2gobasepath)/lib/x2go` $X2GO_LIB_PATH/x2gosyslog "$0" "info" "$(basename $0) called with options: $@" +SESSION_NAME=${1:-$X2GO_SESSION} + # set up paths X2GO_SESSION_ROOT=${HOME}/.x2go -X2GO_SESSION_DIR=${X2GO_SESSION_ROOT}/C-${X2GO_SESSION} +X2GO_SESSION_DIR=${X2GO_SESSION_ROOT}/C-${SESSION_NAME} # client keyboard configuration X2GO_CLIENT_KBD_FILE=${X2GO_SESSION_DIR}/keyboard -test -f ${X2GO_CLIENT_KBD_FILE} || exit 0 +# if there is a directory at the location of the keyboard file, we consider this as blocking this script +if [ -d ${X2GO_CLIENT_KBD_FILE} ]; then + $X2GO_LIB_PATH/x2gosyslog "$0" "info" "${X2GO_CLIENT_KBD_FILE} is blocked, not setting keyboard parameters from client-side settings" + rm -Rf ${X2GO_CLIENT_KBD_FILE} + exit 0 +fi + +# wait for the keyboard file to appear +i=0 +while ! [ -f ${X2GO_CLIENT_KBD_FILE} ] && [ $i -lt 30 ]; do + $X2GO_LIB_PATH/x2gosyslog "$0" "info" "Waiting for ${X2GO_CLIENT_KBD_FILE} to appear" + sleep 1 + i=$((i+1)) +done +if ! [ -f ${X2GO_CLIENT_KBD_FILE} ]; then + $X2GO_LIB_PATH/x2gosyslog "$0" "warning" "${X2GO_CLIENT_KBD_FILE} did not appear within 30s after agent startup" + exit 0 +fi read_keyboard_file() { @@ -46,19 +64,29 @@ read_keyboard_file() { } +reset_keymap() { + setxkbmap -layout us -option "" -model pc104 +} + update_keymap() { + if [ "$XKB_RULES" = "evdev" ]; then + XKB_RULES="xfree86" + fi # prepare for setxkbmap call [ -n "$XKB_RULES" ] && XKB_RULES="-rules $XKB_RULES" [ -n "$XKB_MODEL" ] && XKB_MODEL="-model $XKB_MODEL" [ -n "$XKB_LAYOUT" ] && XKB_LAYOUT="-layout $XKB_LAYOUT" [ -n "$XKB_VARIANT" ] && XKB_VARIANT="-variant $XKB_VARIANT" - [ -n "$XKB_OPTIONS" ] && XKB_OPTIONS="-options $XKB_OPTIONS" + [ -n "$XKB_OPTIONS" ] && XKB_OPTIONS="-option $XKB_OPTIONS" # update keyboard map setxkbmap $XKB_RULES $XKB_MODEL $XKB_LAYOUT $XKB_VARIANT $XKB_OPTIONS } ### main ### +$X2GO_LIB_PATH/x2gosyslog "$0" "notice" "Setting X keyboard according to ${X2GO_CLIENT_KBD_FILE}" read_keyboard_file +reset_keymap update_keymap + diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent index 739a0c2..e772bf4 100755 --- a/x2goserver/bin/x2gostartagent +++ b/x2goserver/bin/x2gostartagent @@ -28,6 +28,8 @@ X2GO_PORT=49 #First port for X2GO=50 SSH_PORT=30000 #First ssh port 30001 X2GO_ROOT="${HOME}/.x2go" +export NX_ROOT=$X2GO_ROOT + REMOTE=localhost X2GO_CLIENT=`echo "$SSH_CLIENT" | awk '{print $1}'` @@ -212,8 +214,7 @@ xauth -f "$XAUTHORITY" add "${HOSTNAME}/unix:${X2GO_PORT}" MIT-MAGIC-COOKIE-1 "$ xauth -f "$XAUTHORITY" add "${HOSTNAME}:${X2GO_PORT}" MIT-MAGIC-COOKIE-1 "${X2GO_COOKIE}" -if [ "$X2GO_SET_KBD" == "0" ] -then +if [ "$X2GO_SET_KBD" == "0" ] || [ "$X2GO_KBD_TYPE" == "auto" ];then X2GO_HOST="nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},id=${SESSION_NAME},cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=null/null,geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0" else X2GO_HOST="nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},id=${SESSION_NAME},cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=${X2GO_KBD_TYPE},geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0" @@ -246,12 +247,11 @@ x2gofeature X2GO_RUN_EXTENSIONS &>/dev/null && x2goserver-run-extensions "$SESSI SESSION_WINDOW_TITLE="X2GO-${SESSION_NAME}" if [ "$X2GO_STYPE" == "S" ]; then - x2goagent $X2GODPIOPTION_ -$SESSION_TYPE -auth "$XAUTHORITY" -shadow $SHADOW_DESKTOP -shadowmode $SHADOW_MODE -geometry ${X2GO_GEOMETRY} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_DIR}/session.log" & + x2goagent -nolisten tcp $X2GODPIOPTION_ -$SESSION_TYPE -auth "$XAUTHORITY" -shadow $SHADOW_DESKTOP -shadowmode $SHADOW_MODE -geometry ${X2GO_GEOMETRY} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_DIR}/session.log" & else - x2goagent $X2GODPIOPTION_ $XDMCPOPT -$SESSION_TYPE $NOEXITPARAM -auth "$XAUTHORITY" -geometry ${X2GO_GEOMETRY} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_DIR}/session.log" & + x2goagent -nolisten tcp $X2GODPIOPTION_ $XDMCPOPT -$SESSION_TYPE $NOEXITPARAM -auth "$XAUTHORITY" -geometry ${X2GO_GEOMETRY} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_DIR}/session.log" & fi - X2GO_AGENT_PID=$! X2GO_AGENT_RETVAL=$? test $X2GO_AGENT_RETVAL && { @@ -272,6 +272,11 @@ X2GO_SND_PORT=1024 $X2GO_LIB_PATH/x2gocreatesession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" > /dev/null +if [ "$X2GO_SET_KBD" == "0" ] || [ "$X2GO_KBD_TYPE" != "auto" ]; then + $X2GO_LIB_PATH/x2gosyslog "$0" "info" "blocking creation of agent's keyboard file ${SESSION_DIR}/keyboard as requested by session startup command" + mkdir -p ${SESSION_DIR}/keyboard +fi + echo $X2GO_PORT echo $X2GO_COOKIE echo $X2GO_AGENT_PID diff --git a/x2goserver/bin/x2goumount-session b/x2goserver/bin/x2goumount-session index 88bc7fc..6d5f062 100755 --- a/x2goserver/bin/x2goumount-session +++ b/x2goserver/bin/x2goumount-session @@ -44,12 +44,21 @@ my $serv=hostname; if ($only_path) { $only_path=~s/\/ramdrive\/mnt\///; + + # rewrite local unix path $only_path=~ s/\//_/g; - + + # rewrite local Windows path + $only_path=~ s/^([a-zA-Z]:)/_cygdrive_\1/; + $only_path=~ s/://; + $only_path=~ s/\\/_/g; + $only_path=~ s/ /_/g; + $only_path=~ s/\\040/_/g; + ### FIXME: handle CDROM and Removable Media mounts here, as well!!! $only_path="$tmp_dir/$ENV{'USER'}_media/disk/$only_path"; - # ^^^^ + # ^^^^ syslog('debug',"x2goumount-session unmounting $only_path only"); } @@ -84,8 +93,19 @@ for ($i=0;$i<@outp;$i++) { if (@line[1] ne $only_path) { - syslog('debug', "skipping non-requested path @line[1]"); - goto cont; + # this is for Python X2Go, the base of Windows mounted shares starts with _windrive, not _cygdrive + my $only_path_windrive=$only_path; + $only_path_windrive=~ s/_cygdrive_/_windrive_/; + + if (@line[1] ne $only_path_windrive) + { + syslog('debug', "skipping non-requested path @line[1]"); + goto cont; + } + else + { + $only_path = $only_path_windrive; + } } } my $j; @@ -104,7 +124,7 @@ for ($i=0;$i<@outp;$i++) break: if ($found) { - if (system( "fusermount -u @line[1]" ) == 0) + if (system( "cd $tmp_dir && fusermount -u @line[1] && cd - >/dev/null" ) == 0) { syslog('notice', "successfully unmounted @line[1]"); $found=0; @@ -126,8 +146,11 @@ break: if (! $found) { - $remote=~s/\/cygdrive\///g; + $remote=~s/\/cygdrive\///; + $remote=~s/\/windrive\///; $remote=~s/\//_/g; + $remote=~s/ /_/g; + $remote=~s/\\040/_/g; $remote=(split(":","$remote"))[1]; $remote="$ENV{'HOME'}/Desktop/$remote"; diff --git a/x2goserver/lib/x2godbwrapper.pm b/x2goserver/lib/x2godbwrapper.pm index 2690544..f290b71 100644 --- a/x2goserver/lib/x2godbwrapper.pm +++ b/x2goserver/lib/x2godbwrapper.pm @@ -88,11 +88,12 @@ use base 'Exporter'; our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus', 'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount', 'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', - 'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot'); + 'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts'); sub dbsys_rmsessionsroot { my $sid=shift or die "argument \"session_id\" missed"; + dbsys_deletemounts($sid); if($backend eq 'postgres') { my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", @@ -109,6 +110,24 @@ sub dbsys_rmsessionsroot } } +sub dbsys_deletemounts +{ + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("delete from mounts where session_id='$sid'"); + $sth->execute(); + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + `$x2go_lib_path/x2gosqlitewrapper deletemounts $sid`; + } + syslog('debug', "dbsys_deletemounts called, session ID: $sid"); +} + sub dbsys_listsessionsroot { my $server=shift or die "argument \"server\" missed"; diff --git a/x2goserver/lib/x2gosqlitewrapper.pl b/x2goserver/lib/x2gosqlitewrapper.pl index ba2c02d..f47fdec 100755 --- a/x2goserver/lib/x2gosqlitewrapper.pl +++ b/x2goserver/lib/x2gosqlitewrapper.pl @@ -153,6 +153,20 @@ elsif($cmd eq "deletemount") $sth->finish(); } +elsif($cmd eq "deletemounts") +{ + my $sid=shift or die "argument \"session_id\" missed"; + check_user($sid); + my $sth=$dbh->prepare("delete from mounts where session_id=?"); + $sth->execute($sid); + if ($sth->err()) + { + syslog('error', "deletemounts (SQLite3 session db backend) failed with exitcode: $sth->err()"); + die(); + } + $sth->finish(); +} + elsif($cmd eq "insertmount") { my $sid=shift or die "argument \"session_id\" missed"; diff --git a/x2goserver/share/x2gofeature.d/x2goserver.features b/x2goserver/share/x2gofeature.d/x2goserver.features index 70313d2..db4aaf2 100755 --- a/x2goserver/share/x2gofeature.d/x2goserver.features +++ b/x2goserver/share/x2gofeature.d/x2goserver.features @@ -34,6 +34,8 @@ case "$X2GO_FEATURE" in "X2GO_UMOUNTSESSION_ALL") echo "ok"; exit 0;; "X2GO_UMOUNTSESSION_ONLYPATH") echo "ok"; exit 0;; "X2GO_PUBLISHED_APPLICATIONS") echo "ok"; exit 0;; + "X2GO_SERVERSIDE_DESKTOPCOMMANDS") echo "ok"; exit 0;; + "X2GO_SET_KEYBOARD") echo "ok"; exit 0;; *) exit -1;; esac 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).