Jump to content

GNOME

From MukeWiki


GNOME 3.22 (Fedora 25)

Intro

  • GNOME 3 pre svoje fungovanie potrebuje v podstate iba DBus service (sucast freedesktop.org projektu)
  • Bola vykonana (zatial este nie uplna) migracia z GConf (GNOME 2) na GSettings (GNOME 3)
    • dconf (low-level configuration system) is only the GSettings backend. Most applications will not want to interface directly with dconf, but rather with GSettings
  • Commandline konfiguracny nastroj gsettings v GNOME 3 zamiena predosly gconftool-2 z GNOME 2
  • Analogicky GUI aplikacia dconf-editor v GNOME 3 zamiena predosly gconf-editor z GNOME 2
  • gsettings nemoze zmenit hodnotu kluca pokial nebezi DBus service (napr. problemy s X-serverom), mozno vsak pouzit dbus-launch utilitu
$ dbus-launch gsettings get org.gnome.desktop.session session-name
'gnome'                                                                               # default GNOME 3
$ dbus-launch gsettings set org.gnome.desktop.session session-name 'gnome-fallback'   # rezim spatnej kompatibility (hardware cannot handle graphics acceleration)
  • Kedze este nebola zavrsena plna migracia z Gconf na GSettings, pre plnu konfigurovatelnost GNOME 3 sa moze okrem predurceneho gsettings (resp. GUI ekvivalent dconf-editor) pouzivat aj gconftool-2 (resp. GUI gconf-editor). Pre realny zivot je vsak uz takmer (GNOME > 3.14) plna migracia na GSettings.

Configuration

GNOME configuration tools
gnome-control-center basic GUI Configure GNOME settings
gnome-tweaks advanced GUI Graphical interface for advanced GNOME settings
dconf expert CLI Tool for manipulating a dconf database
dconf-editor expert GUI Graphical editor for gsettings and dconf
gsettings expert CLI GSettings configuration tool

GSettings configuration tool

  • .gschema.override - zmena defaultu
  • viac override súborov + poradie NN-<schema> (GLib ich spracúva v lexikografickom poradí, 99 prepisuje vsetko predchadzajuce)
0-foo.gschema.override
50-bar.gschema.override
  • gsettings / dconf — zmena konkrétnej hodnoty
  • dconf system-wide defaults (cez /etc/ a ptoom sudo dconf update) + moznost lock-nut

ZAVISI od hierarchie databaz


  1. https://wiki.archlinux.org/title/GDM # see auto-suspend
  2. https://discussion.fedoraproject.org/t/gnome-suspends-after-15-minutes-of-user-inactivity-even-on-ac-power/79801
  3. https://src.fedoraproject.org/rpms/fedora-release/blob/rawhide/f/fedora-release.spec
  4. server with org.gnome.settings-daemon.plugins.power.gschema.override


https://discussion.fedoraproject.org/t/gnome-suspends-after-15-minutes-of-user-inactivity-even-on-ac-power/79801 https://src.fedoraproject.org/rpms/fedora-release/c/6f94a4dbbc29d2725f60d0f844530a63f4122999?branch=rawhide https://wiki.archlinux.org/title/GDM#GDM_auto-suspend_(GNOME_3.28)

https://help.gnome.org/system-admin-guide/overrides.html GSettings overrides sú určené pre distribúcie/vendorov na úpravu defaultov. dconf overrides sú určené pre system administrátorov. https://help.gnome.org/system-admin-guide/dconf-custom-defaults.html

https://help.gnome.org/system-admin-guide/logout-automatic.html https://help.gnome.org/system-admin-guide/dconf-lockdown.html

musinsky@muke:~$ sudo dconf update 
/etc/dconf/db/gdm.d: 01-customize-suspend: [org/gnome/desktop/interface/]: clock-format: invalid path: dconf key must not contain two consecutive slashes
error: failed to update at least one of the databases
 OK, takze funguje (ale mam tam preklep, na konci zbytocne '/')



gsettings(1) offers a simple commandline interface to GSettings. Note that gsettings needs a D-Bus session bus connection to write changes to the dconf(1) database.

# example with org.gnome.desktop.background schema and picture-options key

$ gsettings describe org.gnome.desktop.background picture-options
Determines how the image set by wallpaper_filename is rendered. Possible values are 'none', 'wallpaper', 'centered', 'scaled', 'stretched', 'zoom', 'spanned'.
$ gsettings get org.gnome.desktop.background picture-options
'zoom'
$ gsettings set org.gnome.desktop.background picture-options 'none'
$ gsettings reset org.gnome.desktop.background picture-options

$ gsettings reset-recursively org.gnome.desktop.background
$ gsettings list-recursively org.gnome.desktop.background

My personal GNOME customization

$ wget https://raw.githubusercontent.com/musinsky/config/master/GNOME/gnome.sh -O - | bash

! POKRACOVAT !

$ set  | grep -i XDG
cat /usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml

https://wiki.archlinux.org/title/GDM#Login_screen_background_image (extractgst.sh)

https://techwiser.com/ubuntu-alt-tab-ungroup/

2024-01
$ gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"   # default @as []
$ gsettings set org.gnome.desktop.wm.keybindings switch-applications "[]"        # ['<Super>Tab', '<Alt>Tab']
$ gsettings reset org.gnome.shell command-history
$ gsettings set org.gnome.shell command-history "['gnome-terminal', 'emacs', 'audacious']"

Commandline interface

<gistit user="musinsky" repo="config" file="GNOME/gnome.sh"/>

gsettings list-recursively > gsettings.all
gsettings list-recursively org.gnome.desktop.background

gsettings reset org.gnome.desktop.interface gtk-enable-primary-paste          # Middle Click Paste (true)
gsettings reset org.gnome.desktop.peripherals.touchpad disable-while-typing   # (true)

GSettings schemas

  • At runtime, GSettings looks for schemas in the glib-2.0/schemas/ subdirectories of all directories specified in the XDG_DATA_DIRS environment variable. The usual location to install schema files is /usr/share/glib-2.0/schemas/
  • Uzivatel moze pridat svoju directory (napr. ~/.local/share/glib-2.0/schemas/) nastavenim premennej export XDG_DATA_DIRS=~/.local/share:/usr/share
  • Ina moznost je specifikovat directory, kde sa ma hladat schema, napr.
gsettings --schemadir ~/.local/share/gnome-shell/extensions/system-monitor@paradoxxx.zero.gmail.com/schemas/ get org.gnome.shell.extensions.system-monitor move-clock
  • glib-compile-schemas kompiluje vsetky GSettings XML schemas files v jeden binarny file gschemas.compiled, ktory potom cita GSettings
$ ln -s ~/.local/share/gnome-shell/extensions/system-monitor@paradoxxx.zero.gmail.com/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml \
  /usr/share/glib-2.0/schemas/
$ glib-compile-schemas /usr/share/glib-2.0/schemas/
gsettings get org.gnome.shell.extensions.system-monitor move-clock

https://docs.gtk.org/gio/class.Settings.html#vendor-overrides

https://unix.stackexchange.com/questions/199836/how-can-i-view-the-content-of-a-backup-of-the-dconf-database-file
https://askubuntu.com/questions/363288/how-can-i-read-gsettings-values-from-a-filesystem-backup
$ dconf dump /
$ dconf dump /org/gnome/desktop/wm/preferences/
Just do dconf watch / and change the icon theme, it will show what dconf prop is changed
$ dconf watch /

Windows Management

Clutter
Library for creating fast, hardware-accelerated (OpenGL), visually rich graphical user interfaces
Mutter & Muffin
Window and compositing managers. Mutter & Muffin combines the Clutter toolkit with solid window-management inherited from the Metacity window manager
Mutter used as the display core of a larger system such as GNOME Shell or Moblin (default manager for GNOME 3 in Fedora)
Muffin used as the display core of a larger system such as Cinnamon (non-default in Fedora)

Metacity
Window manager that was used by default in the GNOME 2 desktop. Since Gnome 3.16 metacity themes are no more supported. Mutter no longer uses Metacity themes.

Themes

  • Vsetky themes subory sa nachadzaju v /usr/share/themes/<themeName>/, resp. ~/.themes/<themeName>/ directory
  • Zmena celej theme, resp. desktop-u (odhliadnuc od icons a cursors), zahrna zmenu dvoch sub-theme:
    • Shell theme - themes/<themeName>/gnome-shell/
    uzivatel moze vyberat, menit GNOME Shell theme az po nainstalovani extensions dnf install gnome-shell-extension-user-theme
    • GTK+ Theme - themes/<themeName>/{gtk-2.0,gtk-3.0}/
    • Current (Window) theme - themes/<themeName>/metacity-1/
  • Themes je mozne velmi jedoducho vyberat, menit pomocou gnome-tweak-tool v menu Appearance
  • Default theme pre GNOME 3 (a zaroven aj pre Fedora) je Adwaita, rozne ine themes:

Customizing

  • Najoptimalnejsi sposob ako menit niektore nastavenia v Shell alebo GTK+ themes je vytvorit kvazi novu theme, ktora je odvodena od povodnej theme. Window theme, resp. Metacity nie je mozne derivovat
  • Customizing default Shell theme derived from default gnome-shell.css
$ wget https://raw.githubusercontent.com/musinsky/config/master/GNOME/gnome-shell.css -P /usr/share/themes/Mucha/gnome-shell/
  • Customizing default GTK+ theme (Adwaita) derived from default gtk.css
$ wget https://raw.githubusercontent.com/musinsky/config/master/GNOME/gtk.css -P /usr/share/themes/Mucha/gtk-3.0/
$ ln -s /usr/share/themes/Adwaita/gtk-2.0/ /usr/share/themes/Mucha/
  • Applying changes
gsettings set org.gnome.shell.extensions.user-theme name 'Mucha'
gsettings set org.gnome.desktop.interface gtk-theme 'Mucha'


$ mkdir -p /usr/share/themes/Mucha/metacity-1/
$ cp /usr/share/themes/Adwaita/metacity-1/metacity-theme-3.xml /usr/share/themes/Mucha/metacity-1/
  • reduce titlebar height
$ sed -i '/title_vertical_pad/s|value="[0-9]\{1,2\}"|value="2"|g' /usr/share/themes/Mucha/metacity-1/metacity-theme-3.xml
  • change titlebar color (in titlebar_fill_focused section)
$ sed -i 's/gtk:custom(wm_bg_b,gtk:bg\[NORMAL\])/blend\/#000000\/gtk:bg\[NORMAL\]\/0.8/' /usr/share/themes/Mucha/metacity-1/metacity-theme-3.xml


gsettings set org.gnome.desktop.wm.preferences theme 'Mucha'  # GNOME 3.16 is DEPRECATED

Power

Pravdepodobne najmenej user friendly (intuitivne) nastavenia. V skutocnosti najnovsi GNOME (a Wayland) nema ziaden screensaver. Pod screensaver mozno rozumiet vypnutie monitora (blank).

Po idle-delay sekundach (0 sekund = nikdy) necinnosti sa vypne monitor (blank), co mozno chapat ako spustenie screensaver.
V GNOME Settings (gnome-control-center) v sekcii Power\Power Saving ako polozky: Automatic Screen Blank a Delay.
Po lock-delay sekundach (0 sekund = ihned) a potom ako idle-delay (vid vyssie) sa uzamkne obrazovka, t.j. v skutocnosti po sume idle-delay + lock-delay.
  • org.gnome.desktop.screensaver lock-enabled true Set this to TRUE to lock the screen when the screensaver goes active.
Len v pripade lock-enabled je mozne uzamknutie obrazovky (kedze unsigned lock-delay = 0 znamena ihned a nie nikdy).

Ak nastavime idle-delay na 0 sekund (na nikdy) tak potom nikdy nenastane ani uzamknutie obrazovky, kedze to nastava az po uplynuti idle-delay. V takom pripade jedina moznost uzamknutia obrazovky je kliknutim v pravom hornom rohu obrazovky na ikonu Lock Screen (resp. cez CLI $ loginctl(1)rpm lock-session).

Zaroven plati, ze ak nastane uzamknutie obrazovky (po uplynuti idle-delay + lock-delay) tak to uzamknutie nastane pri vypnutom monitore (blank), kedze monitor sa vypol v dosledku idle-delay. Po prebudeni, zapnuti monitora (pohybom mysi alebo stlacenim klavesu) vidime uzamknutu obrazovku. Tuto vlasnost umoznuje obist napr. Unblank lock screen GNOME extension.

V pripade necinnosti pri uzamknutej obrazovky sa monitor znova vypne po uplynuti idle-delay.


  • /usr/share/glib-2.0/schemas/org.gnome.settings-daemon.plugins.power.gschema.xml
    • org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 900 The amount of time in seconds the computer on AC power needs to be inactive before it goes to sleep. A value of 0 means never.
Po sleep-inactive-ac-timeout sekundach (0 sekund = nikdy) necinnosti prejde pocitac do rezimu sleep. Tento timeout je nezavisly uz od skor spomenuteho idle-delay.
V GNOME Settings (gnome-control-center) v sekcii Power\Power Saving ako polozky: Automatic Suspend a Delay.
  • org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend' The type of sleeping that should be performed when the computer is inactive.
Enum sleep-inactive-ac-type: 'blank', 'suspend', 'shutdown', 'hibernate', 'interactive', 'nothing' or 'logout'.

V tomto pripade je viac menej vsetko jasne. Okrem nastaveni pre AC power existuju ekvivalentne nastavenia aj pre battery power. Ak nechceme aby sa PC vypinal (AC power), mame dve moznosti:

  • sleep-inactive-ac-timeout nastavit hodnotu 0
  • alebo sleep-inactive-ac-type nastavit ako 'nothing' alebo asi vhodnejsie 'blank' (vypnut monitor)

GNOME Shell

GNOME Shell je zakladna cast user interface v GNOME 3 (spusta aplikacie, prepina okna a pod.), pouziva Mutter (compositing window manager) a je stale aktivne vyvijane. Moze sa flexibilne upravovat pomocou roznych extensions, ktore jednoducho nacitavaju JavaScript a CSS. Je to nahrada za pred tym pouzivane applets a widgets. Subory s GNOME Shell extensions sa nachadzaju v /usr/share/gnome-shell/extensions/<extName>/, resp. ~/.local/share/gnome‑shell/extensions/<extName>/.

GNOME Extensions tools
gnome-extensions(1)rpm CLI Command line tool for managing GNOME extensions
gnome-extensions-app GUI Manage GNOME Shell extensions
https://extensions.gnome.org/local/ Web Find and install GNOME Shell extensions using website
NOTE gnome-shell-extension-prefs and gnome-shell-extension-tool are deprecated, use gnome-extensions instead.
$ dnf list gnome-shell-extension\*      # available extensions in system (Fedora)
$ dnf remove gnome-shell-extension\*    # installing extensions from a web browser instead of system packages
$ dnf install gnome-browser-connector   # GNOME browser integration is required

$ gnome-extensions list                              # installed extensions
$ gsettings get org.gnome.shell enabled-extensions   # enabled extensions

GNOME Shell Extensions

Install GNOME Shell Extensions from source https://gitlab.gnome.org/GNOME/gnome-shell-extensions
git clone https://gitlab.gnome.org/GNOME/gnome-shell-extensions.git
cd gnome-shell-extensions/
git checkout gnome-50   # set actual version or main branch
head meson.build        # check version version: '50.3'
./export-zips.sh

gnome-extensions install zip-files/apps-menu@gnome-shell-extensions.gcampax.github.com.shell-extension.zip
gnome-extensions install zip-files/window-list@gnome-shell-extensions.gcampax.github.com.shell-extension.zip
gnome-extensions enable apps-menu@gnome-shell-extensions.gcampax.github.com
gnome-extensions enable window-list@gnome-shell-extensions.gcampax.github.com

Other Shell Extensions

SDIR="$HOME/.local/share/gnome-shell/extensions/simple-weather@romanlefler.com/schemas"
gsettings --schemadir "$SDIR" reset-recursively org.gnome.shell.extensions.simple-weather

gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.simple-weather panel-box 'center'
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.simple-weather show-refresh-button true

EasyScreenCast, Vitals, Frippery Applications Menu, Frippery Bottom Panel








Developer tools (keyboard command Alt+F2)
'lg' Looking Glass (GNOME Shell debugger)
'r' or 'restart' restart GNOME Shell (not available on Wayland)
'rt' reload GNOME Shell theme
'debugexit' quit GNOME Shell


Manage GNOME Extensions
gnome-extensions CLI Command line tool for managing GNOME extensions
gnome-extensions-app GUI Manage your GNOME Extensions
https://extensions.gnome.org/local/ Web Find and install GNOME Shell extensions using website
NOTE gnome-shell-extension-prefs and gnome-shell-extension-tool are deprecated, use gnome-extensions instead.
NOTE GNOME Shell browser required $ dnf install gnome-browser-connector.
  1. personally prefer installing extensions from a web browser instead of installing system packages


SDIR="$HOME/.local/share/gnome-shell/extensions/system-monitor-next@paradoxxx.zero.gmail.com/schemas/"
gsettings --schemadir "$SDIR" reset-recursively org.gnome.shell.extensions.system-monitor-next-applet

gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet background '#ffffff16'
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet icon-display false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet show-tooltip true
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet move-clock false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet cpu-show-text false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet cpu-style 'both'
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet cpu-graph-width 80
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet memory-display false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet net-show-text false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet net-style 'graph'
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet disk-usage-style 'bar'
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet thermal-display true
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet thermal-show-text false
gsettings --schemadir "$SDIR" set org.gnome.shell.extensions.system-monitor-next-applet thermal-style 'digit'

Screenshots

Z relativne trivialnej zalezitosti sa s pouzitim najnovsieho GNOME v kombinacii s Wayland-om stava problem.

Povodna samostatna aplikacia GNOME Screenshot sa s prichodom GNOME 42 (released 2022-03) meni na built-in utility in GNOME Shell. Samostatna aplikacia gnome-screenshot(1)rpm je sice este distribuovane, ale uz nefunkcna (and archived). Built-in GNOME Screenshots and screencasts sa spusta jednoducho stlacenim PrtSc klavesy. Ponuka tri moznosti: Selection, Screen a Window.

  • problem-1 nastava pri Window screenshot, kedy sa zachytava aj transparency shadow effect okolo samotneho window. Nie je to chyba, ale vlastnost Wayland, resp. Mutter, ktory pridava dekoracie, jemny tien, resp. prehladny okraj. Niekedy je to dokonca ziaduci efekt.
$ magick input.png -fuzz 50%                 -trim +repage output.png
#   vseobecne odporucane riesenie nie je stale funkcne
$ magick input.png -channel A -threshold 50% -trim +repage output.png   # -alpha off # -strip
#   funkcne riesenie pre odstranenie shadow effect (default Adwaita theme)
  • problem-2 Window screenshot vzdy vybera iba jedno top-level okno a napr. dialogove alebo about okno ponuka len ako samostatne a nie ako ich composite. Vtedy je potrebne vybrat Selection screenshot a tu nastava problem ako presne vyrezat (crop) window zo selection. Kedze pouzivam jednofarebny desktop background, tak pouzijeme ImageMagick na auto-crop.
$ magick input.png -fuzz 33% -trim +repage output.png
#   -fuzz udava toleranciu podobnych farieb (jednofarebne pozadie), see [1] and [2]

NOTE Pre potrebnu, vhodnu zmenu velkosti okna pouzivame Screenshot Window Sizer GNOME Shell Extension.


Otestovany (Fedora, GNOME Wayland) Screen capture software:
NEFUNKCNE:

FUNKCNE (vsetky tri aplikacie maju vstavany editor, resp. annotation tool):

  • flameshot Qt-based super, ale neviem vybrat potrebne window, len screen resp. selection cez vstavany editor (annotation tool).
  • shutter Gtk3 in Perl, OK, pod Wayland limitovane moznosti, len screen resp. selection cez vstavany editor (annotation tool).
  • ksnip Qt-based ale pod Wayland len screen resp. selection cez vstavany editor (annotation tool).