GNOME
GTK3 attempted to get away from strong dependency on theming engines by introducing CSS stylesheets. This was supposed to make application theming simple and portable.
In GTK4 you can choose either a theming engine or CSS stylesheets.
Keyring
-
GNOME Keyring is a collection of components that store and manage application access to secrets, passwords, keys, and certificates.
GNOME Keyring can be managed:
- Seahorse via GUI
- secret-tool which uses (and is included in) libsecret
- gnome-keyring-query which uses the archived libgnome-keyring
Extensions
-
GNOME Extensions provide a variety of popular hacks and changes to the Shell. They are managed by gnome-extensions-app but they are typically added from the GNOME Extensions website using a browser plugin.
These extensions are added to ~/.local/share/gnome-shell/extensions, but many of them can also be made available to all users by installing them using a package manager, in which case they are placed in /usr/share/gnome-shell/extensions.
Extensions appear to be mostly JavaScript applications, so they can probably simply be git cloned into the respective directories as well.
Configuration
-
dconf is a key-based blob database for storing GNOME configurations and application settings. These settings are stored as keys grouped under paths in a way analogous to the Windows Registry.
- dconf is also a CLI utility for reading and writing individual values or entire directories to and from a dconf database. Direct manipulation of dconf is discouraged, rather users and developers are encouraged to use dconf-editor or gsettings.
- GSettings is a high-level API for application settings that serves as the frontend for dconf as well as a CLI utility for changing user settings.
A dconf profile is a list of binary dconf databases, typically stored at /etc/dconf/profile/user
Here is a representative dconf profile. user is the name of the user database, typically found at ~/.config/dconf/ or /etc/dconf/profile/user and local and site refer to binary databases named as such in /etc/dconf/db/.
service-db:keyfile/user # (1) user-db:user system-db:local system-db:site
- This line sets the dconf keyfile backend, required when home directories are mounted over NFS
Keyfiles are INI-format configs placed in directories like local.d/ that allow dconf settings to be specified declaratively.
[org/gnome/desktop/input-sources] xkb-options=['terminate:ctrl_alt_bksp', 'compose:ralt'] # (1)
- Equivalent to:
gsettings set org.gnome.desktop.input-sources xkb-options=['terminate:ctrl_alt_bksp', 'compose:ralt']
Tasks
Desktop background
- Create a keyfile for the local database in /etc/dconf/db/local.d/01-background
[org/gnome/desktop/background] picture-uri='file:///usr/local/share/backgrounds/wallpaper.jpg' picture-options='scaled' primary-color='000000' secondary-color='FFFFFF'
Custom application shortcut
-
Custom shortcuts are stored in dconf using a "relocatable schema" which has three keys: name, command, and binding.
gsettings set org.gnome.setting-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0 name 'Terminal' gsettings set org.gnome.setting-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0 binding '<Super>Enter' gsettings set org.gnome.setting-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0 command '/usr/bin/gnome-terminal'
Note that this doesn't seem to work...
File associations
-
File associations are stored in .desktop files stored in /usr/share/applications/. These INI-format files store all kinds of metadata on installed applications, including names and keywords in all supported languages. Filetypes are stored under the MimeType key as semicolon-delimited MIME Types.
[Desktop Entry] Type=Application MimeType=application/x-newtype Name=My Application 1 Exec=myapplication1
MIME Type descriptors as stored as XML files stored in /usr/share/mime/packages/:
<?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="application/x-newtype"> <comment>new mime type</comment> <glob pattern="*.xyz"/> </mime-type> </mime-info>
Applications
gio
-
GIO (Gnome Input/Output) is a library that facilitates interaction with virtual file systems. Applications built with the GIO library can access GVFS mounts, which can have many backends.
GIO commands appear to substitute for common POSIX commands and GNU utilities (e.g.
gio cat
,gio mkdir
,gio rename
, etc).# Read (empty) attribute of new file gio info -a 'metadata::*' /tmp/myfile # Create attribute gio set -t string /tmp/myfile 'metadata::mynote' 'Please remember to delete this file!' # Rename file gio move /tmp/myfile /tmp/newfile # Confirm that attribute still exists gio info -a 'metadata::*' /tmp/newfile # (1)
- gio info appears to have replaced the earlier gvfs-info and gvfs-mime utilities used to inspect registered MIME types.
gsettings
-
gsettings is the CLI frontend intended to support changes to GNOME application settings, stored in dconf databases.
Examples# Change function of Caps Lock gsettings set org.gnome.desktop.input-sources xkb-options "['caps:ctrl_modifier']" # Change mouse cursor size to various sizes. This can also be done in GNOME as Settings > Accessibility gsettings set org.gnome.desktop.interface cursor-size 24 # (1) # Enable GTK Inspector gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true # (2)
- Valid sizes include 24, 32, 48, 64, and 96
- Can be run with Ctrl+Shift+D
notify-send
- Used for displaying desktop notifications on GNOME Desktop Environment
notify-send -i face-smile Hello "Hello, World!"