Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of Xpra. 

2# Copyright (C) 2010-2021 Antoine Martin <antoine@xpra.org> 

3# Copyright (C) 2008, 2010 Nathaniel Smith <njs@pobox.com> 

4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

5# later version. See the file COPYING for details. 

6 

7from xpra.version_util import version_compat_check 

8from xpra.os_util import bytestostr 

9from xpra.util import typedict, get_util_logger 

10from xpra.client.mixins.stub_client_mixin import StubClientMixin 

11from xpra.exit_codes import EXIT_INCOMPATIBLE_VERSION 

12 

13 

14class ServerInfoMixin(StubClientMixin): 

15 

16 def __init__(self): 

17 self._remote_machine_id = None 

18 self._remote_uuid = None 

19 self._remote_version = None 

20 self._remote_revision = None 

21 self._remote_modifications = 0 

22 self._remote_commit = None 

23 self._remote_build_date = "" 

24 self._remote_build_time = "" 

25 self._remote_hostname = None 

26 self._remote_display = None 

27 self._remote_platform = None 

28 self._remote_platform_release = None 

29 self._remote_platform_platform = None 

30 self._remote_platform_linux_distribution = None 

31 self._remote_python_version = "" 

32 self._remote_lib_versions = {} 

33 self._remote_subcommands = () 

34 self._remote_server_log = None 

35 

36 def parse_server_capabilities(self, c : typedict) -> bool: 

37 self._remote_machine_id = c.strget("machine_id") 

38 self._remote_uuid = c.strget("uuid") 

39 self._remote_version = c.strget("build.version", c.strget("version")) 

40 self._remote_revision = c.strget("build.revision", c.strget("revision")) 

41 mods = c.rawget("build.local_modifications") 

42 if mods and str(mods).find("dfsg")>=0: # pragma: no cover 

43 get_util_logger().warn("Warning: the xpra server is running a buggy Debian version") 

44 get_util_logger().warn(" those are usually out of date and unstable") 

45 else: 

46 self._remote_modifications = c.intget("build.local_modifications", 0) 

47 self._remote_commit = c.strget("build.commit") 

48 self._remote_build_date = c.strget("build.date") 

49 self._remote_build_time = c.strget("build.time") 

50 self._remote_hostname = c.strget("hostname") 

51 self._remote_display = c.strget("display") 

52 self._remote_platform = c.strget("platform") 

53 self._remote_platform_release = c.strget("platform.release") 

54 self._remote_platform_platform = c.strget("platform.platform") 

55 self._remote_python_version = c.strget("python.version") 

56 self._remote_subcommands = c.strtupleget("subcommands") 

57 self._remote_server_log = c.strget("server-log") 

58 for x in ("glib", "gobject", "gtk", "gdk", "cairo", "pango", "sound.gst", "sound.pygst"): 

59 v = c.rawget("%s.version" % x, None) 

60 if v is not None: 

61 self._remote_lib_versions[x] = v 

62 #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug') 

63 pld = c.tupleget("platform.linux_distribution") 

64 if pld and len(pld)==3: 

65 def san(v): 

66 if isinstance(v, int): 

67 return v 

68 return bytestostr(v) 

69 self._remote_platform_linux_distribution = [san(x) for x in pld] 

70 verr = version_compat_check(self._remote_version) 

71 if verr is not None: 

72 self.warn_and_quit(EXIT_INCOMPATIBLE_VERSION, 

73 "incompatible remote version '%s': %s" % (self._remote_version, verr)) 

74 return False 

75 return True