Compare commits

...

1 Commits
c8 ... c10

Author SHA1 Message Date
AlmaLinux RelEng Bot
20e6d931e2 import CS gnome-settings-daemon-47.2-10.el10 2026-05-19 15:08:13 -04:00
30 changed files with 7048 additions and 29614 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/gnome-settings-daemon-3.32.0.tar.xz
gnome-settings-daemon-47.2.tar.xz

View File

@ -1 +0,0 @@
92145a7a5714ebf3aeb90baaacb7e6955335731b SOURCES/gnome-settings-daemon-3.32.0.tar.xz

View File

@ -0,0 +1,79 @@
From 88e90f2748f08f14d3f635939f3f85f05f66ecb3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Fri, 7 Feb 2025 18:05:51 +0100
Subject: [PATCH] smartcard/manager: Consider modules with no slots as
removable devices
Some smartcard modules support removable slots but they don't advertise
them until a smartcard device is actually plugged.
In such case we can't know preventively if the module provides
removable-token (e.g. smartcard) support, so we can just assume that it
does or we won't be able to catch the token insertion when this happens.
Closes: #782
Part-of: <https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/405>
---
plugins/smartcard/gsd-smartcard-manager.c | 27 ++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index c049f492..4def3137 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -520,13 +520,31 @@ on_smartcards_from_module_watched (GsdSmartcardManager *self,
}
static gboolean
-module_has_removable_slot (GckModule *module)
+module_should_be_watched (GckModule *module)
{
g_autolist(GckSlot) slots = NULL;
GList *l;
slots = gck_module_get_slots (module, FALSE);
+ if (slots == NULL) {
+ CK_FUNCTION_LIST_PTR p11_module;
+ g_autofree char *module_name = NULL;
+
+ p11_module = gck_module_get_functions (module);
+ module_name = p11_kit_module_get_name (p11_module);
+
+ /* No slot is currently available, so we can't make assumptions
+ * whether the module supports or not removable devices.
+ * So let's be conservative here and let's just assume that the
+ * module does support removable devices, so that we will monitor
+ * it for changes.
+ */
+ g_debug ("No slot found for module %s, let's assume it supports "
+ "removable devices", module_name);
+ return TRUE;
+ }
+
for (l = slots; l; l = l->next) {
GckSlot *slot = l->data;
@@ -562,13 +580,16 @@ on_modules_initialized (GObject *source_object,
GckModule *module = l->data;
CK_FUNCTION_LIST_PTR p11_module;
g_autofree char *module_name = NULL;
+ gboolean should_watch;
p11_module = gck_module_get_functions (module);
module_name = p11_kit_module_get_name (p11_module);
+ should_watch = module_should_be_watched (module);
- g_debug ("Found p11-kit module %s", module_name);
+ g_debug ("Found p11-kit module %s (watched: %d)", module_name,
+ should_watch);
- if (!module_has_removable_slot (module))
+ if (!should_watch)
continue;
self->smartcard_modules = g_list_prepend (self->smartcard_modules,
--
2.53.0

View File

@ -1,47 +0,0 @@
From bd0488fe501bae74fae1fbb21566aa35f38aa6fc Mon Sep 17 00:00:00 2001
From: Felipe Borges <felipeborges@gnome.org>
Date: Wed, 15 Feb 2023 15:27:59 +0100
Subject: [PATCH] Make power-button-action always power off when chassis=server
Servers often don't support hibernation/suspend.
---
...rg.gnome.settings-daemon.plugins.power.gschema.xml.in | 2 +-
plugins/media-keys/gsd-media-keys-manager.c | 9 ++++++---
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
index fc61d133..952104ed 100644
--- a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
+++ b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
@@ -39,7 +39,7 @@
<key name="power-button-action" enum="org.gnome.settings-daemon.GsdPowerButtonActionType">
<default>'suspend'</default>
<summary>Power button action</summary>
- <description>The action to take when the system power button is pressed. Virtual machines only honor the 'nothing' action, and will shutdown otherwise. Tablets always suspend, ignoring all the other action options.</description>
+ <description>The action to take when the system power button is pressed. Virtual machines and servers only honor the 'nothing' action, and will shutdown otherwise. Tablets always suspend, ignoring all the other action options.</description>
</key>
</schema>
</schemalist>
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index ac6f7ab4..46bdade6 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -2083,9 +2083,12 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
if (manager->priv->power_button_disabled)
return;
- action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
- /* Always power off VMs, except when power-button-action is "nothing" */
- if (g_strcmp0 (manager->priv->chassis_type, "vm") == 0) {
+ action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
+ /* Always power off VMs and servers, except when power-button-action is "nothing" */
+ if (g_strcmp0 (manager->priv->chassis_type, "vm") == 0 ||
+ g_strcmp0 (manager->priv->chassis_type, "server")) {
+ g_warning ("Virtual machines and servers only honor the 'nothing' power-button-action, and will shutdown otherwise");
+
if (action_type != GSD_POWER_BUTTON_ACTION_NOTHING)
power_action (manager, "PowerOff", !in_lock_screen);
--
2.37.1

File diff suppressed because it is too large Load Diff

View File

@ -1,125 +0,0 @@
From a8115378fd876bfd4c3871428cdc16134ed484b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Tue, 5 Jan 2021 11:11:18 +0100
Subject: [PATCH] media-keys: Mark screen cast as stopped if it was signalled
as such
gnome-shell now sends a 'Stopped' signal if it was stopped without
gsd-media-keys itself being the stopper.
---
plugins/media-keys/gsd-media-keys-manager.c | 52 +++++++++++++++++++--
1 file changed, 49 insertions(+), 3 deletions(-)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 4d251f08..a526d5cf 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -210,6 +210,7 @@ struct GsdMediaKeysManagerPrivate
guint screencast_timeout_id;
gboolean screencast_recording;
GCancellable *screencast_cancellable;
+ guint screencast_stopped_signal_id;
/* Rotation */
guint iio_sensor_watch_id;
@@ -2346,20 +2347,26 @@ do_rfkill_action (GsdMediaKeysManager *manager,
}
static void
-screencast_stop (GsdMediaKeysManager *manager)
+screencast_stopped (GsdMediaKeysManager *manager)
{
if (manager->priv->screencast_timeout_id > 0) {
g_source_remove (manager->priv->screencast_timeout_id);
manager->priv->screencast_timeout_id = 0;
}
+ manager->priv->screencast_recording = FALSE;
+}
+
+static void
+screencast_stop (GsdMediaKeysManager *manager)
+{
+ screencast_stopped (manager);
+
g_dbus_proxy_call (manager->priv->screencast_proxy,
"StopScreencast", NULL,
G_DBUS_CALL_FLAGS_NONE, -1,
manager->priv->screencast_cancellable,
NULL, NULL);
-
- manager->priv->screencast_recording = FALSE;
}
static gboolean
@@ -2835,6 +2842,21 @@ initialize_volume_handler (GsdMediaKeysManager *manager)
gnome_settings_profile_end ("gvc_mixer_control_new");
}
+
+static void
+on_screencast_stopped (GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer data)
+{
+ GsdMediaKeysManager *manager = data;
+
+ screencast_stopped (manager);
+}
+
static void
on_screencast_proxy_ready (GObject *source,
GAsyncResult *result,
@@ -2850,7 +2872,20 @@ on_screencast_proxy_ready (GObject *source,
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_warning ("Failed to create proxy for screencast: %s", error->message);
g_error_free (error);
+ return;
}
+
+ manager->priv->screencast_stopped_signal_id =
+ g_dbus_connection_signal_subscribe (manager->priv->connection,
+ SHELL_DBUS_NAME ".Screencast",
+ SHELL_DBUS_NAME ".Screencast",
+ "Stopped",
+ SHELL_DBUS_PATH "/Screencast",
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ on_screencast_stopped,
+ manager,
+ NULL);
}
static void
@@ -2901,6 +2936,11 @@ shell_presence_changed (GsdMediaKeysManager *manager)
on_screencast_proxy_ready, manager);
g_free (name_owner);
} else {
+ if (manager->priv->screencast_stopped_signal_id)
+ g_dbus_connection_signal_unsubscribe (manager->priv->connection,
+ manager->priv->screencast_stopped_signal_id);
+ manager->priv->screencast_stopped_signal_id = 0;
+
g_ptr_array_set_size (manager->priv->keys, 0);
g_clear_object (&manager->priv->key_grabber);
g_clear_object (&manager->priv->screencast_proxy);
@@ -3091,6 +3131,12 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
priv->reenable_power_button_timer_id = 0;
}
+ if (priv->screencast_stopped_signal_id) {
+ g_dbus_connection_signal_unsubscribe (priv->connection,
+ priv->screencast_stopped_signal_id);
+ priv->screencast_stopped_signal_id = 0;
+ }
+
g_clear_pointer (&manager->priv->ca, ca_context_destroy);
#if HAVE_GUDEV
--
2.27.0

View File

@ -1,34 +0,0 @@
From 77b52a04c9154a7e7b2434f6c70ba6b4fd84c9f1 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Thu, 15 Oct 2020 15:18:35 +0200
Subject: [PATCH] power: Avoid automatic logout in GDM/greeter
In GDM sessions (greeter, initial-setup), it does not make sense to
automatically logout. This can happen if the system wide default is
changed to default to the "logout" action.
Note that we already use the RUNNING_UNDER_GDM environment variable in
the keyboard plugin currently. So doing this is likely sane, even if we
probably want a more elegant strategy to detect whether we are in a
"login" session.
---
plugins/power/gsd-power-manager.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index e103a8a7..b100ff9e 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -872,6 +872,9 @@ static void
gnome_session_logout (GsdPowerManager *manager,
guint logout_mode)
{
+ if (g_getenv("RUNNING_UNDER_GDM"))
+ return;
+
g_dbus_proxy_call (G_DBUS_PROXY (manager->priv->session),
"Logout",
g_variant_new ("(u)", logout_mode),
--
2.26.2

View File

@ -1,53 +0,0 @@
From fbe9b7dba44cb284f649a1e916b2cf3ce8281211 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Tue, 7 May 2019 15:40:20 +0200
Subject: [PATCH] power: Only disable Suspend/Hibernate actions inside VM
While we theoretically only want a different default value inside a VM,
we currently hack this by never doing a suspend action inside VMs.
However, that also breaks automatic logout, which is an unintended side
effect.
Move the check to not install the corresponding timeout (preventing
sleep warnings from being displayed) and also only enforce the VM
specific hack for the Suspend and Hibernate actions.
---
plugins/power/gsd-power-manager.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index f965f6f..dbaa262 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1520,13 +1520,6 @@ idle_set_mode (GsdPowerManager *manager, GsdPowerIdleMode mode)
return;
}
- /* don't do any power saving if we're a VM */
- if (manager->priv->is_virtual_machine) {
- g_debug ("ignoring state transition to %s as virtual machine",
- idle_mode_to_string (mode));
- return;
- }
-
manager->priv->current_idle_mode = mode;
g_debug ("Doing a state transition: %s", idle_mode_to_string (mode));
@@ -1727,6 +1720,14 @@ idle_configure (GsdPowerManager *manager)
clear_idle_watch (manager->priv->idle_monitor,
&manager->priv->idle_sleep_warning_id);
+ /* don't do any power saving if we're a VM */
+ if (manager->priv->is_virtual_machine &&
+ (action_type == GSD_POWER_ACTION_SUSPEND ||
+ action_type == GSD_POWER_ACTION_HIBERNATE)) {
+ g_debug ("Ignoring sleep timeout with suspend action inside VM");
+ timeout_sleep = 0;
+ }
+
if (timeout_sleep != 0) {
g_debug ("setting up sleep callback %is", timeout_sleep);
--
2.31.1

View File

@ -1,59 +0,0 @@
From 0e2c4aec104b65d2f8ea7167269e91c303908a6f Mon Sep 17 00:00:00 2001
From: Felipe Borges <felipeborges@gnome.org>
Date: Wed, 4 Jan 2023 15:30:15 +0100
Subject: [PATCH] power: Respect the "nothing" power-button-action for VMs
There are use-cases when one wants to forcefully make the guest ignore
poweroff requests from the hypervisor.
See https://bugzilla.redhat.com/2062051
See also https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/46
---
...org.gnome.settings-daemon.plugins.power.gschema.xml.in | 2 +-
plugins/media-keys/gsd-media-keys-manager.c | 8 +++++---
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
index 93c704e9..fc61d133 100644
--- a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
+++ b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
@@ -39,7 +39,7 @@
<key name="power-button-action" enum="org.gnome.settings-daemon.GsdPowerButtonActionType">
<default>'suspend'</default>
<summary>Power button action</summary>
- <description>The action to take when the system power button is pressed. This action is hard-coded (and the setting ignored) on virtual machines (power off) and tablets (suspend).</description>
+ <description>The action to take when the system power button is pressed. Virtual machines only honor the 'nothing' action, and will shutdown otherwise. Tablets always suspend, ignoring all the other action options.</description>
</key>
</schema>
</schemalist>
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index a526d5cf..ac6f7ab4 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -2083,9 +2083,12 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
if (manager->priv->power_button_disabled)
return;
- /* Always power off VMs when power off is pressed in the menus */
+ action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
+ /* Always power off VMs, except when power-button-action is "nothing" */
if (g_strcmp0 (manager->priv->chassis_type, "vm") == 0) {
- power_action (manager, "PowerOff", !in_lock_screen);
+ if (action_type != GSD_POWER_BUTTON_ACTION_NOTHING)
+ power_action (manager, "PowerOff", !in_lock_screen);
+
return;
}
@@ -2095,7 +2098,6 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
return;
}
- action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
switch (action_type) {
case GSD_POWER_BUTTON_ACTION_SUSPEND:
action = GSD_POWER_ACTION_SUSPEND;
--
2.37.1

View File

@ -1,168 +0,0 @@
From b0fb67c05e19a1a8715c1045f02657055d9e2578 Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Wed, 22 May 2019 14:56:42 +0200
Subject: [PATCH 1/4] smartcard: Cancel cancellable when stopping
self->cancellable in GsdSmartcardManager is not cancelled
at gsd_smartcard_manager_stop() and hence some callbacks are
still called after unload_nss() which clears SECMODListLock
which is used by SECMOD_GetReadLock() / SECMOD_ReleaseReadLock().
This leads to crashes in NSSRWLock_LockRead_Util() and
NSSRWLock_UnlockRead_Util() probably.
Also check for return value of g_cancellable_connect()
and initialize pointer to PK11SlotInfo.
See https://bugzilla.redhat.com/show_bug.cgi?id=1646359,
https://bugzilla.redhat.com/show_bug.cgi?id=1688791 and
their duplicates for additional info.
---
plugins/smartcard/gsd-smartcard-manager.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index 94ffdd90..09ccecc0 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -157,71 +157,72 @@ unload_nss (GsdSmartcardManager *self)
if (self->priv->nss_context != NULL) {
g_clear_pointer (&self->priv->nss_context,
NSS_ShutdownContext);
g_debug ("NSS database '%s' unloaded", GSD_SMARTCARD_MANAGER_NSS_DB);
} else {
g_debug ("NSS database '%s' already not loaded", GSD_SMARTCARD_MANAGER_NSS_DB);
}
}
typedef struct
{
SECMODModule *driver;
GHashTable *smartcards;
int number_of_consecutive_errors;
} WatchSmartcardsOperation;
static void
on_watch_cancelled (GCancellable *cancellable,
WatchSmartcardsOperation *operation)
{
SECMOD_CancelWait (operation->driver);
}
static gboolean
watch_one_event_from_driver (GsdSmartcardManager *self,
WatchSmartcardsOperation *operation,
GCancellable *cancellable,
GError **error)
{
GsdSmartcardManagerPrivate *priv = self->priv;
- PK11SlotInfo *card, *old_card;
+ PK11SlotInfo *card = NULL, *old_card;
CK_SLOT_ID slot_id;
gulong handler_id;
int old_slot_series = -1, slot_series;
handler_id = g_cancellable_connect (cancellable,
G_CALLBACK (on_watch_cancelled),
operation,
NULL);
- card = SECMOD_WaitForAnyTokenEvent (operation->driver, 0, PR_SecondsToInterval (1));
+ if (handler_id != 0)
+ card = SECMOD_WaitForAnyTokenEvent (operation->driver, 0, PR_SecondsToInterval (1));
g_cancellable_disconnect (cancellable, handler_id);
if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
g_warning ("smartcard event function cancelled");
return FALSE;
}
if (card == NULL) {
int error_code;
error_code = PORT_GetError ();
operation->number_of_consecutive_errors++;
if (operation->number_of_consecutive_errors > 10) {
g_warning ("Got %d consecutive smartcard errors, so giving up.",
operation->number_of_consecutive_errors);
g_set_error (error,
GSD_SMARTCARD_MANAGER_ERROR,
GSD_SMARTCARD_MANAGER_ERROR_WITH_NSS,
"encountered unexpected error while "
"waiting for smartcard events (error %x)",
error_code);
return FALSE;
}
g_warning ("Got potentially spurious smartcard event error: %x.", error_code);
g_usleep (0.5 * G_USEC_PER_SEC);
@@ -764,60 +765,62 @@ gsd_smartcard_manager_idle_cb (GsdSmartcardManager *self)
gnome_settings_profile_end (NULL);
priv->start_idle_id = 0;
return FALSE;
}
gboolean
gsd_smartcard_manager_start (GsdSmartcardManager *self,
GError **error)
{
GsdSmartcardManagerPrivate *priv = self->priv;
gnome_settings_profile_start (NULL);
priv->start_idle_id = g_idle_add ((GSourceFunc) gsd_smartcard_manager_idle_cb, self);
g_source_set_name_by_id (priv->start_idle_id, "[gnome-settings-daemon] gsd_smartcard_manager_idle_cb");
gnome_settings_profile_end (NULL);
return TRUE;
}
void
gsd_smartcard_manager_stop (GsdSmartcardManager *self)
{
GsdSmartcardManagerPrivate *priv = self->priv;
g_debug ("Stopping smartcard manager");
+ g_cancellable_cancel (priv->cancellable);
+
unload_nss (self);
g_clear_object (&priv->settings);
g_clear_object (&priv->cancellable);
g_clear_object (&priv->session_manager);
g_clear_object (&priv->screen_saver);
}
static void
on_screen_locked (GsdScreenSaver *screen_saver,
GAsyncResult *result,
GsdSmartcardManager *self)
{
gboolean is_locked;
GError *error = NULL;
is_locked = gsd_screen_saver_call_lock_finish (screen_saver, result, &error);
if (!is_locked) {
g_warning ("Couldn't lock screen: %s", error->message);
g_error_free (error);
return;
}
}
static void
lock_screen (GsdSmartcardManager *self)
{
GsdSmartcardManagerPrivate *priv = self->priv;
--
2.39.2

View File

@ -1,25 +0,0 @@
From 6e790966c2b6e1db8dd2c145119d3fdd19e0c18f Mon Sep 17 00:00:00 2001
From: Matthias Clasen <mclasen@redhat.com>
Date: Wed, 22 May 2019 16:04:42 -0400
Subject: [PATCH] xsettings: Add an entry for the overlay scrolling setting
This will be used by GTK.
---
plugins/xsettings/gsd-xsettings-manager.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index c3ac7892..4164de40 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -478,6 +478,7 @@ static TranslationEntry translations [] = {
{ "org.gnome.desktop.interface", "icon-theme", "Net/IconThemeName", translate_string_string },
{ "org.gnome.desktop.interface", "cursor-theme", "Gtk/CursorThemeName", translate_string_string },
{ "org.gnome.desktop.interface", "gtk-enable-primary-paste", "Gtk/EnablePrimaryPaste", translate_bool_int },
+ { "org.gnome.desktop.interface", "overlay-scrolling", "Gtk/OverlayScrolling", translate_bool_int },
/* cursor-size is handled via the Xft side as it needs the scaling factor */
{ "org.gnome.desktop.sound", "theme-name", "Net/SoundThemeName", translate_string_string },
--
2.23.0

View File

@ -1,271 +0,0 @@
From ad0fd6c905011b7bb9eac9fa8cb91f58d71e4a29 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 6 Nov 2017 15:49:58 -0500
Subject: [PATCH 2/4] account: reshow the notification when screen unlocks
---
plugins/account/gsd-account-manager.c | 48 ++++++++++++++++++++++++---
1 file changed, 43 insertions(+), 5 deletions(-)
diff --git a/plugins/account/gsd-account-manager.c b/plugins/account/gsd-account-manager.c
index 40b91cb6..cb37f466 100644
--- a/plugins/account/gsd-account-manager.c
+++ b/plugins/account/gsd-account-manager.c
@@ -11,72 +11,75 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*/
#include "config.h"
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <locale.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <cups/cups.h>
#include <cups/ppd.h>
#include <libnotify/notify.h>
#include "gnome-settings-profile.h"
+#include "gnome-settings-bus.h"
#include "gsd-account-manager.h"
#include "org.freedesktop.Accounts.h"
#include "org.freedesktop.Accounts.User.h"
#define GSD_ACCOUNT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_ACCOUNT_MANAGER, GsdAccountManagerPrivate))
struct GsdAccountManagerPrivate
{
GsdAccounts *accounts_proxy;
GsdAccountsUser *accounts_user_proxy;
GCancellable *cancellable;
+ GsdScreenSaver *screensaver_proxy;
+
gint64 expiration_time;
gint64 last_change_time;
gint64 min_days_between_changes;
gint64 max_days_between_changes;
gint64 days_to_warn;
gint64 days_after_expiration_until_lock;
NotifyNotification *notification;
};
static void gsd_account_manager_class_init (GsdAccountManagerClass *klass);
static void gsd_account_manager_init (GsdAccountManager *account_manager);
static void gsd_account_manager_finalize (GObject *object);
G_DEFINE_TYPE (GsdAccountManager, gsd_account_manager, G_TYPE_OBJECT)
static gpointer manager_object = NULL;
static void
on_notification_closed (NotifyNotification *notification,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_clear_object (&manager->priv->notification);
}
static void
hide_notification (GsdAccountManager *manager)
{
@@ -221,77 +224,111 @@ on_got_password_expiration_policy (GsdAccountsUser *accounts_user_proxy,
gint64 days_after_expiration_until_lock;
gnome_settings_profile_start (NULL);
succeeded = gsd_accounts_user_call_get_password_expiration_policy_finish (accounts_user_proxy,
&expiration_time,
&last_change_time,
&min_days_between_changes,
&max_days_between_changes,
&days_to_warn,
&days_after_expiration_until_lock,
res,
&error);
if (!succeeded) {
g_warning ("Failed to get password expiration policy for user: %s", error->message);
goto out;
}
set_policy_number (&manager->priv->expiration_time, expiration_time);
set_policy_number (&manager->priv->last_change_time, last_change_time);
set_policy_number (&manager->priv->min_days_between_changes, min_days_between_changes);
set_policy_number (&manager->priv->max_days_between_changes, max_days_between_changes);
set_policy_number (&manager->priv->days_to_warn, days_to_warn);
set_policy_number (&manager->priv->days_after_expiration_until_lock, days_after_expiration_until_lock);
update_password_notification (manager);
out:
gnome_settings_profile_end (NULL);
}
+static void
+fetch_password_expiration_policy (GsdAccountManager *manager)
+{
+ gsd_accounts_user_call_get_password_expiration_policy (manager->priv->accounts_user_proxy,
+ manager->priv->cancellable,
+ (GAsyncReadyCallback)
+ on_got_password_expiration_policy,
+ manager);
+}
+
+static void
+on_screensaver_signal (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GsdAccountManager *manager = user_data;
+
+ if (g_strcmp0 (signal_name, "ActiveChanged") == 0) {
+ gboolean active;
+
+ g_variant_get (parameters, "(b)", &active);
+
+ if (!active) {
+ fetch_password_expiration_policy (manager);
+ }
+ }
+}
+
static void
on_got_accounts_user_proxy (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_autoptr(GError) error = NULL;
gnome_settings_profile_start (NULL);
manager->priv->accounts_user_proxy = gsd_accounts_user_proxy_new_finish (res, &error);
if (manager->priv->accounts_user_proxy != NULL) {
- gsd_accounts_user_call_get_password_expiration_policy (manager->priv->accounts_user_proxy,
- manager->priv->cancellable,
- (GAsyncReadyCallback)
- on_got_password_expiration_policy,
- manager);
+ fetch_password_expiration_policy (manager);
+
+ manager->priv->screensaver_proxy = gnome_settings_bus_get_screen_saver_proxy ();
+
+ g_signal_connect (manager->priv->screensaver_proxy,
+ "g-signal",
+ G_CALLBACK (on_screensaver_signal),
+ manager);
+
} else {
g_warning ("Failed to get user proxy to accounts service: %s", error->message);
goto out;
}
out:
gnome_settings_profile_end (NULL);
}
static void
on_got_user_object_path (GsdAccounts *accounts_proxy,
GAsyncResult *res,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_autoptr(GError) error = NULL;
gboolean succeeded;
gchar *object_path;
GDBusConnection *connection;
gnome_settings_profile_start (NULL);
succeeded = gsd_accounts_call_find_user_by_id_finish (accounts_proxy,
&object_path,
res,
&error);
if (!succeeded) {
g_warning ("Unable to find current user in accounts service: %s",
error->message);
@@ -343,60 +380,61 @@ gsd_account_manager_start (GsdAccountManager *manager,
g_debug ("Starting accounts manager");
gnome_settings_profile_start (NULL);
manager->priv->cancellable = g_cancellable_new ();
gsd_accounts_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
"org.freedesktop.Accounts",
"/org/freedesktop/Accounts",
manager->priv->cancellable,
(GAsyncReadyCallback)
on_got_accounts_proxy,
manager);
gnome_settings_profile_end (NULL);
return TRUE;
}
void
gsd_account_manager_stop (GsdAccountManager *manager)
{
g_debug ("Stopping accounts manager");
if (manager->priv->cancellable != NULL) {
g_cancellable_cancel (manager->priv->cancellable);
g_clear_object (&manager->priv->cancellable);
}
g_clear_object (&manager->priv->accounts_proxy);
g_clear_object (&manager->priv->accounts_user_proxy);
g_clear_object (&manager->priv->notification);
+ g_clear_object (&manager->priv->screensaver_proxy);
}
static void
gsd_account_manager_class_init (GsdAccountManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gsd_account_manager_finalize;
notify_init ("gnome-settings-daemon");
g_type_class_add_private (klass, sizeof (GsdAccountManagerPrivate));
}
static void
gsd_account_manager_init (GsdAccountManager *manager)
{
manager->priv = GSD_ACCOUNT_MANAGER_GET_PRIVATE (manager);
}
static void
gsd_account_manager_finalize (GObject *object)
{
GsdAccountManager *manager;
g_return_if_fail (object != NULL);
g_return_if_fail (GSD_IS_ACCOUNT_MANAGER (object));
manager = GSD_ACCOUNT_MANAGER (object);
--
2.21.0

View File

@ -1,49 +0,0 @@
From f2cd5fb30892e3868732fca1d38fc15fdb73ec18 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Tue, 27 Oct 2020 10:20:34 +0100
Subject: [PATCH 2/2] power: Never register sleep timeout for logout in GDM
We already suppress logout actions in GDM (10aa1714b05b, power: Avoid
automatic logout in GDM/greeter). However, while this prevents the
action, we may still warn.
Change it so that the corresponding timeouts will never be registered.
Leave the guard in gnome_session_logout but add a warning as we should
never be hitting that code path.
---
plugins/power/gsd-power-manager.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 9f2e858e..ed855b6b 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -872,8 +872,10 @@ static void
gnome_session_logout (GsdPowerManager *manager,
guint logout_mode)
{
- if (g_getenv("RUNNING_UNDER_GDM"))
+ if (g_getenv ("RUNNING_UNDER_GDM")) {
+ g_warning ("Prevented logout from GDM session! This indicates an issue in gsd-power.");
return;
+ }
g_dbus_proxy_call (G_DBUS_PROXY (manager->priv->session),
"Logout",
@@ -1773,6 +1775,13 @@ idle_configure (GsdPowerManager *manager)
timeout_sleep = 0;
}
+ /* don't do any automatic logout if we are in GDM */
+ if (g_getenv ("RUNNING_UNDER_GDM") &&
+ (action_type == GSD_POWER_ACTION_LOGOUT)) {
+ g_debug ("Ignoring sleep timeout with logout action inside GDM");
+ timeout_sleep = 0;
+ }
+
if (timeout_sleep != 0) {
g_debug ("setting up sleep callback %is", timeout_sleep);
--
2.26.2

View File

@ -1,124 +0,0 @@
From 65d854c690cad1ccef6544a8c571bbb723ff9be0 Mon Sep 17 00:00:00 2001
From: Jack Massey <jacknmassey@gmail.com>
Date: Tue, 17 Sep 2019 09:39:56 +1000
Subject: [PATCH 2/4] smartcard: Change manager to non-blocking
NSS's SECMOND_WaitForAnyTokenEvent uses the pkcs11 C_WaitForSlotEvent,
and by default NSS will use p11-kit, at least on Fedora and Ubuntu.
p11-kit doesn't support the blocking call for C_WaitForSlotEvent so NSS
falls back to a polling simulation of the C_WaitForSlotEvent. This
causes the LED on the smartcard to blink constantly as the card is
polled.
If we instead use the non-blocking version of the call, which p11-kit
supports, NSS doesn't poll the card. The downside of this is that the
application will wake up every second to check for events even if there
hasn't been any, plus the fact that there could be up to a second delay
between the event and it being picked up by gsd-smartcard. However, NSS
is polling anyway so this is consistent with existing behaviour.
The reason a one second delay was chosen was because this is what was
currently used in NSS. nss/lib/dev/devslot.c:17
/* measured in seconds */
#define NSSSLOT_TOKEN_DELAY_TIME 1
---
plugins/smartcard/gsd-smartcard-manager.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index 09ccecc0..77650643 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -167,75 +167,86 @@ typedef struct
{
SECMODModule *driver;
GHashTable *smartcards;
int number_of_consecutive_errors;
} WatchSmartcardsOperation;
static void
on_watch_cancelled (GCancellable *cancellable,
WatchSmartcardsOperation *operation)
{
SECMOD_CancelWait (operation->driver);
}
static gboolean
watch_one_event_from_driver (GsdSmartcardManager *self,
WatchSmartcardsOperation *operation,
GCancellable *cancellable,
GError **error)
{
GsdSmartcardManagerPrivate *priv = self->priv;
PK11SlotInfo *card = NULL, *old_card;
CK_SLOT_ID slot_id;
gulong handler_id;
int old_slot_series = -1, slot_series;
handler_id = g_cancellable_connect (cancellable,
G_CALLBACK (on_watch_cancelled),
operation,
NULL);
- if (handler_id != 0)
- card = SECMOD_WaitForAnyTokenEvent (operation->driver, 0, PR_SecondsToInterval (1));
+ if (handler_id != 0) {
+ /* Use the non-blocking version of the call as p11-kit, which
+ * is used on both Fedora and Ubuntu, doesn't support the
+ * blocking version of the call.
+ */
+ card = SECMOD_WaitForAnyTokenEvent (operation->driver, CKF_DONT_BLOCK, PR_SecondsToInterval (1));
+ }
g_cancellable_disconnect (cancellable, handler_id);
if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
g_warning ("smartcard event function cancelled");
return FALSE;
}
if (card == NULL) {
int error_code;
error_code = PORT_GetError ();
+ if (error_code == SEC_ERROR_NO_EVENT) {
+ g_usleep (1 * G_USEC_PER_SEC);
+
+ return TRUE;
+ }
+
operation->number_of_consecutive_errors++;
if (operation->number_of_consecutive_errors > 10) {
g_warning ("Got %d consecutive smartcard errors, so giving up.",
operation->number_of_consecutive_errors);
g_set_error (error,
GSD_SMARTCARD_MANAGER_ERROR,
GSD_SMARTCARD_MANAGER_ERROR_WITH_NSS,
"encountered unexpected error while "
"waiting for smartcard events (error %x)",
error_code);
return FALSE;
}
g_warning ("Got potentially spurious smartcard event error: %x.", error_code);
g_usleep (0.5 * G_USEC_PER_SEC);
return TRUE;
}
operation->number_of_consecutive_errors = 0;
slot_id = PK11_GetSlotID (card);
slot_series = PK11_GetSlotSeries (card);
old_card = g_hash_table_lookup (operation->smartcards, GINT_TO_POINTER ((int) slot_id));
/* If there is a different card in the slot now than
* there was before, then we need to emit a removed signal
* for the old card
*/
--
2.39.2

View File

@ -1,451 +0,0 @@
From 31844edad70876e26ab995179bc67fb3b23a1793 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 6 Nov 2017 16:39:55 -0500
Subject: [PATCH 3/4] account: display nag screen periodically
This is configurable via a gsettings key.
---
data/meson.build | 1 +
...ings-daemon.plugins.account.gschema.xml.in | 9 +++
plugins/account/gsd-account-manager.c | 55 +++++++++++++++++++
3 files changed, 65 insertions(+)
create mode 100644 data/org.gnome.settings-daemon.plugins.account.gschema.xml.in
diff --git a/data/meson.build b/data/meson.build
index e93ba641..5a2cd5a7 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -1,36 +1,37 @@
data_inc = include_directories('.')
schemas = [
'org.gnome.settings-daemon.peripherals.gschema.xml',
'org.gnome.settings-daemon.peripherals.wacom.gschema.xml',
'org.gnome.settings-daemon.plugins.gschema.xml',
+ 'org.gnome.settings-daemon.plugins.account.gschema.xml',
'org.gnome.settings-daemon.plugins.color.gschema.xml',
'org.gnome.settings-daemon.plugins.housekeeping.gschema.xml',
'org.gnome.settings-daemon.plugins.media-keys.gschema.xml',
'org.gnome.settings-daemon.plugins.power.gschema.xml',
'org.gnome.settings-daemon.plugins.sharing.gschema.xml',
'org.gnome.settings-daemon.plugins.xsettings.gschema.xml'
]
schema_conf = configuration_data()
schema_conf.set('GETTEXT_PACKAGE', meson.project_name())
schemas_xml = []
foreach schema: schemas
schemas_xml += [configure_file(
input: schema + '.in',
output: schema,
configuration: schema_conf,
install: true,
install_dir: gsd_schemadir
)]
endforeach
enums_header = files('gsd-enums.h')
mkenums = gnome.mkenums(
'org.gnome.settings-daemon.enums.xml',
sources: enums_header,
comments: '<!-- @comment@ -->',
fhead: '<schemalist>',
vhead: ' <@type@ id="org.gnome.settings-daemon.@EnumName@">',
diff --git a/data/org.gnome.settings-daemon.plugins.account.gschema.xml.in b/data/org.gnome.settings-daemon.plugins.account.gschema.xml.in
new file mode 100644
index 00000000..f3d59e81
--- /dev/null
+++ b/data/org.gnome.settings-daemon.plugins.account.gschema.xml.in
@@ -0,0 +1,9 @@
+<schemalist>
+ <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.gnome.settings-daemon.plugins.account" path="/org/gnome/settings-daemon/plugins/account/">
+ <key name="notify-period" type="i">
+ <default>1440</default>
+ <summary>Time before repeated warning about account password expiration</summary>
+ <description>If a user's account is expiring, a notification will get displayed periodically after the specified number of minutes</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/plugins/account/gsd-account-manager.c b/plugins/account/gsd-account-manager.c
index cb37f466..ff054edd 100644
--- a/plugins/account/gsd-account-manager.c
+++ b/plugins/account/gsd-account-manager.c
@@ -20,126 +20,135 @@
#include "config.h"
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <locale.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <cups/cups.h>
#include <cups/ppd.h>
#include <libnotify/notify.h>
#include "gnome-settings-profile.h"
#include "gnome-settings-bus.h"
#include "gsd-account-manager.h"
#include "org.freedesktop.Accounts.h"
#include "org.freedesktop.Accounts.User.h"
#define GSD_ACCOUNT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_ACCOUNT_MANAGER, GsdAccountManagerPrivate))
struct GsdAccountManagerPrivate
{
+ GSettings *settings;
+
GsdAccounts *accounts_proxy;
GsdAccountsUser *accounts_user_proxy;
GCancellable *cancellable;
GsdScreenSaver *screensaver_proxy;
gint64 expiration_time;
gint64 last_change_time;
gint64 min_days_between_changes;
gint64 max_days_between_changes;
gint64 days_to_warn;
gint64 days_after_expiration_until_lock;
NotifyNotification *notification;
+
+ gint64 last_notify_time;
+ int notify_period;
+ guint notify_period_timeout_id;
};
static void gsd_account_manager_class_init (GsdAccountManagerClass *klass);
static void gsd_account_manager_init (GsdAccountManager *account_manager);
static void gsd_account_manager_finalize (GObject *object);
+static void fetch_password_expiration_policy (GsdAccountManager *manager);
G_DEFINE_TYPE (GsdAccountManager, gsd_account_manager, G_TYPE_OBJECT)
static gpointer manager_object = NULL;
static void
on_notification_closed (NotifyNotification *notification,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_clear_object (&manager->priv->notification);
}
static void
hide_notification (GsdAccountManager *manager)
{
if (manager->priv->notification == NULL)
return;
notify_notification_close (manager->priv->notification, NULL);
g_clear_object (&manager->priv->notification);
}
static void
show_notification (GsdAccountManager *manager,
const char *primary_text,
const char *secondary_text)
{
g_assert (manager->priv->notification == NULL);
manager->priv->notification = notify_notification_new (primary_text,
secondary_text,
"avatar-default-symbolic");
notify_notification_set_app_name (manager->priv->notification, _("User Account"));
notify_notification_set_hint (manager->priv->notification,
"resident",
g_variant_new_boolean (TRUE));
notify_notification_set_timeout (manager->priv->notification,
NOTIFY_EXPIRES_NEVER);
g_signal_connect (manager->priv->notification,
"closed",
G_CALLBACK (on_notification_closed),
manager);
notify_notification_show (manager->priv->notification, NULL);
+
+ manager->priv->last_notify_time = g_get_monotonic_time ();
}
static void
update_password_notification (GsdAccountManager *manager)
{
gint64 days_since_epoch;
gint64 days_until_expiration = -1;
gint64 days_since_last_change = -1;
gint64 days_left = -1;
g_autofree char *primary_text = NULL;
g_autofree char *secondary_text = NULL;
gboolean password_already_expired = FALSE;
hide_notification (manager);
days_since_epoch = g_get_real_time () / G_USEC_PER_SEC / 60 / 60 / 24;
if (manager->priv->expiration_time > 0) {
days_until_expiration = manager->priv->expiration_time - days_since_epoch;
if (days_until_expiration <= 0) {
password_already_expired = TRUE;
goto out;
}
}
if (manager->priv->last_change_time == 0) {
password_already_expired = TRUE;
goto out;
}
@@ -181,99 +190,127 @@ out:
primary_text = g_strdup_printf (_("Password Expired"));
secondary_text = g_strdup_printf (_("Your password is expired. Please update it."));
} else if (days_left >= 0) {
primary_text = g_strdup_printf (_("Password Expiring Soon"));
if (days_left == 0)
secondary_text = g_strdup_printf (_("Your password is expiring today."));
else if (days_left == 1)
secondary_text = g_strdup_printf (_("Your password is expiring in a day."));
else
secondary_text = g_strdup_printf (_("Your password is expiring in %ld days."),
days_left);
}
if (primary_text != NULL && secondary_text != NULL)
show_notification (manager,
primary_text,
secondary_text);
}
static gboolean
set_policy_number (gint64 *destination,
gint64 source)
{
if (*destination == source)
return FALSE;
*destination = source;
return TRUE;
}
+static gboolean
+on_notify_period_elapsed (GsdAccountManager *manager)
+{
+ manager->priv->notify_period_timeout_id = 0;
+ fetch_password_expiration_policy (manager);
+ return G_SOURCE_REMOVE;
+}
+
+static void
+queue_periodic_timeout (GsdAccountManager *manager)
+{
+ if (manager->priv->notify_period_timeout_id != 0) {
+ g_source_remove (manager->priv->notify_period_timeout_id);
+ manager->priv->notify_period_timeout_id = 0;
+ }
+
+ if (manager->priv->notify_period > 0) {
+ gint64 already_elapsed_time;
+
+ already_elapsed_time = MAX (0, (g_get_monotonic_time () - manager->priv->last_notify_time) / G_USEC_PER_SEC);
+
+ manager->priv->notify_period_timeout_id = g_timeout_add_seconds (MAX (0, manager->priv->notify_period * 60 - already_elapsed_time),
+ (GSourceFunc) on_notify_period_elapsed,
+ manager);
+ }
+}
+
static void
on_got_password_expiration_policy (GsdAccountsUser *accounts_user_proxy,
GAsyncResult *res,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_autoptr(GError) error = NULL;
gboolean succeeded;
gint64 expiration_time;
gint64 last_change_time;
gint64 min_days_between_changes;
gint64 max_days_between_changes;
gint64 days_to_warn;
gint64 days_after_expiration_until_lock;
gnome_settings_profile_start (NULL);
succeeded = gsd_accounts_user_call_get_password_expiration_policy_finish (accounts_user_proxy,
&expiration_time,
&last_change_time,
&min_days_between_changes,
&max_days_between_changes,
&days_to_warn,
&days_after_expiration_until_lock,
res,
&error);
if (!succeeded) {
g_warning ("Failed to get password expiration policy for user: %s", error->message);
goto out;
}
set_policy_number (&manager->priv->expiration_time, expiration_time);
set_policy_number (&manager->priv->last_change_time, last_change_time);
set_policy_number (&manager->priv->min_days_between_changes, min_days_between_changes);
set_policy_number (&manager->priv->max_days_between_changes, max_days_between_changes);
set_policy_number (&manager->priv->days_to_warn, days_to_warn);
set_policy_number (&manager->priv->days_after_expiration_until_lock, days_after_expiration_until_lock);
update_password_notification (manager);
+ queue_periodic_timeout (manager);
out:
gnome_settings_profile_end (NULL);
}
static void
fetch_password_expiration_policy (GsdAccountManager *manager)
{
gsd_accounts_user_call_get_password_expiration_policy (manager->priv->accounts_user_proxy,
manager->priv->cancellable,
(GAsyncReadyCallback)
on_got_password_expiration_policy,
manager);
}
static void
on_screensaver_signal (GDBusProxy *proxy,
const gchar *sender_name,
const gchar *signal_name,
GVariant *parameters,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
if (g_strcmp0 (signal_name, "ActiveChanged") == 0) {
gboolean active;
g_variant_get (parameters, "(b)", &active);
if (!active) {
fetch_password_expiration_policy (manager);
@@ -346,91 +383,109 @@ on_got_user_object_path (GsdAccounts *accounts_proxy,
manager);
out:
gnome_settings_profile_end (NULL);
}
static void
on_got_accounts_proxy (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_autoptr(GError) error = NULL;
gnome_settings_profile_start (NULL);
manager->priv->accounts_proxy = gsd_accounts_proxy_new_for_bus_finish (res, &error);
if (manager->priv->accounts_proxy != NULL) {
gsd_accounts_call_find_user_by_id (manager->priv->accounts_proxy,
getuid (),
manager->priv->cancellable,
(GAsyncReadyCallback)
on_got_user_object_path,
manager);
} else {
g_warning ("Failed to get proxy to accounts service: %s", error->message);
}
gnome_settings_profile_end (NULL);
}
+static void
+on_notify_period_changed (GsdAccountManager *manager)
+{
+ manager->priv->notify_period = g_settings_get_int (manager->priv->settings, "notify-period");
+
+ queue_periodic_timeout (manager);
+}
+
gboolean
gsd_account_manager_start (GsdAccountManager *manager,
GError **error)
{
g_debug ("Starting accounts manager");
gnome_settings_profile_start (NULL);
manager->priv->cancellable = g_cancellable_new ();
+ manager->priv->settings = g_settings_new ("org.gnome.settings-daemon.plugins.account");
+
+ manager->priv->notify_period = g_settings_get_int (manager->priv->settings, "notify-period");
+ g_signal_connect_object (G_OBJECT (manager->priv->settings),
+ "changed::notify-period",
+ G_CALLBACK (on_notify_period_changed),
+ manager,
+ G_CONNECT_SWAPPED);
+
gsd_accounts_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
"org.freedesktop.Accounts",
"/org/freedesktop/Accounts",
manager->priv->cancellable,
(GAsyncReadyCallback)
on_got_accounts_proxy,
manager);
gnome_settings_profile_end (NULL);
return TRUE;
}
void
gsd_account_manager_stop (GsdAccountManager *manager)
{
g_debug ("Stopping accounts manager");
if (manager->priv->cancellable != NULL) {
g_cancellable_cancel (manager->priv->cancellable);
g_clear_object (&manager->priv->cancellable);
}
+ g_clear_object (&manager->priv->settings);
g_clear_object (&manager->priv->accounts_proxy);
g_clear_object (&manager->priv->accounts_user_proxy);
g_clear_object (&manager->priv->notification);
g_clear_object (&manager->priv->screensaver_proxy);
}
static void
gsd_account_manager_class_init (GsdAccountManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gsd_account_manager_finalize;
notify_init ("gnome-settings-daemon");
g_type_class_add_private (klass, sizeof (GsdAccountManagerPrivate));
}
static void
gsd_account_manager_init (GsdAccountManager *manager)
{
manager->priv = GSD_ACCOUNT_MANAGER_GET_PRIVATE (manager);
}
static void
gsd_account_manager_finalize (GObject *object)
{
GsdAccountManager *manager;
g_return_if_fail (object != NULL);
--
2.21.0

View File

@ -1,83 +0,0 @@
From 5da276e4559d5c3b072a9870db6d78a1fe788339 Mon Sep 17 00:00:00 2001
From: Jack Massey <jacknmassey@gmail.com>
Date: Tue, 17 Sep 2019 09:39:59 +1000
Subject: [PATCH 3/4] smartcard: Change timeout on spurious event error
The 0.5s timeout was probably based on the fact that the
SECMOD_WaitForAnyTokenEvent call was blocking, it doesn't make sense to
have the timeout on the error case less than the timeout on the normal
case.
---
plugins/smartcard/gsd-smartcard-manager.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index 77650643..a29df3e0 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -209,61 +209,61 @@ watch_one_event_from_driver (GsdSmartcardManager *self,
return FALSE;
}
if (card == NULL) {
int error_code;
error_code = PORT_GetError ();
if (error_code == SEC_ERROR_NO_EVENT) {
g_usleep (1 * G_USEC_PER_SEC);
return TRUE;
}
operation->number_of_consecutive_errors++;
if (operation->number_of_consecutive_errors > 10) {
g_warning ("Got %d consecutive smartcard errors, so giving up.",
operation->number_of_consecutive_errors);
g_set_error (error,
GSD_SMARTCARD_MANAGER_ERROR,
GSD_SMARTCARD_MANAGER_ERROR_WITH_NSS,
"encountered unexpected error while "
"waiting for smartcard events (error %x)",
error_code);
return FALSE;
}
g_warning ("Got potentially spurious smartcard event error: %x.", error_code);
- g_usleep (0.5 * G_USEC_PER_SEC);
+ g_usleep (1 * G_USEC_PER_SEC);
return TRUE;
}
operation->number_of_consecutive_errors = 0;
slot_id = PK11_GetSlotID (card);
slot_series = PK11_GetSlotSeries (card);
old_card = g_hash_table_lookup (operation->smartcards, GINT_TO_POINTER ((int) slot_id));
/* If there is a different card in the slot now than
* there was before, then we need to emit a removed signal
* for the old card
*/
if (old_card != NULL) {
old_slot_series = PK11_GetSlotSeries (old_card);
if (old_slot_series != slot_series) {
/* Card registered with slot previously is
* different than this card, so update its
* exported state to track the implicit missed
* removal
*/
gsd_smartcard_service_sync_token (priv->service, old_card, cancellable);
}
g_hash_table_remove (operation->smartcards, GINT_TO_POINTER ((int) slot_id));
}
if (PK11_IsPresent (card)) {
g_debug ("Detected smartcard insertion event in slot %d", (int) slot_id);
--
2.39.2

View File

@ -1,110 +0,0 @@
From ff98c03c88e53041dcc861de3b3a3351d55297fe Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 9 Nov 2018 10:39:11 -0500
Subject: [PATCH 4/4] account: don't poll more frequently than notification
period
At the moment, if an account has no reason to receive a notification,
the account plugin ends up polling continuously, desperately,
and unsuccessfully trying to find a reason to notify. That leads
to unnecessary CPU utilization.
The reason is an apparent think-o in the code. The code tracks
the last time a notification was shown, so it knows when to show
the next notification later, even if the notification period, or
account policy is updated by the admin in the interim.
The problem is that it's wrong to look at the last notification
time if there's no reason to show a notification. In that case
the wakeup is merely to poll updates on the account policy.
This commit addresses the problem by only looking at the previous
notification time, if it was within the current notification period.
---
plugins/account/gsd-account-manager.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/plugins/account/gsd-account-manager.c b/plugins/account/gsd-account-manager.c
index ff054edd..b48c0fe8 100644
--- a/plugins/account/gsd-account-manager.c
+++ b/plugins/account/gsd-account-manager.c
@@ -207,65 +207,73 @@ out:
}
static gboolean
set_policy_number (gint64 *destination,
gint64 source)
{
if (*destination == source)
return FALSE;
*destination = source;
return TRUE;
}
static gboolean
on_notify_period_elapsed (GsdAccountManager *manager)
{
manager->priv->notify_period_timeout_id = 0;
fetch_password_expiration_policy (manager);
return G_SOURCE_REMOVE;
}
static void
queue_periodic_timeout (GsdAccountManager *manager)
{
if (manager->priv->notify_period_timeout_id != 0) {
g_source_remove (manager->priv->notify_period_timeout_id);
manager->priv->notify_period_timeout_id = 0;
}
if (manager->priv->notify_period > 0) {
- gint64 already_elapsed_time;
+ gint64 seconds_since_last_notification;
+ guint seconds_between_notifications;
+ guint seconds_until_next_notification;
- already_elapsed_time = MAX (0, (g_get_monotonic_time () - manager->priv->last_notify_time) / G_USEC_PER_SEC);
+ seconds_since_last_notification = MAX (0, (g_get_monotonic_time () - manager->priv->last_notify_time) / G_USEC_PER_SEC);
+ seconds_between_notifications = manager->priv->notify_period * 60;
- manager->priv->notify_period_timeout_id = g_timeout_add_seconds (MAX (0, manager->priv->notify_period * 60 - already_elapsed_time),
+ if (seconds_since_last_notification > seconds_between_notifications)
+ seconds_until_next_notification = seconds_between_notifications;
+ else
+ seconds_until_next_notification = seconds_between_notifications - seconds_since_last_notification;
+
+ manager->priv->notify_period_timeout_id = g_timeout_add_seconds (seconds_until_next_notification,
(GSourceFunc) on_notify_period_elapsed,
manager);
}
}
static void
on_got_password_expiration_policy (GsdAccountsUser *accounts_user_proxy,
GAsyncResult *res,
gpointer user_data)
{
GsdAccountManager *manager = user_data;
g_autoptr(GError) error = NULL;
gboolean succeeded;
gint64 expiration_time;
gint64 last_change_time;
gint64 min_days_between_changes;
gint64 max_days_between_changes;
gint64 days_to_warn;
gint64 days_after_expiration_until_lock;
gnome_settings_profile_start (NULL);
succeeded = gsd_accounts_user_call_get_password_expiration_policy_finish (accounts_user_proxy,
&expiration_time,
&last_change_time,
&min_days_between_changes,
&max_days_between_changes,
&days_to_warn,
&days_after_expiration_until_lock,
res,
&error);
--
2.21.0

View File

@ -1,94 +0,0 @@
From 2b0b62d8b04a2c3d6e1d4fccacfd29dd3da2d04c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20H=C3=A4rdeman?= <david@hardeman.nu>
Date: Wed, 12 Apr 2023 22:23:51 +0200
Subject: [PATCH 4/4] smartcard: check for the addition of new smartcard
readers
gsd-smartcard currently checks for the insertion/removal of smartcards
in reader devices which where present at the time gsd-smartcard was
started, but does not account for new smartcard readers appearing
after gsd-smartcard was started.
This patch adds support for checking for the addition of new slots
(i.e. smartcard readers), which is necessary to support devices
like the Yubikey (a "reader" and a smartcard) which may be inserted
after gsd-smartcard was started.
---
plugins/smartcard/gsd-smartcard-manager.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index a29df3e0..fbb9b260 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -188,61 +188,66 @@ watch_one_event_from_driver (GsdSmartcardManager *self,
CK_SLOT_ID slot_id;
gulong handler_id;
int old_slot_series = -1, slot_series;
handler_id = g_cancellable_connect (cancellable,
G_CALLBACK (on_watch_cancelled),
operation,
NULL);
if (handler_id != 0) {
/* Use the non-blocking version of the call as p11-kit, which
* is used on both Fedora and Ubuntu, doesn't support the
* blocking version of the call.
*/
card = SECMOD_WaitForAnyTokenEvent (operation->driver, CKF_DONT_BLOCK, PR_SecondsToInterval (1));
}
g_cancellable_disconnect (cancellable, handler_id);
if (g_cancellable_set_error_if_cancelled (cancellable, error)) {
g_warning ("smartcard event function cancelled");
return FALSE;
}
if (card == NULL) {
int error_code;
error_code = PORT_GetError ();
if (error_code == SEC_ERROR_NO_EVENT) {
- g_usleep (1 * G_USEC_PER_SEC);
+ int old_slot_count = operation->driver->slotCount;
+ SECMOD_UpdateSlotList (operation->driver);
+ if (operation->driver->slotCount != old_slot_count)
+ g_debug ("Slot count change %i -> %i", old_slot_count, operation->driver->slotCount);
+ else
+ g_usleep (1 * G_USEC_PER_SEC);
return TRUE;
}
operation->number_of_consecutive_errors++;
if (operation->number_of_consecutive_errors > 10) {
g_warning ("Got %d consecutive smartcard errors, so giving up.",
operation->number_of_consecutive_errors);
g_set_error (error,
GSD_SMARTCARD_MANAGER_ERROR,
GSD_SMARTCARD_MANAGER_ERROR_WITH_NSS,
"encountered unexpected error while "
"waiting for smartcard events (error %x)",
error_code);
return FALSE;
}
g_warning ("Got potentially spurious smartcard event error: %x.", error_code);
g_usleep (1 * G_USEC_PER_SEC);
return TRUE;
}
operation->number_of_consecutive_errors = 0;
slot_id = PK11_GetSlotID (card);
slot_series = PK11_GetSlotSeries (card);
old_card = g_hash_table_lookup (operation->smartcards, GINT_TO_POINTER ((int) slot_id));
--
2.39.2

File diff suppressed because it is too large Load Diff

View File

@ -1,252 +0,0 @@
From 197eab664af1cbd6bc507c81cf5775c97f626df2 Mon Sep 17 00:00:00 2001
From: Christian Hergert <chergert@redhat.com>
Date: Fri, 21 Nov 2025 12:49:25 -0800
Subject: [PATCH 1/4] plugins/housekeeping: only make has_trash() call once
We don't need to call this twice, it is only called in these two places
so just pass in the value from the previous call.
(cherry picked from commit a66871d63abc68fc4f9a9880a33d4cc35b665877)
---
plugins/housekeeping/gsd-disk-space.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index bd3437e5..0628425e 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -556,11 +556,11 @@ on_notification_closed (NotifyNotification *n)
static void
ldsm_notify (const char *summary,
const char *body,
- const char *mount_path)
+ const char *mount_path,
+ gboolean has_trash)
{
gchar *program;
gboolean has_disk_analyzer;
- gboolean has_trash;
/* Don't show a notice if one is already displayed */
if (notification != NULL)
@@ -591,8 +591,6 @@ ldsm_notify (const char *summary,
g_free);
}
- has_trash = ldsm_mount_has_trash (mount_path);
-
if (has_trash) {
notify_notification_add_action (notification,
"empty-trash",
@@ -656,7 +654,7 @@ ldsm_notify_for_mount (LdsmMountInfo *mount,
}
}
- ldsm_notify (summary, body, path);
+ ldsm_notify (summary, body, path, has_trash);
g_free (free_space_str);
g_free (summary);
--
2.34.1
From 4a0ebf20b0cbc117210f8ec2692d17a47e9b93af Mon Sep 17 00:00:00 2001
From: Christian Hergert <chergert@redhat.com>
Date: Fri, 21 Nov 2025 12:53:56 -0800
Subject: [PATCH 2/4] plugins/housekeeping: track changes to ignored mounts in
glib
This mirrors the changes in GNOME/glib!4916 which adds the following
system mounts:
* binfmt_misc
* bpf
* efivarfs
* tracefs
(cherry picked from commit cfe8049a6de68a988c5fd6cefa837d11807f4846)
---
plugins/housekeeping/gsd-disk-space-helper.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/plugins/housekeeping/gsd-disk-space-helper.c b/plugins/housekeeping/gsd-disk-space-helper.c
index 56e054ca..36f4b3b1 100644
--- a/plugins/housekeeping/gsd-disk-space-helper.c
+++ b/plugins/housekeeping/gsd-disk-space-helper.c
@@ -50,6 +50,8 @@ gsd_should_ignore_unix_mount (GUnixMountEntry *mount)
"auto",
"autofs",
"autofs4",
+ "binfmt_misc",
+ "bpf",
"cgroup",
"configfs",
"cxfs",
@@ -58,6 +60,7 @@ gsd_should_ignore_unix_mount (GUnixMountEntry *mount)
"devpts",
"devtmpfs",
"ecryptfs",
+ "efivarfs",
"fdescfs",
"fusectl",
"gfs",
@@ -86,6 +89,7 @@ gsd_should_ignore_unix_mount (GUnixMountEntry *mount)
"selinuxfs",
"sysfs",
"tmpfs",
+ "tracefs",
"usbfs",
"zfs",
NULL
--
2.34.1
From 90318eec1e60665d39b6c5841cb1a01b11e96363 Mon Sep 17 00:00:00 2001
From: Christian Hergert <chergert@redhat.com>
Date: Fri, 21 Nov 2025 13:40:53 -0800
Subject: [PATCH 3/4] plugins/housekeeping: check user-data-dir fs::id once
We don't, as a platform, really support changing out your entire file
system out from underneath a running session. So only check the
file-system identifier for the user trash directory once at startup.
(cherry picked from commit 4cc8891b43ffacd378155b6d838dcd279e85144f)
---
plugins/housekeeping/gsd-disk-space.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index 0628425e..1be45465 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -73,6 +73,7 @@ static GSList *ignore_paths = NULL;
static GSettings *settings = NULL;
static GSettings *privacy_settings = NULL;
static NotifyNotification *notification = NULL;
+static char *user_data_attr_id_fs;
static guint64 *time_read;
@@ -106,17 +107,12 @@ ldsm_get_fs_id_for_path (const gchar *path)
static gboolean
ldsm_mount_has_trash (const char *path)
{
- const gchar *user_data_dir;
- gchar *user_data_attr_id_fs;
gchar *path_attr_id_fs;
gboolean mount_uses_user_trash = FALSE;
gchar *trash_files_dir;
gboolean has_trash = FALSE;
GDir *dir;
- user_data_dir = g_get_user_data_dir ();
- user_data_attr_id_fs = ldsm_get_fs_id_for_path (user_data_dir);
-
path_attr_id_fs = ldsm_get_fs_id_for_path (path);
if (g_strcmp0 (user_data_attr_id_fs, path_attr_id_fs) == 0) {
@@ -977,6 +973,8 @@ gsd_ldsm_setup (gboolean check_now)
g_free,
ldsm_free_mount_info);
+ user_data_attr_id_fs = ldsm_get_fs_id_for_path (g_get_user_data_dir ());
+
settings = g_settings_new (SETTINGS_HOUSEKEEPING_DIR);
privacy_settings = g_settings_new (PRIVACY_SETTINGS);
gsd_ldsm_get_config ();
--
2.34.1
From bb697b6810715c55d4027946a55e5aee010694b8 Mon Sep 17 00:00:00 2001
From: Felipe Borges <felipeborges@gnome.org>
Date: Fri, 9 Jan 2026 11:05:14 +0100
Subject: [PATCH 4/4] housekeeping: Debounce mount checks in Low Disk Space
monitoring
When an environment triggers too many mount events, the Low Disk Space
monitor will parse the mount table with g_unix_mounts_get() too many times,
causing gsd-housekeeping to consume excessive CPU.
These changes prevent mount change events from triggering too many expensive
mount checks by adding a rate-limiting timeout with random delay (50-500ms)
and ensuring only one pending check is queued at a time.
https://issues.redhat.com/browse/RHEL-127715
---
plugins/housekeeping/gsd-disk-space.c | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index 1be45465..541fbf5d 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -41,6 +41,8 @@
#define CHECK_EVERY_X_SECONDS 60
+#define UPDATE_TIMEOUT 100 /* ms */
+
#define DISK_SPACE_ANALYZER "baobab"
#define SETTINGS_HOUSEKEEPING_DIR "org.gnome.settings-daemon.plugins.housekeeping"
@@ -64,6 +66,7 @@ typedef struct
static GHashTable *ldsm_notified_hash = NULL;
static unsigned int ldsm_timeout_id = 0;
+static guint ldsm_update_id = 0;
static GUnixMountMonitor *ldsm_monitor = NULL;
static double free_percent_notify = 0.05;
static double free_percent_notify_again = 0.01;
@@ -887,12 +890,13 @@ ldsm_is_hash_item_not_in_mounts (gpointer key,
return TRUE;
}
-static void
-ldsm_mounts_changed (GObject *monitor,
- gpointer data)
+static gboolean
+ldsm_mounts_changed_timeout (gpointer user_data)
{
GList *mounts;
+ ldsm_update_id = 0;
+
/* remove the saved data for mounts that got removed */
mounts = g_unix_mounts_get (time_read);
g_hash_table_foreach_remove (ldsm_notified_hash,
@@ -908,6 +912,20 @@ ldsm_mounts_changed (GObject *monitor,
ldsm_timeout_id = g_timeout_add_seconds (CHECK_EVERY_X_SECONDS,
ldsm_check_all_mounts, NULL);
g_source_set_name_by_id (ldsm_timeout_id, "[gnome-settings-daemon] ldsm_check_all_mounts");
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+ldsm_mounts_changed (GObject *monitor,
+ gpointer data)
+{
+ if (ldsm_update_id != 0)
+ return;
+
+ ldsm_update_id = g_timeout_add (UPDATE_TIMEOUT * g_random_double_range (0.5, 5),
+ ldsm_mounts_changed_timeout,
+ NULL);
}
static gboolean
@@ -1007,6 +1025,8 @@ gsd_ldsm_clean (void)
g_source_remove (purge_temp_id);
purge_temp_id = 0;
+ g_clear_handle_id (&ldsm_update_id, g_source_remove);
+
if (ldsm_timeout_id)
g_source_remove (ldsm_timeout_id);
ldsm_timeout_id = 0;
--
2.34.1

View File

@ -1,3 +0,0 @@
[org.gnome.settings-daemon.plugins.power]
sleep-inactive-ac-timeout=0
sleep-inactive-battery-timeout=0

486
fix-auto-brightness.patch Normal file
View File

@ -0,0 +1,486 @@
From 000316a46ae7a91ff4e1a3d23b5b290caa7558c1 Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 19:40:19 +0200
Subject: [PATCH 1/7] power: Disable auto brightness when we release the light
sensor
---
plugins/power/gsd-power-manager.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index b7b5b642..a8995bd5 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1293,16 +1293,17 @@ light_released_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
+ GsdPowerManager *manager = GSD_POWER_MANAGER (user_data);
g_autoptr(GError) error = NULL;
g_autoptr(GVariant) result = NULL;
result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object),
res,
&error);
- if (result == NULL) {
+ if (result == NULL)
g_warning ("Release of light sensors failed: %s", error->message);
- return;
- }
+
+ shell_brightness_set_auto_target (manager, -1.0);
}
static gboolean
--
2.53.0
From 69219b30bdef704d891b3278d03ae758dde07821 Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 20:35:17 +0200
Subject: [PATCH 2/7] power: Take double in set_auto_target because we send a
double
---
plugins/power/gsd-power-manager.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index a8995bd5..c8d3ef8e 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1219,7 +1219,7 @@ shell_brightness_set_auto_target_cb (GObject *source_object,
static void
shell_brightness_set_auto_target (GsdPowerManager *manager,
- float target)
+ double target)
{
if (!manager->shell_brightness_proxy)
return;
--
2.53.0
From 9f596d601b68231d1364247ffb14f686fce2ed7b Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 20:37:03 +0200
Subject: [PATCH 3/7] power: Use autoptrs in iio_proxy_changed
---
plugins/power/gsd-power-manager.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index c8d3ef8e..c9831222 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -2884,8 +2884,8 @@ logind_proxy_signal_cb (GDBusProxy *proxy,
static void
iio_proxy_changed (GsdPowerManager *manager)
{
- GVariant *val_has = NULL;
- GVariant *val_als = NULL;
+ g_autoptr (GVariant) val_has = NULL;
+ g_autoptr (GVariant) val_als = NULL;
gdouble brightness;
gdouble alpha;
gint64 current_time;
@@ -2902,10 +2902,10 @@ iio_proxy_changed (GsdPowerManager *manager)
/* get latest results, which do not have to be Lux */
val_has = g_dbus_proxy_get_cached_property (manager->iio_proxy, "HasAmbientLight");
if (val_has == NULL || !g_variant_get_boolean (val_has))
- goto out;
+ return;
val_als = g_dbus_proxy_get_cached_property (manager->iio_proxy, "LightLevel");
if (val_als == NULL || g_variant_get_double (val_als) == 0.0)
- goto out;
+ return;
manager->ambient_last_absolute = g_variant_get_double (val_als);
g_debug ("Read last absolute light level: %f", manager->ambient_last_absolute);
@@ -2935,7 +2935,7 @@ iio_proxy_changed (GsdPowerManager *manager)
/* no valid readings yet */
if (manager->ambient_accumulator < 0.f)
- goto out;
+ return;
/* set new value */
g_debug ("Setting brightness from ambient %.1f%%",
@@ -2946,9 +2946,6 @@ iio_proxy_changed (GsdPowerManager *manager)
/* Assume setting worked. */
manager->ambient_percentage_old = pc;
-out:
- g_clear_pointer (&val_has, g_variant_unref);
- g_clear_pointer (&val_als, g_variant_unref);
}
static void
--
2.53.0
From 7e27736fe9a2c0b2b914569da5ad7d7fdc7b4d1d Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 20:41:22 +0200
Subject: [PATCH 4/7] power: Rename ambient_last_time to
ambient_update_last_time
We will track another last_time later, so rename it in advance.
---
plugins/power/gsd-power-manager.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index c9831222..fbc48ab3 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -176,7 +176,7 @@ struct _GsdPowerManager
gdouble ambient_norm_value;
gdouble ambient_percentage_old;
gdouble ambient_last_absolute;
- gint64 ambient_last_time;
+ gint64 ambient_update_last_time;
/* Power Profiles */
GDBusProxy *power_profiles_proxy;
@@ -2919,11 +2919,11 @@ iio_proxy_changed (GsdPowerManager *manager)
/* time-weighted constant for moving average */
current_time = g_get_monotonic_time();
- if (manager->ambient_last_time)
- alpha = 1.0f / (1.0f + (GSD_AMBIENT_TIME_CONSTANT / (current_time - manager->ambient_last_time)));
+ if (manager->ambient_update_last_time)
+ alpha = 1.0f / (1.0f + (GSD_AMBIENT_TIME_CONSTANT / (current_time - manager->ambient_update_last_time)));
else
alpha = 0.0f;
- manager->ambient_last_time = current_time;
+ manager->ambient_update_last_time = current_time;
/* calculate exponential weighted moving average */
brightness = manager->ambient_last_absolute * 100.f / manager->ambient_norm_value;
@@ -3046,7 +3046,7 @@ gsd_power_manager_start (GsdPowerManager *manager,
manager->ambient_norm_value = -1.f;
manager->ambient_percentage_old = -1.f;
manager->ambient_last_absolute = -1.f;
- manager->ambient_last_time = 0;
+ manager->ambient_update_last_time = 0;
/* Set up a delay inhibitor to be informed about suspend attempts */
g_signal_connect (manager->logind_proxy, "g-signal",
--
2.53.0
From 64d268883b060b1f8e2719ef4fcd80dc987b270e Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 20:43:45 +0200
Subject: [PATCH 5/7] power: Rework ambient light sensor normalization
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reworks the normalization and fixes two things in particular:
The percentage `pc` is an int so if we want values different
from `0` and `1` we need to use floating point division.
When gsd-power controlled the backlight it would init that value from
the backlight on startup but we don't have that available anymore so
can only pick an arbitrary value.
Co-authored-by: Guido Günther <agx@sigxcpu.org>
Fixes: 08ae6461 ("power: Switch from direct mutter backlight handling to Shell.Brightness")
---
plugins/power/gsd-power-manager.c | 52 +++++++++++--------------------
1 file changed, 19 insertions(+), 33 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index fbc48ab3..10dfe601 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -94,6 +94,10 @@
/* Convert bandwidth to time constant. Units of constant are microseconds. */
#define GSD_AMBIENT_TIME_CONSTANT (G_USEC_PER_SEC * 1.0f / (2.0f * G_PI * GSD_AMBIENT_BANDWIDTH_HZ))
+/* Normalize against this factor of the current absolute reading.
+ * The value has been chosen arbitrarily but seems to work in practice. */
+#define GSD_AMBIENT_NORMALIZE_CONSTANT (1.5f)
+
static const gchar introspection_xml[] =
"<node>"
" <interface name='org.gnome.SettingsDaemon.Power.Keyboard'>"
@@ -174,8 +178,6 @@ struct _GsdPowerManager
gboolean ambient_norm_required;
gdouble ambient_accumulator;
gdouble ambient_norm_value;
- gdouble ambient_percentage_old;
- gdouble ambient_last_absolute;
gint64 ambient_update_last_time;
/* Power Profiles */
@@ -2609,19 +2611,6 @@ idle_became_active_cb (GnomeIdleMonitor *monitor,
manager->user_active_id = 0;
}
-static void
-ch_backlight_renormalize (GsdPowerManager *manager)
-{
- if (manager->ambient_percentage_old < 0)
- return;
- if (manager->ambient_last_absolute < 0)
- return;
- manager->ambient_norm_value = manager->ambient_last_absolute /
- (gdouble) manager->ambient_percentage_old;
- manager->ambient_norm_value *= 100.f;
- manager->ambient_norm_required = FALSE;
-}
-
static void
engine_settings_key_changed_cb (GSettings *settings,
const gchar *key,
@@ -2886,10 +2875,10 @@ iio_proxy_changed (GsdPowerManager *manager)
{
g_autoptr (GVariant) val_has = NULL;
g_autoptr (GVariant) val_als = NULL;
+ gdouble ambient_last_absolute;
gdouble brightness;
gdouble alpha;
gint64 current_time;
- gint pc;
/* no display hardware */
if (!shell_brightness_has_control (manager))
@@ -2904,17 +2893,20 @@ iio_proxy_changed (GsdPowerManager *manager)
if (val_has == NULL || !g_variant_get_boolean (val_has))
return;
val_als = g_dbus_proxy_get_cached_property (manager->iio_proxy, "LightLevel");
- if (val_als == NULL || g_variant_get_double (val_als) == 0.0)
+ if (val_als == NULL || g_variant_get_double (val_als) <= 0.f)
return;
- manager->ambient_last_absolute = g_variant_get_double (val_als);
- g_debug ("Read last absolute light level: %f", manager->ambient_last_absolute);
+ ambient_last_absolute = g_variant_get_double (val_als);
+ g_debug ("Read absolute light level: %f", ambient_last_absolute);
/* the user has asked to renormalize */
if (manager->ambient_norm_required) {
- g_debug ("Renormalizing light level from old light percentage: %.1f%%",
- manager->ambient_percentage_old);
- manager->ambient_accumulator = manager->ambient_percentage_old;
- ch_backlight_renormalize (manager);
+ g_debug ("Normalizing light level");
+
+ manager->ambient_norm_value = ambient_last_absolute * GSD_AMBIENT_NORMALIZE_CONSTANT;
+ if (manager->ambient_accumulator <= 0.f)
+ manager->ambient_accumulator = 100.f / GSD_AMBIENT_NORMALIZE_CONSTANT;
+
+ manager->ambient_norm_required = FALSE;
}
/* time-weighted constant for moving average */
@@ -2926,7 +2918,7 @@ iio_proxy_changed (GsdPowerManager *manager)
manager->ambient_update_last_time = current_time;
/* calculate exponential weighted moving average */
- brightness = manager->ambient_last_absolute * 100.f / manager->ambient_norm_value;
+ brightness = ambient_last_absolute * 100.f / manager->ambient_norm_value;
brightness = MIN (brightness, 100.f);
brightness = MAX (brightness, 0.f);
@@ -2937,15 +2929,11 @@ iio_proxy_changed (GsdPowerManager *manager)
if (manager->ambient_accumulator < 0.f)
return;
- /* set new value */
- g_debug ("Setting brightness from ambient %.1f%%",
+ g_debug ("Calculated new target brightness from ambient: %.1f%%",
manager->ambient_accumulator);
- pc = manager->ambient_accumulator;
-
- shell_brightness_set_auto_target (manager, pc / 100);
- /* Assume setting worked. */
- manager->ambient_percentage_old = pc;
+ shell_brightness_set_auto_target (manager,
+ manager->ambient_accumulator / 100.0);
}
static void
@@ -3044,8 +3032,6 @@ gsd_power_manager_start (GsdPowerManager *manager,
manager->ambient_norm_required = TRUE;
manager->ambient_accumulator = -1.f;
manager->ambient_norm_value = -1.f;
- manager->ambient_percentage_old = -1.f;
- manager->ambient_last_absolute = -1.f;
manager->ambient_update_last_time = 0;
/* Set up a delay inhibitor to be informed about suspend attempts */
--
2.53.0
From 9e5d7fee78d98aef62b70f4b4f3ce6209bab97af Mon Sep 17 00:00:00 2001
From: Sebastian Wick <sebastian.wick@redhat.com>
Date: Wed, 15 Oct 2025 20:44:11 +0200
Subject: [PATCH 6/7] power: Throttle target brightness updates to shell
This limits the auto brightness updates to shell to 10 times per second.
In the future, shell should be able to smoothly animate between targets
which should allow us to decrease the value.
---
plugins/power/gsd-power-manager.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 10dfe601..fc7d780b 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -94,6 +94,11 @@
/* Convert bandwidth to time constant. Units of constant are microseconds. */
#define GSD_AMBIENT_TIME_CONSTANT (G_USEC_PER_SEC * 1.0f / (2.0f * G_PI * GSD_AMBIENT_BANDWIDTH_HZ))
+/* How often to send target brightness updates to the shell.
+ * This is currently 10 times a second; but the shell should handle animating
+ * for us in the future so we can drop this value to ~1 time per second. */
+#define GSD_AMBIENT_SEND_UPDATE_INTERVAL (G_USEC_PER_SEC * 0.1f)
+
/* Normalize against this factor of the current absolute reading.
* The value has been chosen arbitrarily but seems to work in practice. */
#define GSD_AMBIENT_NORMALIZE_CONSTANT (1.5f)
@@ -179,6 +184,7 @@ struct _GsdPowerManager
gdouble ambient_accumulator;
gdouble ambient_norm_value;
gint64 ambient_update_last_time;
+ gint64 ambient_set_last_time;
/* Power Profiles */
GDBusProxy *power_profiles_proxy;
@@ -2932,8 +2938,11 @@ iio_proxy_changed (GsdPowerManager *manager)
g_debug ("Calculated new target brightness from ambient: %.1f%%",
manager->ambient_accumulator);
- shell_brightness_set_auto_target (manager,
- manager->ambient_accumulator / 100.0);
+ if (current_time - manager->ambient_set_last_time >= GSD_AMBIENT_SEND_UPDATE_INTERVAL) {
+ shell_brightness_set_auto_target (manager,
+ manager->ambient_accumulator / 100.0);
+ manager->ambient_set_last_time = current_time;
+ }
}
static void
@@ -3033,6 +3042,7 @@ gsd_power_manager_start (GsdPowerManager *manager,
manager->ambient_accumulator = -1.f;
manager->ambient_norm_value = -1.f;
manager->ambient_update_last_time = 0;
+ manager->ambient_set_last_time = 0;
/* Set up a delay inhibitor to be informed about suspend attempts */
g_signal_connect (manager->logind_proxy, "g-signal",
--
2.53.0
From 7db4b35548b7cebbdceb08e89cfcece072485a8b Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Mon, 24 Nov 2025 17:19:45 +0100
Subject: [PATCH 7/7] power: Trigger re-normalization on out-of-band brightness
changes
When brightness is auto-managed by ALS, we still have two situations
where the brightness changes do not come from it:
- User changes to the display brightness, either through keybindings,
or the sliders in the shell menu being changed.
- Dimming requests on user inactivity.
The response to both should be similar, the abrupt brightness change
can alter ALS readings, so the brightness resulting of the change must
be used as a new baseline for normalization.
Tracking of user-triggered changes is done through a new BrightnessChanged
signal in the org.gnome.Shell.Brightness D-Bus interface. This will do
nothing on older versions of GNOME Shell without the signal, so effectively
brightness changes would not trigger a re-normalization there, as before.
If the signal exists and is emitted, then it will be used.
(cherry picked from commit 5af04e7742701849e4f1ac04b340a3acf3a3345f)
---
plugins/power/gsd-power-manager.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index fc7d780b..a7a9dc6c 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1245,19 +1245,19 @@ shell_brightness_set_dimming_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
+ GsdPowerManager *manager = user_data;
g_autoptr (GVariant) result = NULL;
g_autoptr (GError) error = NULL;
- gboolean enable = !!GPOINTER_TO_UINT (user_data);
result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object),
res,
&error);
- if (result)
+ if (result) {
+ manager->ambient_norm_required = TRUE;
return;
+ }
- g_warning ("couldn't %s dimming: %s",
- enable ? "enable" : "disable",
- error->message);
+ g_warning ("couldn't change dimming: %s", error->message);
}
static void
@@ -1273,7 +1273,7 @@ shell_brightness_set_dimming (GsdPowerManager *manager,
G_DBUS_CALL_FLAGS_NONE,
-1, NULL,
shell_brightness_set_dimming_cb,
- GUINT_TO_POINTER (enable));
+ manager);
}
static void
@@ -2982,6 +2982,16 @@ iio_proxy_vanished_cb (GDBusConnection *connection,
g_clear_object (&manager->iio_proxy);
}
+static void
+on_brightness_changed_by_user (GsdPowerManager *manager)
+{
+ /* Brightness was changed by the user, we need a new baseline
+ * for the normalization being applied.
+ */
+ g_debug ("User brightness change detected, re-normalizing");
+ manager->ambient_norm_required = TRUE;
+}
+
gboolean
gsd_power_manager_start (GsdPowerManager *manager,
GError **error)
@@ -3126,6 +3136,11 @@ gsd_power_manager_start (GsdPowerManager *manager,
g_clear_error (error);
}
+ g_signal_connect_swapped (manager->shell_brightness_proxy,
+ "g-signal::BrightnessChanged",
+ G_CALLBACK (on_brightness_changed_by_user),
+ manager);
+
manager->devices_array = g_ptr_array_new_with_free_func (g_object_unref);
manager->devices_notified_ht = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
--
2.53.0

View File

@ -1,45 +1,81 @@
%global glib2_version 2.56
%global geocode_glib_version 3.10.0
%global gnome_desktop_version 3.27.90
%global gsettings_desktop_schemas_version 3.32.0-4
## START: Set by rpmautospec
## (rpmautospec version 0.6.5)
## RPMAUTOSPEC: autorelease, autochangelog
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
release_number = 10;
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
## END: Set by rpmautospec
%global glib2_version 2.58
%global colord_version 1.4.5
%global geocode_glib_version 3.26.3
%global gnome_desktop_version 3.37.1
%global gsettings_desktop_schemas_version 42
%global gtk3_version 3.15.3
%global libgweather_version 3.9.5
%global geoclue_version 2.3.1
%if %{undefined centos}
%bcond_without subman
%ifnarch s390 s390x
%global wacom_unit org.gnome.SettingsDaemon.Wacom.service
%else
%global wacom_unit %{nil}
%endif
%global systemd_units org.gnome.SettingsDaemon.A11ySettings.service org.gnome.SettingsDaemon.Color.service org.gnome.SettingsDaemon.Datetime.service org.gnome.SettingsDaemon.Housekeeping.service org.gnome.SettingsDaemon.Keyboard.service org.gnome.SettingsDaemon.MediaKeys.service org.gnome.SettingsDaemon.Power.service org.gnome.SettingsDaemon.PrintNotifications.service org.gnome.SettingsDaemon.Rfkill.service org.gnome.SettingsDaemon.ScreensaverProxy.service org.gnome.SettingsDaemon.Sharing.service org.gnome.SettingsDaemon.Smartcard.service org.gnome.SettingsDaemon.Sound.service org.gnome.SettingsDaemon.UsbProtection.service org.gnome.SettingsDaemon.Wwan.service org.gnome.SettingsDaemon.XSettings.service %%{wacom_unit} org.gnome.SettingsDaemon.Subscription.service
%global tarball_version %%(echo %{version} | tr '~' '.')
%global major_version %%(echo %{version} | cut -f 1 -d '~' | cut -f 1 -d '.')
Name: gnome-settings-daemon
Version: 3.32.0
Release: 22%{?dist}
Version: 47.2
Release: %autorelease
Summary: The daemon sharing settings from GNOME to GTK+/KDE applications
License: GPLv2+
URL: https://download.gnome.org/sources/%{name}
Source0: https://download.gnome.org/sources/%{name}/3.32/%{name}-%{version}.tar.xz
Source1: org.gnome.settings-daemon.plugins.power.gschema.override
License: GPL-2.0-or-later AND LGPL-2.1-or-later
URL: https://gitlab.gnome.org/GNOME/gnome-settings-daemon
Source0: https://download.gnome.org/sources/%{name}/%{major_version}/%{name}-%{tarball_version}.tar.xz
# gsetting overrides for the "Server with GUI" installation
Source1: org.gnome.settings-daemon.plugins.power.gschema.override
# https://issues.redhat.com/browse/RHEL-74248
Patch0: housekeeping-disambiguate-mount-names-in-notifications.patch
# https://issues.redhat.com/browse/RHEL-26118
Patch1: subscription-manager.patch
# https://issues.redhat.com/browse/RHEL-127784
Patch2: subman-delay-startup-notification-by-30min.patch
# https://issues.redhat.com/browse/RHEL-124242
Patch3: use-shell-brightness.patch
# https://issues.redhat.com/browse/RHEL-144940
# https://issues.redhat.com/browse/RHEL-144375
Patch4: fix-auto-brightness.patch
# https://redhat.atlassian.net/browse/RHEL-169813
Patch5: 0001-smartcard-manager-Consider-modules-with-no-slots-as-.patch
BuildRequires: meson >= 0.44.0
BuildRequires: gcc
BuildRequires: cups-devel
BuildRequires: gettext
BuildRequires: meson >= 0.49.0
BuildRequires: perl-interpreter
BuildRequires: git
BuildRequires: systemd-rpm-macros
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(colord) >= 1.0.2
BuildRequires: pkgconfig(colord) >= %{colord_version}
BuildRequires: pkgconfig(cups)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(gck-2)
BuildRequires: pkgconfig(gcr-4)
BuildRequires: pkgconfig(geoclue-2.0) >= %{geoclue_version}
BuildRequires: pkgconfig(geocode-glib-1.0) >= %{geocode_glib_version}
BuildRequires: pkgconfig(geocode-glib-2.0) >= %{geocode_glib_version}
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version}
BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version}
BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version}
BuildRequires: pkgconfig(gudev-1.0)
BuildRequires: pkgconfig(gweather-3.0) >= %{libgweather_version}
%if %{with subman}
BuildRequires: pkgconfig(json-glib-1.0)
%endif
BuildRequires: pkgconfig(gweather4)
BuildRequires: pkgconfig(lcms2) >= 2.2
BuildRequires: pkgconfig(libcanberra-gtk3)
BuildRequires: pkgconfig(libgeoclue-2.0)
@ -48,6 +84,7 @@ BuildRequires: pkgconfig(libnotify)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libpulse-mainloop-glib)
BuildRequires: pkgconfig(librsvg-2.0)
BuildRequires: pkgconfig(mm-glib)
BuildRequires: pkgconfig(nss)
BuildRequires: pkgconfig(polkit-gobject-1)
BuildRequires: pkgconfig(upower-glib)
@ -56,87 +93,17 @@ BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(wayland-client)
%ifnarch s390 s390x
BuildRequires: pkgconfig(libwacom) >= 0.7
BuildRequires: pkgconfig(xorg-wacom)
%endif
Requires: colord
Requires: colord >= %{colord_version}
Requires: iio-sensor-proxy
Requires: geoclue2 >= %{geoclue_version}
Requires: geocode-glib%{?_isa} >= %{geocode_glib_version}
Requires: geocode-glib2%{?_isa} >= %{geocode_glib_version}
Requires: glib2%{?_isa} >= %{glib2_version}
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
Requires: gtk3%{?_isa} >= %{gtk3_version}
Requires: libgweather%{?_isa} >= %{libgweather_version}
Obsoletes: %{name}-updates < 3.13.1
Obsoletes: drwright < 3.5.0-3
Obsoletes: gnome-settings-daemon-devel < 3.23.1
# The "org.gnome.SettingsDaemon.A11yKeyboard" has been been removed, now
# handled in gnome-shell/mutter instead; this conflict here makes sure not to
# break older gdm and gnome-session releases that expect the functionality
Conflicts: gdm < 1:3.27.90
Conflicts: gnome-session < 3.27.90
# The orientation and xrandr plugins were removed in 3.25.4 and their
# functionality was moved to mutter; this conflict here makes sure not to break
# older gdm, gnome-session and gnome-shell releases that expect the functionality
Conflicts: gnome-shell < 3.25.4
# account plugin
Patch00001: 0001-account-first-cut-at-account-plugin.patch
Patch00002: 0002-account-reshow-the-notification-when-screen-unlocks.patch
Patch00003: 0003-account-display-nag-screen-periodically.patch
Patch00004: 0004-account-don-t-poll-more-frequently-than-notification.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1796190
Patch10001: 0001-smartcard-Cancel-cancellable-when-stopping.patch
Patch10002: 0002-smartcard-Change-manager-to-non-blocking.patch
Patch10003: 0003-smartcard-Change-timeout-on-spurious-event-error.patch
Patch10004: 0004-smartcard-check-for-the-addition-of-new-smartcard-re.patch
Patch20001: 0001-xsettings-Add-an-entry-for-the-overlay-scrolling-set.patch
# Handle org.gnome.Shell.Screencast Stopped signal (#1705392)
Patch30001: 0001-media-keys-Mark-screen-cast-as-stopped-if-it-was-sig.patch
Patch40001: 0001-housekeeping-Add-a-GPU-memory-usage-notification.patch
# subscription manager integration
%if %{with subman}
Patch50001: 0001-subman-Add-a-new-plugin-to-provide-system-subscripti.patch
Patch50002: 0002-subman-Add-InstalledProducts-dbus-property-for-g-c-c.patch
Patch50003: 0003-subman-Increase-RHSM-dbus-call-timeouts.patch
Patch50004: 0004-subman-Drop-userlang-field.patch
Patch50005: 0005-subman-Use-user-locale-for-registration-subscription.patch
Patch50006: 0006-subman-Handle-subscription-manager-giving-invalid-st.patch
Patch50007: 0007-subman-Force-re-subscribe-if-the-admin-already-subsc.patch
Patch50008: 0008-subman-Don-t-send-secrets-through-command-line.patch
Patch50009: 0009-subman-Don-t-treat-failure-to-attach-as-fatal.patch
Patch50010: 0010-subman-Add-new-no-installed-products-state.patch
Patch50011: 0011-subman-Fix-some-build-warnings.patch
Patch50012: 0012-subman-Add-DBus-API-to-subscribe-for-updates-on-alre.patch
Patch50013: 0013-subman-Improve-subscription-status-handling.patch
Patch50014: 0014-subman-Drop-LAST-from-status-enum.patch
Patch50015: 0015-subman-Clean-up-notification-behavior.patch
Patch50016: 0016-subman-Update-POTFILES.in.patch
# https://issues.redhat.com/browse/RHEL-5074
Patch50018: subman-set-notification-icon.patch
%endif
# https://bugzilla.redhat.com/show_bug.cgi?id=1876291
Patch50017: 0017-Update-translations.patch
Patch60001: 0001-power-Only-disable-Suspend-Hibernate-actions-inside-.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2062051
Patch70001: 0001-power-Respect-the-nothing-power-button-action-for-VM.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2018606
Patch70002: 0001-power-Avoid-automatic-logout-in-GDM-greeter.patch
Patch70003: 0002-power-Never-register-sleep-timeout-for-logout-in-GDM.patch
Patch70004: 0001-Make-power-button-action-always-power-off-when-chass.patch
Patch80001: housekeeping-debounce-mount-checks.patch
Requires: libgweather4%{?_isa}
%description
A daemon to share settings from GNOME to other applications. It also
@ -150,18 +117,19 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
%package server-defaults
Summary: Workstation settings overrides for Server with GUI
Requires: %{name}%{?_isa} = %{version}-%{release}
%description server-defaults
The {%name}-server-defaults package contains gsettings schema overrides
for the default behavior of Workstation in the Server with GUI product.
%prep
%autosetup -S git
%autosetup -p1 -n %{name}-%{tarball_version}
%build
%meson \
%if %{with subman}
-Dsubscription_manager=true
%else
-Dsubscription_manager=false
%endif
%meson
%meson_build
%install
@ -171,26 +139,21 @@ cp %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/glib-2.0/schemas
%find_lang %{name} --with-gnome
mkdir $RPM_BUILD_ROOT%{_libdir}/gnome-settings-daemon-3.0/gtk-modules
%post
%systemd_user_post %{systemd_units}
%preun
%systemd_user_preun %{systemd_units}
%files -f %{name}.lang
%license COPYING
%doc AUTHORS NEWS
%license COPYING COPYING.LIB
%doc AUTHORS NEWS README
# list daemons explicitly, so we notice if one goes missing
# some of these don't have a separate gschema
%{_libexecdir}/gsd-account
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Account.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.account.gschema.xml
%{_libexecdir}/gsd-clipboard
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Clipboard.desktop
%{_libexecdir}/gsd-datetime
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Datetime.desktop
%{_libexecdir}/gsd-dummy
%{_libexecdir}/gsd-housekeeping
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Housekeeping.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.housekeeping.gschema.xml
@ -202,16 +165,9 @@ mkdir $RPM_BUILD_ROOT%{_libdir}/gnome-settings-daemon-3.0/gtk-modules
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.MediaKeys.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.media-keys.gschema.xml
%{_libexecdir}/gsd-mouse
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Mouse.desktop
%{_libexecdir}/gsd-locate-pointer
%{_libexecdir}/gsd-backlight-helper
%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.power.policy
%{_libexecdir}/gsd-power
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Power.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.power.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.power.gschema.override
%{_libexecdir}/gsd-print-notifications
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.PrintNotifications.desktop
@ -229,13 +185,15 @@ mkdir $RPM_BUILD_ROOT%{_libdir}/gnome-settings-daemon-3.0/gtk-modules
%{_libexecdir}/gsd-sound
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Sound.desktop
%{_libexecdir}/gsd-usb-protection
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.UsbProtection.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.peripherals.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.peripherals.wacom.gschema.xml
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Wacom.desktop
%ifnarch s390 s390x
%{_libexecdir}/gsd-wacom
%{_libexecdir}/gsd-wacom-led-helper
%{_libexecdir}/gsd-wacom-oled-helper
%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.wacom.policy
%endif
@ -255,130 +213,351 @@ mkdir $RPM_BUILD_ROOT%{_libdir}/gnome-settings-daemon-3.0/gtk-modules
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Sharing.desktop
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.sharing.gschema.xml
%if %{with subman}
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Subscription.desktop
%{_libexecdir}/gsd-subman
%{_libexecdir}/gsd-subman-helper
%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.subman.policy
%{_datadir}/polkit-1/rules.d/org.gnome.settings-daemon.plugins.subman.rules
%endif
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Wwan.desktop
%{_libexecdir}/gsd-wwan
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.wwan.gschema.xml
%{_libdir}/gnome-settings-daemon-3.0/libgsd.so
%dir %{_libdir}/gnome-settings-daemon-%{major_version}
%{_libdir}/gnome-settings-daemon-%{major_version}/libgsd.so
/usr/lib/udev/rules.d/*.rules
%{_sysconfdir}/xdg/Xwayland-session.d/00-xrdb
%{_userunitdir}/gnome-session-x11-services-ready.target.wants/
%{_userunitdir}/gnome-session-x11-services.target.wants/
%{lua: for service in string.gmatch(rpm.expand('%{systemd_units}'), "[^%s]+") do print(rpm.expand('%{_userunitdir}/')..service..'\n') end}
%{_userunitdir}/*.target
%{_udevrulesdir}/61-gnome-settings-daemon-rfkill.rules
%{_datadir}/gnome-settings-daemon/
%{_datadir}/GConf/gsettings/gnome-settings-daemon.convert
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.enums.xml
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.gschema.xml
%{_sysconfdir}/xdg/autostart/org.gnome.SettingsDaemon.Subscription.desktop
%{_libexecdir}/gsd-subman
%{_libexecdir}/gsd-subman-helper
%{_datadir}/polkit-1/actions/org.gnome.settings-daemon.plugins.subman.policy
%{_datadir}/polkit-1/rules.d/org.gnome.settings-daemon.plugins.subman.rules
%files devel
%{_includedir}/gnome-settings-daemon-3.0
%{_includedir}/gnome-settings-daemon-%{major_version}
%{_libdir}/pkgconfig/gnome-settings-daemon.pc
%files server-defaults
%{_datadir}/glib-2.0/schemas/org.gnome.settings-daemon.plugins.power.gschema.override
%changelog
* Fri Jan 09 2026 Felupe Borges <feborges@redhat.com> - 3.32.0-22
- Debounce mount checks in Low Disk Space monitoring
Resolves: RHEL-127805
## START: Generated by rpmautospec
* Tue Apr 21 2026 Joan Torres Lopez <joantolo@redhat.com> - 47.2-10
- Consider special modules for smartcard detection
* Mon Nov 03 2025 Felipe Borges <feborges@redhat.com> - 3.32.0-21
- Add icon to subman notifications
Resolves: RHEL-5074
* Wed Feb 18 2026 Florian Müllner <fmuellner@redhat.com> - 47.2-9
- Backport more auto-brightness related fixes
* Mon Jul 24 2023 Ray Strode <rstrode@redhat.com> - 3.32.0-20
- Backport some upstream smartcard changes that make it work
better with p11-kit
Resolves: #1796190
- Rework how subscription-manager plugin is conditionalized so
it doens't get built on centos 8 stream
* Tue Feb 10 2026 Florian Müllner <fmuellner@redhat.com> - 47.2-8
- Fix auto-brightness with gnome-shell 49.x
* Fri Feb 17 2023 Felipe Borges <feborges@redhat.com> - 4.32.0-19
- Make power-button-action default to poweroff on servers
- Resolves: #1920829
* Thu Nov 20 2025 Florian Müllner <fmuellner@redhat.com> - 47.2-7
- Use gnome-shell interface for brightness control
* Tue Jan 24 2023 Felipe Borges <feborges@redhat.com> - 3.32.0-18
- Prevent automatic logout warning in greeter sessions
- Resolves: #2018606
* Wed Nov 12 2025 Felipe Borges <felipeborges@gnome.org> - 47.2-6
- subman: Delay startup notification by 30 minutes
* Wed Jan 04 2023 Felipe Borges <feborges@redhat.com> - 3.32.0-17
- Make power-button-action respect the "nothing" action on VMs
- Resolves: #2062051
* Fri Feb 07 2025 Felipe Borges <feborges@redhat.com> - 47.2-5
- Add subscription manager plugin
* Fri Sep 10 2021 Kalev Lember <klember@redhat.com> - 3.32.0-16
- Update pt_BR translations
- Resolves: #2003069
* Mon Feb 03 2025 Felipe Borges <feborges@redhat.com> - 47.2-4
- Add g-s-d-server-defaults subpackage for "Server with GUI" overrides
* Fri Aug 06 2021 Carlos Garnacho <cgarnach@redhat.com> - 3.32.0-15
- Keep auto-logout working inside VMs
Resolves: #1904139
* Fri Jan 31 2025 Felipe Borges <feborges@redhat.com> - 47.2-3
- Revert "Add downstream default suspend setting for servers"
* Mon Mar 01 2021 Kalev Lember <klember@redhat.com> - 3.32.0-14
- Update fr, ja, zh_CN translations
- Resolves: #1876291
* Mon Jan 20 2025 Felipe Borges <feborges@redhat.com> - 47.2-2
- Disambiguate mount points with same name on "Low Disk Space"
notifications
* Thu Jan 21 2021 Ray Strode <rstrode@redhat.com> - 3.32.0-13
- Add back subscription-manager plugin
Related: #1870837
* Fri Jan 17 2025 Felipe Borges <feborges@redhat.com> - 47.2-1
- Update to 47.2
* Tue Jan 05 2021 Jonas Ådahl <jadahl@redhat.com> - 3.32.0-12
- Handle org.gnome.Shell.Screencast Stopped signal
Related: #1705392
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 46.0-3
- Bump release for October 2024 mass rebuild:
* Wed Sep 02 2020 Ray Strode <rstrode@redhat.com> - 3.32.0-11
- Remove subman plugin for now
Resolves: #1872457
* Thu Aug 08 2024 Felipe Borges <feborges@redhat.com> - 46.0-2
- Add downstream default suspend setting for servers
* Thu Aug 13 2020 Carl George <carl@redhat.com> - 3.32.0-10
- Disable subman plugin on CentOS
Resolves: #1827030
* Tue Jul 02 2024 Felipe Borges <felipeborges@gnome.org> - 46.0-1
- Update to 46.0
* Fri Nov 22 2019 Benjamin Otte <otte@redhat.com> - 3.32.0-9
- Update gsettings-deskto-schemas dependency for new setting
Resolves: #1775683, #1723462
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 46~alpha-3
- Bump release for June 2024 mass rebuild
* Thu Nov 21 2019 Benjamin Otte <otte@redhat.com> - 3.32.0-8
- Add upstream setting for overlay scrolling
Resolves: #1723462
* Tue Apr 09 2024 Tomas Pelka <tpelka@redhat.com> - 46~alpha-2
- enable gating
* Mon Nov 18 2019 Kalev Lember <klember@redhat.com> - 3.32.0-7
- Add a new plugin to provide system subscription information
- Resolves: #1720249
* Thu Jan 25 2024 Nieves Montero <nmontero@redhat.com> - 46~alpha-1
- Update to 46~alpha
* Mon Nov 04 2019 Marek Kasik <mkasik@redhat.com> - 3.32.0-6
- Initialize a variable from previous commit.
- Previous commit made it possible to use uninitialized variable.
- Detected by Coverity.
- Related: #1742710
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 45.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Nov 04 2019 Marek Kasik <mkasik@redhat.com> - 3.32.0-5
- Cancel cancellable when stopping smartcard plugin to avoid crash
- Resolves: #1742710
* Wed Jan 24 2024 Nieves Montero <nmontero@redhat.com> - 45.1-3
- Update to 46~alpha
* Tue Jul 09 2019 Richard Hughes <rhughes@redhat.com> - 3.32.0-4
- Remove the subman plugin -- move to a 8.2 feature instead.
- Resolves: #1720249
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 45.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Jun 17 2019 Richard Hughes <rhughes@redhat.com> - 3.32.0-3
- Add a new plugin to provide system subscription information
- Resolves: #1720249
* Wed Jan 03 2024 Kalev Lember <klember@redhat.com> - 45.1-1
- Update to 45.1
* Mon Jun 10 2019 Ray Strode <rstrode@redhat.com> - 3.32.0-2
- Add dropped patches
Related: #1674382
* Thu Dec 07 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 45.0-2
- Drop unused xorg-wacom dependency
* Thu May 23 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.0-1
* Tue Sep 19 2023 Kalev Lember <klember@redhat.com> - 45.0-1
- Update to 45.0
* Wed Sep 06 2023 Kalev Lember <klember@redhat.com> - 45~rc-1
- Update to 45.rc
* Fri Aug 11 2023 Kalev Lember <klember@redhat.com> - 45~beta-1
- Update to 45.beta
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 45~alpha-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 04 2023 Kalev Lember <klember@redhat.com> - 45~alpha-1
- Update to 45.alpha
* Mon Jun 19 2023 Kalev Lember <klember@redhat.com> - 44.1-2
- Rebuilt for gcr soname bump
* Wed Apr 19 2023 David King <amigadave@amigadave.com> - 44.1-1
- Update to 44.1
* Wed Mar 22 2023 Adam Williamson <awilliam@redhat.com> - 44.0-2
- Backport MR #325 to avoid auto-suspend on VMs (#2180047)
* Mon Mar 20 2023 David King <amigadave@amigadave.com> - 44.0-1
- Update to 44.0
* Mon Mar 06 2023 David King <amigadave@amigadave.com> - 44~rc-1
- Update to 44.rc
* Wed Feb 22 2023 Michael Catanzaro <mcatanzaro@redhat.com> - 44~beta-4
- Fix file list
* Wed Feb 22 2023 Michael Catanzaro <mcatanzaro@redhat.com> - 44~beta-3
- Remove power settings override
* Wed Feb 15 2023 David King <amigadave@amigadave.com> - 44~beta-1
- Update to 44.beta
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 43.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Fri Sep 30 2022 Kalev Lember <klember@redhat.com> - 43.0-2
- Backport upstream patch to default to ibus for X11 clients (#2128423)
* Tue Sep 20 2022 Kalev Lember <klember@redhat.com> - 43.0-1
- Update to 43.0
* Tue Sep 06 2022 Kalev Lember <klember@redhat.com> - 43~rc-1
- Update to 43.rc
* Wed Aug 10 2022 Kalev Lember <klember@redhat.com> - 43~beta-1
- Update to 43.beta
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 43~alpha-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Tue Jul 19 2022 Milan Crha <mcrha@redhat.com> - 43~alpha-3
- Build against gcr-4 due to other depencencies use it
* Mon Jul 18 2022 Kalev Lember <klember@redhat.com> - 43~alpha-2
- Build against geocode-glib2 for libsoup3 support
* Fri Jul 15 2022 Kalev Lember <klember@redhat.com> - 43~alpha-1
- Update to 43.alpha
* Thu Jun 16 2022 David King <amigadave@amigadave.com> - 42.2-1
- Update to 42.2
* Sun Mar 20 2022 David King <amigadave@amigadave.com> - 42.1-1
- Update to 42.1
* Tue Mar 08 2022 David King <amigadave@amigadave.com> - 42~rc-1
- Update to 42.rc
* Mon Feb 14 2022 David King <amigadave@amigadave.com> - 42~beta-1
- Update to 42.beta
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 42~alpha-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Jan 11 2022 Stephen Gallagher <sgallagh@redhat.com> - 42~alpha-2
- Lessen dependency on gsettings-desktop-schemas
* Mon Jan 10 2022 David King <amigadave@amigadave.com> - 42~alpha-1
- Update to 42.alpha
* Mon Dec 13 2021 Peter Hutterer <peter.hutterer@redhat.com> - 41.0-2
- Rebuild for libwacom soname bump
* Sat Sep 18 2021 Kalev Lember <klember@redhat.com> - 41.0-1
- Update to 41.0
* Mon Aug 30 2021 Adam Williamson <awilliam@redhat.com> - 41~rc-2
- Rebuild with no changes for update wrangling reasons (#1998700)
* Mon Aug 30 2021 Bastien Nocera <bnocera@redhat.com> - 41~rc-1
+ gnome-settings-daemon-41~rc-1
- Update to 41.rc
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 40.0.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Apr 14 2021 Kalev Lember <klember@redhat.com> - 40.0.1-1
- Update to 40.0.1
* Mon Mar 22 2021 Kalev Lember <klember@redhat.com> - 40.0-1
- Update to 40.0
- Drop old obsoletes/conflicts
* Mon Mar 15 2021 Kalev Lember <klember@redhat.com> - 40~rc-1
- Update to 40.rc
* Mon Feb 15 2021 Kalev Lember <klember@redhat.com> - 40~beta-2
- Fix loading gtk modules
- Update versioned dependencies
* Mon Feb 15 2021 Florian Müllner <fmuellner@redhat.com> - 40~beta-1
- Update to 40.beta
* Mon Feb 15 2021 Florian Müllner <fmuellner@redhat.com> - 40~alpha.1-1
- Update to 40.alpha.1
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.38.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Oct 9 2020 Kalev Lember <klember@redhat.com> - 3.38.1-1
- Update to 3.38.1
* Mon Sep 14 2020 Kalev Lember <klember@redhat.com> - 3.38.0-1
- Update to 3.38.0
* Mon Sep 07 2020 Kalev Lember <klember@redhat.com> - 3.37.92-1
- Update to 3.37.92
* Sat Aug 29 2020 Kalev Lember <klember@redhat.com> - 3.37.1-1
- Update to 3.37.1
* Mon Aug 17 2020 Kalev Lember <klember@redhat.com> - 3.37.0-1
- Update to 3.37.0
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.36.1-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.36.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Thu Apr 30 2020 Kalev Lember <klember@redhat.com> - 3.36.1-1
- Update to 3.36.1
* Mon Mar 09 2020 Kalev Lember <klember@redhat.com> - 3.36.0-1
- Update to 3.36.0
* Mon Mar 02 2020 Kalev Lember <klember@redhat.com> - 3.35.92-1
- Update to 3.35.92
* Tue Feb 18 2020 Kalev Lember <klember@redhat.com> - 3.35.91-1
- Update to 3.35.91
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.35.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Jan 16 2020 Kalev Lember <klember@redhat.com> - 3.35.0-2
- Rebuilt for libgnome-desktop soname bump
* Tue Jan 07 2020 Kalev Lember <klember@redhat.com> - 3.35.0-1
- Update to 3.35.0
* Mon Oct 14 2019 Kalev Lember <klember@redhat.com> - 3.34.1-1
- Update to 3.34.1
* Mon Sep 09 2019 Kalev Lember <klember@redhat.com> - 3.34.0-1
- Update to 3.34.0
* Fri Sep 06 2019 Kalev Lember <klember@redhat.com> - 3.33.92-1
- Update to 3.33.92
* Mon Aug 26 2019 Kalev Lember <klember@redhat.com> - 3.33.90-1
- Update to 3.33.90
- Drop old versioned conflicts
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.33.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Jul 21 2019 Kalev Lember <klember@redhat.com> - 3.33.0-3
- Rebuilt for libgnome-desktop soname bump
* Mon Jul 08 2019 Kalev Lember <klember@redhat.com> - 3.33.0-2
- Rebuilt for libgweather soname bump
* Tue Jun 25 2019 Kalev Lember <klember@redhat.com> - 3.33.0-1
- Update to 3.33.0
* Wed Jun 19 2019 Kalev Lember <klember@redhat.com> - 3.32.1-1
- Update to 3.32.1
* Tue May 28 2019 Marek Kasik <mkasik@redhat.com> - 3.32.0-2
- Fix NSS crash at smartcard plugin (#1688791)
* Mon Mar 11 2019 Kalev Lember <klember@redhat.com> - 3.32.0-1
- Update to 3.32.0
Resolves: #1698929
* Mon Jan 14 2019 Carlos Garnacho <cgarnach@redhat.com> - 3.28.1-2
- Enable IBus for OSK purposes, necessary for focus tracking
Resolves: #1626105
* Wed Mar 06 2019 Kalev Lember <klember@redhat.com> - 3.31.92-1
- Update to 3.31.92
* Wed Feb 20 2019 Kalev Lember <klember@redhat.com> - 3.31.91-1
- Update to 3.31.91
* Wed Feb 06 2019 Kalev Lember <klember@redhat.com> - 3.31.90-1
- Update to 3.31.90
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.31.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Jan 09 2019 Kalev Lember <klember@redhat.com> - 3.31.2-1
- Update to 3.31.2
* Tue Nov 20 2018 Pete Walter <pwalter@fedoraproject.org> - 3.30.1.2-3
- Move gnome-remote-desktop recommends to gnome-control-center
* Fri Nov 09 2018 Ray Strode <rstrode@redhat.com> - 3.30.1.2-2
- Add recommends for gnome-remote-desktop after irc discussion
* Thu Oct 04 2018 Kalev Lember <klember@redhat.com> - 3.30.1.2-1
- Update to 3.30.1.2
* Fri Sep 28 2018 Kalev Lember <klember@redhat.com> - 3.30.1.1-1
- Update to 3.30.1.1
* Thu Sep 06 2018 Kalev Lember <klember@redhat.com> - 3.30.0-1
- Update to 3.30.0
* Sun Aug 12 2018 Kalev Lember <klember@redhat.com> - 3.29.90.1-1
- Update to 3.29.90.1
* Tue Jul 31 2018 Florian Weimer <fweimer@redhat.com> - 3.28.1-3
- Rebuild with fixed binutils
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.28.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Apr 12 2018 Kalev Lember <klember@redhat.com> - 3.28.1-1
- Update to 3.28.1
* Tue Apr 10 2018 Michael Catanzaro <mcatanzaro@gnome.org> - 3.28.0-2
- Disable automatic suspend
- Disable automatic suspend, except when on battery power
* Mon Mar 12 2018 Kalev Lember <klember@redhat.com> - 3.28.0-1
- Update to 3.28.0
@ -1526,3 +1705,4 @@ http://bugzilla.gnome.org/show_bug.cgi?id=580761 for details
* Thu Dec 06 2007 - Bastien Nocera <bnocera@redhat.com> - 2.21.5-1
- First package
## END: Generated by rpmautospec

View File

@ -0,0 +1,71 @@
From 0d6208bfaceaa9f27d30ff0f38e3accf7bd56f95 Mon Sep 17 00:00:00 2001
From: Felipe Borges <felipeborges@gnome.org>
Date: Wed, 15 Jan 2025 15:26:19 +0100
Subject: [PATCH] housekeeping: Disambiguate mount point names in notifications
There might be mount-points with same name, so when that's the case,
let's show the path instead.
Related: RHEL-11910
---
plugins/housekeeping/gsd-disk-space.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/plugins/housekeeping/gsd-disk-space.c b/plugins/housekeeping/gsd-disk-space.c
index c5ae8f6b..aff85205 100644
--- a/plugins/housekeeping/gsd-disk-space.c
+++ b/plugins/housekeeping/gsd-disk-space.c
@@ -670,7 +670,8 @@ ldsm_notify (const char *summary,
static void
ldsm_notify_for_mount (LdsmMountInfo *mount,
- gboolean multiple_volumes)
+ gboolean multiple_volumes,
+ gboolean is_ambiguous_name)
{
gboolean has_trash;
gchar *name;
@@ -688,7 +689,7 @@ ldsm_notify_for_mount (LdsmMountInfo *mount,
free_space_str = g_format_size (free_space);
if (multiple_volumes) {
- summary = g_strdup_printf (_("Low Disk Space on “%s”"), name);
+ summary = g_strdup_printf (_("Low Disk Space on “%s”"), is_ambiguous_name ? path : name);
if (has_trash) {
body = g_strdup_printf (_("The volume “%s” has only %s disk space remaining. You may free up some space by emptying the trash."),
name,
@@ -778,8 +779,10 @@ ldsm_maybe_warn_mounts (GList *mounts,
gboolean multiple_volumes)
{
GList *l;
+ GHashTable *mount_names;
gboolean done = FALSE;
+ mount_names = g_hash_table_new (g_str_hash, g_str_equal);
for (l = mounts; l != NULL; l = l->next) {
LdsmMountInfo *mount_info = l->data;
LdsmMountInfo *previous_mount_info;
@@ -832,10 +835,19 @@ ldsm_maybe_warn_mounts (GList *mounts,
}
if (show_notify) {
- ldsm_notify_for_mount (mount_info, multiple_volumes);
+ g_autofree gchar *mount_name = NULL;
+ gboolean is_ambiguous_name = FALSE;
+
+ mount_name = g_unix_mount_guess_name (mount_info->mount);
+ is_ambiguous_name = g_hash_table_contains (mount_names, mount_name);
+ g_hash_table_add (mount_names, mount_name);
+
+ ldsm_notify_for_mount (mount_info, multiple_volumes, is_ambiguous_name);
done = TRUE;
}
}
+
+ g_hash_table_destroy (mount_names);
}
static gboolean
--
2.37.1

View File

@ -0,0 +1,5 @@
[org.gnome.settings-daemon.plugins.power]
sleep-inactive-ac-timeout=0
[org.gnome.settings-daemon.plugins.power]
power-button-action=nothing

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (gnome-settings-daemon-47.2.tar.xz) = fd3e358aa1f6a317dc49436965135dde204bd55fee9c96127d1208aafb60af3667fcc344a1667be1596892987f67ebab3fc7eefaeeefce82e1c65635e36c126f

View File

@ -0,0 +1,84 @@
From 0b7f0aa63629a406921ecf1f0b56367456a42581 Mon Sep 17 00:00:00 2001
From: Felipe Borges <felipeborges@gnome.org>
Date: Wed, 12 Nov 2025 12:50:32 +0100
Subject: [PATCH] subman: Delay startup notification by 30 minutes
We don't want to disturb users during their first login, initial
setup, and/or onboarding.
Let's show the notification 30 minutes later.
Resolves: RHEL-127784
---
plugins/subman/gsd-subscription-manager.c | 27 ++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/plugins/subman/gsd-subscription-manager.c b/plugins/subman/gsd-subscription-manager.c
index eb45e367..e2acba37 100644
--- a/plugins/subman/gsd-subscription-manager.c
+++ b/plugins/subman/gsd-subscription-manager.c
@@ -39,6 +39,8 @@
#define GSD_SUBSCRIPTION_DBUS_PATH GSD_DBUS_PATH "/Subscription"
#define GSD_SUBSCRIPTION_DBUS_INTERFACE GSD_DBUS_BASE_INTERFACE ".Subscription"
+#define STARTUP_NOTIFICATION_DELAY (30 * 60)
+
static const gchar introspection_xml[] =
"<node>"
" <interface name='org.gnome.SettingsDaemon.Subscription'>"
@@ -84,6 +86,8 @@ typedef struct
NotifyNotification *notification_registration_required;
GsdSubmanSubscriptionStatus subscription_status;
GsdSubmanSubscriptionStatus subscription_status_last;
+
+ guint startup_registration_required_notification_id;
} GsdSubscriptionManagerPrivate;
enum {
@@ -510,6 +514,15 @@ _show_notification (GsdSubscriptionManager *manager, _NotifyKind notify_kind)
g_timer_reset (priv->timer_last_notified);
}
+static void _client_maybe__show_notification (GsdSubscriptionManager *manager);
+static gboolean
+_startup_registration_required_notification_cb (GsdSubscriptionManager *manager)
+{
+ _client_maybe__show_notification (manager);
+
+ return FALSE;
+}
+
static void
_client_maybe__show_notification (GsdSubscriptionManager *manager)
{
@@ -603,7 +616,14 @@ _client_maybe__show_notification (GsdSubscriptionManager *manager)
/* startup */
if (!was_read && is_read && priv->subscription_status == GSD_SUBMAN_SUBSCRIPTION_STATUS_UNKNOWN) {
- _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED);
+ if (priv->startup_registration_required_notification_id == 0) {
+ priv->startup_registration_required_notification_id =
+ g_timeout_add_seconds (STARTUP_NOTIFICATION_DELAY,
+ (GSourceFunc) _startup_registration_required_notification_cb, manager);
+ } else {
+ _show_notification (manager, _NOTIFY_REGISTRATION_REQUIRED);
+ }
+
return;
}
@@ -1175,6 +1195,11 @@ gsd_subscription_manager_finalize (GObject *object)
g_clear_object (&priv->bus_cancellable);
}
+ if (priv->startup_registration_required_notification_id) {
+ g_source_remove (priv->startup_registration_required_notification_id);
+ priv->startup_registration_required_notification_id = 0;
+ }
+
g_clear_pointer (&priv->installed_products, g_ptr_array_unref);
g_clear_pointer (&priv->introspection_data, g_dbus_node_info_unref);
g_clear_object (&priv->connection);
--
2.51.0

2282
subscription-manager.patch Normal file

File diff suppressed because it is too large Load Diff

3651
use-shell-brightness.patch Normal file

File diff suppressed because it is too large Load Diff