Fedora Desktop Customization

📢 This article was translated by gemini-3-flash-preview

Introduction

This should be my last time tweaking things for a while. After enabling a lot of plugins, the desktop takes quite a while to appear after booting. I’ll need to disable some unused ones later.

Theme

I discovered the GNOME Look website through some reading . After browsing a bit, the very first theme I saw really caught my eye.

Theme: Fluent round gtk theme

GitHub: vinceliuice/Fluent-gtk-theme: Fluent design gtk theme for linux desktops

Installation

According to the GitHub README, the transparent version requires the Blur Me extension. However, when I checked, it wasn’t compatible with my GNOME version (still isn’t as of writing this). I didn’t install the transparent version initially, but I eventually found a compatible one: Blur my Shell (the transparency looks amazing!).

  1. Clone the repository via Git:
1
git clone https://github.com/vinceliuice/Fluent-gtk-theme.git
  1. Run the script:
1
./install.sh

You can add options for customization; check the README for previews.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-d, --dest DIR          Specify destination directory (Default: /usr/share/themes)

-n, --name NAME         Specify theme name (Default: Fluent)

-t, --theme VARIANT     Specify theme color variant(s) [default|purple|pink|red|orange|yellow|green|grey|all] (Default: blue)

-c, --color VARIANT     Specify color variant(s) [standard|light|dark] (Default: All variants)

-s, --size VARIANT      Specify size variant [standard|compact] (Default: All variants)

-i, --icon VARIANT      Specify icon variant(s) for shell panel
                        [default|apple|simple|gnome|ubuntu|arch|manjaro|fedora|debian|void|opensuse|popos|mxlinux|zorin]
                        (Default: Windows icon)

--tweaks                Specify versions for tweaks [solid|float|round|blur|noborder|square]
                        solid:    no transparency version
                        float:    floating panel
                        round:    rounded windows
                        blur:     blur version for 'Blur-Me'
                        noborder: windows and menu with no border
                        square:   square windows button

-h, --help              Show help

Icons

The theme has a matching icon set—gotta have it.

GitHub: vinceliuice/Fluent-icon-theme: Fluent icon theme for linux desktops

Installation

Similar to the theme, clone the repo first:

1
git clone https://github.com/vinceliuice/Fluent-icon-theme.git

Then run the script:

1
./install.sh

Customization via options is also available; refer to the README.

Dock

Extension used: Dash to Dock for COSMIC

I wasn’t sure how to get the exact dock from the theme preview, but this extension works well. You can achieve the transparency effect in the settings.

Music Player: Rhythmbox

The default music player is decent, but the lack of a “repeat one” feature is incredibly annoying.

GitHub: fossfreedom/alternative-toolbar: Modern, minimal and music-focused interface for Rhythmbox

Installation

Installation is straightforward. These are the steps for Fedora:

First, download the archive from Releases , then configure the environment:

1
sudo dnf install intltool git gnome-pkg-tools gobject-introspection glib2-devel pkg-config python3-gobject python3

Extract the files, enter the directory, and run:

1
./configure --prefix=/usr
1
make
1
sudo make install

Uninstallation

Run this command in the installation folder:

1
sudo make uninstall

Desktop Wallpaper

I looked into using Wallpaper Engine videos as my desktop background.

Video Desktop

This setup didn’t seem to handle dual monitors well (no auto-scaling) and flickered on every loop. I decided to drop it.

Environment Setup

  • mplayer

First, enable the rpmfusion repo:

1
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-32.noarch.rpm

Then install via dnf:

1
sudo dnf install mplayer
  • xwinwrap

This only has an Ubuntu package, but you can run the binary directly after extracting it.

Source: GitHub

Deb download: xwinwrap_0.3.2git20171223_amd64.deb

Extract the file, copy it to /usr/local/bin, and give it execution permissions.

Command

For a single monitor:

1
xwinwrap -ni -o 1 -fdt -fs -s -st -sp -b -nf -- mplayer -framedrop -nosound -loop 0 -wid WID -quiet ~/Pictures/bg.mp4

For dual monitors (this displays on the right monitor):

1
xwinwrap -g 1920x1080+1920+0 -fdt -ni -b -nf -- mplayer -framedrop -nosound -loop 0 -wid WID -quiet ~/Pictures/bg.mp4

Check xwinwrap --help or the relevant section in the second reference article for more options.

Scheduled Wallpaper Rotation

Possible, but requires specific formatting, naming, and manual file editing to add new images. Too much hassle, so I dropped this too.

Create Wallpaper Rotation Scope

Create ~/.backgrounds/pic.xml with content like this (replace paths as needed):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<background>
    <starttime>
        <year>2022</year>
        <month>9</month>
        <day>17</day>
        <hour>1</hour>
        <minute>00</minute>
        <second>00</second>
    </starttime>

    <static>
        <duration>4000.0</duration>
        <file>~/.backgrounds/pic/00001.jpg</file>
    </static>

    <transition type="overlay">
        <duration>847.0</duration>
        <from>~/.backgrounds/pic/00001.jpg</from>
        <to>~/.backgrounds/pic/00050.jpg</to>
    </transition>

    <static>
        <duration>4000.0</duration>
        <file>~/.backgrounds/pic/00050.jpg</file>
    </static>

</background>

static defines display time (seconds) and location.

transition defines the transition time between images.

Create Config File

Create ~/.backgrounds/pic-timed.xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?xml version="1.0"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<!-- /usr/share/gnome-background-properties --><wallpapers>
  <wallpaper deleted="false">
    <name>Default Background</name>
    <filename>~/.backgrounds/pic.xml</filename>
    <options>zoom</options>
    <shade_type>solid</shade_type>
    <pcolor>#3465a4</pcolor>
    <scolor>#000000</scolor>
  </wallpaper>
</wallpapers>

Copy or link this file to /usr/share/gnome-background-properties/. It will then appear in Settings - Background.

You might need to restart GNOME (alt+F2, then type r).

Convert Image Formats

If needed, install ImageMagick and use:

1
convert before.jpg after.png

Random Wallpaper

This is very practical, though it currently requires manual execution (could probably be set as a startup application).

Create Script

1
vi ran_wallpaper.sh

Add the following (update paths accordingly):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash

wallpaper_path="~/wallpaper" # Path to wallpapers
sleep_time=1  # Interval in seconds
find $wallpaper_path -name '*.*' | cat > /tmp/list # Get image list
img_range_max=`cat /tmp/list | wc -l` # Get total count for random range
while true
do
n=$((RANDOM%$img_range_max+1))  # Get random number
img_path=`awk NR==$n /tmp/list`  # Get full path of the image
gsettings set org.gnome.desktop.background picture-uri file://$img_path  # Change wallpaper command
sleep $sleep_time

done

Running it

Give it execution permissions:

1
chmod +x ran_wallpaper.sh

Run in background:

1
setsid ./ran_wallpaper.sh

Warning

Do not put this script into an init/daemon service!

Stopping it

Find the process:

1
ps -ef |grep ran_wallpaper

Columns: User, PID, Parent PID, Command.

Kill the process:

1
sudo kill -9 PID

Desktop Icons

Personally, I don’t use them much; even on Windows, my desktop is usually empty.

Displaying Icons

Extension: Gtk4 Desktop Icons NG (DING)

While this version doesn’t support multi-monitor icons, I really like the transparent background.

If you need multi-monitor support, use this one: Desktop Icons NG (DING)

Reference for not using extensions: Remove desktop support (#158) · Issues · GNOME / Files · GitLab

Creating Icons

Create a .desktop file. Example:

1
2
3
4
5
6
7
8
[Desktop Entry]
Name=Grey Hack    # Display name
Comment=Play this game on Steam    # Tooltip (optional)
Exec=steam steam://rungameid/605230    # Executable path or command
Icon=steam_icon_605230    # Icon path or name
Terminal=false    # Run in terminal?
Type=Application    # Type
Categories=Game;    # Categories

Other Extensions

  • Replace “Activities” text with an icon:

Activities Icons

  • Show task icons in the top bar:

App Icons Taskbar

  • Show per-app volume:

Application Volume Mixer

  • Clipboard history:

Clipman

  • File system menu in top bar:

Files Menu

  • App list in top bar:

Frippery Applications Menu

  • Customize GNOME Shell:

Just Perfection

  • Proxy switcher in top bar:

Proxy Switcher

  • Drop-down terminal/app:

quake-mode

  • Show desktop button:

Show Desktop Applet

  • Switch sound cards:

Sound Input & Output Device Chooser

  • System tray icons on the top right:

Tray Icons: Reloaded

References

Fedora Video Desktop - 一个曾经的小码农…

Video Livestream Wallpaper For Your GNOME, Xfce Or bspwm Desktop - Linux Uprising Blog

Commonly used GNOME Shell Extensions - pipci - 博客园

Linux Command Line Image Processing (Format Conversion, Scaling, Rotation, etc.)_打工人小飞的博客-CSDN博客

Linux Wallpaper Switching, Linux Random Wallpaper_毛社长的博客-CSDN博客

Comprehensive Guide to Running Scripts and Programs in the Linux Background_豆豆技术派的博客-CSDN博客

「GNOME 3」- Desktop Icons (Display, Ubuntu 20.10, Hide) - K4NZ BLOG

Fedora: GNOME Desktop Icon Creation, using Eclipse and IDEA as examples

This post is licensed under CC BY-NC-SA 4.0 by the author.