diff options
-rw-r--r-- | data/61-gdm.rules.in | 6 | ||||
-rw-r--r-- | utils/gdm-runtime-config.c (renamed from utils/gdm-disable-wayland.c) | 28 | ||||
-rw-r--r-- | 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 984fdd44..b1da191f 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 index be61c4d8..8034a2e5 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 f719c49d..d59f167b 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'), |