Exemplo n.º 1
0
Arquivo: paths.py Projeto: chewi/xpra
def do_get_resources_dir():
    rsc = None
    RESOURCES = "/Resources/"
    #FUGLY warning: importing gtkosx_application causes the dock to appear,
    #and in some cases we don't want that.. so use the env var XPRA_SKIP_UI as workaround for such cases:
    if not envbool("XPRA_SKIP_UI", False):
        from xpra.platform.darwin import get_OSXApplication
        macapp = get_OSXApplication()
        try:
            rsc = macapp.get_resource_path()
            debug("get_resources_dir() %s.get_resource_path=%s", macapp, rsc)
        except Exception:
            global _gtkosx_warning_
            if _gtkosx_warning_ is False:
                _gtkosx_warning_ = True
                #delayed import to prevent cycles:
                get_util_logger().error(
                    "Error: gtkosx_application module is missing - trying to continue anyway"
                )
    else:
        debug("XPRA_SKIP_UI is set, not importing gtkosx_application")
    if rsc is None:
        #try using the path to this file to find the resource path:
        rsc = __file__
    i = rsc.rfind(RESOURCES)
    if i <= 0:
        #last fallback: try the default app dir
        from xpra.platform.paths import default_get_app_dir
        rsc = default_get_app_dir()
        debug("get_resources_dir() default_get_app_dir()=%s", rsc)
    i = rsc.rfind(RESOURCES)
    if i > 0:
        rsc = rsc[:i + len(RESOURCES)]
    debug("get_resources_dir()=%s", rsc)
    return rsc
Exemplo n.º 2
0
    def parse_server_capabilities(self, c: typedict) -> bool:
        p = self._protocol
        if p.TYPE == "rfb":
            #only the xpra protocol provides the server info
            return True
        self._remote_machine_id = c.strget("machine_id")
        self._remote_uuid = c.strget("uuid")
        self._remote_version = c.strget("build.version", c.strget("version"))
        self._remote_revision = c.strget("build.revision",
                                         c.strget("revision"))
        mods = c.get("build.local_modifications")
        if mods and str(mods).find("dfsg") >= 0:  # pragma: no cover
            get_util_logger().warn(
                "Warning: the xpra server is running a buggy Debian version")
            get_util_logger().warn(
                " those are usually out of date and unstable")
        else:
            self._remote_modifications = c.intget("build.local_modifications",
                                                  0)
        self._remote_commit = c.strget("build.commit")
        self._remote_branch = c.strget("build.branch")
        self._remote_build_date = c.strget("build.date")
        self._remote_build_time = c.strget("build.time")
        self._remote_hostname = c.strget("hostname")
        self._remote_display = c.strget("display")
        self._remote_platform = c.strget("platform")
        self._remote_platform_release = c.strget("platform.release")
        self._remote_platform_platform = c.strget("platform.platform")
        self._remote_python_version = c.strget("python.version")
        self._remote_subcommands = c.strtupleget("subcommands")
        self._remote_server_log = c.strget("server-log")
        self._remote_lib_versions = get_remote_lib_versions(c)
        #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug')
        pld = c.tupleget("platform.linux_distribution")
        if pld and len(pld) == 3:

            def san(v):
                if isinstance(v, int):
                    return v
                return bytestostr(v)

            self._remote_platform_linux_distribution = [san(x) for x in pld]
        verr = version_compat_check(self._remote_version)
        if verr is not None:
            self.warn_and_quit(
                EXIT_INCOMPATIBLE_VERSION,
                "incompatible remote version '%s': %s" %
                (self._remote_version, verr))
            return False
        return True
Exemplo n.º 3
0
def make_revision_str(revision, local_modifications, branch, commit) -> str:
    rstr = ""
    try:
        rstr += "r%s" % revision
        if local_modifications > 0:
            rstr += "M"
        if branch == "master" and commit:
            rstr += " (%s)" % commit
    except TypeError:
        get_util_logger().debug(
            "make_revision_str%s",
            (revision, local_modifications, branch, commit),
            exc_info=True)
    return rstr
Exemplo n.º 4
0
def make_window_metadata(window, propname, get_window_id=None, skip_defaults=False) -> dict:
    try:
        return do_make_window_metadata(window, propname, get_window_id, skip_defaults)
    except (ValueError, TypeError) as e:
        log = get_util_logger()
        log("make_window_metadata%s",
            (window, propname, get_window_id, skip_defaults), exc_info=True)
        log.error("Error: failed to make window metadata")
        log.error(" for attribute '%s' of window %s", propname, window)
        log.error(" with value '%s':", getattr(window, propname, None))
        log.error(" %s", e)
        return {}
Exemplo n.º 5
0
 def parse_server_capabilities(self, c : typedict) -> bool:
     self._remote_machine_id = c.strget("machine_id")
     self._remote_uuid = c.strget("uuid")
     self._remote_version = c.strget("build.version", c.strget("version"))
     self._remote_revision = c.strget("build.revision", c.strget("revision"))
     mods = c.rawget("build.local_modifications")
     if mods and str(mods).find("dfsg")>=0:
         get_util_logger().warn("Warning: the xpra server is running a buggy Debian version")
         get_util_logger().warn(" those are usually out of date and unstable")
     else:
         self._remote_modifications = c.intget("build.local_modifications", 0)
     self._remote_build_date = c.strget("build.date")
     self._remote_build_time = c.strget("build.time")
     self._remote_hostname = c.strget("hostname")
     self._remote_display = c.strget("display")
     self._remote_platform = c.strget("platform")
     self._remote_platform_release = c.strget("platform.release")
     self._remote_platform_platform = c.strget("platform.platform")
     self._remote_python_version = c.strget("python.version")
     self._remote_subcommands = c.strtupleget("subcommands")
     for x in ("glib", "gobject", "gtk", "gdk", "cairo", "pango", "sound.gst", "sound.pygst"):
         v = c.rawget("%s.version" % x, None)
         if v is not None:
             self._remote_lib_versions[x] = v
     #linux distribution is a tuple of different types, ie: ('Linux Fedora' , 20, 'Heisenbug')
     pld = c.tupleget("platform.linux_distribution")
     if pld and len(pld)==3:
         def san(v):
             if isinstance(v, int):
                 return v
             return bytestostr(v)
         self._remote_platform_linux_distribution = [san(x) for x in pld]
     verr = version_compat_check(self._remote_version)
     if verr is not None:
         self.warn_and_quit(EXIT_INCOMPATIBLE_VERSION,
                            "incompatible remote version '%s': %s" % (self._remote_version, verr))
         return False
     return True
Exemplo n.º 6
0
def debug(*msg):
    """ delay import of logger to prevent cycles """
    log = get_util_logger()
    log.debug(*msg)
    return None
Exemplo n.º 7
0
def warn(msg, *args, **kwargs):
    get_util_logger().warn(msg, *args, **kwargs)
Exemplo n.º 8
0
def log(msg, *args, **kwargs):
    get_util_logger().debug(msg, *args, **kwargs)
Exemplo n.º 9
0
#tricky: use xpra.scripts.config to get to the python "platform" module
import xpra
from xpra.util import updict, envbool, obsc, get_util_logger
from xpra.os_util import get_linux_distribution, BITS, POSIX, WIN32

XPRA_VERSION = xpra.__version__  #@UndefinedVariable

CHECK_SSL = envbool("XPRA_VERSION_CHECK_SSL", True)
SSL_CAFILE = None
if WIN32:
    try:
        import certifi  #@UnresolvedImport
        SSL_CAFILE = certifi.where()
    except (ImportError, AttributeError):
        get_util_logger().error("failed to locate SSL ca file", exc_info=True)
SSL_CAFILE = os.environ.get("XPRA_SSL_CAFILE", SSL_CAFILE)


def log(msg, *args, **kwargs):
    get_util_logger().debug(msg, *args, **kwargs)


def warn(msg, *args, **kwargs):
    get_util_logger().warn(msg, *args, **kwargs)


def full_version_str() -> str:
    s = XPRA_VERSION
    try:
        from xpra.src_info import REVISION, LOCAL_MODIFICATIONS