These are my personal notes on how to set up a new GNOME desktop environment (preferably Debian stable). This documentation started with GNOME 48 of Debian 13 (Trixie).
(For the record: I was using the XFCE desktop environment for more than 15 years until 2025-08 when I wanted to try out something new with some additional armenities and better styling.)
General GNOME Notes for Setup and Initial Steps
- Switching Workspaces: Win + PgUp/Dn (default bindings)
If you want to extract all the `gsettings` commands from this page:
wget "https://www.karl-voit.at/Gnome-Setup/source.org.txt" grep gsettings source.org.txt | sed 's/^ *//' | sed 's/^: //' | grep -v grep
Settings
- Displays
Enable "Night Light"
gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true gsettings set org.gnome.settings-daemon.plugins.color night-light-schedule-automatic false
- Power
- General
Power Settings Options: Suspend/…
gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'nothing' gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing' gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
Show Battery Percentage
gsettings set org.gnome.desktop.interface show-battery-percentage true
- Power Saving
Screensaver
gsettings set org.gnome.desktop.screensaver lock-delay "uint32 30"
- General
- Multitasking
disable "Hot Corner"
gsettings set org.gnome.desktop.interface enable-hot-corners false
Application Switching: "Include applications for all workspaces"
gsettings set org.gnome.mutter dynamic-workspaces false gsettings set org.gnome.mutter workspaces-only-on-primary false gsettings set org.gnome.shell.app-switcher current-workspace-only true
- Search
disable: Clocks
gsettings set org.gnome.desktop.search-providers disabled "['org.gnome.clocks.desktop', 'org.gnome.seahorse.Application.desktop']"
Search Locations → bottom: add custom folders for desktop search
- Sharing
- Remote Desktop (incl. Remote controlling): to your liking
- Keyboard
Input Sources: setup "English (US, intl., with dead keys)" + manually remove all others
gsettings set org.gnome.desktop.input-sources mru-sources "[('xkb', 'us')]" gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+intl')]" gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
View and Customize Shortcuts
Naviation
"Switch windows" → Alt-Tab (by default, Alt-Tab switches between apps, not windows)
gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"
System > "Show the overview" = C-F8
… additional mapping for the GNOME overview for my personal setup (default = Win-Key)
gsettings set org.gnome.shell.keybindings toggle-overview "['<Control>F8']"
MISC other bindings including unsettings some defaults:
gsettings set org.gnome.desktop.wm.keybindings cycle-group "[]" gsettings set org.gnome.desktop.wm.keybindings cycle-group-backward "[]" gsettings set org.gnome.desktop.wm.keybindings minimize "['<Super>Down']" gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-down "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-left "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-right "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-up "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "['<Shift><Control>F9']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "['<Shift><Control>F10']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "['<Shift><Control>F11']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Shift><Control>F12']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-last "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "[]" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-right "[]" gsettings set org.gnome.desktop.wm.keybindings switch-applications "[]" gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "[]" gsettings set org.gnome.desktop.wm.keybindings switch-group "[]" gsettings set org.gnome.desktop.wm.keybindings switch-group-backward "[]" gsettings set org.gnome.desktop.wm.keybindings switch-input-source "[]" gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "[]" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['<Control>F9']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['<Control>F10']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['<Control>F11']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Control>F12']" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-last "[]" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "[]" gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "[]" gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward "['<Shift><Alt>Tab']" gsettings set org.gnome.desktop.wm.keybindings unmaximize "[]" gsettings set org.gnome.mutter.wayland.keybindings restore-shortcuts "[]" gsettings set org.gnome.settings-daemon.plugins.media-keys logout "[]" gsettings set org.gnome.settings-daemon.plugins.media-keys magnifier "[]" gsettings set org.gnome.settings-daemon.plugins.media-keys on-screen-keyboard "['<Super>k']" gsettings set org.gnome.settings-daemon.plugins.media-keys screenreader "[]"
- Accessibility
- Typing
"Enable by Keyboard" (handy for 2-in-1 devices because outside of tablet mode, virtual keyboard pop up too often)
gsettings set org.gnome.desktop.a11y.keyboard enable true
- Typing
- System
Time Format: 24-hour
gsettings set org.gnome.desktop.interface clock-format '24h'
Clock & Calendar
Week Day
gsettings set org.gnome.desktop.interface clock-show-weekday true
Date
gsettings set org.gnome.system.locale region 'de_AT.UTF-8'
Extensions
- install GNOME app "Extensions" for managing extensions on your desktop: https://extensions.gnome.org/
- In general, I prefer to see everything in the one single (top) bar:
- all windows of the current workspace (= virtual desktop)
- basic stats on usage of: CPU, networking bandwidth
- clipboard with multiple entries
- date/time/weekday
- the usual notifications: sound, battery, …
Dash to Panel: app icons in the top (main) panel
Clipboard indicator: multiple clipboards
Astra: CPU Meter, ...
Hibernate status button
Somehow, you need an extension to expose relevant sleep/suspend/hibernate/... entries:
- https://extensions.gnome.org/extension/755/hibernate-status-button/
- https://wiki.ubuntuusers.de/systemd-sleep/
- suspend = s2ram = suspend to RAM
- hibernate = s2disk = suspent to disk (SSD)
- hybrid-sleep = s2ram+s2disk at the same time; my interpretation: s2disk will only be used when battery drains during suspend
- suspend-then-hibernate = s2ram + after pre-defined time, computer
resumes (via BIOS clock/RTC) and does s2disk
- I personally don't use this
- https://wiki.ubuntuusers.de/systemd-sleep/
Battery Health Charging: set/control batt limits
WSP (Windows Search Provider): Search for window titles
In the default search, you can only search for applications. This activates search for window titles as well in order to jump to a specific browser window, not just the browser itself.
Mouse Follows Focus: fix wrong mouse placement when using "WSP"
Eye on Cursor: Replacement for xeyes to spot the mouse pointer
I like this method to spot the mouse pointer when using multiple screens.
Move To Next Screen: move windows to left/right screen
Wallpaper Slideshow: Image folder slideshow for desktop images
I'm using a Synchthing share that holds all photographs of mine that are marked as "suitable as desktop background" for the current month.
All Windows + Save/Restore Window Positions
Just in case the built-in method doesn't turn out to be stable. This extension might be removed later.
- https://extensions.gnome.org/extension/4833/all-windows-saverestore-window-positions/
- https://github.com/jkavery/all-windows
Window Gestures: More options for touch gestures
On multi-touch devices:
Screen Rotate: Adds quick settings for screen rotation
Important for 2-in-1 devices, tablets, ...
- https://extensions.gnome.org/extension/5389/screen-rotate/
- https://github.com/shyzus/gnome-shell-extension-screen-autorotate
"User Themes"
So far, I'm satisfied with the current default styling. This is just in case I want to try out some themes:
- depending on your mood/taste and risk appetite since some themes aren't tested much: non visible highlightings, …
Tweaks
Go through all all options! -> many interesting switches here!
- Appearance
- Themes (may require logout/login to enable for 1st time + Extensions→"User Themes" above)
- Keyboard & Mouse
Additional Layout Options: CAPS -> Ctrl (scripted)
gsettings set org.gnome.desktop.input-sources xkb-options "['caps:ctrl_modifier']"
- Windows
Window Titlebars
Maximize/Minimize (scripted)
gsettings set org.gnome.desktop.wm.preferences button-layout appmenu:minimize,maximize,close
Focus on Hover (scripted)
gsettings set org.gnome.desktop.wm.preferences focus-mode sloppy
Themes
So far, I'm satisfied with the current default styling. This is just in case I want to try out some themes:
- https://itsfoss.com/install-switch-themes-gnome-shell/
- initial setup needs reboot(?)
- https://itsfoss.com/best-gtk-themes/
- try: WhiteSur
- try: Ultimate Dark
- user customizations
- ~/.icons
- ~/.themes
Text Snippets
I was using AutoKey for many years with xfce. With Wayland, this doesn't work any more.
I need to find a new method.
- https://gitlab.com/cscs/waybinder
→ promising DIY approach using multiple helper tools
- So far failed because I could not find a set of tools used by waybinder that worked in that combination with GNOME 48.
- error while loading shared libraries: libwxgtk3uhtml-3.0.so.0: cannot open shared object file: No such file or directory" although dependencies were installed)
Auto-Login
I prefer not to enter username/password of the default user after a fresh system boot because I already have authenticated myself by using the correct disk encryption password.
See also "Settings → Users → ... → Auto-Login option in UI" but I have no idea how the two config options are related.
Modify `sudo /etc/gdm/custom.conf`
[daemon] AutomaticLoginEnable=True AutomaticLogin=username
Nautilus ("Files")
gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view'
I've got some self-written Python tools I want to integrate into Nautilus. Unfortunately, it's not possible to overwrite default keyboard shortcuts. So I had to get creative.
You'll find the scripts within your context menu under "Scripts >".
You can use following environment variables according to this comment (I haven't checked):
echo Selected File Paths: ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS} echo Selected File URIs: ${NAUTILUS_SCRIPT_SELECTED_URIS} echo Current location URI: ${NAUTILUS_SCRIPT_CURRENT_URI}
Notice that assigning a keyboard shortcut (accels) somehow doesn't work for "foo" if you also have "foo bar" as a scriptname.
If your paths differ, you need to get creative as well. ;-)
Ctrl-j for tagging files via filetags
Read more about my file tagging concept in this article.
SCRIPTNAME="filetags" ## may contain spaces or "(" ")" but must not contain: "-" SCRIPTSHORTCUT="<Primary>j" INVOCATIONLINE="uv --project ${HOME}/src/filetags run ${HOME}/src/filetags/filetags/__init__.py --interactive --gui" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash ${INVOCATIONLINE} "\$@" #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" mkdir -p ~/.config/nautilus echo "${SCRIPTSHORTCUT} ${SCRIPTNAME}" >> ~/.config/nautilus/scripts-accels
Adding date/time to file names as prefix
See my project date2name.
So far, I could not find any free keyboard shortcut that I was happy with. So this is only in the context menu:
SCRIPTNAME="date2name" ## may contain spaces or "(" ")" but must not contain: "-" #SCRIPTSHORTCUT="<Primary>j" INVOCATIONLINE="uv --project ${HOME}/src/date2name run ${HOME}/src/date2name/date2name/__init__.py" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash ${INVOCATIONLINE} "\$@" #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}"
SCRIPTNAME="time2name" ## may contain spaces or "(" ")" but must not contain: "-" #SCRIPTSHORTCUT="<Primary>j" INVOCATIONLINE="uv --project ${HOME}/src/date2name run ${HOME}/src/date2name/date2name/__init__.py --withtime" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash ${INVOCATIONLINE} "\$@" #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}"
Comparing files
This is using Meld which you need to install.
So far, I could not find any free keyboard shortcut that I was happy with. So this is only in the context menu:
SCRIPTNAME="compare files" ## may contain spaces or "(" ")" but must not contain: "-" #SCRIPTSHORTCUT="<Primary>j" INVOCATIONLINE="meld" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash ${INVOCATIONLINE} "\$@" & #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}"
Copy File Path
This is using "wl-clip" and "notify-send".
So far, I could not find any free keyboard shortcut that I was happy with. So this is only in the context menu:
SCRIPTNAME="Copy file path" ## may contain spaces or "(" ")" but must not contain: "-" #SCRIPTSHORTCUT="<Primary>j" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash mypath=$(pwd)/"$1" echo -n $mypath | wl-clip notify-send "Path copied to clipboard:" "$mypath" #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}"
Analyzing Disk Space
This is using qdirstat.
So far, I could not find any free keyboard shortcut that I was happy with. So this is only in the context menu:
SCRIPTNAME="date2name" ## may contain spaces or "(" ")" but must not contain: "-" #SCRIPTSHORTCUT="<Primary>j" cat <<EOT >> ~/.local/share/nautilus/scripts/"${SCRIPTNAME}" #!/usr/bin/env bash qdirstat ./"$1" & #end EOT chmod +x ~/.local/share/nautilus/scripts/"${SCRIPTNAME}"
GNOME Evolution
MISC settings, mostly set interactively. Here are just a few:
gsettings set org.gnome.evolution.calendar use-24hour-format true gsettings set org.gnome.evolution-data-server camel-message-info-user-headers "['Message-ID']" gsettings set org.gnome.evolution.mail global-view-setting false gsettings set org.gnome.evolution.shell menubar-visible true gsettings set org.gnome.evolution.shell use-header-bar false
Impove GNOME Shell performance (disable animation)
- Why? On X13/jackson, Super-key shows Window previews. This is slow when I just want to switch to a different window.
gsettings set org.gnome.desktop.interface enable-animations false
Adapt Default Directories
I dislike the default folders.
Defaults: ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run. # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_TEMPLATES_DIR="$HOME/Templates" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_DOCUMENTS_DIR="$HOME/Documents" XDG_MUSIC_DIR="$HOME/Music" XDG_PICTURES_DIR="$HOME/Pictures" XDG_VIDEOS_DIR="$HOME/Videos"
On jackson/x13: (outdated example)
# This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run. # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME/tmp/2del/Desktop" XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_TEMPLATES_DIR="$HOME/templates_labels" XDG_PUBLICSHARE_DIR="$HOME/tmp/2del/Publicshare" XDG_DOCUMENTS_DIR="$HOME/rise" XDG_MUSIC_DIR="$HOME/art/music/mp3/library" XDG_PICTURES_DIR="$HOME/tmp/2del" XDG_VIDEOS_DIR="$HOME/share/netvideos"
Bugs That Are Known to Me and Relevant for Me
If you happen to know a viable workaround or fix, please drop me a line:
- Settings
- Power → Power Saving → "Dim Screen": disabling doesn't have the desired effect.
- Tweaks
- Windows → "Focus on Hover": doesn't always set the proper focus when mouse is moved or virtual screens are switched.
- I actually don't get the reason why settings and tweaks are two different tools. I always have to try both if I'm not sure where a particular setting is located.
- GNOME Shell
- rendering is slow: I guess it's the window preview rendering which can't be disabled to my knowledge
- Window preview rendering can't be disabled
- search result order can't be customized: I'd like to have open windows at the topmost priority, not "apps" in general, including not installed ones.
- GNOME Passwords and Keys ("Keyring"):
- If something invokes the system password enter dialog, you can't
switch to your password manager, look up the PW and return to enter it.
- Workaround: copy the PW form the PW manager upfront.
- If something invokes the system password enter dialog, you can't
switch to your password manager, look up the PW and return to enter it.
- There's no way to use text snippets such as "$$dd" → entering the
current day (in ISO format)
- I'm trying to find a DIY workaround
- Multi-Screen setups
- My educated guess is that GNOME has issues when you're using more
than two different multi-screen setups:
- E.g., with dock + 2 external TFT + notebook itself, window positions are restored on change. When you add another setup with different external displays, GNOME doesn't always(?) restore the window positions.
- Workaround: see extension "All Windows + Save/Restore Window Positions" above → stores only one setup.
- On my wife's computer, the external widescreen TFT resolution is not recognized correctly nor can I correct its setting.
- Settings → Displays → "Night Light": From time to time, only two out of three monitors are handled correctly.
- My educated guess is that GNOME has issues when you're using more
than two different multi-screen setups:
- Long-pressing Shift always invokes annoying "Do you want to activate long blabla…" which can't be disabled if you want to have any other accessability feature at hand.
- Dash/Panel
- Time-format in dash can't be customized to ISO format.
- Extensions
- "Wallpaper Slideshow" extension: Desktop backgrounds can only have one image, not different ones for each screen.
- VPN connections do not auto-update after resume.
- Sound settings are weird if you're using multiple users in parallel
("Switch user…").
- It seems to be the case that one sound interface can only be used by one user at the same time.
- Some tools can't be removed:
- Outside of tablet mode on 2-in-1 devices, the virtual keyboard pops up too often and needs to be manually disabled as long as tablet mode is not active.
- I can't use Shift + Scroll (up/down) on a touchpad to horizontally scroll a wider page (lenovo X13 2-in-1 G5). With a mouse/trackball, it works as expected.
- My wife's x13 2-in-1 Gen 5 can't use her external 34" TFT with its native resolution. My x13 2-in-1 Gen 5 can. A mystery.