From the previous article, we know it's feasible to add our custom shortcuts via Gnome Control Center or using
gsettings
commands in script to change key values indconf
database schemas.
After knowing more about dconf database
configuration system and its cli tool, I figure out another handier way to manage custom shortcuts. All we need to do is to define the shortcuts in two files and then load it by dconf
commands.
Principles(dconf database and commands)
dconf database schema and keys
As we kown from the previous article, creating custom shortcuts keybindings is actually related to keys operation in two dconf
schemas:
1. in the relocatable schema org.gnome.settings-daemon.plugins.media-keys.custom-keybinding
, set three keys(name
, command
, binding
) in the specific custom shortcut sub-folder path
;
2. in schema org.gnome.settings-daemon.plugins.media-keys
, update key custom-keybindings
to generate new sub-folders for created custom shortcuts.
With the help of dconf
commands, we can read, write schema keys, or we can export(dump) keys to a file, import(load) keys from a file via shell redirection operation.
dconf commands basic
$ dconf help Usage: dconf COMMAND [ARGS...] Commands: help Show this information read Read the value of a key list List the contents of a dir write Change the value of a key reset Reset the value of a key or dir compile Compile a binary database from keyfiles update Update the system databases watch Watch a path for changes dump Dump an entire subpath to stdout load Populate a subpath from stdin
By knowing the principles, we will introduce how to manage custom shortcuts keybindings via two simple transition files instead of operating keys in dconf
schemas directly. This method brings more convenience, we can:
- edit multiple keybindings in plain text files
- backup and restore shortcut keybindings definitions from files
- avoid long path strings when operating relocate schema keys
Files needed
File 1: custom shortcuts keybindings dconf
template
[custom0] binding='F1' command='flameshot gui' name='Flameshot Selection Screenshot'
This template file contains one custom shortcut: press F1
to call screenshot application flameshot
, and it's the first custom shortcut keybinding. We can see that each shortcut contains 4 lines:
- [customX]
: the sub-folder name to store keys and values for detailed definition of this shortcut. The name string in the square brackets should be custom
along with a sequential number starting from 0 and increasing by 1 for each shortcut;
- binding='F1'
: keyboard key(s) binding for this shortcut. Make sure to keep the single or last key without any brackets surrounded. If we assign keys combination, all the prior keys should be put in angle brackets except the last one. Correct key(s) string examples: <Ctrl><Alt>Print
, F1
.
- command='falemshot gui'
: the command to call when keys are pressed. It should be tested before we put it here.
- name='Flameshot Selection Screenshot'
: description of this shortcut keybinding.
We can add more shortcuts keybindings by editiing this file, just add new sections at the end.
[custom0] binding='F1' command='flameshot gui' name='Flameshot Selection Screenshot' [custom1] binding='<Alt>1' command='gnome-terminal' name='Open Terminal'
File 2: template to save the path of custom shortcuts keybinding sub-folders
Note: Keep it in a single line, do not break lines no matter how many shortcuts you will create. You should edit this line with caution to avoid resulting in failure of existing or new shortcuts.
The following is a sample for two shortcuts keybindings.
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']
This template contains only one line path string, which is the value(a string array) for key custom-keybindings
in schema org.gnome.settings-daemon.plugins.media-keys
. This path array is the value of key custom-keybindings
of schema org.gnome.settings-daemon.plugins.media-keys
. We will update it via a file as well because the path strings are nearly the same except the sub-folder names, and too long to type in command line. The line content should comply with these rules:
- strings are quoted by ''
, separated by ,
, and put in []
- one shortcut keybinding holds one path string
- if there is no keybinding, keep it as ['']
- do not jump value of number X
in sub-folder name customX
Steps to do
- Prepare the transition files according to the rules above:
- Customise our own daily shortcuts definitions in a file named
shortcuts.conf
- Customise shortcuts sub-folder path strings in a file named
shortcuts-path.conf
- Customise our own daily shortcuts definitions in a file named
Or you can edit them based on your backup files in step 2.
-
Operate custom shortcuts via
dconf
commands:- backup the existing custom shortcuts in advance.
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ > shortcuts.bakcup dconf read /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings > shortcuts-path.bakcup
- load the newly customised shortcuts definition file
dconf load /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ < shortcuts.conf
- load the shortcuts sub-folders path string file
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$(cat shortcuts-path.conf)"
- backup the existing custom shortcuts in advance.
-
Verification
- open Gnome Control Center and find "Keyboard Shortcuts" section to check changes
- press the custom keybindings to see what happens
-
Rollback or restore
dconf load /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ < shortcuts.backup
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$(cat shortcuts-path.backup)"
-
Reset or recover
Note: This will clear all exsiting custom shortcuts in
dconf database
dconf reset -f /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['']"
Reference
1. How to add custom shortcut key bindings on Ubuntu 20.04
2. man dconf
and dconf help
Comments