1. Tutorials

Uncover Hidden Settings for your GNOME Desktop with Dconf

.

GNOME desktop lacks a serious set of UX improvements when it comes to displaying possible functionalities for each application and their settings. Sometimes users end up not even knowing about the existence of these settings and what they could do for them.

What is Dconf, D-Bus and GSettings?

As a background story, you should know that developers usually avoid using hard-coded configuration values inside their programs, as they prefer to define them in a better separate structure. This helps a lot because it adds the possibility for applications to communicate with other applications when needed, ending in providing the ability of changing settings for end users through the GUI, beside other features under the hood.

The D-Bus messaging system is what allows applications to communicate to each other in Linux. And GNOME uses a low-level API called Dconf to quickly build configuration possibility on top of D-Bus to provide an interface for each application to list & edit its settings. Dconf is considered to be a low-level API, so GNOME provided another layer named GSettings that specially allows storing, accessing and editing its GNOME applications’ settings.

1 dconf
Dconf architecture, source from Wikipedia by JayBeeDe: https://en.wikipedia.org/wiki/Dconf#/media/File:Architecture_de_dconf.png

So when you open your GNOME Control Center and change a specific setting, what happens in the background is that a specific GSettings key related to that setting is changed with the new value you have entered/chosen.

Where’s the issue, you may ask? The issue is that there are tons of possible features and options you can enable in various GNOME applications using Dconf. And those settings are sadly not normally displayed in the settings windows for GNOME applications, leaving most of the GNOME userbase unaware of the existence of such features and settings.

Installing Dconf Editor

3 dconf
Dconf-Editor

Luckily, there’s a very nice GUI program called “Dconf-editor” that allows you to list all the possible configuration keys in the system and edit them easily. So you can use this program to browse your hidden settings and modify them if you wish to.

To install it on Ubuntu, run the following command:

sudo apt install dconf-editor

On Fedora:

sudo dnf install dconf-editor

For other distributions just search for it in your package manager.

Example Features to Enable via Dconf Editor

So this is the tricky part.

Navigate to the to /org/gnome path, where you will find all the GNOME applications that you can tweak from there:

5 dconf

From here you can starting browsing each application’s settings and modify them according to your needs BUT take the following into account:

  1. Some changes that you do may result in a broken system or functionality of the app you are modifying its settings. So carefully think about what you are doing.
  2. Not all possible settings here are implemented in the apps their selves. For example you may find a setting that says “Use me to change how the calendar in the Shell looks like”, but even if you change it, nothing will happen. So it is up to you to figure out what works and what does not.

So here’s an example feature that you can enable via this method, which is the GNOME Shell hotcorners (Displaying the overview window by hovering the upper left corner). You can enable it or disable it from here:

7 dconf

Another thing you can modify is whether you would like your writing cursor to blink or not? And in what speed? You can choose to freeze it if you want:

9 dconf

You can also choose whether you want overlay scrollbars or not:

11 dconf

Here’s how your Nautilus file manager would look with it and without it:

13 dconf
Nautilus without Overlay Scrollbars
15 dconf
Nautilus with Overlay Scrollbars

Under /org/gnome/mutter, you can enable some settings related to window management, such as centralizing new windows or window tiling:

17 dconf

All of these options are sadly not displayed for modification in the GNOME apps their selves. So that’s why this method could be helpful for you.

Of course, you can now continue exploring possible settings and what you can change from here.

Using GSettings from the Command Line

Now say you want to tell a friend that they can easily enable hotcorners on their GNOME Shell desktop, but you don’t want to tell them to go and install Dconf-editor and navigate to here and that…. Instead, you want to give them a single command to do the task.

GSettings can be used for that like the following:

gsettings set org.gnome.desktop.interface enable-hot-corners true

Where org.gnome.desktop.interface is the path to the property you are editing, and enable-hot-corners is the name of that property, and true is its new value (Could be text or numerical or other type of values, depending on the property itself).

You can list all possible GSettings properties and their current values using the following command:

gsettings list-recursively

Which should output:

...
org.gnome.Vino mailto ''
org.gnome.Vino lock-screen-on-disconnect false
org.gnome.Vino use-upnp false
org.gnome.Vino vnc-password 'keyring'
org.gnome.Vino view-only false
com.ubuntu.user-interface.desktop text-scaling-factor 1.0
com.ubuntu.user-interface.desktop scaling-factor uint32 0
com.ubuntu.user-interface.desktop cursor-size 18
org.yorba.shotwell.sharing.publishing-gallery3 last-album ''
org.yorba.shotwell.sharing.publishing-gallery3 url ''
org.yorba.shotwell.sharing.publishing-gallery3 scaling-constraint-id 0
org.yorba.shotwell.sharing.publishing-gallery3 strip-metadata false
org.yorba.shotwell.sharing.publishing-gallery3 scaling-pixels 1024
org.yorba.shotwell.sharing.publishing-gallery3 api-key ''
org.yorba.shotwell.sharing.publishing-gallery3 username ''
org.freedesktop.Tracker.DB journal-rotate-destination ''
org.freedesktop.Tracker.DB journal-chunk-size 50
org.gnome.settings-daemon.plugins.xsettings antialiasing 'rgba'
org.gnome.settings-daemon.plugins.xsettings rgba-order 'rgb'
org.gnome.settings-daemon.plugins.xsettings hinting 'slight'
org.gnome.settings-daemon.plugins.xsettings overrides @a{sv} {}
org.gnome.settings-daemon.plugins.xsettings disabled-gtk-modules @as []
org.gnome.settings-daemon.plugins.xsettings enabled-gtk-modules @as []
org.gnome.settings-daemon.plugins.xsettings priority 0
org.gnome.settings-daemon.plugins.xsettings active true
org.gnome.Mahjongg window-height 600
...

Conclusion

So you now know how to modify GSettings values either from the command line or from the GUI with dconf-editor program. As we said, you should always be cautious about what properties are you modifying and what values are you entering, that’s why we don’t recommend this for non-advanced users.

However, you should now see the problem of GNOME desktop putting these hidden possible features in those deep places, making it harder for people to find them. A UX revamp for GNOME could help!

.