From 37024fa83206e811c99fa3db84a4eb571c3d737f Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 20 Mar 2024 11:18:28 +0100 Subject: [PATCH] chore(linux): Change order of initialization If we want to log messages we need to start DBus after we initialized logging. --- linux/keyman-config/keyman_config/__init__.py | 47 ++++++++++--------- linux/keyman-config/km-config | 3 +- linux/keyman-config/km-kvk2ldml | 3 +- linux/keyman-config/km-package-get | 3 +- linux/keyman-config/km-package-install | 3 +- linux/keyman-config/km-package-list-installed | 3 +- linux/keyman-config/km-package-uninstall | 3 +- 7 files changed, 36 insertions(+), 29 deletions(-) diff --git a/linux/keyman-config/keyman_config/__init__.py b/linux/keyman-config/keyman_config/__init__.py index 3021bf136e..c4e713953d 100644 --- a/linux/keyman-config/keyman_config/__init__.py +++ b/linux/keyman-config/keyman_config/__init__.py @@ -51,6 +51,30 @@ def initialize_sentry(): SentryErrorHandling().initialize_sentry() +def verify_dbus_running(): + if (not 'DBUS_SESSION_BUS_ADDRESS' in os.environ or + not 'DBUS_SESSION_BUS_PID' in os.environ): + try: + # Seems dbus isn't running for the current user. Try to start it + # and set these environment variables + logging.info('Starting dbus with dbus-launch') + stdout = subprocess.run( + ('dbus-launch', '--exit-with-session'), + stdout=subprocess.PIPE, check=False).stdout + lines = stdout.decode('utf-8').splitlines() + for line in lines: + equal_sign = line.find('=') + if equal_sign <= 0: + logging.warning('Got unexpected line from dbus-launch: %s', line) + continue + name = line[:equal_sign] + value = line[equal_sign+1:] + logging.debug('Setting environment %s=%s', name, value) + os.environ[name] = value + except Exception as e: + logging.error('Starting dbus-launch failed with %s', e) + + def add_standard_arguments(parser): if __pkgversion__: versionstring = f"{__versionwithtag__} (package version {__pkgversion__})" @@ -79,26 +103,3 @@ KeymanApiUrl = 'https://api.keyman.com' # There's no staging site for downloads KeymanDownloadsUrl = 'https://downloads.keyman.com' - - -if (not 'DBUS_SESSION_BUS_ADDRESS' in os.environ or - not 'DBUS_SESSION_BUS_PID' in os.environ): - try: - # Seems dbus isn't running for the current user. Try to start it - # and set these environment variables - logging.info('Starting dbus with dbus-launch') - stdout = subprocess.run( - ('dbus-launch', '--exit-with-session'), - stdout=subprocess.PIPE, check=False).stdout - lines = stdout.decode('utf-8').splitlines() - for line in lines: - equal_sign = line.find('=') - if equal_sign <= 0: - logging.warning('Got unexpected line from dbus-launch: %s', line) - continue - name = line[:equal_sign] - value = line[equal_sign+1:] - logging.debug('Setting environment %s=%s', name, value) - os.environ[name] = value - except Exception as e: - logging.error('Starting dbus-launch failed with %s', e) diff --git a/linux/keyman-config/km-config b/linux/keyman-config/km-config index 604e7d17cf..f40ebeebb4 100755 --- a/linux/keyman-config/km-config +++ b/linux/keyman-config/km-config @@ -9,7 +9,7 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk -from keyman_config import __versionwithtag__, __pkgversion__, add_standard_arguments, initialize_logging, initialize_sentry +from keyman_config import __versionwithtag__, __pkgversion__, add_standard_arguments, initialize_logging, initialize_sentry, verify_dbus_running from keyman_config.handle_install import download_and_install_package from keyman_config.ibus_util import verify_ibus_daemon from keyman_config.view_installed import ViewInstalledWindow @@ -40,6 +40,7 @@ if __name__ == '__main__': initialize_logging(args) initialize_sentry() + verify_dbus_running() logging.info('Keyman version %s %s', __versionwithtag__, __pkgversion__) diff --git a/linux/keyman-config/km-kvk2ldml b/linux/keyman-config/km-kvk2ldml index a0f3c90a4e..8a9adbb322 100755 --- a/linux/keyman-config/km-kvk2ldml +++ b/linux/keyman-config/km-kvk2ldml @@ -5,7 +5,7 @@ import logging import os import sys -from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry +from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry, verify_dbus_running from keyman_config.kvk2ldml import parse_kvk_file, print_kvk, convert_ldml, output_ldml @@ -23,6 +23,7 @@ def main(): initialize_logging(args) initialize_sentry() + verify_dbus_running() name, ext = os.path.splitext(args.kvkfile) # Check if input file extension is kvk diff --git a/linux/keyman-config/km-package-get b/linux/keyman-config/km-package-get index bbca72093b..a38e66dd1b 100755 --- a/linux/keyman-config/km-package-get +++ b/linux/keyman-config/km-package-get @@ -3,7 +3,7 @@ import argparse import os -from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry +from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry, verify_dbus_running from keyman_config.get_kmp import get_kmp, keyman_cache_dir @@ -16,6 +16,7 @@ def main(): initialize_logging(args) initialize_sentry() + verify_dbus_running() get_kmp(args.id) if os.path.exists(os.path.join(keyman_cache_dir(), 'kmpdirlist')): diff --git a/linux/keyman-config/km-package-install b/linux/keyman-config/km-package-install index 613e00368d..85436a4f40 100755 --- a/linux/keyman-config/km-package-install +++ b/linux/keyman-config/km-package-install @@ -11,7 +11,7 @@ import time from pkg_resources import parse_version from zipfile import is_zipfile -from keyman_config import KeymanApiUrl, add_standard_arguments, initialize_logging, initialize_sentry, secure_lookup +from keyman_config import KeymanApiUrl, add_standard_arguments, initialize_logging, initialize_sentry, secure_lookup, verify_dbus_running from keyman_config.get_kmp import get_keyboard_data, get_kmp, keyman_cache_dir from keyman_config.install_kmp import extract_kmp, InstallError, InstallStatus, install_kmp from keyman_config.kmpmetadata import get_metadata @@ -124,6 +124,7 @@ def main(): initialize_logging(args) initialize_sentry() + verify_dbus_running() if args.package and args.file: parser.print_usage() diff --git a/linux/keyman-config/km-package-list-installed b/linux/keyman-config/km-package-list-installed index c6276c77a3..51d09c01b6 100755 --- a/linux/keyman-config/km-package-list-installed +++ b/linux/keyman-config/km-package-list-installed @@ -3,7 +3,7 @@ import argparse import os -from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry +from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry, verify_dbus_running from keyman_config.get_kmp import get_keyman_dir, InstallLocation from keyman_config.list_installed_kmp import get_installed_kmp @@ -20,6 +20,7 @@ def main(): initialize_logging(args) initialize_sentry() + verify_dbus_running() _all = not args.user and not args.shared and not args.os if args.user or _all: diff --git a/linux/keyman-config/km-package-uninstall b/linux/keyman-config/km-package-uninstall index 5ccc32c2a9..0d35fcd5cc 100755 --- a/linux/keyman-config/km-package-uninstall +++ b/linux/keyman-config/km-package-uninstall @@ -2,7 +2,7 @@ import argparse -from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry +from keyman_config import add_standard_arguments, initialize_logging, initialize_sentry, verify_dbus_running from keyman_config.uninstall_kmp import uninstall_kmp def main(): @@ -15,6 +15,7 @@ def main(): initialize_logging(args) initialize_sentry() + verify_dbus_running() uninstall_kmp(args.id, args.shared)