[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 9aef83f1d18bf927d33765836293b2296d87c73a

X2Go dev team git-admin at x2go.org
Wed Jan 8 15:29:23 CET 2014


The branch, build-baikal has been updated
       via  9aef83f1d18bf927d33765836293b2296d87c73a (commit)
      from  441b8571dbd5d8c641af0237160d008ee3fbcad9 (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:
 x2go/cleanup.py  |   14 ++++++++++++++
 x2go/client.py   |   15 ++++++++++++++-
 x2go/defaults.py |   10 +++++-----
 x2go/xserver.py  |   55 ++++++++++++++++++++++++++++++++++++++----------------
 4 files changed, 72 insertions(+), 22 deletions(-)

The diff of changes is:
diff --git a/x2go/cleanup.py b/x2go/cleanup.py
index a6f3219..ace141e 100644
--- a/x2go/cleanup.py
+++ b/x2go/cleanup.py
@@ -21,11 +21,17 @@
 A recommended X2go session clean up helper function.
 """
 
+import gevent
 import paramiko
 import threading
+
+# Python X2go modules
 import guardian
 import rforward
+from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
 
+if _X2GOCLIENT_OS == 'Windows':
+    import xserver
 
 def x2go_cleanup(e=None, threads=None):
     """\
@@ -71,5 +77,13 @@ def x2go_cleanup(e=None, threads=None):
                 t.stop_thread()
                 del t
 
+    # on Windows: stop the XServer that we evoked
+    if _X2GOCLIENT_OS == 'Windows':
+        for t in threads:
+            if type(t) == xserver.X2goXServer:
+                t.stop_thread()
+                gevent.sleep(1)
+                del t
+
     if e is not None:
         raise e
diff --git a/x2go/client.py b/x2go/client.py
index 3728439..575ade9 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -120,8 +120,10 @@ __NAME__ = 'x2goclient-pylib'
 import uuid
 import copy
 import sys
+import types
 
 # Python X2go modules
+from xserver import X2goClientXConfig, X2goXServer
 from settings import X2goClientSettings
 from printing import X2goClientPrinting
 from registry import X2goSessionRegistry
@@ -132,6 +134,7 @@ import log
 import utils
 
 # we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables)
+from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
 from defaults import LOCAL_HOME as _LOCAL_HOME
 from defaults import CURRENT_LOCAL_USER as _CURRENT_LOCAL_USER
 from defaults import X2GO_CLIENT_ROOTDIR as _X2GO_CLIENT_ROOTDIR
@@ -148,7 +151,7 @@ class X2goClient(object):
     session object etc.) and connected to it (authentication). For these two steps
     use these methods: L{X2goClient.register_session()} and L{X2goClient.connect_session()}.
     """
-    def __init__(self, use_cache=True, logger=None, loglevel=log.loglevel_DEFAULT):
+    def __init__(self, use_cache=True, start_xserver=False, logger=None, loglevel=log.loglevel_DEFAULT):
         """\
         @param logger: you can pass an L{X2goLogger} object to the
             L{X2goClient} constructor
@@ -168,6 +171,16 @@ class X2goClient(object):
         if self.logger.tag is None:
             self.logger.tag = self._logger_tag
 
+        if _X2GOCLIENT_OS == 'Windows' and start_xserver:
+            self.client_xconfig = X2goClientXConfig(logger=self.logger)
+            if not self.client_xconfig.running_xservers:
+                if  type(start_xserver) is types.BooleanType:
+                    p_xs = self.client_xconfig.preferred_xserver
+                elif type(start_xserver) is types.StringType:
+                    p_xs = (start_xserver, self.client_xconfig.get_xserver_config(start_xserver))
+                if p_xs is not None:
+                    self.xserver = X2goXServer(p_xs[0], p_xs[1], logger=self.logger)
+
         self.session_profiles = X2goSessionProfiles(logger=self.logger)
         self.session_registry = X2goSessionRegistry(logger=self.logger)
         self.session_guardian = X2goSessionGuardian(self, enable_cache=use_cache, logger=self.logger)
diff --git a/x2go/defaults.py b/x2go/defaults.py
index 4091bdb..c2c1a47 100644
--- a/x2go/defaults.py
+++ b/x2go/defaults.py
@@ -163,19 +163,19 @@ X2GO_CLIENTPRINTING_DEFAULTS = {
 if X2GOCLIENT_OS == 'Windows':
     X2GO_CLIENTXCONFIG_DEFAULTS = {
         'XServers': {
-            'known_xservers': ['XMing', 'Cygwin-X', ],
+            'known_xservers': ['Xming', 'Cygwin-X', ],
         },
         'Cygwin-X': {
             'process_name': 'XWin.exe',
-            'test_installed': os.path.join(os.environ['SystemDrive'], '\\', 'cygwin', 'bin', 'startxwin.exe'),
-            'run_command':os.path.join(os.environ['SystemDrive'], '\\', 'cygwin', 'bin', 'run.exe') + ' /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe',
-            'parameters':[],
+            'test_installed': os.path.join(os.environ['SystemDrive'], '\\', 'cygwin', 'bin', 'XWin.exe'),
+            'run_command':os.path.join(os.environ['SystemDrive'], '\\', 'cygwin', 'bin', 'XWin.exe'),
+            'parameters':[':0', '-clipboard', '-multiwindow', '-notrayicon', '-nowinkill', ],
             },
         'Xming': {
             'process_name': 'Xming.exe',
             'test_installed': os.path.join(os.environ['ProgramFiles'], 'Xming', 'Xming.exe'), 
             'run_command': os.path.join(os.environ['ProgramFiles'], 'Xming', 'Xming.exe'),
-            'parameters': [':0', '-clibboard', '-multiwindow',],
+            'parameters': [':0', '-clipboard', '-multiwindow', '-notrayicon', '-nowinkill', ],
             },
         }
 
diff --git a/x2go/xserver.py b/x2go/xserver.py
index 20828c1..191fab5 100644
--- a/x2go/xserver.py
+++ b/x2go/xserver.py
@@ -25,7 +25,7 @@
 # Other contributors:
 #       none so far
 
-__NAME__ = 'x2gosettings-pylib'
+__NAME__ = 'x2goxserver-pylib'
 
 from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
 
@@ -39,6 +39,8 @@ import os
 import wmi
 import subprocess
 import threading
+import gevent
+import copy
 
 # Python X2go modules
 import log
@@ -127,7 +129,7 @@ class X2goClientXConfig(inifiles.X2goIniFile):
         STILL UNDOCUMENTED
 
         """
-        return not bool(self.installed_xservers)
+        return bool(self.installed_xservers)
 
     @property
     def xserver_launch_needed(self):
@@ -143,7 +145,7 @@ class X2goClientXConfig(inifiles.X2goIniFile):
         STILL UNDOCUMENTED
 
         """
-        if self.xserver_launch_possible
+        if self.xserver_launch_possible and self.xserver_launch_needed:
             return (self.installed_xservers[0], self.get_xserver_config(self.installed_xservers[0]))
         else:
             return None
@@ -155,24 +157,45 @@ class X2goXServer(threading.Thread):
     already
     """
 
-    def __init__(self, XServerParms):
-
-        process_name = XServerParms.process_name
-        for line in os.popen("ps xa"):
-            fields = line.split()
-            pid = fields[0]
-            process = fields[4]
+    def __init__(self, xserver_name, xserver_config, logger=None, loglevel=log.loglevel_DEFAULT):
+        """\
+        STILL UNDOCUMENTED
 
-            if process.find(process_name) > 0:
-                # XServer is already running
-                return
+        """
+        if logger is None:
+            self.logger = log.X2goLogger(loglevel=loglevel)
+        else:
+            self.logger = copy.deepcopy(logger)
+        self.logger.tag = __NAME__
+        
+        self._keepalive = None
 
-        self.XServerParms = XServerParms
+        self.xserver_name = xserver_name
+        self.xserver_config = xserver_config
         threading.Thread.__init__(self)
         self.daemon = True
         self.start()
 
     def run(self):
+        """\
+        STILL UNDOCUMENTED
+
+        """
+        self._keepalive = True
+        cmd_line = [self.xserver_config['run_command']]
+        cmd_line.extend(self.xserver_config['parameters'])
+        self.logger('starting XServer ,,%s\'\' with command line: %s' % (self.xserver_name, ' '.join(cmd_line)), loglevel=log.loglevel_DEBUG)
+        p = subprocess.Popen(cmd_line, shell=False)
+        while self._keepalive:
+            gevent.sleep(1)
+        self.logger('killing running XServer ,,%s\'\'' % self.xserver_name, loglevel=log.loglevel_DEBUG)
+        p.terminate()
+        
+    def stop_thread(self):
+        """\
+        STILL UNDOCUMENTED
 
-        p = subprocess.Popen([self.XServerParms.run_command, self.XServerParms.parameters], shell=True)
-        sts = os.waitpid(p.pid, 0)[1]
+        """
+        self.logger('stop_thread() method has been called', loglevel=log.loglevel_DEBUG)
+        self._keepalive = False
+        


hooks/post-receive
-- 
python-x2go.git (Python X2Go Client API)

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 "python-x2go.git" (Python X2Go Client API).




More information about the x2go-commits mailing list