143 lines
4.9 KiB
Diff
143 lines
4.9 KiB
Diff
From cfa7925f70ec44a976f6d0426133e3b8ba589142 Mon Sep 17 00:00:00 2001
|
|
From: Rui Matos <tiagomatos@gmail.com>
|
|
Date: Mon, 23 Jan 2017 19:42:44 +0100
|
|
Subject: [PATCH] Exit gracefully if we are disabled systemwide
|
|
|
|
Sysadmins might want to disable any kind of initial setup for their
|
|
users, perhaps because they pre-configure their environments. We
|
|
should provide an easy way to do it.
|
|
|
|
At least the anaconda installer provides an option to skip any kind
|
|
post-install setup tools so, for now we're only adding support for
|
|
that but more might be added in the future.
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=777707
|
|
---
|
|
meson.build | 2 ++
|
|
gnome-initial-setup/gnome-initial-setup.c | 34 +++++++++++++++++++++++
|
|
2 files changed, 36 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
|
index 414ea94..989827b 100644
|
|
--- a/gnome-initial-setup/gnome-initial-setup.c
|
|
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
|
@@ -247,6 +247,31 @@ get_mode (void)
|
|
return GIS_DRIVER_MODE_NEW_USER;
|
|
}
|
|
|
|
+static gboolean
|
|
+initial_setup_disabled_by_anaconda (void)
|
|
+{
|
|
+ GKeyFile *key_file;
|
|
+ const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda";
|
|
+ gboolean disabled = FALSE;
|
|
+ GError *error = NULL;
|
|
+
|
|
+ key_file = g_key_file_new ();
|
|
+ if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) {
|
|
+ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) &&
|
|
+ !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
|
|
+ g_warning ("Could not read %s: %s", file_name, error->message);
|
|
+ }
|
|
+ g_error_free (error);
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
+ disabled = g_key_file_get_boolean (key_file, "General",
|
|
+ "post_install_tools_disabled", NULL);
|
|
+ out:
|
|
+ g_key_file_unref (key_file);
|
|
+ return disabled;
|
|
+}
|
|
+
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
@@ -281,6 +306,15 @@ main (int argc, char *argv[])
|
|
skipped_pages = g_ptr_array_new_with_free_func ((GDestroyNotify) gtk_widget_destroy);
|
|
mode = get_mode ();
|
|
|
|
+ /* We only do this in existing-user mode, because if gdm launches us
|
|
+ * in new-user mode and we just exit, gdm's special g-i-s session
|
|
+ * never terminates. */
|
|
+ if (initial_setup_disabled_by_anaconda () &&
|
|
+ mode == GIS_DRIVER_MODE_EXISTING_USER) {
|
|
+ gis_ensure_stamp_files ();
|
|
+ exit (EXIT_SUCCESS);
|
|
+ }
|
|
+
|
|
/* When we are running as the gnome-initial-setup user we
|
|
* dont have a normal user session and need to initialize
|
|
* the keyring manually so that we can pass the credentials
|
|
--
|
|
2.19.0.rc0
|
|
|
|
diff --git a/meson.build b/meson.build
|
|
index 4950bed..6e91f2b 100644
|
|
--- a/meson.build
|
|
+++ b/meson.build
|
|
@@ -1,59 +1,61 @@
|
|
project('gnome-initial-setup',
|
|
['c'],
|
|
version: '3.32.0',
|
|
license: 'GPLv2',
|
|
meson_version: '>= 0.47.0',
|
|
)
|
|
|
|
cc = meson.get_compiler('c')
|
|
gnome = import('gnome')
|
|
i18n = import('i18n')
|
|
|
|
prefix = get_option('prefix')
|
|
po_dir = join_paths(meson.source_root(), 'po')
|
|
+sysconf_dir = join_paths(prefix, get_option('sysconfdir'))
|
|
data_dir = join_paths(prefix, get_option('datadir'))
|
|
locale_dir = join_paths(prefix, get_option('localedir'))
|
|
libexec_dir = join_paths(prefix, get_option('libexecdir'))
|
|
source_root = join_paths(meson.source_root(), 'gnome-initial-setup')
|
|
pkgdata_dir = join_paths(prefix, meson.project_name())
|
|
|
|
vendor_conf_file = get_option('vendor-conf-file')
|
|
if vendor_conf_file == ''
|
|
vendor_conf_file = join_paths(data_dir, 'gnome-initial-setup', 'vendor.conf')
|
|
endif
|
|
|
|
conf = configuration_data()
|
|
conf.set_quoted('VENDOR_CONF_FILE', vendor_conf_file)
|
|
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
|
|
conf.set_quoted('GNOMELOCALEDIR', locale_dir)
|
|
conf.set_quoted('PKGDATADIR', pkgdata_dir)
|
|
+conf.set_quoted('SYSCONFDIR', sysconf_dir)
|
|
conf.set('ENABLE_REGION_PAGE', get_option('region-page'))
|
|
conf.set('SECRET_API_SUBJECT_TO_CHANGE', true)
|
|
|
|
# Needed for the 'account' page
|
|
cheese_dep = dependency ('cheese',
|
|
version: '>= 3.3.5',
|
|
required: get_option('cheese'))
|
|
cheese_gtk_dep = dependency ('cheese-gtk',
|
|
version: '>= 3.3.5',
|
|
required: get_option('cheese'))
|
|
conf.set('HAVE_CHEESE', cheese_dep.found() and cheese_gtk_dep.found())
|
|
|
|
# Needed for the 'software' page
|
|
pkgkit_dep = dependency ('packagekit-glib2',
|
|
version: '>= 1.1.4',
|
|
required: get_option('software-sources'))
|
|
conf.set('ENABLE_SOFTWARE_SOURCES', pkgkit_dep.found())
|
|
|
|
# Needed for the 'keyboard' page
|
|
ibus_dep = dependency ('ibus-1.0',
|
|
version: '>= 1.4.99',
|
|
required: get_option('ibus'))
|
|
conf.set('HAVE_IBUS', ibus_dep.found())
|
|
|
|
configure_file(output: 'config.h',
|
|
configuration: conf)
|
|
config_h_dir = include_directories('.')
|
|
|
|
subdir('data')
|
|
subdir('gnome-initial-setup')
|
|
--
|
|
2.20.1
|