[gdm: 1/2] utils: change gdm-disable-wayland to gdm-runtime-config




commit 06ef97a261015bc5c52fc595c05efba0d7698427
Author: Jian-Hong Pan <jhp endlessos org>
Date:   Wed Oct 28 14:11:48 2020 +0800

    utils: change gdm-disable-wayland to gdm-runtime-config
    
    We can disable Wayland in runtime by invoking gdm-disable-wayland.
    However, we may also want to enable Wayland in runtime for some
    reasons. This idea is extended to modify more options/configurations in
    runtime.
    
    This commit renames gdm-disable-wayland to gdm-runtime-config and
    unlocks the feature to modify more gdm configurations in runtime.
    The new command format will be:
      gdm-runtime-config set <group> <key> <value>
    
    The configurable items refer to gdm.schemas. "<group>/<key>" combination
    is the key in gdm.schemas.
    
    For example, the original "gdm-disable-wayland" is replaced by
    "gdm-runtime-config set daemon WaylandEnable false".
    
    Link: https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/115#note_944907

 data/61-gdm.rules.in                               |  6 ++---
 ...{gdm-disable-wayland.c => gdm-runtime-config.c} | 28 +++++++++++++++++++---
 utils/meson.build                                  | 10 ++++----
 3 files changed, 33 insertions(+), 11 deletions(-)
---
diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in
index 984fdd447..b1da191f8 100644
--- a/data/61-gdm.rules.in
+++ b/data/61-gdm.rules.in
@@ -1,6 +1,6 @@
 # disable Wayland on Hi1710 chipsets
-ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-disable-wayland"
+ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-runtime-config set daemon 
WaylandEnable false"
 # disable Wayland when using the proprietary nvidia driver
-DRIVER=="nvidia", RUN+="@libexecdir@/gdm-disable-wayland"
+DRIVER=="nvidia", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false"
 # disable Wayland if modesetting is disabled
-IMPORT{cmdline}="nomodeset", RUN+="@libexecdir@/gdm-disable-wayland"
+IMPORT{cmdline}="nomodeset", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false"
diff --git a/utils/gdm-disable-wayland.c b/utils/gdm-runtime-config.c
similarity index 54%
rename from utils/gdm-disable-wayland.c
rename to utils/gdm-runtime-config.c
index be61c4d8f..8034a2e5b 100644
--- a/utils/gdm-disable-wayland.c
+++ b/utils/gdm-runtime-config.c
@@ -31,21 +31,43 @@ main (int argc, char *argv[])
 {
         g_autoptr(GKeyFile) key_file = NULL;
         g_autoptr(GError) error = NULL;
+        gchar *group, *key, *value;
         gboolean saved_okay;
 
+        if (argc < 5 || g_strcmp0(argv[1], "set") != 0) {
+                g_printerr("gdm-runtime-config: command format should be " \
+                           "'gdm-runtime-config set <group> <key> <value>'\n" \
+                           "For example, 'gdm-runtime-config set daemon WaylandEnable true'");
+                return EX_USAGE;
+        }
+
+        group = argv[2];
+        key = argv[3];
+        value = argv[4];
+
         setlocale (LC_ALL, "");
 
         key_file = g_key_file_new ();
 
-        g_key_file_set_boolean (key_file, "daemon", "WaylandEnable", FALSE);
+        /* Just load the runtime conf file and ignore the error.  A new file
+         * will be created later if it is file not found.
+         * So that more than one config item can be set.
+         */
+        g_key_file_load_from_file (key_file,
+                                   GDM_RUNTIME_CONF,
+                                   G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS,
+                                   &error);
+        g_clear_error (&error);
+
+        g_key_file_set_value (key_file, group, key, value);
 
         g_mkdir_with_parents (GDM_RUN_DIR, 0711);
 
         saved_okay = g_key_file_save_to_file (key_file, GDM_RUNTIME_CONF, &error);
 
         if (!saved_okay) {
-                g_printerr ("gdm-disable-wayland: unable to disable wayland: %s",
-                            error->message);
+                g_printerr ("gdm-runtime-config: unable to set '%s' in '%s' group to '%s': %s",
+                            key, group, value, error->message);
                 return EX_CANTCREAT;
         }
 
diff --git a/utils/meson.build b/utils/meson.build
index f719c49dc..d59f167b0 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -26,14 +26,14 @@ gdm_screenshot = executable('gdm-screenshot',
   install: true,
 )
 
-# gdm-disable-wayland
-gdm_disable_wayland_deps = [
+# gdm-runtime-config
+gdm_runtime_config_deps = [
   glib_dep,
 ]
 
-gdm_disable_wayland = executable('gdm-disable-wayland',
-  'gdm-disable-wayland.c',
-  dependencies: gdm_disable_wayland_deps,
+gdm_runtime_config = executable('gdm-runtime-config',
+  'gdm-runtime-config.c',
+  dependencies: gdm_runtime_config_deps,
   include_directories: config_h_dir,
   install: true,
   install_dir: get_option('libexecdir'),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]