[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 0.1.1.4-250-g0294d5b

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


The branch, build-baikal has been updated
       via  0294d5b5fdd1174f63271dab28f7149df8d8c891 (commit)
      from  b4a9e5f4921f5713fb71acf692f1ae73ec843666 (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                  |    2 ++
 x2go/backends/terminal/_stdout.py |   60 ++++++++++++++++++++++++++++++-------
 x2go/defaults.py                  |    2 +-
 x2go/session.py                   |    2 +-
 x2go/utils.py                     |    6 ++++
 5 files changed, 59 insertions(+), 13 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 1ce0966..fc3d676 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -136,6 +136,8 @@ python-x2go (0.1.2.0-0~x2go1) UNRELEASED; urgency=low
     - Properly set setkbd value for x2gostartagent and x2goresume-session.
     - Fix local folder sharing when the master session changes during runtime.
     - Add support for re-registering sessions after session profile changes.
+    - Add new session profile parameter: ,,variant''. Add support to set the
+      keyboard layout _and_ the keyboard variant from the client-side.
   * Depend on python-xlib.
 
  -- Mike Gabriel <mike.gabriel at das-netzwerkteam.de>  Sat, 28 Sep 2012 01:44:21 +0100
diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py
index 1f256a7..91a7c8c 100644
--- a/x2go/backends/terminal/_stdout.py
+++ b/x2go/backends/terminal/_stdout.py
@@ -183,7 +183,7 @@ class X2goTerminalSessionSTDOUT(object):
     def __init__(self, control_session, session_info=None,
                  geometry="800x600", depth=_local_color_depth, link="adsl", pack="16m-jpeg-9", 
                  cache_type="unix-kde", 
-                 keyboard='', kblayout='null', kbtype='null/null',
+                 kbtype='null/null', kblayout='null', kbvariant='null',
                  session_type="application", snd_system='pulse', snd_port=4713, cmd=None,
                  published_applications=False,
                  set_session_title=False, session_title="", applications=[],
@@ -219,10 +219,12 @@ class X2goTerminalSessionSTDOUT(object):
             (class C{X2goProxyNX3}) this originally is the session name. With X2Go it 
             defines the name of the NX cache directory. Best is to leave it untouched.
         @type cache_type: str
-        @param kblayout: keyboard layout, e.g. C{us} (default), C{de}, C{fr}, ...
-        @type kblayout: str
         @param kbtype: keyboard type, e.g. C{pc105/us} (default), C{pc105/de}, ...
         @type kbtype: str
+        @param kblayout: keyboard layout, e.g. C{us} (default), C{de}, C{fr}, ...
+        @type kblayout: str
+        @param kbvariant: keyboard variant, e.g. C{nodeadkeys} (for C{de} layout), C{intl} (for C{us} layout), etc.
+        @type kbvariant: str
         @param session_type: either C{desktop}, C{application} (rootless session) or C{shared}
         @type session_type: str
         @param snd_system: sound system to be used on server (C{none}, C{pulse} (default), 
@@ -285,9 +287,9 @@ class X2goTerminalSessionSTDOUT(object):
         self.params.pack = str(pack)
         self.params.cache_type = str(cache_type)
         self.params.session_type = str(session_type)
-        self.params.keyboard = str(keyboard)
-        self.params.kblayout = str(kblayout)
         self.params.kbtype = str(kbtype)
+        self.params.kblayout = str(kblayout)
+        self.params.kbvariant = str(kbvariant)
         self.params.snd_system = str(snd_system)
         self.params.cmd = str(cmd)
         self.params.depth = str(depth)
@@ -1025,6 +1027,9 @@ class X2goTerminalSessionSTDOUT(object):
 
         (stdin, stdout, stderr) = self.control_session._x2go_exec_command(cmd_line)
 
+        if self.params.kbtype not in ('null/null', 'auto') and (self.params.kblayout not in ('null', '') or self.params.kbvariant not in ('null', '')):
+            self.set_keyboard(layout=self.params.kblayout, variant=self.params.kbvariant)
+
         return stdout.read(), stderr.read()
 
     def is_desktop_session(self):
@@ -1051,6 +1056,39 @@ class X2goTerminalSessionSTDOUT(object):
             return self.session_info.is_published_applications_provider()
         return False
 
+    def set_keyboard(self, layout='null', variant='null'):
+        """\
+        Set the keyboard layout and variant for this (running) session.
+
+        @param layout: keyboard layout to be set
+        @type layout: C{str}
+        @param variant: keyboard variant to be set
+        @type variant: C{str}
+
+        @return: returns C{True} if the {setxkbmap} command could be executed successfully.
+        @rtype: C{bool}
+
+        """
+        cmd_line = [ 'export DISPLAY=:%s && ' % str(self.session_info.display),
+                     'setxkbmap '
+                   ]
+
+        if layout != 'null':
+            self.logger('setting keyboad layout ,,%s\'\' for session %s' % (layout, self.session_info), log.loglevel_INFO)
+            cmd_line.append('-layout %s' % layout)
+        if variant != 'null':
+            self.logger('setting keyboad variant ,,%s\'\' for session %s' % (variant, self.session_info), log.loglevel_INFO)
+            cmd_line.append('-variant %s' % variant)
+
+        (stdin, stdout, stderr) = self.control_session._x2go_exec_command(cmd_line)
+        _stderr = stderr.read()
+        if not _stderr:
+            self.logger('setting keyboard layout ,,%s\'\' and variant ,,%s\'\' for session %s has been successful' % (layout, variant, self.session_info), log.loglevel_NOTICE)
+            return True
+        else:
+            self.logger('setting keyboard layout ,,%s\'\' and variant ,,%s\'\' for session %s failed: %s' % (layout, variant, self.session_info, _stderr.replace('\n', ' ')), log.loglevel_ERROR)
+            return False
+
     def exec_published_application(self, exec_name, timeout=20, env={}):
         """\
         Executed a published application.
@@ -1146,7 +1184,7 @@ class X2goTerminalSessionSTDOUT(object):
             return False
 
         setkbd = "0"
-        if (self.params.kblayout != "null") or (self.params.kbtype != "null/null"):
+        if self.params.kbtype != "null/null":
             setkbd = "1"
 
         if '/' in self.params.cmd:
@@ -1196,10 +1234,6 @@ class X2goTerminalSessionSTDOUT(object):
                                                                 self.session_info.name,
                                                                )
 
-        # let the proxy backend know that we want to define a very special keymap
-        if (self.params.kbtype.endswith('defkeymap') and self.params.kblayout == 'defkeymap'):
-            self.proxy_options.update({'defkeymap': True, })
-
         # set up SSH tunnel for X11 graphical elements
         self.proxy = self.proxy_backend(session_info=self.session_info, 
                                         ssh_transport=self.control_session.get_transport(),
@@ -1234,7 +1268,7 @@ class X2goTerminalSessionSTDOUT(object):
 
         """
         setkbd = "0"
-        if (self.params.kblayout != "null") or (self.params.kbtype != "null/null"):
+        if self.params.kbtype != "null/null":
             setkbd = "1"
 
         cmd_line = [ "x2goresume-session", self.session_info.name,
@@ -1290,9 +1324,13 @@ class X2goTerminalSessionSTDOUT(object):
                                                                     self.session_info.name,
                                                                    )
             self.params.depth = self.session_info.name.split('_')[2][2:]
+
             # on a session resume the user name comes in as a user ID. We have to translate this...
             self.session_info.username = self.control_session.remote_username()
 
+            if self.params.kbtype not in ('null/null', 'auto') and (self.params.kblayout not in ('null', '') or self.params.kbvariant not in ('null', '')):
+                self.set_keyboard(layout=self.params.kblayout, variant=self.params.kbvariant)
+
             if self.params.session_type in ('D', 'S'):
                 self.find_session_window()
                 self.auto_session_window_title()
diff --git a/x2go/defaults.py b/x2go/defaults.py
index 8a12e23..a1da523 100644
--- a/x2go/defaults.py
+++ b/x2go/defaults.py
@@ -298,7 +298,7 @@ X2GO_SESSIONPROFILE_DEFAULTS = {
     'usemimebox': False, 'mimeboxextensions': '', 'mimeboxaction': 'OPEN',
     'fullscreen': False,
     'width': 800,'height': 600,'dpi': 96,'setdpi': False, 'xinerama': False, 'multidisp': False,
-    'usekbd': True, 'layout': 'us', 'type': 'pc105/us',
+    'usekbd': True, 'layout': 'us', 'type': 'pc105/us', 'variant': '',
     'sound': False, 'soundsystem': 'pulse', 'startsoundsystem': False, 'soundtunnel':True, 'defsndport':True, 'sndport':4713,
     'name': 'NEW_PROFILE', 'icon': ':icons/128x128/x2gosession.png',
     'host': '', 'user': CURRENT_LOCAL_USER, 'key': '', 'sshport': 22, 'krblogin': False,
diff --git a/x2go/session.py b/x2go/session.py
index 96c057f..26baeda 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -74,7 +74,7 @@ _X2GO_SESSION_PARAMS = ('use_sshproxy', 'profile_id', 'session_name',
 """A list of allowed X2Go pure session parameters (i.e. parameters that are passed on neither to an X2goControlSession, X2goSSHProxy nor an X2goControlSession object."""
 # options of the paramiko.SSHClient().connect() method, any option that is allowed for a terminal session instance
 _X2GO_TERMINAL_PARAMS = ('geometry', 'depth', 'link', 'pack',
-                        'cache_type', 'kblayout', 'kbtype',
+                        'cache_type', 'kbtype', 'kblayout', 'kbvariant',
                         'session_type', 'snd_system', 'snd_port',
                         'cmd', 'set_session_title', 'session_title',
                         'rdp_server', 'rdp_options', 'applications',
diff --git a/x2go/utils.py b/x2go/utils.py
index 0333afe..99b4c13 100644
--- a/x2go/utils.py
+++ b/x2go/utils.py
@@ -144,6 +144,7 @@ def _convert_SessionProfileOptions_2_SessionParams(_options):
             'sndport': 'snd_port',
             'type': 'kbtype',
             'layout': 'kblayout',
+            'variant': 'kbvariant',
             'speed': 'link',
             'sshport': 'port',
             'useexports': 'allow_share_local_folders',
@@ -257,8 +258,13 @@ def _convert_SessionProfileOptions_2_SessionParams(_options):
     if not _options['usekbd']:
         _params['kbtype'] = 'null/null'
         _params['kblayout'] = 'null'
+        _params['kbvariant'] = 'null'
     del _params['usekbd']
 
+    if not _params['kbtype'].strip(): _params['kbtype'] = 'null/null'
+    if not _params['kblayout'].strip(): _params['kblayout'] = 'null'
+    if not _params['kbvariant'].strip(): _params['kbvariant'] = 'null'
+
     # currently known but ignored in Python X2go
     _ignored_options = [
             'dpi',


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