Recently, I installed SwayWM on my Pop!_OS 24.04 laptop, but had trouble with keyrings and applications that need keyrings.
Signal Desktop, when launched with signal-desktop from the terminal:
Database Error
Unable to access the database encryption key because the OS encryption keyring backend has changed from gnome_libsecret to basic_text. This can occur if the desktop environment changes, for example between GNOME and KDE.
Please switch to the previous desktop environment or try to run signal with the command line flag –password-store=”gnome-libsecret”.
Terminal stdout:
NODE_ENV production
NODE_CONFIG_DIR /opt/Signal/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME pop
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: /home/marx/.config/Signal
(node:14210) [DEP0180] DeprecationWarning: fs.Stats constructor is deprecated.
(Use `signal-desktop --trace-deprecation ...` to show where the warning was created)
Detected change in safeStorage backend, can't decrypt DB key (previous: gnome_libsecret, current: basic_text)
2026-07-04 14:12:35.188: ERROR CORE sqlcipher_page_cipher: hmac check failed for pgno=1
2026-07-04 14:12:35.189: ERROR CORE sqlite3Codec: error decrypting page 1 data: 1
2026-07-04 14:12:35.189: ERROR CORE sqlcipher_codec_ctx_set_error 1
2026-07-04 14:12:35.231: ERROR CORE sqlcipher_page_cipher: hmac check failed for pgno=1
2026-07-04 14:12:35.232: ERROR CORE sqlite3Codec: error decrypting page 1 data: 1
2026-07-04 14:12:35.232: ERROR CORE sqlcipher_codec_ctx_set_error 1
Element Desktop, when launched with element-desktop :
Your system has an unsupported keyring meaning the database cannot be opened.
Electron’s keyring detection did not find a supported backend. You can attempt to manually configure the backend by starting Element with a command-line argument, a one-time operation. See https://www.electronjs.org/docs/latest/api/safe-storage#safestoragegetselectedstoragebackend-linux.
Running Signal with --password-store="gnome-libsecret" works and running Element after unlocking gnome-keyring with user password works too.
The proper solution I am seeing, however, is that we need to set gnome_libsecret as default keyring backend in sway and configure sway to unlock gnome keyring automatically when a session starts, but I couldn’t find a way to actually do this.
I’ve tried:
modifying /usr/share/xdg-desktop-portal/portals/gnome-keyring.portal by changing UseIn=gnome;sway ,
adding exec /usr/bin/gnome-keyring-daemon --start --components=ssh,secrets,pkcs11 to sway config file
and following this guide:
-
Add the following lines at the end of their respective sections in /etc/pam.d/login (I start a sway session from a TTY, no display manager)
auth optional pam_gnome_keyring.sosession optional pam_gnome_keyring.so auto_start -
Add the following line to the end of /etc/pam.d/passwd:
password optional pam_gnome_keyring.so -
Create a script.
eval $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh | sed 's/^(.*)/export 1/g') dbus-run-session sway -
Give script execute permissions.
chmod +x sway-launch.sh -
Reboot and run script to start session.
So my question is: how to properly configure gnome keyring in sway as default keyring to resolve these types of error messages?
Please, go a little bit in depth explaining your solution when you answer this. All I know about keyrings and PAM is that, basically, a keyring is a database where applications store and access cryptographic keys, and PAM sits between programs and keyrings allowing them to interact with each other.
Edit 1: Additional information
-
Every time when starting a session (with or without grawity’s startup script) through a TTY, this is printed to stdout.
** Message: couldn't access control socket /home/marx/.cache/keyring-IFQRR3/control: No such file or directory -
echo $DBUS_SESSION_BUS_ADDRESSreturnsunix:path=/run/user/1000/bus -
busctl --user | grep gnome.keyringreturns
:1.41 11383 gnome-keyring-d marx :1.41 user@1000.service - -
:1.42 11382 gnome-keyring-d marx :1.42 user@1000.service - -
org.freedesktop.secrets 11383 gnome-keyring-d marx :1.41 user@1000.service - -
org.gnome.keyring 11383 gnome-keyring-d marx :1.41 user@1000.service - -
org.gnome.keyring.PrivatePrompter - - - (activatable) - - -
org.gnome.keyring.SystemPrompter - - - (activatable) - - -
- Logs from
journalctl | grep gnome-keyring
Jul 03 00:31:46 pop systemd[1716]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 00:35:19 pop systemd[1716]: Closed gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 08:40:30 pop systemd[2158]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 08:48:13 pop systemd[2158]: Closed gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 08:50:00 pop systemd[2142]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 09:16:00 pop systemd[2142]: Closed gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 09:16:42 pop systemd[1722]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 14:47:14 pop systemd[1722]: Closed gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 15:20:42 pop systemd[1717]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
Jul 03 17:02:44 pop systemd[1717]: Started gnome-keyring-daemon.service - GNOME Keyring daemon.
Jul 03 17:02:44 pop gnome-keyring-daemon[10640]: GNOME_KEYRING_CONTROL=/run/user/1000/keyring
Jul 03 17:02:44 pop gnome-keyring-daemon[10640]: The Secret Service was already initialized
Jul 03 17:02:44 pop gnome-keyring-daemon[10639]: discover_other_daemon: 1
Jul 03 17:02:44 pop gnome-keyring-daemon[10639]: discover_other_daemon: 1GNOME_KEYRING_CONTROL=/run/user/1000/keyring
Jul 03 17:02:44 pop gnome-keyring-d[10640]: The Secret Service was already initialized
Jul 03 17:02:56 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:02:56 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:02:56 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:02:56 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:02:56 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:02:56 pop gnome-keyring-d[10640]: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:17:32 pop gnome-keyring-daemon[11891]: another secret service is running
Jul 03 17:17:42 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:17:42 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:17:42 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:17:42 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:17:42 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:17:42 pop gnome-keyring-d[10640]: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:44:06 pop gnome-keyring-daemon[11891]: The SSH agent was already initialized
Jul 03 17:44:06 pop gnome-keyring-daemon[11891]: The Secret Service was already initialized
Jul 03 17:44:06 pop gnome-keyring-daemon[11891]: The PKCS#11 component was already initialized
Jul 03 17:44:06 pop gnome-keyring-daemon[14062]: discover_other_daemon: 1
Jul 03 17:44:16 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:16 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:16 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:16 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:16 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:44:16 pop gnome-keyring-d[10640]: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:44:21 pop sudo[14240]: marx : TTY=pts/1 ; PWD=/home/marx ; USER=root ; COMMAND=/usr/bin/gnome-keyring-daemon --start
Jul 03 17:44:21 pop gnome-keyring-daemon[14243]: couldn't connect to dbus session bus: Failed to execute child process “dbus-launch” (No such file or directory)
Jul 03 17:44:21 pop gnome-keyring-daemon[14243]: couldn't connect to dbus session bus: Failed to execute child process “dbus-launch” (No such file or directory)
Jul 03 17:44:21 pop gnome-keyring-daemon[14243]: couldn't connect to dbus session bus: Failed to execute child process “dbus-launch” (No such file or directory)
Jul 03 17:44:40 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:40 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:40 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:40 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 17:44:40 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 17:44:40 pop gnome-keyring-d[10640]: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 18:19:15 pop gnome-keyring-daemon[20378]: gnome-keyring-daemon: Unknown option --startup
Jul 03 18:19:15 pop gnome-keyring-daemon[20379]: another secret service is running
Jul 03 18:19:18 pop gnome-keyring-daemon[20384]: gnome-keyring-daemon: The --start option is incompatible with --login
Jul 03 18:19:18 pop gnome-keyring-daemon[20379]: The SSH agent was already initialized
Jul 03 18:19:18 pop gnome-keyring-daemon[20379]: The Secret Service was already initialized
Jul 03 18:19:18 pop gnome-keyring-daemon[20379]: The PKCS#11 component was already initialized
Jul 03 18:19:18 pop gnome-keyring-daemon[20385]: discover_other_daemon: 1
Jul 03 18:30:19 pop gnome-keyring-daemon[20379]: The SSH agent was already initialized
Jul 03 18:30:19 pop gnome-keyring-daemon[20379]: The Secret Service was already initialized
Jul 03 18:30:19 pop gnome-keyring-daemon[20379]: The PKCS#11 component was already initialized
Jul 03 18:30:19 pop gnome-keyring-daemon[21340]: discover_other_daemon: 1
Jul 03 18:30:38 pop gnome-keyring-daemon[10640]: gkd_secret_service_get_objects: assertion 'GKD_SECRET_IS_SERVICE (self)' failed
Jul 03 18:30:38 pop gnome-keyring-daemon[10640]: gkd_secret_objects_lookup_collection: assertion 'GKD_SECRET_IS_OBJECTS (self)' failed
Jul 03 18:30:38 pop gnome-keyring-d[10640]: gkd_secret_service_get_objects: assertion 'GKD_SECRET_IS_SERVICE (self)' failed
Jul 03 18:30:38 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 18:30:38 pop gnome-keyring-d[10640]: gkd_secret_objects_lookup_collection: assertion 'GKD_SECRET_IS_OBJECTS (self)' failed
Jul 03 18:30:38 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 18:30:38 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_object_path: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 18:30:38 pop gnome-keyring-daemon[10640]: GLib-GIO: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 18:30:38 pop gnome-keyring-d[10640]: g_dbus_interface_skeleton_get_connection: assertion 'G_IS_DBUS_INTERFACE_SKELETON (interface_)' failed
Jul 03 18:30:38 pop gnome-keyring-d[10640]: g_dbus_connection_emit_signal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
Jul 03 19:42:48 pop systemd[1717]: Stopping gnome-keyring-daemon.service - GNOME Keyring daemon...
Jul 03 19:42:48 pop systemd[1717]: Stopped gnome-keyring-daemon.service - GNOME Keyring daemon.
Jul 03 19:42:48 pop systemd[1717]: Closed gnome-keyring-daemon.socket - GNOME Keyring daemon.
The part after Jul 03 17:02:44 pop systemd[1717]: Started gnome-keyring-daemon.service - GNOME Keyring daemon. repeats indefinitely.
Edit 2: Another attempt and workaround fix
I also tried following these instruction given on Discord
I got rid of the script and left only the PAM entries.
systemctl --user status gnome-keyring-daemon.socket gnome-keyring-daemon.service returns
● gnome-keyring-daemon.socket - GNOME Keyring daemon
Loaded: loaded (/usr/lib/systemd/user/gnome-keyring-daemon.socket; enabled; preset: enabled)
Active: active (listening) since Wed 2026-07-08 17:40:24 +04; 9s ago
Triggers: ● gnome-keyring-daemon.service
Listen: /run/user/1000/keyring/control (Stream)
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/gnome-keyring-daemon.socket
Jul 08 17:40:24 pop systemd[1723]: Listening on gnome-keyring-daemon.socket - GNOME Keyring daemon.
○ gnome-keyring-daemon.service - GNOME Keyring daemon
Loaded: loaded (/usr/lib/systemd/user/gnome-keyring-daemon.service; enabled; preset: enabled)
Active: inactive (dead)
TriggeredBy: ● gnome-keyring-daemon.socket
Daemon is running just fine, but still, the error persists.
Workaround fix: created a soft link /usr/bin/signal to a script containing command signal-desktop --password-store='gnome-libsecret'.