From 57bb9c16f4a8e14367917d0feda8d13c6e8412ed Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 23 Sep 2019 10:55:59 +0200 Subject: [PATCH 1/6] [displaymanager] Also look for Wayland sessions - Sessions can be X11-sessions (living in xsessions) or Wayland- (living in wayland-sessions). Look in both places. - Refactor code a little to make it nicer to read. --- src/modules/displaymanager/main.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 8c0b1a46f..b46dc3d43 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -51,15 +51,20 @@ class DesktopEnvironment: self.executable = exec self.desktop_file = desktop + def find_de_executable(self, root_mount_point): + return os.path.exists("{!s}{!s}".format(root_mount_point, self.executable)) + + def find_de_session(self, root_mount_point): + x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) + wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) + return os.path.exists(x11_sessions) or os.path.exists(wayland_sessions) + def find_desktop_environment(self, root_mount_point): """ Check if this environment is installed in the target system at @p root_mount_point. """ - return ( - os.path.exists("{!s}{!s}".format(root_mount_point, self.executable)) and - os.path.exists("{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file)) - ) + return find_de_executable(root_mount_point) and find_de_session(root_mount_point) desktop_environments = [ From 38369634df135b39848ac6d2c5581e4e0fcdef41 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 25 Sep 2019 12:26:26 +0200 Subject: [PATCH 2/6] [displaymanager] Find the .desktop file explicitly --- src/modules/displaymanager/main.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index b46dc3d43..4bf9e5771 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -51,14 +51,21 @@ class DesktopEnvironment: self.executable = exec self.desktop_file = desktop + def find_desktop_file(self, root_mount_point): + x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) + wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) + for candidate in (x11_sessions, wayland_sessions): + if os.path.exists(candidate): + return candidate + return None + def find_de_executable(self, root_mount_point): return os.path.exists("{!s}{!s}".format(root_mount_point, self.executable)) - + def find_de_session(self, root_mount_point): - x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) - wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) - return os.path.exists(x11_sessions) or os.path.exists(wayland_sessions) - + desktop_file = self.find_desktop_file(root_mount_point) + return desktop_file is not None + def find_desktop_environment(self, root_mount_point): """ Check if this environment is installed in the From 01cd95512fe8bcf92cd349d9ce6896b000865cf0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 25 Sep 2019 12:41:37 +0200 Subject: [PATCH 3/6] [displaymanager] Check the TryExec key from the .desktop file --- src/modules/displaymanager/main.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 4bf9e5771..2e6d05311 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -51,6 +51,30 @@ class DesktopEnvironment: self.executable = exec self.desktop_file = desktop + def find_de_tryexec(self, root_mount_point, command): + if command.startswith("/"): + path = [""] + else: + path = ["/bin/", "/usr/bin/", "/sbin/", "/usr/local/bin/"] + + for p in path: + absolute_path = "{!s}{!s}{!s}".format(root_mount_point, p, command) + if os.path.exists(absolute_path): + return absolute_path + return None + + def find_tryexec(self, root_mount_point, absolute_desktop_file): + assert absolute_desktop_file.startswith(root_mount_point) + with open(absolute_desktop_file, "r") as f: + for tryexec_line in [x for x in f.readlines() if x.startswith("TryExec")]: + try: + key, value = tryexec_line.split("=") + if key.strip() == "TryExec": + return self.find_de_tryexec(root_mount_point, value) + except: + pass + return None + def find_desktop_file(self, root_mount_point): x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) From f9e36b9c737ca89d61a8a9afc0675f5a93bb898c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 25 Sep 2019 12:41:58 +0200 Subject: [PATCH 4/6] [displaymanager] Missing self --- src/modules/displaymanager/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 2e6d05311..aa9fe94dd 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -95,7 +95,7 @@ class DesktopEnvironment: Check if this environment is installed in the target system at @p root_mount_point. """ - return find_de_executable(root_mount_point) and find_de_session(root_mount_point) + return self.find_de_executable(root_mount_point) and self.find_de_session(root_mount_point) desktop_environments = [ From 0b81d2562bbe2a2f37f1f4280b2166a7f70dcf82 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 25 Sep 2019 12:52:07 +0200 Subject: [PATCH 5/6] [displaymanager] Be more chatty --- src/modules/displaymanager/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index aa9fe94dd..06b9ef02a 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -131,8 +131,10 @@ def find_desktop_environment(root_mount_point): :param root_mount_point: :return: """ + libcalamares.utils.debug("Using root {!r}".format(root_mount_point)) for desktop_environment in desktop_environments: if desktop_environment.find_desktop_environment(root_mount_point): + libcalamares.utils.debug(".. selected DE {!s}".format(desktop_environment.desktop_file)) return desktop_environment return None From 92ab0c1addef21377c58846c4aaa4fd28c304c18 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 25 Sep 2019 13:05:35 +0200 Subject: [PATCH 6/6] [displaymanager] Unify looking for executables - use executable, and the result of looking up TryExec - reduce chattiness again --- src/modules/displaymanager/main.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 06b9ef02a..fdb802fef 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -51,7 +51,7 @@ class DesktopEnvironment: self.executable = exec self.desktop_file = desktop - def find_de_tryexec(self, root_mount_point, command): + def find_executable(self, root_mount_point, command): if command.startswith("/"): path = [""] else: @@ -70,7 +70,7 @@ class DesktopEnvironment: try: key, value = tryexec_line.split("=") if key.strip() == "TryExec": - return self.find_de_tryexec(root_mount_point, value) + return self.find_executable(root_mount_point, value.strip()) except: pass return None @@ -83,19 +83,17 @@ class DesktopEnvironment: return candidate return None - def find_de_executable(self, root_mount_point): - return os.path.exists("{!s}{!s}".format(root_mount_point, self.executable)) - - def find_de_session(self, root_mount_point): - desktop_file = self.find_desktop_file(root_mount_point) - return desktop_file is not None - def find_desktop_environment(self, root_mount_point): """ Check if this environment is installed in the target system at @p root_mount_point. """ - return self.find_de_executable(root_mount_point) and self.find_de_session(root_mount_point) + desktop_file = self.find_desktop_file(root_mount_point) + if desktop_file is None: + return False + + return (self.find_executable(root_mount_point, self.executable) is not None or + self.find_tryexec(root_mount_point, desktop_file) is not None) desktop_environments = [ @@ -131,7 +129,7 @@ def find_desktop_environment(root_mount_point): :param root_mount_point: :return: """ - libcalamares.utils.debug("Using root {!r}".format(root_mount_point)) + libcalamares.utils.debug("Using rootMountPoint {!r}".format(root_mount_point)) for desktop_environment in desktop_environments: if desktop_environment.find_desktop_environment(root_mount_point): libcalamares.utils.debug(".. selected DE {!s}".format(desktop_environment.desktop_file))