Set the correct keyboard for first SDDM start and LUKS decryption prompt

Many Fedora Silverblue images use the en_US keyboard layout by default for the disk decryption prompt (LUKS) and the login screen (SDDM). This may not match your keyboard, so we’ll change it to another layout.

  1. Find your desired keymap:
localectl list-keymaps| grep CH
de_CH-latin1
fr_CH
fr_CH-latin1
mac-de_CH
mac-fr_CH-latin1
  1. Set your keymap (replace fr_CH with your desired keymap):
sudo localectl set-keymap fr_CH
  1. Verify the changes in /etc/vconsole.conf
cat /etc/vconsole.conf                                                 ✔
# Written by systemd-localed(8) or systemd-firstboot(1), read by systemd-localed
# and systemd-vconsole-setup(8). Use localectl(1) to update this file.
KEYMAP=fr_CH
FONT=eurlatgr
XKBLAYOUT=ch
XKBMODEL=pc105
XKBVARIANT=fr
XKBOPTIONS=terminate:ctrl_alt_bksp

and /etc/X11/xorg.conf.d/00-keyboard.conf.

cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Written by systemd-localed(8), read by systemd-localed and Xorg. It's
# probably wise not to edit this file manually. Use localectl(1) to
# update this file.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "ch"
        Option "XkbModel" "pc105"
        Option "XkbVariant" "fr"
        Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

This should do it for SDDM.

  1. Now to set the keyboard layout for the LUKS decryption prompt, run:
sudo rpm-ostree initramfs-etc --track=/etc/vconsole.conf
  1. Reboot for the changes to take effect.

Change the SDDM login screen wallpaper

I dislike the default login screen wallpaper, so I wrote an entire post here on how to create your own SDDM custom theme in order to change the wallpaper.

SDDM Settings

Our custom theme is here!

Fix Breeze cursor theme scale (Fedora 41)

KDE Cursor Settings

Big and pixelated cursor

There’s a GTK bug that’s causing the KDE cursor for some themes (Breeze..) to become huge and pixelated. This is notably visible in Bazzite’s terminal app, as shown in the right picture:

A MR fixing this bug has been merged, but it is planned for release in March 2025!

For those like me who can’t wait, here’s a workaround I found thanks to this blogpost. The solution isn’t perfect but is more acceptable than the status quo.

What we will do is simply rebuild the Breeze cursor theme, fixing its nominal size to fit the real cursor images size.

  1. In a toolbox, install the required dependencies:
sudo dnf install inkscape xcursorgen mesa-libGL mesa-libEGL

and then the following pip package

pip install pyside6-essentials
  1. Clone the breeze repo:
git clone https://github.com/kde/breeze
  1. Edit breeze/cursors/src/build.sh, change NOMINAL_SIZE=24 to NOMINAL_SIZE=32.

  2. Build the cursor theme:

cd breeze/cursors/Breeze && ../src/build.sh
...
Generating cursor theme... DONE
Generating shortcuts... DONE
Copying Theme Index... DONE
COMPLETE!
  1. Rename the created theme to avoid overwriting any existing theme:
sed -i 's/^Name=.*/Name=BreezeCustom/' Breeze/index.theme
  1. Package the theme:
tar -czvf BreezeCustom.tar.gz Breeze
  1. Finally, install the theme by going to KDE’s cursor settings, Install from File... and selecting the created BreezeCustom.tar.gz file. Then select it and hit apply.
    KDE Cursor Settings

    Installing the cursor theme from file

And that’s it! Your cursor should now have a better scaling on GTK windows.

It’s possible that your cursor is now a bit smaller in these GTK apps. This may be related to fractional scaling not being applied on the cursor. I haven’t investigating further since this now looks acceptable to me until we get the GTK patch

Fix DNS lookup timeout slowing down apps and updates

An annoying issue I ran into was some commands and apps being excruciating slow:

  • Firefox would take minutes to launch
  • dnf install in toolbox containers would take minutes before outputting anything

After some investigation, I found out that this was related to DNS queries for localhost like names timing out. This could be due changing the default DNS to a private one (NextDNS in my case).

To address this, the simplest solution is to add these localhost names in /etc/hosts for instant resolution:

# add the following at the end
127.0.0.1   <your_hostname> fedora bazzite toolbox toolbx 

<your_hostname> can be found with cat /etc/hostname. fedora and bazzite are quite obvious. For toolbox container, I found out that the /etc/hostname in the containers would always be toolbox, which changed to toolbx with some release. There might be a similar solution for distrobox, but I haven’t used it yet.