[X2Go-Commits] [x2goclient] 04/09: Multiple achievements with this commit...
git-admin at x2go.org
git-admin at x2go.org
Fri Dec 15 21:05:09 CET 2023
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to annotated tag 0.1.4.2
in repository x2goclient.
commit 3e307a9bfbb2f945dcb8c887b122cd8bb9087b4b
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Wed Aug 17 02:03:22 2011 +0200
Multiple achievements with this commit...
1. Translate cmd line options into python-x2go options
2. Allow ,,ALL'' as session name when suspending -> will suspend all sessions of the connecting user.
3. Allow ,,ALL'' as session name when terminating -> will terminate all sessions of the connecting user.
4. Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes upstream issue #86).
---
debian/changelog | 8 ++++-
pyhoca-cli | 4 +--
pyhoca/cli/frontend.py | 87 +++++++++++++++++++++++++++++++++++++++++++-------
3 files changed, 84 insertions(+), 15 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index d4cdc19b..981b6c5c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,13 @@
pyhoca-cli (0.1.4.2-0~x2go1) UNRELEASED; urgency=low
* New upstream version (0.1.4.2):
- - nothing yet
+ - Translate cmd line options into python-x2go options
+ - Allow ,,ALL'' as session name when suspending -> will suspend
+ all sessions of the connecting user.
+ - Allow ,,ALL'' as session name when terminating -> will terminate
+ all sessions of the connecting user.
+ - Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes
+ upstream issue #86).
-- Mike Gabriel <mike.gabriel at das-netzwerkteam.de> Wed, 06 Jul 2011 22:18:01 +0200
diff --git a/pyhoca-cli b/pyhoca-cli
index 34fb2977..71f75916 100755
--- a/pyhoca-cli
+++ b/pyhoca-cli
@@ -220,9 +220,9 @@ Possible values for the --pack NX option are:
if not (a.session_profile or a.list_profiles):
- # the --server options is required for most operations
+ # the --server (or --session-profile) option is required for most operations
if not a.server:
- runtime_error ("argument --server is required", parser=p, exitcode=1)
+ runtime_error ("argument --server (or --session-profile) is required", parser=p, exitcode=1)
# check for mutual exclusiveness of -N, -R, -S, -T and -L, -N is default if none of them is set
if bool(a.new) + bool(a.resume) + bool(a.share_desktop) + bool(a.suspend) + bool(a.terminate) + bool(a.list_sessions) + bool(a.list_desktops) + bool(a.list_profiles)> 1:
diff --git a/pyhoca/cli/frontend.py b/pyhoca/cli/frontend.py
index 8931e3de..82487d47 100644
--- a/pyhoca/cli/frontend.py
+++ b/pyhoca/cli/frontend.py
@@ -166,6 +166,24 @@ class PyHocaCLI(x2go.X2goClient):
self.logger('command from session profile to run is: %s' % self.session_registry(self.x2go_session_hash).get_session_cmd(), loglevel=x2go.loglevel_DEBUG, )
self._X2goClient__start_session(s_hash)
+ def _auto_resume_newest(self, s_hash):
+ session_infos = self._X2goClient__list_sessions(s_hash)
+ if session_infos:
+ newest_session_name = x2go.utils.session_names_by_timestamp(session_infos)[-1]
+ self._pyhoca_logger("Resuming newest X2go session %s..." % newest_session_name, loglevel=x2go.loglevel_NOTICE, )
+ self._X2goClient__resume_session(s_hash, newest_session_name)
+ return True
+ return False
+
+ def _auto_resume_oldest(self, s_hash):
+ session_infos = self._X2goClient__list_sessions(s_hash)
+ if session_infos:
+ oldest_session_name = x2go.utils.session_names_by_timestamp(session_infos)[0]
+ self._pyhoca_logger("Resuming oldest X2go session %s..." % oldest_session_name, loglevel=x2go.loglevel_NOTICE, )
+ self._X2goClient__resume_session(s_hash, oldest_session_name)
+ return True
+ return False
+
def resume_session(self, s_hash):
"""\
STILL UNDOCUMENTED
@@ -173,7 +191,11 @@ class PyHocaCLI(x2go.X2goClient):
# resume a running session
self.logger('resuming X2go session: %s' % self.args.resume, loglevel=x2go.loglevel_INFO, )
available_sessions = self._X2goClient__list_sessions(s_hash)
- if self.args.resume in available_sessions.keys():
+ if available_sessions and self.args.resume == 'OLDEST':
+ self._auto_resume_oldest(s_hash)
+ elif available_sessions and self.args.resume == 'NEWEST':
+ self._auto_resume_newest(s_hash)
+ elif self.args.resume in available_sessions.keys():
self._X2goClient__resume_session(s_hash, self.args.resume)
else:
self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=20)
@@ -199,26 +221,54 @@ class PyHocaCLI(x2go.X2goClient):
# send a suspend request to a session
self.logger('requesting X2go session suspend of session: %s' % self.args.suspend, loglevel=x2go.loglevel_INFO, )
available_sessions = self._X2goClient__list_sessions(s_hash)
- if self.args.suspend in available_sessions.keys():
- self._X2goClient__suspend_session(s_hash, self.args.suspend)
+
+ if self.args.suspend == "ALL":
+ _session_names = available_sessions
else:
- self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=21)
+ _session_names = [ self.args.suspend ]
+
+ for _session_name in _session_names:
+ if _session_name in available_sessions.keys():
+ self._X2goClient__suspend_session(s_hash, _session_name)
+ self._pyhoca_logger("X2go session %s has been suspended" % _session_name, loglevel=x2go.loglevel_NOTICE, )
+ else:
+ _server = self.args.server
+ _remote_ssh_port = self.args.remote_ssh_port
+ if not self.args.server and self.args.session_profile:
+ _server = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'host')
+ _remote_ssh_port = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'sshport')
+ self._runtime_error('session %s not available on X2go server [%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=21)
def terminate_session(self, s_hash):
"""\
STILL UNDOCUMENTED
+
"""
# send a terminate request to a session
self.logger('requesting X2go session terminate of session: %s' % self.args.terminate, loglevel=x2go.loglevel_INFO, )
available_sessions = self._X2goClient__list_sessions(s_hash)
- if self.args.terminate in available_sessions.keys():
- self._X2goClient__terminate_session(s_hash, self.args.terminate)
+
+ if self.args.terminate == "ALL":
+ _session_names = available_sessions
else:
- self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=22)
+ _session_names = [ self.args.terminate ]
+
+ for _session_name in _session_names:
+ if _session_name in available_sessions.keys():
+ self._X2goClient__terminate_session(s_hash, _session_name)
+ self._pyhoca_logger("X2go session %s has been terminated" % _session_name, loglevel=x2go.loglevel_NOTICE, )
+ else:
+ _server = self.args.server
+ _remote_ssh_port = self.args.remote_ssh_port
+ if not self.args.server and self.args.session_profile:
+ _server = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'host')
+ _remote_ssh_port = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'sshport')
+ self._runtime_error('session %s not available on X2go server [%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=22)
def __init__(self, args, logger=None, liblogger=None):
"""\
STILL UNDOCUMENTED
+
"""
self.args = args
if logger is None:
@@ -238,12 +288,25 @@ class PyHocaCLI(x2go.X2goClient):
if self.args.session_profile:
+ _cmdlineopt_to_sessionopt = {
+ 'command': 'cmd',
+ 'kb_layout': 'kblayout',
+ 'kb_type': 'kbtype',
+ 'sound': 'snd_system',
+ 'ssh_privkey': 'key_filename',
+ 'server': 'hostname',
+ 'remote_ssh_port': 'port',
+ }
+
# override session profile options by option values from the arg parser
kwargs={}
if hasattr(self.args, 'parser'):
for a, v in self.args._get_kwargs():
if v != self.args.parser.get_default(a):
- kwargs[a] = v
+ try:
+ kwargs[_cmdlineopt_to_sessionopt[a]] = v
+ except KeyError:
+ kwargs[a] = v
# setup up the session profile based X2go session
self.x2go_session_hash = self._X2goClient__register_session(profile_name=self.args.session_profile,
@@ -359,14 +422,13 @@ class PyHocaCLI(x2go.X2goClient):
elif self.args.new:
self.new_session(self.x2go_session_hash)
- # finally call the MainLoop of PyHocaCLI
if not (self.args.new or self.args.resume or self.args.share_desktop or self.args.session_profile):
sys.exit(0)
- # give the session some time to come up...
- # no CTRL-C is allowed during this phase...
+ if self.args.resume or self.args.new:
+ self._pyhoca_logger("give the X2go session some time to come up...", loglevel=x2go.loglevel_NOTICE, )
+
i=0
- self._pyhoca_logger("give the X2go session some time to come up...", loglevel=x2go.loglevel_NOTICE, )
while i < self.args.time_to_wait:
time.sleep(1)
i+=1
@@ -381,6 +443,7 @@ class PyHocaCLI(x2go.X2goClient):
self._pyhoca_logger("Press CTRL+C to end desktop sharing for this session...", loglevel=x2go.loglevel_NOTICE, )
else:
self._pyhoca_logger("Press CTRL+C to suspend the running session...", loglevel=x2go.loglevel_NOTICE, )
+
try:
session_duration = 0
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
More information about the x2go-commits
mailing list