[X2go-Dev] [X2go-User] [SOLVED] Re: Instructions for manual install from source tarballs on a less well-known distribution

Ivan Kabaivanov chepati at yahoo.com
Thu Aug 18 01:01:55 CEST 2011


ok, resending this after having subscribed to the x2go-dev list.



On Wednesday 17 August 2011 23:32:53 Mike Gabriel wrote:

> > $ cat /usr/bin/x2goagent
> > #!/bin/bash
> > X2GO_LIBS=/usr/lib/x2go LD_LIBRARY_PATH=/usr/lib/x2go exec
> > /usr/bin/x2goagent.original $@
> 
> This should not be necessary... With Debian it also works with
> libxcomp* being installed in /usr/lib.
> 
> There used to be times when x2go shipped its own NX libs with
> /usr/lib/x2go as path, but that's not so any more. x2go uses pure NX
> libs, only x2goagent is a fork of nxagent.
> 
> > I install just the libs required by x2goagent binary like so:
> > 
> > mkdir -p  /usr/lib/x2go/
> > 
> > make World
> > cp -a lib/Xext/libXext.so* /usr/lib/x2go/
> > cp -a lib/X11/libX11.so* /usr/lib/x2go/
> > cp -a lib/Xpm/libXpm.so* /usr/lib/x2go/
> > cp -a lib/Xrender/libXrender.so* /usr/lib/x2go/
> > cp -a lib/Xfixes/libXfixes.so* /usr/lib/x2go/
> > cp -a lib/Xtst/libXtst.so* /usr/lib/x2go/
> > cp -a lib/Xdamage/libXdamage.so* /usr/lib/x2go/
> > cp -a lib/Xrandr/libXrandr.so* /usr/lib/x2go/
> > cp -a lib/Xcomposite/libXcomposite.so* /usr/lib/x2go/
> > 
> > install -m755 programs/Xserver/x2goagent /usr/bin/x2goagent.original
> 
> Please check that again. That should not be necessary. It could be
> misleading if you put it like that in the X2go wiki. I bet there is
> another way with using default library paths.


Mike,  please check the LFS server install wiki page.  I wrote up the 
instructions for nxcomp, nxcompext, nxcompshad, nxproxy and x2goagentand will 
finish the rest tomorrow.  As you'll see I'm installing libXcomp* in the 
standard /usr/lib path.  However, looks like x2goagent is built from a 
modified x.org (6.9?) source tree and when linked at runtime with the system 
libX11 and other standard x.org libs it fails with an obscure message:

~/.x2go]$ cat C-ivan-50-1313618948_stDKDE_dp24/session.log 

NXAGENT - Version 3.5.0.2

Copyright (C) 2001, 2011 NoMachine.
See http://www.nomachine.com/ for more information.

Info: Agent running with pid '2457'.
Session: Starting session at 'Thu Aug 18 01:09:11 2011'.
Error: Aborting session with 'X2goagent: Unable to open display 
'nx/nx,options=/home/ivan/.x2go/C-ivan-50-1313618948_stDKDE_dp24/options:50''.
Session: Aborting session at 'Thu Aug 18 01:09:11 2011'.
Session: Session aborted at 'Thu Aug 18 01:09:11 2011'.

That's why I did an ldd on the x2goagent binary and copied just the 'custom' 
x.org libs into /usr/lib/x2go and put them in the wrapper.

what I'll do is try to narrow down to the exact library that breaks x2goagent 
and just copy it.  Not sure if there's a better approach.  Don't wanna do a 
static build either...


> 
> > And finally, I need to patch x2goclient because it's not consistent in
> > its assumption of where the startkde script is:
> > 
> > ~/x2goclient]# sed -i "s,/usr/bin/startkde,startkde,g" onmainwindow.cpp
> > ~/x2goclient]# sed -i "s,startkde,/usr/local/kde/bin/startkde,g"
> > onmainwindow_part3.cpp
> 
> Could you send a diff for that??? x2goclient should not refer to a
> hard coded path for startkde.

something like this?

diff -Naur x2goclient/onmainwindow.cpp.original x2goclient/onmainwindow.cpp
--- x2goclient/onmainwindow.cpp.original        2011-08-18 01:30:09.000000000 
+0300
+++ x2goclient/onmainwindow.cpp 2011-08-18 01:31:11.000000000 +0300
@@ -2172,7 +2172,7 @@
         }
 
     }
-    sessionCmd="/usr/bin/startkde";
+    sessionCmd="startkde";
     LDAPSndSys="ARTS_SERVER";
     LDAPSndStartServer=true;
     startSound=false;

diff -Naur x2goclient/x2goclient_de.ts.original x2goclient/x2goclient_de.ts
--- x2goclient/x2goclient_de.ts.original        2011-08-18 01:30:33.000000000 
+0300
+++ x2goclient/x2goclient_de.ts 2011-08-18 01:31:51.000000000 +0300
@@ -2192,8 +2192,8 @@
         <translation>deaktiviert</translation>
     </message>
     <message>
-        <source>/usr/bin/startkde</source>
-        <translation type="obsolete">/usr/bin/startkde</translation>
+        <source>startkde</source>
+        <translation type="obsolete">startkde</translation>
     </message>
     <message>
         <location filename="sessionbutton.cpp" line="329"/>



However, as I'm a KDE user, I can't test GNOME and LXDE.



> 
> @Alex: any idea about this:
> 
> mike at minobo:~/MyDocuments/4projects/x2go-upstream/x2goclient$ grep -ri
>   /usr/bin/startkde *
> onmainwindow.cpp:    sessionCmd="/usr/bin/startkde";
> x2goclient_de.ts:        <source>/usr/bin/startkde</source>
> x2goclient_de.ts:        <translation
> type="obsolete">/usr/bin/startkde</translation>
> 
> > Mind you, I install kde in /usr/local/kde, and that's why I need these
> > sed substitutions.  If your kde prefix is in /usr, you should be ok. 
> > However, this brings up the question -- why donesn't x2go search in
> > PATH for startkde, and instead hardcodes its location?
> 
> However, there currently are hard-coded path in the x2goserver
> (server!) script ,,x2goruncommand''. This is not optimal.
> 
> @Alex: Should we migrate them to non-fullpath calls
> 
>    /usr/bin/gnome-terminal -> gnome-terminal
>    etc.
> 


How about this:

diff -Naur x2goserver/x2goserver/bin/x2goruncommand.original 
x2goserver/x2goserver/bin/x2goruncommand
--- x2goserver/x2goserver/bin/x2goruncommand.original   2011-08-18 
01:47:13.000000000 +0300
+++ x2goserver/x2goserver/bin/x2goruncommand    2011-08-18 01:55:14.000000000 
+0300
@@ -83,19 +83,18 @@
 
 if [ "$cmd" == "TERMINAL" ]; then
        IMEXIT="true"
-       if [ -e "/usr/bin/konsole" ]; then
-               cmd="/usr/bin/konsole"
+       if bash +h -c "type konsole" > /dev/null 2>&1; then
+               cmd=`type konsole | awk '{print $3}'`
                # KDE4 konsole behaves differently from other terminals
                IMEXIT="false"
-       elif  [ -e "/usr/bin/gnome-terminal" ]; then
-               cmd="/usr/bin/gnome-terminal"
-       elif  [ -e "/usr/bin/lxterminal" ]; then
-               cmd="/usr/bin/lxterminal"
-       elif  [ -e "/usr/bin/rxvt" ]; then
-               cmd="/usr/bin/rxvt"
-       elif  [ -e "/usr/bin/xterm" ]; then
-               cmd="/usr/bin/xterm"
-       fi
+       elif bash +h -c "type gnome-terminal" > /dev/null 2>&1; then
+               cmd=`type gnome-terminal | awk '{print $3}'`
+       elif bash +h -c "type lxterminal" > /dev/null 2>&1; then
+               cmd=`type lxterminal | awk '{print $3}'`
+       elif bash +h -c "type rxvt" > /dev/null 2>&1; then
+               cmd=`type rxvt | awk '{print $3}'`
+       elif bash +h -c "type xterm" > /dev/null 2>&1; then
+               cmd=`type xterm | awk '{print $3}'`
 fi
 
 EXEC=`which $cmd`

actually I would remove 'which' altogether.  However, type is a bash built-in 
function if I'm not mistaken, so on distributions where bash is not the 
default shell, this may present problems...

I didn't find the location of startkde hardcoded anywhere in x2goserver.

IvanK.





More information about the x2go-dev mailing list