Chapter 6. Customizing desktop appearance

This section explains how system administrators can customize appearance of the desktop environment for different users of the system.

6.1. Customizing desktop backgrounds

As a system administrator, you can configure the default desktop background, add extra backgrounds, or add multiple backgrounds using the dconf utility.

If the users of the system are not permitted to change background from the defaults, system administrator needs to lock the settings using the locks directory. Otherwise, each user can customize the background according to their preferences.

6.1.1. Customizing the default desktop background

You can configure the default desktop background and its appearance by setting the relevant GSettings keys in the org.gnome.desktop.background schema.

For more information about GSettings, see Section 4.1, “Introduction to configuring GNOME”.

Use the following procedure to set the default background:

Procedure

  1. Create a local database for machine-wide settings in /etc/dconf/db/local.d/00-background:

    # Specify the dconf path
    [org/gnome/desktop/background]
    
    # Specify the path to the desktop background image file
    picture-uri='file:///usr/local/share/backgrounds/wallpaper.jpg'
    # Specify one of the rendering options for the background image:
    # 'none', 'wallpaper', 'centered', 'scaled', 'stretched', 'zoom', 'spanned'
    picture-options='scaled'
    # Specify the left or top color when drawing gradients or the solid color
    primary-color='000000'
    # Specify the right or bottom color when drawing gradients
    secondary-color='FFFFFF'
  2. Optionally, if you want an user to not be able to change the default background, override the user’s setting in the /etc/dconf/db/local.d/locks/background file:

    # List the keys used to configure the desktop background
    /org/gnome/desktop/background/picture-uri
    /org/gnome/desktop/background/picture-options
    /org/gnome/desktop/background/primary-color
    /org/gnome/desktop/background/secondary-color
  3. Update the system databases:

    # dconf update
  4. Users must log out and back in again before the system-wide settings take effect.

6.1.2. Adding extra backgrounds

You can make extra backgrounds available to users on your system.

Procedure

  1. Use the org.gnome.desktop.background schemas to create a file in the xml format specifying your extra background’s appearance.

    Table 6.1. Frequently used org.gnome.desktop.background schemas GSettings Keys

    Key NamePossible ValuesDescription

    picture-options

    "none", "wallpaper", "centered", "scaled", "stretched", "zoom", "spanned"

    Determines how the image set by wallpaper_filename is rendered.

    color-shading-type

    "horizontal", "vertical", and "solid"

    Determines shade the background color.

    primary-color

    default: #023c88

    Left or Top color when drawing gradients, or the solid color.

    secondary-color

    default: #5789ca

    Right or Bottom color when drawing gradients, not used for solid color.

    The full range of options can be found in the dconf-editor GUI or the gsettings command-line utility. For more information, see Section 4.3, “Displaying GSettings values for desktop applications”.

  2. Store the *.xml file under the /usr/share/gnome-background-properties/ directory.

When an user clicks their name in the top right corner, chooses Settings, and in the Personal section of the table selects Background, they will see the new background available.

Example implementation of org.gnome.desktop.background GSettings keys

An example extra backgrounds file with one <wallpaper> element

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
  <wallpaper deleted="false">
    <name>Company Background</name>
    <name xml:lang="de">Firmenhintergrund</name>
    <filename>/usr/local/share/backgrounds/company-wallpaper.jpg</filename>
    <options>zoom</options>
    <shade_type>solid</shade_type>
    <pcolor>#ffffff</pcolor>
    <scolor>#000000</scolor>
  </wallpaper>
</wallpapers>

In one configuration file, you can specify multiple <wallpaper> elements to add more backgrounds as shown in the following example with two <wallpaper> elements, adding two different backgrounds.

An example extra backgrounds file with two <wallpaper> elements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
  <wallpaper deleted="false">
    <name>Company Background</name>
    <name xml:lang="de">Firmenhintergrund</name>
    <filename>/usr/local/share/backgrounds/company-wallpaper.jpg</filename>
    <options>zoom</options>
    <shade_type>solid</shade_type>
    <pcolor>#ffffff</pcolor>
    <scolor>#000000</scolor>
  </wallpaper>
  <wallpaper deleted="false">
    <name>Company Background 2</name>
    <name xml:lang="de">Firmenhintergrund 2</name>
    <filename>/usr/local/share/backgrounds/company-wallpaper-2.jpg</filename>
    <options>zoom</options>
    <shade_type>solid</shade_type>
    <pcolor>#ff0000</pcolor>
    <scolor>#00ffff</scolor>
  </wallpaper>
</wallpapers>

6.1.3. Setting the screen shield

Screen shield is the screen that quickly slides down when the system is locked. It is controlled by the org.gnome.desktop.screensaver.picture-uri GSettings key. GDM uses its own dconf profile, so you can set the default background by changing the settings in that profile.

For more information on GSettings and dconf, see Section 4.1, “Introduction to configuring GNOME”.

Procedure

  1. Create a gdm database for machine-wide settings in /etc/dconf/db/gdm.d/01-screensaver:

    [org/gnome/desktop/screensaver]
    picture-uri='file:///opt/corp/background.jpg'

    Replace /opt/corp/background.jpg with the path to the image file you want to use as the screen shield. Supported formats are PNG, JPG, JPEG, and TGA. Note that the image will be scaled if necessary to fit the screen.

  2. Update the system databases:

    # dconf update
  3. Users must log out and back in again before the system-wide settings take effect.
Troubleshooting

If the screen shield does not update, you can:

  1. Make sure that you have updated the system databases by running the dconf update command as the root user.
  2. Try restarting GDM.

6.2. Using GNOME Shell extensions to customize desktop environment

GNOME Shell extensions allow for the customization of the default GNOME Shell interface and its parts, such as window management and application launching.

Important

Before deploying third-party GNOME Shell extensions on Red Hat Enterprise Linux, make sure to read the following document to learn about the Red Hat support policy for third-party software:How does Red Hat Global Support Services handle third-party software, drivers, and/or uncertified hardware/hypervisors?

6.2.1. Overview of GNOME Shell extensions

This section provides an overview of GNOME Shell extensions available on RHEL 8, including the name of the package providing a particular extension, and the description of what each extension does.

Table 6.2. Overview of available GNOME Shell extensions

Package nameExtension nameDescription

gnome-shell-extension-apps-menu

apps-menu

Applications menu for GNOME Shell

gnome-shell-extension-top-icons

Top Icons

Show legacy icons on top

gnome-shell-extension-user-theme

user-theme

Support for custom themes in GNOME Shell

gnome-shell-extension-drive-menu

drive-menu

Drive status menu for GNOME Shell

gnome-shell-extension-window-list

window-list

Display a window list at the bottom of the screen in GNOME Shell

gnome-shell-extension-dash-to-dock

Dash to Dock

Dock for the Gnome Shell by micxgx.gmail.com

gnome-shell-extension-desktop-icons

Desktop Icons

Desktop icons support for the GNOME Classic experience

gnome-shell-extension-no-hot-corner

nohotcorner

Disable the hot corner in GNOME Shell

gnome-shell-extension-systemMonitor

systemMonitor

System Monitor for GNOME Shell

gnome-shell-extension-updates-dialog

Updates Dialog

Show a modal dialog when there are software updates

gnome-shell-extension-window-grouper

window-grouper

Keep windows that belong to the same process on the same workspace

gnome-shell-extension-panel-favorites

panel-favorites

Favorite launchers in GNOME Shell’s top bar

gnome-shell-extension-windowsNavigator

windowNavigator

Support for keyboard selection of windows and workspaces in GNOME shell

gnome-shell-extension-auto-move-windows

Autom Move Windows

Assign specific workspaces to applications in GNOME Shell

gnome-shell-extension-launch-new-instance

launch-new-instance

Always launch a new application instance for GNOME Shell

gnome-shell-extension-workspace-indicator

workspace-indicator

Workspace indicator for GNOME Shell

gnome-shell-extension-disable-screenshield

Disable Screen Shield

Disable GNOME Shell screen shield if lock is disabled

gnome-shell-extension-native-window-placement

native-window-placement

Native window placement for GNOME Shell

gnome-shell-extension-screenshot-window-sizer

screenshot-window-sizer

Screenshot window sizer for GNOME Shell

gnome-shell-extension-horizontal-workspaces

horizontal-workspaces

Desktop icons support for the GNOME Classic experience

gnome-shell-extension-places-menu

places-menu

Places status menu for GNOME Shell

gnome-classic-session

GNOME Classic mode session

6.2.2. Enabling machine-wide extensions

Prerequisites

To make extensions available to all users on the system, install them in the /usr/share/gnome-shell/extensions directory.

Procedure

  1. Create a local database file for machine-wide settings in /etc/dconf/db/local.d/00-extensions:

    [org/gnome/shell]
    # List all extensions that you want to have enabled for all users
    enabled-extensions=['myextension1@myname.example.com', 'myextension2@myname.example.com']

    The enabled-extensions key specifies the enabled extensions using the extensions' uuid (myextension1@myname.example.com and myextension2@myname.example.com).

  2. Update the system databases:

    # dconf update
  3. Users must log out and back in again before the system-wide settings take effect.

    Note

    There is currently no way to enable additional extensions for users who have already logged in. This does not apply for existing users who have installed and enabled their own GNOME extensions.

6.2.3. Locking down enabled extensions

You can prevent the user from enabling or disabling extensions by locking down the org.gnome.shell.enabled-extensions key.

Procedure

  1. Create a local database file for machine-wide settings in /etc/dconf/db/local.d/00-extensions:

    [org/gnome/shell]
    # List all extensions that you want to have enabled for all users
    enabled-extensions=['myextension1@myname.example.com', 'myextension2@myname.example.com']

    The enabled-extensions key specifies the enabled extensions using the extensions' uuid (myextension1@myname.example.com and myextension2@myname.example.com).

  2. Override the user’s setting and prevent the user from changing it in /etc/dconf/db/local.d/locks/extensions:

    # Lock the list of mandatory extensions
    /org/gnome/shell/enabled-extensions
  3. Update the system databases:

    # dconf update
  4. Users must log out and back in again before the system-wide settings take effect.

After locking down the org.gnome.shell.enabled-extensions, any extensions installed in ~/.local/share/gnome-shell/extensions or /usr/share/gnome-shell/extensions that are not listed in the org.gnome.shell.enabled-extensions key will not be loaded by GNOME Shell, thus preventing the user from using them.

6.2.4. Setting up mandatory extensions

In GNOME Shell, you can provide a set of extensions that the user has to use.

Prerequisites

The extensions must be installed under the /usr/share/gnome-shell/extensions directory.

Procedure

  1. Create a local database file for machine-wide settings in /etc/dconf/db/local.d/00-extensions-mandatory:

    [org/gnome/shell]
    # List all mandatory extensions
    enabled-extensions=['myextension1@myname.example.com', 'myextension2@myname.example.com']

    The enabled-extensions key specifies the enabled extensions using the extensions' uuid (myextension1@myname.example.com and myextension2@myname.example.com).

  2. Override the user’s setting and prevent the user from changing it in /etc/dconf/db/local.d/locks/extensions-mandatory:

    # Lock the list of mandatory extensions
    /org/gnome/shell/enabled-extensions
  3. Update the system databases:

    # dconf update
  4. Users must log out and back in again before the system-wide settings take effect.