In the post about my Custom AlmaLinux 9.4 KDE Live ISO, I mentioned the differences compared to the official KDE Live ISO. Still, I feel that I need to underscore at least one important aspect. As a bonus, I’ll list the way I get some of my favorite programs in AlmaLinux.

First things first

As explained in A note on using two different kernel lines, the annoyance of using two different kernel lines, the official kernel 5.14.0-nnn and ELRepo’s kernel-lt 6.1.xx, is that they don’t get updated at the same time and, should you prefer the newer 6.1 one, now and then the older 5.14 will become the first one in GRUB and the default one after it is updated!

I explained there that all you need to know (and make use of) is these commands:

sudo grubby --default-kernel
sudo grubby --info=ALL
sudo grubby --set-default-index=0

UPDATE: Here’s an improved way of getting info about the installed kernels:

sudo grubby --info=ALL | grep -E "^kernel|^index"

In case of recent hardware that isn’t supported by the older kernel, some people might experience a loss of Wi-Fi and BT after such a kernel update and reboot. It happens to me because of MT7663. (Installing from the official ISO wouldn’t bring in alsa-sof-firmware, so you might even lack the sound. It shouldn’t happen when installing from this ISO.)

On the other hand, ELRepo’s kernel-lt and kernel-ml kernels are not signed, which means you cannot boot if your UEFI (because BIOS doesn’t exist anymore) has the Secure Boot option enabled, which is the default. So you need to disable Secure Boot to use the 6.1 kernels in AlmaLinux. If you’re trying to dual-boot with Windows, it won’t work if Windows uses disk encryption which, again, is by default.

If you’re satisfied with the 5.14 kernel, because you have experienced it at work in the 9.4 Live ISO and everything worked (the previous 9.3 Live ISO was using the 6.1 kernel in the live session), then you should uninstall kernel-lt and even disable ELRepo.

If you cannot or do not disable Secure Boot, you won’t be able to boot the system right after the installation! Should this be the case, hit ESC or Shift to get the GRUB menu displayed, and select the 5.14 kernel.

Make the GRUB menu always visible

Let’s try to ensure that the GRUB2 menu is always shown at boot. I cannot guarantee that these steps will fix the issue once and for all, because GRUB2 is such a piece of crap, but here we go.

When running this:

sudo grub2-editenv list

I noticed this line:

menu_auto_hide=1

That’s bad. This is the first thing I did (the old grubenv is lost in the process, make a copy if you want):

sudo grub2-editenv /boot/grub2/grubenv create
sudo grub2-editenv /boot/grub2/grubenv unset menu_auto_hide

Then, I added the following line to /etc/default/grub, because it wasn’t there:

GRUB_TIMEOUT_STYLE=menu

Now, we need to update the GRUB by using any one of these lines:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grub2-mkconfig -o /etc/grub2.cfg
grubby --update-kernel=ALL

The first two lines do the same thing because /etc/grub2.cfg is a symlink to /boot/grub2/grub.cfg. I’m lazy, so I’m always using the third line.

Will this survive, or will some system update override my settings? One may never know with the abominable crap that is GRUB2. I really miss the old LILO, which had a unique configuration file, /etc/lilo.conf, and you only needed to run lilo to update the MBR. Stallman’s crap boys have invented GRUB, and with GRUB2 they made it so complex and scattered all around the filesystem, that it wouldn’t make much of a difference if systemd-boot were used instead. Unless the efforts to build nmbl (“no more boot loader”) will lead to the demise of GRUB (see the presentation at DevConf.CZ; people on Hacker News don’t seem enthusiastic, but the typical commentator on HN is not to be trusted). Or maybe I really need to see whether FreeBSD 15.0-RELEASE comes up with that graphical installer, in 2026 or whenever this is going to happen. I wonder if this means they’ll have a Live ISO with X. I’m sick of this shit. 30 years later, Linux is becoming Windows 11, mixed to the worst UI concepts of macOS.

🪳 Do you know what’s the most retarded bug in GRUB2? Let me tell you which one it is, because it happened to me more than once.

Say you have a computer with Linux on it. And say you want to install a second distro on an external device, be it an SSD or a fast flash drive (the Samsung Bar Plus and Samsung Fit Plus are good options). You tell the installer to install GRUB on this external device, not on the internal one(s). When doing so, I specifically avoided installing externally any of Ubuntu or Ubuntu MATE, because Ubiquity has been known to have this bug for a decade already. See Bug #1173457: Ubuntu Installer uses wrong bootloader location for USB UEFI installs (reported on 2013-04-27) and Bug #1396379: installer uses first EFI system partition found even when directed otherwise (reported on 2014-11-25). I installed Debian, MX Linux, or openSUSE Tumbleweed.

What I expected was to have an external device that could be used as an installed Linux system either in an emergency, or for an evaluation. I don’t do dual-boots anymore, so even with two internal SSDs, one is for the system, and the second one is for the home partition that survives a reinstallation and any distro-hopping.

Instead, I discovered that the external device’s GRUB had taken over the internal Linux installation, making the laptop unbootable without the external device! That’s hijacking, no less. So it wasn’t Ubiquity’s bug, but GRUB’s.

The only way to avoid this crap from happening is to hide the internal drives in the BIOS/UEFI when performing the installation. Unfortunately, this is not possible anymore for most of the computers manufactured in the last 10–15 years. Another possibility is to use a Windows system while installing on an external device, because in such a case, there is no EFI partition to be hijacked!

Fuck you, GRUB2.

The other thing about a newer kernel

5.14 was the last kernel to only support NTFS through the FUSE module ntfs-3g. So when using kernels older than 5.15, you need to install it from EPEL (which is already enabled if you installed the system from my ISO):

sudo dnf install ntfs-3g

But don’t be so happy about the inclusion of Paragon’s ntfs3 driver in the newer kernels! It’s literally a fucked-up driver that would occasionally screw up and eat your data, as some people (including myself!) have experienced and as I explained here.

So I strongly suggest you to disable Paragon’s shit and use the old driver instead, even with the 6.1 kernel. Slower, but safer. Here’s how to replace ntfs3 with ntfs-3g.

After having installed ntfs-3g, edit /etc/modprobe.d/blacklist.conf and add this:

# will use the old ntfs-3g (FUSE)
blacklist ntfs3

Then, reboot or do this:

sudo modprobe -r ntfs3

You still need to double-check that the blacklisting worked. Insert an NTFS-formatted external drive (or flash drive), and check how it’s mounted, e.g.:

$ mount |grep sdb
/dev/sdb1 on /run/media/ludditus/fast64ntfs type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
$ lsmod|grep ntfs
$

Fixed.

Should you still want to use the 6.1 kernel from ELRepo

I’m using it because I need it on the newer laptop for the Wi-Fi and BT. On the mini-PC, I stay with the official 5.14, but I’m lucky: it’s using i5-10400T. Apparently, it had an i5-11400 (without T and 11th generation), I’d need at least kernel 5.15.5 for proper support. Also, the newer laptop came with i3-1215U, which works with 5.14, but if I want a proper management that knows how to handle the fact that the 2 P-cores go up to 4.40 GHz and the 4 E-cores only to 3.30 GHz, I need a newer kernel, such as 6.1. However, 5.14 knows that the P-cores are multi-threading, whereas the E-cores are not. It just can’t allocate the processes optimally across the different types of cores.

OK, so you’re using kernel-lt from ELRepo. But it doesn’t seem to get updates! Well, even if you install ELRepo manually, the elrepo-kernel repo will be disabled by default in /etc/yum.repos.d/elrepo.repo. They say you should enable it. Fine, but each time I enable it, it gets automatically disabled after a new kernel-lt is installed!

Because the guys from ELRepo are not mentally sane, you should do what I do, which is to re-enable elrepo-kernel after each update from ELRepo. Since you should already have dnfdragora preinstalled from AlmaLinux-Synergy, you can do it the GUI way:

Why can’t Linux people be mentally sane? Why would anyone keep disabling a repo that the user has already enabled? WTF is this shit?!

UPDATE: It looks like elrepo-kernel stopped disabling itself. After 6.1.100, I’ve been notified about 6.1.101. Later, about 6.1.102.

Aimez-vous Wayland?

Unlike the KDE that EPEL has built for EL9.3, this one built for EL9.4 defaults to a Wayland session. Both in the Live ISO session and on the installed system, there are two ways to check the type of the session (X11 or Wayland):

$ echo $XDG_SESSION_TYPE
wayland

Even in the live session, you can log out and select a different session type in SDDM. You can also change the autologon SDDM session:

I’m doing the same for the installed system, as it’s set for my user to log in automatically. I’m not holding on any of my computers the secret formulas for Coca-Cola and WD-40.

Fonts I recommend

Before installing extra editors, IDEs and whatnot, how about the fonts? I’m never happy with the defaults in any distro. Below, I used 14 bullets in the attempt of making slightly easier my short list of interesting free fonts.

● For a while, I thought that IBM Plex Mono was a good monospaced typeface, with IBM Plex Sans a good system font, and IBM Plex Serif to round out the collection. Then I was bothered by the ugly monospaced r. Either way, the IBM Plex family is available even in Ubuntu, but not in RHEL or at least in EPEL?! Heck, it’s made by IBM, who owns Red Hat! (You can try them in Google Fonts: Mono, Sans, Serif.) Now, the simplest way to install these fonts in AlmaLinux is to grab some RPMs from Fedora. They aren’t bound to any Fedora version, so anything goes. Look here in Rawhide, and whatever version is there. At the time of writing, ibm-plex-mono-fonts-6.4.0-1.fc40.noarch.rpm, ibm-plex-sans-fonts-6.4.0-1.fc40.noarch.rpm, and ibm-plex-serif-fonts-6.4.0-1.fc40.noarch.rpm (unless you also need Arabic, Devanagari, Hebrew, Thai for sans serif, in which case 5 more RPMs need to be installed).

● For another while, I thought that Fira was a nice font family, too. In EPEL, there are mozilla-fira-mono-fonts and mozilla-fira-sans-fonts. While Fira Mono is pretty decent, Fira Sans and Fira Sans Condensed are a bit meh, so I’d choose Fira Sans Book instead.

● Even if you don’t install any of JetBrains’ IDEs, you might like their JetBrains Mono typeface. You can get it from their GitHub. From Assets, grab the ZIP, extract it, and install the files from “ttf” from within Dolphin.

● If you’re used to Cascadia Code, you can get it too. From the large ZIP, you should probably install Cascadia Code if you prefer ligatures (particularly noticeable with code that includes “<==>“), or Cascadia Mono to keep the characters as they are. You can ignore the variants with added symbols: PL (power line) and NF (Nerd Font). The ZIP contains a smaller number of variable fonts, and a larger number of individual “static” fonts. I prefer the latter, with one style per file.

● A great monospaced family is Inconsolata. Since the author says that the official release of Inconsolata is at Google Fonts and official upstream is on GitHub, test them at Google Fonts. Then go to the latest release, grab fonts_ttf.zip (don’t ask why I always prefer TTF over OTF) and install them. Here, too, there are many more variants than you’d need. I recommend Inconsolata Medium or Inconsolata Semi Condensed Medium.

● For a very elegant sans serif, I didn’t think I’d ever recommend it, but here it is: in no way influenced by the fact that GNOME will use it as the default typeface in version 47 (read here, here, or here), and despite its similarities to the SF Pro fonts used by macOS, I believe Inter makes a great font! (You can try it on Google Fonts.) Go to their GitHub, grab the ZIP from Assets, extract it, and then install the TTFs from “extras/ttf”. There are several variants to play with; I tend to prefer Inter Display Medium or Inter Medium.

●While the Inter typeface is looking just fine, it has a few disadvantages. If you prefer an unambiguous “l” and a double-story “g” (the “g” that looks like an “8”) instead of a single-story “g” (the “g” that looks like a “9”), then Public Sans (GitHub, Google Fonts) might be a wiser choice, except that it’s Latin-only.

● A huge typeface family for Gen. Z is Iosevka. It’s a project so big and complex, and unnecessarily so, that the French would call it “une usine à gaz” and the Americans might dub it “a Rube Goldberg machine,” that I can’t even. Or maybe I can. But it has a mix of monospaced, quasi-proportional, slab serif and sans serif variants, with ligatures and whatnot, that makes me dizzy. Let me say that I’ll die believing that ligatures are one of the most stupid inventions ever! They made sense in the times of Gutenberg and even maybe in the 19th century, because it helped the typesetters use fewer letters, but ligatures make a text less readable, not to mention the added complexity to the OCR, then to the searching and indexing of a text that instead of, e.g., “f” followed by “l” has “fl” as a single character. (Of course, in this case, the ligatures are created for displaying purposes only, but the UNICODE includes special characters for such ligatures, which cannot be properly searched for and indexed as is.) And how would ligatures help someone who’s writing code?!

This being said, I’d recommend, from the latest release, the following selection of monospaced fonts, with direct D/L links (the versions are given for the time of writing): Iosevka Fixed (with ligatures: Iosekva Term), Iosevka Fixed Slab (with ligatures: Iosevka Term Slab), Iosevka Fixed Curly (with ligatures: Iosekva Term Curly), Iosevka Fixed Curly Slab (with ligatures: Iosevka Term Curly Slab), Iosevka Fixed SS08 (with ligatures: Iosevka Term SS08), Iosevka Fixed SS10 (with ligatures: Iosevka Term SS10), Iosevka Fixed SS11 (with ligatures: Iosevka Term SS11), Iosevka Fixed SS12 (Ubuntu Mono style; with ligatures: Iosevka Term SS12), Iosevka Fixed SS18 (with ligatures: Iosevka Term SS18). From this entire mess, I tend to prefer Iosevka Fixed Medium, which comes in the first ZIP. (To puzzle out these fonts and for previews, read PACKAGE-LIST.md.)

They also have two excellent quasi-proportional fonts. There is no official definition of such a classification, but they are fonts that aren’t monospaced; however, they have lower width variations. For instance, “m” is not 3-3.3 times wider than “i” like in some proportional fonts, but only 2-2.25 times wider. From this category, Iosevka offers a sans-serif, Iosevka Aile, and a great slab-serif, Iosevka Etoile.

Note that all Iosevka fonts are also available on SourceForge.

● Suppose you like Ubuntu’s fonts, and want them on AlmaLinux too. Here, you have two options, depending on whether you like the old fonts (version 0.83) or the new ones (version >1). The old fonts can be found on the official, outdated design page: use the green Download button at the very bottom, extract the ZIP, and install the 10 files for Ubuntu and the 4 files for Ubuntu Mono. But I prefer the new line, currently at version 1.006: Ubuntu Sans and Ubuntu Sans Mono. Get the ZIP files from Assets, extract them, and install the TTF files.

● One of the most readable serif fonts, IMHO, is the font this paragraph is rendered in: Bookerly. Go to Amazon’s Typography page and download the Amazon Complete Font Set. You’ll find inside 5 font sets, of which you should install Bookerly, as Bookerly Display is meant for larger font sizes. Strange enough, they both display pretty much identically in browsers, but the eReader Prestigio Android app renders Bookerly Display rather unsatisfactorily for paragraph text.

● You’ll find in the above set from Amazon the Ember family of sans-serif fonts. This time, all 3 variations render great on all devices: Ember is the widest one, Ember Display is slightly narrower, and Ember Condensed is sensibly narrower.

● The second-best serif: Google’s Literata. Get it from Google Fonts, and install the “static” fonts. You’ll find 5 different sets: Literata, Literata 18pt, Literata 24pt, Literata 36pt, Literata 60pt, but to my eye, they render identically at all sizes on all devices, so I just use the plain Literata. Those with point sizes in the names are supposedly optimized for rendering at those sizes (“optical sizing optimization”), but it might be the case that only professional typesetting software such as Adobe InDesign or Illustrator can take advantage of those optimizations. (Still, I wonder who the fuck could tell the difference. Normally, smaller sizes such as 8pt or 9pt require optimizations, not 18pt to 60pt.)

● Another beautiful serif font designed for screens is Bitter. It can be downloaded from Google. Here too, the “static” fonts are the safest bet.

● I was forgetting about Vollkorn, a very nice serif font, not that much used lately. Download it from Google, and prefer the “static” fonts.

Archivo is a nice sans-serif typeface that is rather wide in its main variant and even wider in Archivo Black, but very interesting in Archivo Narrow, which resembles a bit Amazon Ember Cd RC, but with different “4” and “g” (the most visible differences). (The links go to Google Fonts; the font includes variable version, but I still prefer the static ones. Github too.)

Lora is a very legible serif font without being too wide. It supports 53 Latin languages and 16 Cyrillic ones. Get it from Google Fonts of from Github.

● I just noticed that Ubuntu 24.04 and Debian sid have packages for Montserrat. It’s a bit too wide for my taste, but otherwise nice. Get it from Google Fonts or from Github. Variants: Montserrat Alternates, Montserrat Subrayada.

● The latest and greatest sans serif Microsoft font, Aptos, can be downloaded from the Microsoft Download Center. You’ll get a ZIP with 28 TTF files. Microsoft being Microsoft, it seems that the internal font names are partially overlapping, so I could only install 20 of them: 12 for Aptos, 4 for Aptos Narrow, and 4 for Aptos Mono. Then, there is another kind of overlapping: Aptos has a font style called Display (which actually means Regular), but Aptos Display also has a style called Regular! Even so, Aptos can make a good sans serif font; the monospaced variant is too wide for my taste.

● Should you need the “classic” Microsoft fonts, installing them in AlmaLinux is a bit more complicated than it should have been. For some reason, the package xorg-x11-font-utils is missing from EL9 and EPEL9, and Bug 2059773 – Please branch and build xorg-x11-font-utils in epel9 has been closed as a duplicate of a bug that is definitely not a duplicate; despite Bug 2142931 – xorg-x11-font-utils required to build tigervnc, migrated to RHEL-3063: xorg-x11-font-utils required to build tigervnc, they still couldn’t care about it, claiming that “the xorg-x11-font-utils package doesn’t exist anymore, as it was deaggregated into several subpackages” and ignoring the breakage that this produced. How come that xorg-x11-font-utils has only been deaggregated in RHEL9, but it still exists in Fedora 40, you fucking morons?

Fortunately, AlmaLinux has such a package in the Devel repo (and so does Rocky Linux), which “includes packages that are not normally provided in the base nor extra repositories, but needed for build-time dependencies of other packages” yet “is NOT meant to satisfy runtime dependencies or for long term use on general purpose machines.” There are several ways to install these packages.

The orthodox way:

sudo dnf install almalinux-release-devel
sudo dnf --enablerepo=devel install xorg-x11-font-utils

The lazy way:

sudo rpm -i https://repo.almalinux.org/almalinux/9/devel/x86_64/os/Packages/xorg-x11-font-utils-7.5-53.el9.x86_64.rpm

The schizophrenic way:

sudo rpm -i --nosignature https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/x/xorg-x11-font-utils-7.5-53.el9.x86_64.rpm

Then, we can do what we needed to do in the first place:

sudo dnf install curl cabextract fontconfig
sudo rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

NOTE: For the fonts installed from source, not as RPMs, if you prefer to install them manually instead of using Dolphin’s “Install…” option (on right-click), copy them locally in ~/.local/share/fonts/ or globally in /usr/local/share/fonts/, then don’t forget to register them: sudo fc-cache -fv.

Theming suggestions

Whatever you do, you could first try my suggestions for theming KDE in System Settings, Appearance:

  • Global Theme: Breeze Twilight for normal people, Breeze Dark for zoomers.
  • Application Style: keep it to Breeze. Same for the GNOME/GTK Application Style (bottom-right).
  • Plasma Style: keep it to Breeze Dark (for the black panel).
  • Colors: click on “Get New Color Schemes” and install, then select, Card. It’s just a text file with a list of colors, so there is no risk of any vulnerability like the one I talked about back in March (“Global themes and widgets created by 3rd party developers for Plasma can and will run arbitrary code.”). The Card color scheme is the pivotal point of my KDE look-and-feel 🙂
  • Window Decorations: keep it to Breeze.
  • Fonts: do as you like. Don’t forget that the fixed-width typeface selected here will not propagate to Konsole! In Konsole, you need to go to Settings, Manage Profiles, then to create a new profile, to set it as the default, and then go to Settings, Edit Current Profile, Appearance, and choose a different font.
  • Icons: I recommend the Papirus icon set, from Pling: pling.com/p/1166289. Expand the blue Download button, and select the first and largest archive, which at the time of writing was papirus-icon-theme-20240501.tar.gz. Once you downloaded it, use “Install from File” to install it. You should then have Papirus, Papirus-Dark, and Papirus-Light. Select the first one.

That was about all.

Editors and IDEs

This is not about vim or nano. This is about GUI stuff.

Being in KDE, you already have Kate, a rather powerful multiple document interface (MDI) text editor with syntax highlighting.

For everyday use, I recommend FeatherPad as your Notepad equivalent. It’s smaller, but still powerful enough. It can replace text by using regular expressions too. I have nothing against GTK-based text editors, but FeatherPad is a small gem. Should you, for some reason, prefer Mint’s Xed, you should know that EPEL only has it in version 3.2.8, whereas Fedora has 3.6.3 (3.6.4 in testing), and the upstream has released 3.6.4.

I never quite liked Notepad++ (I’m not sure that I like Scintilla), so I don’t resent the lack of a Notepadqq package in AlmaLinux. Debian, Ubuntu, openSUSE have it, but it’s the same beta from 2018. That project is not actively maintained, which means it’s dead. Have a still relevant review by Dedoimedo.

For the lightest IDE, you can have Geany 2.0 from EPEL! But let’s go to the major actors.

● Sublime Text can be installed as described here:

sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg
sudo dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo
sudo dnf install sublime-text

● VSCodium could be installed by grabbing the latest RPM, but it’s preferable to use the official repo:

sudo rpmkeys --import https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg
printf "[gitlab.com_paulcarroty_vscodium_repo]\nname=download.vscodium.com\nbaseurl=https://download.vscodium.com/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg\nmetadata_expire=1h" | sudo tee -a /etc/yum.repos.d/vscodium.repo
sudo dnf install codium

● VSCode is also an option, should you want Microsoft to take a look over your shoulder. You can grab an RPM, or install it from the repo:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/vscode.repo > /dev/null
dnf check-update
sudo dnf install code

● UltraEdit has a feature “Replace in all open files”, and also “Replace in files” from a folder. In Linux, you can get these features as follows:

  • Replace in files from a folder: in VSCode/VSCodium, Sublime Text, Kate, Geany.
  • Replace in all open files: in VSCode/VSCodium, Sublime Text, Kate.

● The JetBrains family, now. To get PyCharm, scroll down to PyCharm Community Edition, and grab the TGZ. Extract it with Ark, and follow the instructions from Install-Linux-tar.txt. Then, after having run pycharm.sh for the first time, go to its start screen and select “Create Desktop Entry” from the cog icon. The launcher will be created in the Development menu.

You can do the same with IntelliJ IDEA Community Edition, just don’t forget to scroll down to the Community Edition download link.

Unfortunately, CLion doesn’t have a community edition. For RubyMine, GoLand, Rider, Webstorm and DataGrip, to get a free student license the verification of the university/college domain email or ISIC card is required. For RustRover, apparently, anyone can apply for a free individual, non-commercial license. JetBrains Fleet is “free to use during public preview,” but this will end, the same way it ended for CLion, whose Early Access Program (EAP) builds were free to use. Actually, CLion still has free EAP builds, but they might be rather buggy.

Markdown editors. For ReText, do this:

sudo dnf install python3-pip
pip3 install ReText

You’ll find the launcher in the Office menu. For a live preview, CTRL+L.

Ghostwriter doesn’t have a package for EL9. You can build the last version that was based on Qt5 as follows.

Get the sources for that version, i.e. ghostwriter-release-23.08.zip, and extract them. Then:

$ sudo dnf install qt5-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-qtmultimedia-devel qt5-qtwebengine-devel qt5-linguist kf5-kcoreaddons-devel kf5-kwidgetsaddons-devel kf5-kconfigwidgets-devel kf5-kxmlgui-devel kf5-sonnet-devel kf5-kdoctools kf5-kdoctools-devel cmake extra-cmake-modules hunspell-devel
$ cd ghostwriter-release-23.08
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

You’ll find the launcher in the Office menu.

MarkText exists as an AppImage. All themes but Dark have a too low contrast. To create a .desktop launcher you can follow the official instructions, but there is a simpler way. Use the KDE Menu Editor, invoked by a right-click on the application menu (“Start menu”), Edit Applications.

● You can use also use a Sublime Text extension for Markdown. First, do Tools, Install Package Control. Then, open Tools, Command Palette (CTRL+SHIFT+P), search for Install Package and hit Enter or click on it; within it, search for MarkdownEditing and hit Enter or click on the result. It will install the extension. Unfortunately, Sublime Text cannot provide a live WYSIWYG preview inside the editor, but only in a browser. For Markdown, you should install two other extensions, Markdown Preview and LiveReload, but don’t ask me how to use them. It’s not practical for 2024, dammit.

● There are also extensions for VSCodium and VSCode, such as zaaack‘s Markdown Editor. For a WYSIWYG, hit CTRL+SHIFT+ALT+M.

● The Brackets text editor “for the Web” has evolved into Phoenix Code, which has a markdown extension. It’s reasonable enough to consider its developers stupid, because here’s what you have to install before being able to use it:

sudo dnf install compat-openssl11

Only now, you can use the official install procedure:

wget -qO- https://updates.phcode.io/linux/installer.sh | bash

Then, as per here, select File, Extension Manager, search for Markdown Preview, and click the Install button. The default font is illegible, so go to View, Themes, and enter your preferred typeface, and the desired size (in px, as pt is not supported, the nincompoops).

Note-taking and personal knowledge base software. I have put them here because they generally use Markdown for a syntax. None of them satisfies me, and I use instead a primitive information system that doesn’t satisfy me either, but maybe one day I’ll come to love some such software. Not a single one of them is practical enough! Using complex, sophisticated apps to store crappy, irrelevant info is the epitome of our sick times. Even some project managers are using such shit!

QOwnNotes is the only native app in the whole set! Maybe too minimalistic, but small and snappy. It installs to Utilities: sudo yum install qownnotes and that’s all!

Obsidian is the big classic. It’s too complex for me, but many smart people are using it. It’s Electron-based (meh), but the AppImage works just fine. To create a menu entry, use the official guidance or the KDE Menu Editor.

Trillium Notes, a competitor, is also Electron-based. Get the first Linux archive (not the server one) and extract it.

For Zettlr, use the RPM package for Fedora. It’s a universal RPM. This Electron-based app will show up under Office.

Joplin, yet another Electron app, is also an AppImage, but they provide a script that would install it; you’ll find the launcher also in the Office category:

wget -O - https://raw.githubusercontent.com/laurent22/joplin/dev/Joplin_install_and_update.sh | bash

You can also use VSCodium or VSCode to manage your notes by adding the Dendron plugin. CTRL+P, then paste ext install dendron.dendron and press Enter.

Office suites

AlmaLinux offers LibreOffice 7.1.8.1, which is rather old. 7.1 was released in March 2021, with the last update, 7.1.8, in December 2021. Even Debian 12 has LibreOffice 7.4.7, released in August 2022, and openSUSE Leap 15.6 comes with LibreOffice 24.2.1.2, a patch over 24.2.1 from end-February 2024. Soon, somewhere in August, the upstream will release 24.8.

If you’re fine with that, no problem. But a newer version of LibreOffice can be downloaded from upstream, as a set of RPMs. At the time of writing, the current stable release was 24.2.5, and the previous supported release was 7.6.7.1. Dedoimedo has a LibreOffice 24.2 review. He also reviewed an older version.

But the prerelease build of 24.8.0, bizarrely versioned 24.8.0.1, could also be downloaded!

After having extracted the archive, the contents of the RPMS folder can be installed with sudo dnf install *.rpm and, sure enough, everything works:

The previous build, beta1, also worked just fine.

But you could also use the free version of SoftMaker Office, namely FreeOffice 2024. This version of the website is spartan, and they tell you to download and install a RPM. We’ll see later that they have a repo that also offers the previous versions, 2021 and 2018, and the paying editions for 2024, 2021, 2018. Either way, bear in mind that even the free version requires you to register using an e-mail, so that you can get a serial number.

The free edition will nag you with a promotional ad every now and then. I couldn’t hide the sidebar, but I didn’t like this edition anyway. On the spelling checker side, FreeOffice only uses Hunspell dictionaries, which are pathetic. You need to pay for better ones, or you could use LibreOffice, whose spelling dictionaries are excellent. If German is your language of interest, then the full SoftMaker Office is what you need (don’t expect too much from Duden Korrektor, though).

SoftMaker Office 2024 and the subscription-based SoftMaker Office NX have a free 30-day trial option. You should follow the instructions for Fedora, as the RPMs are generic:

sudo wget -qO /etc/yum.repos.d/softmaker.repo https://shop.softmaker.com/repo/softmaker.repo
sudo -E yum update
sudo -E yum install softmaker-office-2024

But this repo hosts all the existing versions: softmaker-office-2024, softmaker-office-2021, softmaker-office-2018, softmaker-freeoffice-2024, softmaker-freeoffice-2021, softmaker-freeoffice-2018. Beware that you cannot install on the same system a paying and a free edition with the same year in the name, because the binaries have the same names!

As I’m a paying customer for their SoftMaker 2021 edition, I preferred to install that one.

I still prefer the 2021 Pro edition! Dedoimedo had a SoftMaker Office 2021 Pro review.

I could never understand those who like OnlyOffice Desktop Editors, possibly the ugliest and least ergonomic office suite I’ve ever seen. And I’ve seen a lot, starting with Lotus Works 3.0 for MS-DOS. Either way, they provide an RPM that installs fine on AlmaLinux:

Dedoimedo has only reviewed much older versions, in 2019 and in 2020. Maybe you’d prefer a recent review in PCMag.

PDFs and e-books

Okular is not enough, no matter how useful it is. For PDFs, a few extra tools might help. By the way, did you know that you can extract images from a PDF with pdfimages, which is part of the poppler-utils package? I was using it even in Windows, as part of xpdf-tools.

Now, for a GUI tool for basic PDF manipulations (merge, extract, delete, rotate pages), there is PDF Mix Tool. There is no pdfmixtool package for EL9 (Fedora and openSUSE Leap do have it), so you need to build it from sources. Get e.g. pdfmixtool-v0.5.zip, extract it and enter the directory. Prerequisites:

sudo dnf groupinstall "Development Tools"
sudo dnf install GraphicsMagick-c++-devel qt6-qtbase-devel qt6-qtbase-gui qt6-qtbase-devel qpdf qpdf-devel poppler podofo-devel

Now you’re free to go:

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DUSE_GRAPHICSMAGICK=ON -DCMAKE_BUILD_TYPE=Release
make
sudo make install

The icon will show up under the Office menu.

For a true PDF editor, there is Master PDF Editor for Linux. A full license is a bit expensive, but the free, unregistered version can still do such things: Create new PDF document from scanner or existing file(s); Fill PDF forms; Add and/or edit bookmarks in PDF files; Comment and annotate PDF documents; Split and merge PDF documents. Just download the RPM “for openSUSE / RedHat” (at the time of writing, master-pdf-editor-5.9.84-qt5.x86_64.rpm), and install it. It will also show up in Office.

I guess this is one of the few Linux apps for which there are (cough) cracks, although not necessarily for the last version.

Moving to ePub e-books, the must-have is Calibre. Most distros will severely lag behind; unless you’re using Arch, openSUSE Tumbleweed, Fedora Rawhide (the “normal” Fedora is usually only slightly behind), or Debian sid, do what everyone else does:

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin

Funny thing, it creates 3 icons under Office: E-book editor, E-book viewer, and calibre, but much further down the list. Either way, should you have DRM-free books, you can edit them:

As for ePub readers, there are many more choices than those I described a couple of years ago, and they all have their flaws. I suspect that most publishing houses only test their ePub files on Apple’s apps for macOS and iOS.

Foliate should be OK for most e-books, but packages are only available in a limited number of distros (up-to-date in Arch, Fedora and openSUSE Tumbleweed, outdated in Debian and openSUSE Leap; strange enough, in Ubuntu 24.04 they have foliate_4.~really3.1.1-1_all.deb), so the preferred installation method is as a Flatpak. FFS.

I didn’t want to use Flatpaks, but I had to enable Flathub just for this shit:

However, when launched from the KDE menu, Foliate fails to open any ePub!

That’s because…

(com.github.johnfactotum.Foliate:2): com.github.johnfactotum.Foliate-CRITICAL **: 00:07:31.983: My name is Oh-No-WebKit-Crashed, bug of bugs!

(com.github.johnfactotum.Foliate:2): com.github.johnfactotum.Foliate-CRITICAL **: 00:07:31.983: Look on this line, Developer -- despair!

However, when launched from Konsole, either by the short version of the command, flatpak run com.github.johnfactotum.Foliate, or by the full crap that’s in the .desktop file, /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=foliate --file-forwarding com.github.johnfactotum.Foliate, it just works!

Do you know why this happened? You couldn’t possibly know. This is because my locale that includes items such as LC_TIME=en_DE.UTF-8. These are valid locale settings (look in Debian 12 and you’ll find en_DK but no en_DE), but some retarded pieces of software don’t know that. I explained the whole shebang in my recent long rant about disappointments with Linux, under LC_ALL and the fix I was looking for.

So, here’s the fix for the few people who would encounter this bug: open the KDE Menu Editor (right-click, Edit Applications), edit the .desktop for this app, and reset the locale to something that even the most retarded library should understand, by adding to the “Environment Variables” field LC_ALL=C.UTF-8.

It now works:

I was able to find the cause of this crash only because Konsole didn’t pass to the processes launched from it the LC_* values set in systemsettings5, but it sets all of them to C.UTF-8. I suppose this inconsistency is a bug, but in this case it helped me.

Surprises don’t end here. Back in 2021, when I was using Fedora, Okular was able to open ePub files. This is not the case in AlmaLinux! You see, Okular needs ebook-tools to handle ePubs. Such a package exists (ebook-tools-libs too) in Fedora, Arch, openSUSE; not in EL9! Fact is, the last time this package has been updated was in 2012, so it’s practically an abandoned project! But how come Fedora still builds it?

What’s worse, Okular’s official KDE page is lying:

Multi-platform, fast and packed with features, Okular allows you to read PDF documents, comics and EPub books, browse images, visualize Markdown documents, and much more.

Yeah, and a blowjob too. It’s a complete lie! The ePub support is (was?) based on a plugin that is not offered by KDE, that is not built by KDE, and that has been abandoned. So the KDE team can’t maintain a tiny extension for a major KDE app, yet they’re busy with KDE6 and Wayland and shit?!

We need to talk about unarchivers

It might seem abrupt and misplaced, but we have to consider some unarchivers. Why here? Because I cannot deal with the comic book readers unless I know whether I can get the proper unrar support!

Most comic books come as CBZ or CBR, which are just different names for ZIP and RAR, respectively. While the ZIP format is well-supported in Linux and in KDE (Ark knows about it, and Okular can open CBZ files), this is not the case for RAR.

What you’ll have in AlmaLinux is “the wrong” UNRAR! The package unrar is a wrapper for unrar-free, which is a free reimplementation of RAR. The author claims it supports RAR 5.0, but it just doesn’t. The version available in EL9 is only 0.1.1, but I couldn’t see anywhere any mention of the version that added this support.

So, if you just install unrar, Ark won’t open RAR5 files. I had issues even with some RAR4 files! But here’s how to get the “proper” unrar (and rar) from CERT Forensics Tools. UPDATE: CERT Forensics Tools ceased to exist!

They say you should make sure you have the other repos installed (you should have them all):

sudo dnf config-manager --set-enabled appstream baseos epel crb

Then, install the expired key that was used to sign the RPM that installs their repo:

sudo rpm --import https://www.cert.org/forensics/repository/forensics-expires-2022-04-03.asc

Add the repo:

sudo rpm -i https://forensics.cert.org/cert-forensics-tools-release-el9.rpm

And the key for the actual packages:

sudo rpm --import https://forensics.cert.org/forensics.asc

Finally, install the real thing, which should be in version 6.2.2:

sudo dnf --repo forensics install unrar rar

Ark should now be able to open all the RAR files you’d get. That includes the CBR files, should you want to extract files from them.

Okular should also be able to open CBR files of any kind.

You could also install p7zip, but it’s antiquated: it’s stuck in 2016. Since there is no GUI equivalent of 7-zip for Linux, you should better use the CLI version for Linux. Grab the correct Linux tarball; you’ll find inside 7zz (compiled for dynamic system library linking) and 7zzs (compiled with static system library linking). Both of them work, so copy whichever you like in your path.

Should you happen to like PeaZip (I don’t!), download the RPM Qt5 and install it. It will work…

...unless you have any LC_* value that is not “orthodox”! When it doesn’t understand something like en_DE, it can’t even read French diacritics, so it cannot open any archive because it can’t get the file name right! (We’re in the 21st century, and such crappy software cannot default to C.UTF-8!)

So, kids, do what uncle Ludditus eventually did, and stop using such regional settings:

Once you do, all the softwares will behave as expected:

E-books, take two

So far, we know that Foliate is a decent ePub reader. From the apps I tested in 2021, I can no more use GNOME Books, because they retired it. That’s a good thing that they start diminishing GNOME; maybe one day it will have zero features and no software at all.

Normally, Okular should have supported ePubs too; it doesn’t. This is how EPEL has built it! As a proof, its Open Document dialog doesn’t list ePub files among the All Supported Files. Too bad.

But guess what: EPEL packaged for us Mint’s Xreader! Part of their XApps, it’s a fork of Atril, but improved. As described upstream, when using the proper backend libraries and optional helper programs, it can open the main formats you might be interested in:

  • PDF (you should already have poppler preinstalled from AppStream)
  • DjVu (djvulibre is in EPEL)
  • CBZ (you should already have unzip preinstalled)
  • CBR (see above for the “proper” unrar!)
  • CB7 (so maybe p7zip isn’t that useless)
  • EPUB (they don’t list it, but it works!)
  • and more.

It’s not the best ePub reader, nor the fastest CBZ/CBZ viewer (I don’t use CB7, so I couldn’t test), but it’s pretty decent. Just note that installing it doesn’t add any menu entry. Make one for /usr/bin/xreader.

Other choices for ePub files: Koodo Reader, which offers among others a RPM. It’s an Electron app. But it works, and it can be customized:

Bookworm is available as a Flatpak from Flathub, so use Discover to get it. This one doesn’t need to make copies of the books, but it has a flaw: it can only use a forced font, i.e., it cannot use the fonts embedded in the book! Oh, and the 2-page view must be enabled in settings.

I’m not a fan of FBReader, which is available as an AppImage. There is no reason why you should use it: it’s clumsy, ugly, and buggy. Despite “Use ePub embedded styles” having “Font family” checked, it will force the font selected under the “Text” tab. This is just stupid.

Another issue with it: the website says, “Since the release 2.1, in addition to DRM-free books, FBReader can open ePubs protected with Readium LCP.” However, such books failed to download under AlmaLinux, whereas they worked just fine in Kubuntu 24.04!

Thorium Reader has to be used also as an AppImage. It’s based on importing books, but without making copies of them. However, it’s very slow, buggy, and it has telemetry. Just don’t.

I left for the end the newest kid on the block, Arianna! Read this announcement, then use Discover to download the Flatpak.

The background color cannot be changed, and I don’t know which element of the theme was used, but a document’s background should have been white. Among other quirks: the settings cannot be accessed while in the book; and “Use publisher font” is not enabled by default.

Too many readers already!

This is not the best place to say it, but let me recommend the following ePub readers for Android: eReader Prestigio, Lithium, ReadEra. I only use DRM-free books, except when I need to use the Kindle app.

Comic books, finally!

As you should know by now, CBZ, CBR, and CB7 can be read by Okular (preinstalled) and Xreader (not preinstalled). Make sure you install the unrar version from CERT Forensic Tools, and p7zip for CB7. Xreader is the slowest of the two.

YACReader is another option. Not because it’s a Flatpak, but because I didn’t like it in Windows either. I don’t like its ergonomics, the navigation, stuff like that.

Other comic readers (MComix, Peruse) are too much of a PITA.

For the last time, about the LC_* thing

But it’s time to talk again about those apps that don’t support the full set of LC_* values that the KDE System Settings itself allows you to configure under Region & Language. Previously, I mentioned Foliate and PeaZip. I should now add Ark and Okular to the list!

Okular crashes with “Fluide Glacial – n°572.cbr” if opened from Dolphin from the KDE menu. If Okular was opened from Konsole, you guessed it: it works!

The same happens to Ark.

Heck, KDE’s own apps are that pathetic! Generally, such dumb apps fail to deal with any non-ASCII characters in the file name or in files inside an archive! When they cannot understand the locale, they cannot default to C.UTF-8. Why not? Beats me!

Therefore, to get rid of all these bugs, there are two solutions. Should you want to use, say, English for a language, but with other system settings leaning to the specifics of another country, don’t do that! For instance, do not set the date to be displayed in the local language and format, because most software cannot recognize en_DE.UTF-8, which means “display them in English, but with the local conventions”!

Solution number 1: For the metric system don’t use “English (Germany)” but “C (Metric)”; for the A4 paper size, use “C (A4)”; use only a combination of American English and C, and it should work.

Oh, and you might need need to run qbus-qt5 org.kde.KWin /KWin reconfigure, or to log out and log in again, otherwise Ark and Okular will keep crashing.

Solution number 2: I have used this in the past in Windows. For the date and time, use “English (Ireland)” to get the European DD/MM/YYYY and the military time. It’s not quite the German DD.MM.YYYY, but it doesn’t hurt.

For currency, use the same “English (Ireland)” to get the Euro symbol as the default currency.

Since I was born in one of those Eastern European countries that have always used American English with computers, I prefer the decimal point to the decimal comma that is the official standard in most of Europe. So I don’t need to change anything else.

Refreshing the settings mentioned at the end of the first solution might still be necessary.

Browsers and email

I forgot that some people prefer something else than Firefox. Even I need at times a Chromium-based Inspector, as the one in Firefox has some limitations. BTW, Firefox is ESR 115, but it works just fine with all the extensions I need.

EPEL does have Chromium for you.

For Vivaldi, download the 64-bit RPM and install it. Once installed, it will add a vivaldi.repo that will help you update it.

I’m not sure that you should use it, but if you want it, you can: Brave can also be installed. For the first time, use the official instructions, which will add a repo too:

sudo dnf config-manager --add-repo https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
sudo rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
sudo dnf install brave-browser

Email-wise, KMail is a half-finished product (have you tried printing from it, and have you noticed that it prints the 96 dpi rendering of the message on your display?), so you might prefer Thunderbird, which is unfortunately ESR, meaning version 115. But it works.

The new ESR has been rebased to version 128 by Mozilla, and Thunderbird 128.0esr, as well as Firefox 128.0 (not labeled yet 128.0esr at the time of writing), can be installed from Flathub, via Discover.

You can also download tarball binaries for Linux, for Thunderbird and for Firefox. You should then extract them, decide where to keep the resulting folders (I suggest you keep them in your user’s home, not globally), and create launchers for the thunderbird and firefox binaries that you’ll find inside those folders.

There is even a derivative of Thunderbird ESR called Betterbird (still 115, soon to rebase to 128). Have a look at how Betterbird is better than Thunderbird, either by implementing features that Thunderbird refused to add, or by fixing bugs ignored by Thunderbird’s team. Download the appropriate tarball, and proceed as described above.

Finally, Evolution isn’t such a terrible email client either and, while being in the antiquated version 3.40.4, it has the advantage of not being contaminated by the CSD (client-side decorations) mania and the new headerbar. It works just fine in KDE. Note, however, that Evolution does not have a unified inbox!

Oh, should you trust a closed-source email app, there is Mailspring, whose free version doesn’t have major limitations (except maybe for the lack of read receipts), and which offers a RPM that installs and works in AlmaLinux as well. However, it looks like shit, and by this I mean that it looks like a horrendous macOS app with KDE windows decorations, and it has a major flaw: it only supports Gmail-like threaded message display. The developers have decided they don’t have the manpower to change its design.

BONUS TIP FOR FIREFOX! I cannot stand the tiny scrolling bars that the Proton UI has implemented in Firefox since version 89. I want solid, visible scrollbars, not gender-fluid ones. So I went into about:config and changed a number of widget.non-native-theme.* settings:

The default scrollbars vs. the modified ones (to which the system theme has also been applied):

Small system tweaks

● AlmaLinux isn’t the only Linux distro that does that, but this isn’t an excuse. Even when installed on a laptop, the CPU governor is set to performance:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance
performance
performance
performance
performance

This is unacceptable. I am not a gamer. This is a laptop. Even if, let’s say, I’m connected to the mains, I don’t want the CPU fan to be as noisy as a jet engine. So I want it to be set to powersave.

Actually, I wanted it to be set to ondemand, but this is not possible these days. While I was sleeping (sic), the official Linux CPUFreq Governors documentation has become a pile of FALSEHOODS. A complete lie, to be precise. The governors in the Linux kernel are NO MORE performance, powersave, userspace, ondemand, conservative, and schedutil.

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
performance powersave

Even if we assume that RHEL decided to only compile the kernel with these governors, fact is that the ondemand governor, which is what I’ve always used in the past (when I was using Linux for the love of it, not for hate and disgust of Windows), does not exist anymore, anywhere!

SMALL CORRECTION: There are only 2 Linux CPU governors left for recent CPUs (powersave and performance), but for older CPUs, more are available, including conservative, ondemand and schedutil, for the very same kernels! Starting with Haswell (4th gen), I guess, or maybe with Broadwell (5th gen), Intel P-state only uses the powersave and performance governors. Unlike the previous behavior, powersave does adjust frequencies dynamically as required (more like ondemand), but more conservatively than performance, which in turn doesn’t keep the CPU at its top speed anymore. So maybe powersave is more like conservative and performance more like ondemand, but who the fuck could know, as long as there’s no official documentation on that? What exists refers to the “old-style” governors only.

After having made some tests in several distros (Tumbleweed, MX), I discovered that powersave is now supposed to replace ondemand. The official documentation is, again, lying! (If you want official documentation that is not lying, try FreeBSD.) No, the CPUfreq governor powersave does not set the CPU “statically to the lowest frequency within the borders of scaling_min_freq and scaling_max_freq”! The CPU cores frequencies will adapt to an increased system load, but they’ll do so more conservatively than the performance governor. Why didn’t they keep the ondemand name, then, if this is what it does?!

Even some Linux developers have missed the news:

$ cat /etc/sysconfig/cpupower
# See 'cpupower help' and cpupower(1) for more info
CPUPOWER_START_OPTS="frequency-set -g performance"
CPUPOWER_STOP_OPTS="frequency-set -g ondemand"

Heck, ondemand does not exist! But people are typically brainless. In a 2017 bug reported for Mageia, Bug 22270 – Default profile cpupower is perfomance, guess what was the maintainer’s reaction? “Gamers will want to use the performance profile on their desktop machines. Many others will, too. Do you mind telling why the profile should not be performance by default, in your case?” Please, someone tell me, what were such people doing when the default profile was ondemand? Maybe they were 2 year old and still eating their poop. With the current generations of CPUs, really the only ones wanting to use performance all the time are the gamers.

Let’s set it to powersave then.

  1. Edit /etc/sysconfig/cpupower to read:
    CPUPOWER_START_OPTS="frequency-set -g powersave"
    CPUPOWER_STOP_OPTS="frequency-set -g powersave"
  2. sudo systemctl enable --now cpupower
  3. sudo systemctl start cpupower
  4. cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    It should read: powersave
  5. You can also inspect the output of cpupower -c all frequency-info

● You could also install cpupower-gui, except that there’s no package for EL9. But you can do this. First, install the only required dependency:

sudo dnf install python3-pyxdg

Then, go to any of these folders for F37, for F38, or for F39, and get the URL for the current build of cpupower-gui. You’ll then use it as follows:

sudo rpm -i --nosignature https://download.opensuse.org/repositories/multimedia:/proaudio/Fedora_39/noarch/cpupower-gui-1.0.0+git.24.b44a198-2.55.noarch.rpm

(In openSUSE Leap 15.6, it’s much more othodox: you install proaudio.repo, then get cpupower-gui the proper way.)

● Now, why is systemd-oomd still a thing? It’s the worst possible idea ever invented at Red Hat, regardless of how much or how little RAM you have:

Achievement unlocked: I just had systemd-oomd kill my entire X session for unclear reasons. Does it log details about the session it killed so I could see, say, which program was using too much memory? Nope.

Systemd-oomd has now been voted off my island.

Typical for anything systemd-related. From the same source:

Unlike the kernel OOM killer, systemd-oomd doesn’t log any details and makes no attempt to identify which process, sub-cgroup, or whatever is actually causing problems. If you are lucky, you will already have some idea (perhaps because things have happened slowly); if you’re unlucky, as I was, you’re doing things, something quietly starts running away without any obvious symptoms that it’s eating memory, and the first you know is that you’re staring at a login prompt.

By contrast, the kernel OOM killer acts later but would have only killed a single process (almost certainly the one at fault, in my case) and in any case would have left copious information in the kernel logs. I would much rather have dealt with the kernel OOM killer in this case; even if it had freaked out and killed my entire session, I would know a lot more about what had gone wrong.

So, how do we get rid of this thing? Well, on AlmaLinux, just don’t install the systemd-oomd service! To my surprise, unlike in Fedora, it’s not installed here by default! But what if it gets installed at a later point, as a dependency of some other package that really wants it? Here’s the funny thing: if you mask it even when it’s not installed, the masking will be honored even if the service is later installed! Let’s stay on the safest possible side:

$ sudo systemctl mask systemd-oomd
[sudo] password for ludditus: 
Unit systemd-oomd.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/systemd-oomd.service → /dev/null.

● You’re running KDE, and you’re managing services, but you find systemctl a bit tedious? Why isn’t there a GUI to manage the services? In the times before systemd, there was system-config-services, but this is history. Since then, several GUIs have been developed, then abandoned, including systemd-ui and systemd-gtk-gui. How is this progress? But cry no more, KDE has a tool that’s called differently in different distros, but it’s the same thing: systemd-kcm in OpenMandriva and Manjaro, kcmsystemd in Mageia, kcm_systemd in Fedora and EL (via EPEL), kde-config-systemd in Debian and Ubuntu.

So, just install kcm_systemd (from EPEL), then invoke it with kcmshell5 kcm_systemd:

Or you can find it in KDE System Settings, at the bottom of System Administration:

Oh, wait, what’s that error? A tiny bug in AlmaLinux! In /etc/systemd/system.conf, change the line:

DefaultLimitCORE=0:infinity

to:

DefaultLimitCORE=infinity

or comment it out:

#DefaultLimitCORE=0:infinity

Infinite core dumps? Are you kidding me? I want no core dumps at all! (The correct syntax can be found here.)

● Since we’re here, a related topic: the debate plasma-systemmonitor vs. KSysGuard.

Many people say that the newer System Monitor is completely useless:

It is. I never use it. But the synthetic component invoked by CTRL+ESC, System Activity, is useful:

However, ksysguard is still in the repos and it can be installed!

● Linux Lite has a very nice System Monitoring Center, which is a fork of Hakan Dündar’s homonymous tool, which has been abandoned. The original tool can be installed in AlmaLinux as a Flatpak, but I hate how it cannot display all the CPU cores at the same time. And I couldn’t make use of the Linux Lite fork. More details, including screenshots from both versions (from AlmaLinux and Linux Lite), in this blog post.

● I discovered that in AlmaLinux, just like in Fedora, my laptop and even my mini-PC were woken up by my BT headphones, which tried to connect to either of them! Here’s the fix, taken from Stack Exchange and adapted to include hibernation. First, create a new file under /etc/systemd/system/bluetooth-prevent-wake.service with the following content:

[Unit]
Description=disable bluetooth for systemd sleep/suspend targets
Before=sleep.target
Before=suspend.target
Before=hybrid-sleep.target
Before=suspend-then-hibernate.target
Before=hibernate.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/usr/sbin/rfkill block bluetooth
ExecStop=/usr/sbin/rfkill unblock bluetooth

[Install]
WantedBy=sleep.target
WantedBy=suspend.target
WantedBy=hybrid-sleep.target
WantedBy=suspend-then-hibernate.target
WantedBy=hibernate.target

Now, run this:

sudo systemctl daemon-reload
sudo systemctl enable --now bluetooth-prevent-wake.service

● Finally, I would consider a “system enhancement” upgrading nano from 5.6.1 to 8.1. If you’re using it instead of vim at the CLI (honestly, I’m torn between the two, and I’d be using joe if my muscle memory still remembered the WordStar key bindings), you’d appreciate the new features in version 8:

To open a file at a certain line number, one can now use also nano filename:number, besides nano +number filename.

The idiom nano filename:linenumber is understood only when the option --colonparsing (or ‘set colonparsing’) is used.

By default ^F is bound to starting a forward search, and ^B to starting a backward search, while M-F and M-B repeat the search in the corresponding direction. (See the documentation if you want the old bindings back.)

Command-line option --modernbindings (-/) makes ^Q quit, ^X cut, ^C copy, ^V paste, ^Z undo, ^Y redo, ^O open a file, ^W write a file, ^R replace, ^G find again, ^D find again backwards, ^A set the mark, ^T jump to a line, ^P show the position, and ^E execute.
Above modern bindings are activated also when the name of nano’s executable (or a symlink to it) starts with the letter “e”.

BTW, FeatherPad also knows the syntax featherpad +number filename, but not the newer one. But it knows of featherpad +line,column filename.

Download the source code, extract it, and:

sudo dnf groupinstall "Development Tools"
sudo dnf install ncurses-devel
./configure
make

Make sure you test it:

./src/nano
./src/nano --version

If you’re satisfied:

sudo dnf remove nano
sudo make install

● Oh, but how about a newer tmux than the one present in AlmaLinux, 3.2a, which was released by upstream more than 3 years ago? As officially recommended (also here) and adapting for EL9 (because there are EL9 builds!), one can install it from the galaxy.net repo:

sudo yum install http://galaxy4.net/repo/galaxy4-release-9-current.noarch.rpm
sudo yum install tmux

There’s one problem, though. Why are so many people so imbéciles? You either do one thing right, or you don’t do it at all!

warning: Signature not supported. Hash algorithm SHA1 not available.

Read Understanding SHA-1 deprecation on RHEL 9, because they didn’t. To install such a package, explicitly allow the SHA-1:

sudo update-crypto-policies --set DEFAULT:SHA1

In theory, you should then switch back, should you really believe that someone would maliciously sign with SHA-1 packages you’ll download (from where if not from this repo?):

sudo update-crypto-policies --set DEFAULT

● A really last “tweak”: since this custom KDE Live ISO installs fortune-mod (from EPEL), which is something I keep using since I first met it in Slackware, I’d suggest you to end your ~/.bashrc with the following two lines (I suppose the alias doesn’t hurt anyone):

alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'
fortune

This is why everything I launched from Konsole didn’t inherit en_DE 😉

Safety and some more Internet-related stuff

It’s been a quarter of a century since I last used a computer with a public-facing NIC, so I feel much safer knowing that my router has some firewalling and basic DDoS capabilities. I’ve always said that the importance of a firewall for home computers is overrated in modern times, unless you configure port forwarding, or, God forbid, a DMZ. Given the surreptitious nature of some Windows software, under Windows I was mostly concerned about establishing outbound rules.

● I was a fan of Slackware’s tcp_wrappers, which I see one can have in EL9 too. Of iptables too, while they lasted. Later, I found ufw/gufw quite meh. In EL9, firewalld is used with nftables, which is great. But you really should be using firewall-config, it’s a breeze. (Take a look at firewalld for Beginners, though.)

● Then, should you do port forwarding, install and configure fail2ban. I’ve used it in the past even to only protect SSH (sshguard is available too). Read the information from Fail2Ban’s default configuration file (/etc/fail2ban/jail.conf); don’t edit it directly.

● One great aspect of Linux Mint is that it comes with Timeshift preinstalled and preconfigured. They practically force you to use it. Why isn’t every distro doing that? You have to install timeshift!

Now, I hope you don’t use BTRFS (read this comment to learn why you shouldn’t). So you’ll need to use RSYNC, but c’est la vie.

● I’m not a fan of password managers, but I’ve used KeePassXC in the past. You do have keepassxc in AlmaLinux.

VPNs now. You might be using them for all the wrong reasons. After having used a number of different VPNs, some with nice Linux GUIs (Windscribe, Mullvad VPN, ProtonVPN), some without a GUI for Linux (NordVPN, for which SolydXK has a tray indicator), but I dismissed those that don’t even have a Linux client and for which you should manually configure at least OpenVPN. Currently, I’m still with Private Internet Access (PIA), which has a great GUI and is pretty decent if you don’t want TV streaming for US channels outside the US (which I don’t).

What you download is a binary, which should be installed from the CLI. Their GUI is excellent, but beware of the limited number of “streaming-optimized” locations:

Even some such locations, which should be more congested than the others, don’t decrease the speed that much, unless there’s a special event and everyone wants to watch it. Here’s the “before and after” speeds for “stream-optimized” Germany and Italy, on Wi-Fi and a plan limited to 500 Mbps:

As for ProtonVPN, their Linux support is pathetic, and I’m not feeling motivated to try to manually configure OpenVPN or maybe WireGuard. I’ll only do such intellectual masturbation when I’ll need to switch to FreeBSD. For now, I’ll say that ProtonVPN supports Fedora, with packages from Fedora 31 to Fedora 40. It’s impossible to satisfy the dependencies for the packages in recent Fedora releases, due to complex dependencies, some of which are impossible to meet in EL9. I tried to accommodate versions built for older Fedora releases, knowing that F33-34 had Python 3.9, and F37-38 had Python 3.11 (python3.11).

Unfortunately, EPEL9 doesn’t provide python3-dialog, a package available in all distros but EL9, and a package that exists in EPEL8. Someone asked for it, but they were ignored: Bug 2130027 – please build python-dialog for EPEL9. So, fuck you very much, EPEL. I installed a compatible (or not) python3-dialog from FC38, but ProtonVPN crashed as described here: Protonvpn-cli isn’t working after upgrade to python 3.11. As someone commented, “Use of Python by Proton is a disaster on Linux.”

I’m not going to build ProtonVPN from sources that, by the way, seem abandoned: “This repository has been archived by the owner on Oct 11, 2023. It is now read-only.”

● In Windows, I was using SmartFTP, but FileZilla is just as good. AlmaLinux’s version of filezilla isn’t that old (3.60.1 vs. 3.67.1), so it’ll do.

● KTorrent will be preinstalled for you (if you’re using my custom KDE ISO), and qBittorrent is also available from EPEL, but I’ve been using Deluge since forever, so I wanted to use it. And it ain’t no such package for EL9. No problemo (adapt to your user and to a possible RPM version change):

$ sudo groupadd mock
$ sudo usermod -a -G mock ludditus
$ newgrp -
$ sudo dnf install -y mock
$ curl http://ftp.fau.de/fedora/linux/releases/39/Everything/source/tree/Packages/d/deluge-2.1.1-4.fc39.src.rpm -O
$ mock --rebuild deluge-2.1.1-4.fc39.src.rpm 
$ cd /var/lib/mock/alma+epel-9-x86_64/result/
$ sudo dnf localinstall deluge*noarch.rpm
$ sudo mock --clean

● Among the repos installed and enabled by this ISO, there’s a special one that is not present in Rocky, but only in AlmaLinux: Synergy. It’s the one offering you dnfdragora and… Clem’s warpinator! (Take a look inside.) You’ll find it preinstalled, too. You might need (1) to tell it what NIC to use, and (2) to allow the warpinator service in Firewall Configuration.

● For those situations when you might want to automate some downloads, to batch download, WFDdownloader proven to be a great tool. Its Linux version is Java-based, and it contains in the tarball a JAR that should be launched via the provided Start.sh.

LATE EDIT: A recent discovery is Media Downloader, a Qt/C++-based GUI frontend to several CLI tools that deal with downloading online media, most notably yt-dlp. It’s more than fabulous! For AlmaLinux, only the Flatpak is the easy way of using it (there are packages for other distros, and even repos for Debian, Ubuntu, Fedora, openSUSE).

Must-have tools and other recommendations

As mentioned in the announcement for the 9.4 edition, my build of Live ISO includes a few extra repositories, from which a few packages have been preinstalled:

  • elrepo for kernel-lt (note that elrepo-kernel has to be enabled manually!)
  • almalinux-synergy for dnfdragora (yay!)
  • rpmfusion-free-updates and rpmfusion-nonfree-updates for the proper, unhindered versions of ffmpeggstreamer1-plugins-uglylibavcodec-freeworldlamevlc. Additional software that will be preinstalled: alsa-sof-firmware (newer laptops need it, but most distros don’t install it), featherpad (because it’s a small gem), fortune-mod (because you should add it to ~/.bashrc), haruna (I prefer it to VLC), krenamemcneofetchwarpinator.

I’ll add some more explanations and extra suggestions here.

● I installed KRename because I needed to be able to perform batch renaming with regex. I’ve been doing that for ages in Windows with the help of an antiquated little utility called Bica, which requires any version of Java.

There is also the possibility to use Linux Mint’s Bulky. There’s a COPR that covers EPEL9 too!

sudo dnf copr enable alanfla/Bulky 
sudo dnf install bulky

The menu entry will read File Renamer (in Utilities). This is the perfect replacement for Bica!

Should you install Thunar from EPEL, you’ll notice another menu entry, Bulk Rename (you can invoke it with thunar --bulk-rename). To some, it might seem more straightforward than KRename; to me, it feels unpractical. BTW, KRename showed up in EPEL9 because I asked for it; I was surprised to see the bug report solved in less than 3 months. (I’m not mocking the EPEL/Fedora/RH guys. I once helped fixing grub-customizer in Fedora 36-37-38, but this package is broken in EPEL, and it should indeed be retired; however, they won’t do that.)

Multimedia-wise: I stopped using VLC years ago, because MPC-HC is so much better and lighter. Everyone needs to have VLC on their system, though. In Linux, I prefer the Haruna Media Player (blog), a Qt front-end to MPV. Its current version in EPEL is 0.12.3 (upstream: Nov. 15, 2023). The latest version (1.1.2 at the time of writing) is available from Flathub.

Note that haruna can “play online videos, through youtube-dl” and “it supports YouTube playlists.” That package is actually called yt-dlp (a small gem!), and it’s available from EPEL.

● There is no HandBrake for EL9, unless you install a Flatpak. I preferred to build it from the sources. I grabbed a tarball (1.8.1), then I read Installing dependencies on Enterprise Linux, and the generic Build instructions. But I didn’t want to clone the Git, why would I when there is a release tarball that I can extract?

I’ll try to simplify the instructions. I hope I didn’t miss any dependency (some should already be installed). With RPM Fusion and AlmaLinux CRB enabled (which should already be the case):

$ sudo dnf group install "Development Tools"
$ sudo dnf install bzip2 cmake diffutils fribidi-devel libxml2-devel m4 numactl-devel patch xz-devel nasm python3 python3-pip
$ sudo dnf install jansson-devel lame-devel libass-devel libogg-devel libsamplerate-devel libtheora-devel libvorbis-devel libvpx-devel meson nasm ninja-build opus-devel speex-devel turbojpeg-devel turbojpeg-devel x264-devel libva-devel libdrm-devel
$ sudo dnf install appstream desktop-file-utils gstreamer1-libav gstreamer1-plugins-base-devel gstreamer1-plugins-good gtk4-devel
$ pip3 install lipo
$ ./configure --enable-qsv

If no other dependencies need to be satisfied:

$ cd build && make
$ sudo make install

If you want to check the binaries prior to installing them, you will find HandBrakeCLI in the root of the build directory and ghb (the GUI) in gtk/src.

MKVToolNix:

sudo rpm -Uhv https://mkvtoolnix.download/almalinux/bunkus-org-repo-2-4.noarch.rpm
sudo dnf install mkvtoolnix mkvtoolnix-gui 

● For a Mp3tag replacement for Linux, Kid3. The Flatpak is for the extremely lazy ones, as there is a tarball with Linux binaries! Extract it and create a menu entry for kid3-qt. Since version 3.9.4, it uses Qt6.

Audio players: I don’t like Sayonara‘s too busy, overloaded UI and UX, but I wanted to give it a try. As there are no builds for EL, I thought of building it from the .spec file. Except that I couldn’t have imagined that Red Hat has such stupid engineers:

$ rpmbuild sayonara.spec
error: bad date in %changelog: Mi Jul 14 2021 Michael Lugmair <sayonara-player@posteo.org> - 1.7.0-stable3

Who on the fucking Earth fucking decided that a purely descriptive line in the changelog should prevent a package from being fucking built?! How the fuck can a “wrong” date, which is in German (Mi = Mittwoch aka Wed) affect the building of a package? If rpmbuild wants to validate a date, then it should require ISO 8601 dates, the only ones that are unambiguous and sortable! (2021-07-14) Of course, the developer is also dumb, but maybe he only encountered a warning back in 2021. As Rahul Sundaram mentions here, RPM 4.11 started to “Warn about invalid %changelog dates (eg wrong day name) (RhBug:843525)”; some idiot, at a later point, decided that a package shouldn’t be built if the day of the week is not understood! With such stupid thinking from people at Red Hat, I just now took the decision that I will never use AlmaLinux 10, because by then Red Hat will have destroyed everything that still works in its ecosystem. (I expect EPEL to stop building KDE, and X11 will be completely deprecated in favor of Wayland.) Some Linux people are really shitheads.

The .spec is fucked-up in more than one way. I had to rename sayonara-player-1.7.0-stable3.tar.gz to sayonara-player.tar.gz (also in the .spec), because rpmbuild tried to cd to sayonara-player. Then, because of make: *** No targets specified and no makefile found. Stop. I had to manually enter /home/ludditus/rpmbuild/BUILD/sayonara-player/redhat-linux-build and run make from there, then make install.

It works, but the dumb ass keeps saying on every start that there’s a newer version available, so I had to disable its checking for newer versions. The website reads: “Stable 1.10.0-stable1 (May, 27th 2024)”; but then, in sources (I don’t want Git versions) the latest version is 1.7.0-stable3. Maybe the only version that builds correctly is the one from Git, and building of DEBs and RPMs has been abandoned.

● For a compact MP3 player, Nulloy. I’m using the AppImage because trying to build it gave me Project ERROR: Unknown module(s) in QT: designer, despite everything being installed. With the Metro theme:

● Or maybe you should just use Audacious, which is in the repos! (Sometimes, being conservative pays.)

But I don’t normally listen to MP3 files on my computers. I keep ~3,000 MP3s on my smartphone, and most of the time I prefer to browse my selection of radio streams (usually in compact form).

● Getting to graphics. I don’t remember for what purpose I needed the newer features of ImageMagick7 (7.1.1.x). EL9 has the old ImageMagick (6.9.12.93). You can get it from Remi, but beware: ImageMagick7 and ImageMagick are mutually incompatible; only the libs from the older version can coexist with the new binaries!

sudo rpm --import https://rpms.remirepo.net/enterprise/9/RPM-GPG-KEY-remi
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf config-manager --set-enabled remi
sudo dnf install --allowerasing ImageMagick7

GIMP 2.99.8 is recent enough, and 3.0 is not there yet, so it’s just fine. For Krita, you should prefer the Flatpak.

But I also need simpler image editors. In Windows, I used for decades PhotoFiltre. Not the “Studio X” version, which can use layers, but the simple one. Unfortunately, the program is shareware these days, and the last free version is PhotoFiltre 6.5.3, which can’t do Unicode, meaning that you can’t add to images text that uses characters which are not in Basic Latin + Latin-1 Supplement. Even so, the usability of this small gem is hard to beat!

For a Linux equivalent, albeit with less functionality, there’s Photoflare. The Community Edition (Open Source) is also without layers, matching the free version of PhotoFiltre. I got their source tarball, then:

sudo dnf install GraphicsMagick-c++-devel glibc-devel qt5-qtbase-devel qt5-qtbase-gui libomp-devel qt5-qtbase-devel
qmake-qt5 Photoflare.pro
make
sudo make install

It’s ugly and clumsy, and at times dumber than KolourPaint, mais c’est la vie. The scrollbars are particularly horrendous:

● How to replace IrfanView? Not just as an image viewer, because its forte lies in its ability to do batch processing with cropping, resizing, rotating, flipping, changing the color depth, the sharpness, brightness, contrast, gamma, and more. What other software of this size can do that in batch?

But before getting to an IrfanView replacement, let’s remind you that image viewers you can use in AlmaLinux include Gwenview, gThumb, ristretto, eog. (I always loved gThumb, and I always found surreal that it requires brasero-libs. It’s better than Gwenview, because Gwenview has a bug when displaying palette-based images at certain zoom levels: it dithers them.) What you don’t have in the repos is Viewnior, but you can build and install it in exactly 7 lines, as described here, provided that you have all the dependencies, including e.g. meson, ninja, exiv2-devel.

The one and only replacement to IrfanView is… two: XnView MP and XnConvert. The one that’s unique in functionality is XnConvert, but for symmetry I’ve built them both. Here’s how to do it.

Get XnViewMP-linux-x64.tgz and XnConvert-linux-x64.tgz. Unarchive them. You’ll find inside of each all the required binaries. Just note that you should not launch the binaries directly, but xnview.sh and xnconvert.sh, respectively. And the provided .desktop files are broken, as they include references to stupid paths: Exec=/opt/XnView/xnview.sh %F and Exec=/home/pierre/Desktop/XnConvert/xnconvert.sh.

But this is what I did with my mini-PC. I’m smarter now. I looked into the unprotected download.xnview.com, and I found many files not linked to, among which… XnView_MP-linux.x86_64.rpm and XnConvert-linux.x86_64.rpm! However, they’re not installable on AlmaLinux:

[ludditus@weed ~]$ sudo rpm -ivh --nosignature https://download.xnview.com/XnView_MP-linux.x86_64.rpm
Retrieving https://download.xnview.com/XnView_MP-linux.x86_64.rpm
error: Failed dependencies:
        libc++.so.1()(64bit) is needed by xnview-1.7.2-2.x86_64
        liblibraw.so.1()(64bit) is needed by xnview-1.7.2-2.x86_64
        libmdk.so.0()(64bit) is needed by xnview-1.7.2-2.x86_64
        perl >= 0:5.002 is needed by xnview-1.7.2-2.x86_64
        perl >= 0:5.004 is needed by xnview-1.7.2-2.x86_64
[ludditus@weed ~]$ sudo rpm -ivh --nosignature https://download.xnview.com/XnConvert-linux.x86_64.rpm
Retrieving https://download.xnview.com/XnConvert-linux.x86_64.rpm
error: Failed dependencies:
        liblibraw.so.1()(64bit) is needed by xnconvert-1.100.1-2.x86_64

libc++.so.1()(64bit) is provided in Fedora by libcxx, which isn’t and probably won’t be present in EL/EPEL.

liblibraw.so.1()(64bit) is only available in openSUSE. The developer himself said that “the RPM package has some problem. It’s better to use deb or tgz,” so… here’s the explanation about the RPMs not being advertised!

So, just use the provided binaries, and add correct menu entries for them (don’t forget the %F as a command-line argument for the viewer!).

Not what I use it for, but as a showcase, it works.

● How to replace Everything? If you don’t know what this is, despite having used Windows, then you’re a lost cause. Maybe you never use your file manager in a compact list view mode either? GO AWAY!

The replacement is called FSearch, and I described it back in 2021. Linux Format issue 295 (Nov. 2022) praised it too:

It was also featured in Linux Magazine issue 270 (May 2023). And here’s another blog post about it.

Fortunately, the developer provides a COPR that covers EL9 too!

sudo dnf copr enable cboxdoerfer/fsearch
sudo dnf install fsearch

What makes FSearch so special? All the other GUI tools simply search in the filesystem, and that takes enormously, whereas this is more like locate, it searches in a database. (Unlike Everything, though, it doesn’t get notified when a file changes.)

🐞 But here’s a bug that I recently discovered in FSearch. By default, it only indexes your home and the removable devices. But what if I want to search for system files? Let’s add /, right?

And then, duplicates show up:

The 4 files are actually 2, but displayed twice

Once I removed my home, which hosted the 2 files, the 4 files suddenly became 2 files:

Now, could someone explain to me how could a software developer who has enough experience and common sense to develop such an extraordinarily useful tool be able to insert records in a database without caring about their uniqueness? 😠
Apparently, the database isn’t automatically updated, not even a file is moved to Trash from within FSearch, but this is less severe.

● How about a replacement to AstroGrep, or any GUI grep? Here, too, I’ve found a tool. It’s called searchmonkey, and it has some quirks of its own.

First of all, the downloads are a bit confusing, because the Qt version is Windows-only! There is a Java version 3.2 (that page is lying about 3.1 being the latest), and a GTK version 0.8.3. They are very different, and I prefer the older GTK-based one, but I installed them both.

So, get searchmonkey-0.8.3.tar.gz, unpack it, enter the folder, then:

$ sudo dnf group install "Development Tools"
$ sudo dnf install libzip-devel poppler-glib-devel gtk2-devel
$ ./configure
$ make
$ sudo make install

The icon will show up in System.

For the Java version, get searchmonkey-3.2.0-jar-with-dependencies.jar. Create a launcher to launch java with the command-line arguments -jar /your-path-to/searchmonkey-3.2.0-jar-with-dependencies.jar.

The two apps couldn’t be more different!

The Java version is utterly fugly. The GTK one is much more usable IMO, but you’ll want to configure it a bit:

Even so, you’ll find some bugs it it. The best part of the two apps is the graphics in the About box 🙂

Why can’t fonts be configured in Java? I tried passing -D options to it, to no avail.

● You should be using Beyond Compare, despite it being a commercial software. It’s not a comparison tool à la diff, Meld, or KDiff3. It’s the most useful when making backups, not the fully automatic way, but the way you’re doing it for yourself, with 3 different backups, right? I used WinMerge in the past, but then I discovered Beyond Compare. I purchased a license for version 4.46, and somehow I was entitled to a free upgrade to version 5!

The official guide is a bit confusing, because since version 5 they also have a repo, so do just that (previous versions required manual installation of the RPM, with --nosignature because of the deprecated algorithm):

wget https://www.scootersoftware.com/scootersoftware.repo
sudo cp scootersoftware.repo /etc/yum.repos.d/
sudo rpm --import https://www.scootersoftware.com/RPM-GPG-KEY-scootersoftware
sudo dnf install bcompare

The icon will show up in Development. And look for a coupon, don’t pay the list price!

Since I mostly use it for manual backups, I prefer the the rule-based comparison, i.e. name-size-date:

What I like the most is that it explicitly lets you select one of the 5 types of sync possible in this reality:

Of course, you can start with a comparison and take individual sync decisions, like you would do in any normal comparison software (I’m coming from Windows and its WinMerge, ExamDiff Pro and the like):

I could not show you real cases, for confidentiality reasons, but should you spend enough time with it (there’s a 30-day trial), you’ll find out that Beyond Compare is more powerful than you thought. Now, no offense, but here’s what I think: having noticed, especially in the last years, how many people (even software developers) don’t seem to find obvious bugs that I notice on the first day of using a new software, and how I’m often told that I’m a niche case in the way I’m using the programs I need, I expect most people to miss most of the ways Beyond Compare is useful. More plainly: most people aren’t sophisticated enough. How could they, when they prefer GNOME and its Files that can only display details and thumbnails, but no simple lists? I can only hope that those who have reached thus far in this blog post are from the 2% that aren’t as stupid as the other 98% of humans…

● A last category, local databases, specifically SQLite. I’m a fan of DB Browser for SQLite since I discovered its Windows version. There is an AppImage of it, but c’mon, it’s not themed, and it’s not the latest version, but 3.12.2:

Go to the latest release, where you’ll find an incredibly detailed showcase, scroll to the bottom and get the source code. There are some build instructions here, but here’s what I did on my machine, because I didn’t get the Git version (why is everyone obsessed with Git, when there are releases as tarballs?!):

$ sudo dnf install cmake gcc-c++ git qt5-devel qt5-linguist qwt-qt5-devel sqlite-devel qscintilla-qt5-devel
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

But the Git version, which is 3.13.99 (3.14 Beta, I reckon) works as well:

$ sudo dnf install cmake gcc-c++ git qt5-devel qt5-linguist qwt-qt5-devel sqlite-devel qscintilla-qt5-devel
$ git clone https://github.com/sqlitebrowser/sqlitebrowser
$ cd sqlitebrowser
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

Guess what? The developer didn’t play nice, as the downloaded 3.13.0 sources still managed to build version 3.13.99! How come? I discovered by reading CMakeLists.txt (helped by searchmonkey): unless I pass -DBUILD_STABLE_VERSION=1 to make, it’ll build the latest version from Git! Obviously, it should have defaulted to the stable version…

A second tool for SQLite, not as practical as the above one for browsing, but possibly more useful for other tasks, especially with queries, is SQLiteStudio. From the latest release, you can get:

  1. SQLiteStudio-x.y.z-linux-x64-installer.run which will install a folder tree of binaries, much like a classic Setup you know from Windows.
  2. Sources that can be used to build it as per these instructions, but out of laziness, I didn’t make any attempt at it.

There’s no way to make it display a multi-line text field, as you could see in the highlighted green field in DB Browser for SQLite. There is however an editor, as a separate window:

A last small tip for those dealing with lots of files and possibly complex folder structures: if you were a fan of Snap2HTML, you should use LinuxDir2HTML. If you have pip installed, the easiest way is to install or update it:

python -m pip install --user --upgrade linuxdir2html

then it should be available at the CLI (~/.local/bin/linuxdir2html), e.g.:

linuxdir2html ~/Downloads myDownloads

Do not specify any extension, as .html will automatically be added.

HomeBank is offered by EPEL in version 5.7 (upstream: 5.8.1; Ubuntu: 5.7.4; Debian: 5.6.2). Use dnf or dnfdragora, as Discover would install the Flatpak version if Flathub is enabled. While I used it for a while, about 15-20 years ago, getting the hang of it takes some time.

What I didn’t cover

Among the many issues I didn’t cover:

  • Nvidia: what drivers, how to do this and that, etc. I just don’t use Nvidia. When I’ll use something else than Intel graphics, it’s going to be AMD.
  • Steam, for obvious reasons. For me, games are Chess and GO, or other logical games, and I won’t develop this topic. Games are also those old things for which DOSBox or DOSBox Staging are required. I’ll only say that dosbox-staging-linux-v0.81.2.tar.xz worked after applying the recommended magic spell: sudo dnf install SDL2 SDL2_net opusfile.
    UPDATE: DOSBox-X is preferred and recommended by Robert J. Sawyer. And there is a COPR that covers EPEL9 too!
  • Using WINE (8.0 in EPEL9) directly (usually via winetricks), Lutris (0.5.17 in EPEL9), PlayOnLinux (4.4 in EPEL9) or Bottles (as Flatpak, but their AppStore is uninteresting) to run Windows software. I’ll eventually need to use some Windows binaries; in the past, PlayOnLinux was my quick fix.
  • Virtualization: I hate VirtualBox with a passion, particularily because its stupid Extension Pack that’s a PITA and without which I can’t even share folders! I’ve used it in AlmaLinux 9, and I cursed it. But I hate virtualization since day one, because I’m a Luddite and I believe in “bare metal” (no condoms). I will never run Windows in a VM under Linux on my machines. In a distant past, I have used VMware, and I found it more straightforward. I have never used GNOME Boxes. 20-30 years ago, when virtualization support wasn’t available in CPUs, I have used emulators: QEMU (sans KVM), Bochs, Basilisk II. True to their nature, they were slow as molasses. I also don’t use containers: Docker, Kubernetes, LXC, LXD, whatever. I might need them one day, just not now.
  • Printers. My printer, Epson EcoTank ET-M2170 (epson-inkjet-printer-escpr2-1.2.18-1.x86_64.rpm, epson-printer-utility-1.1.3-1.x86_64.rpm, epsonscan2-bundle-6.7.65.0.x86_64.rpm.tar.gz; if you’re not using KDE, make sure you install qt5-qtbase-gui), is unlikely to be the same model as your printer.
  • Slack, Zoom, Teams, Skype, etc.
  • TeamViewer, AnyDesk, Remmina, etc.
  • And, surely, many other topics.

A crash and two tips

While I was writing this blog post, guess what? I experienced my first system freeze since I’m using AlmaLinux, which means since 9.2 Beta! It happened on the newer laptop, and I was running an unofficial kernel, 6.1.100 from ELRepo. But that’s because Red Hat is stupid and keeps using the antiquated 5.14 kernel, without bothering to add support for MT7663-based Wi-Fi and BT. In 15.6,  openSUSE Leap jumped to kernel 6.4.0, but not Red Hat. So I had to use ELRepo’s kernels!

If only the support for MT7663, via mt7615e, were complete. It ain’t. Both Wi-Fi and BT work great, but no kernel can resume from hibernation without breaking them! I tried up to 6.8.9, then I gave up. No matter the distro, the kernel just cannot suspend the device reliably. It has to go through a shutdown. Yeah, this is the “quality” of the Linux kernels.

So maybe it froze because of the Wi-Fi. I couldn’t ssh to the machine, because it was invisible in the LAN, so at least the Wi-Fi wasn’t working. Nothing worked, except that, judging by the fan’s noise, it was extremely busy with doing nothing!

Nor could I investigate. Specifying boot ID or boot offset has no effect, no persistent journal was found means that I should have made Storage=persistent in /etc/systemd/journald.conf before the crash occurred.

My only system freezes under Linux in the last 3 years were with Fedora 34 and 35, both on my wife’s HP Pavilion TG01. Back then, I blamed nouveau, but who could tell? In the end, it’s still the kernel that must be at fault. Are Canonical’s kernels any better? The rest of their software sucks, but maybe the kernels are better. I didn’t have a crash in Windows 7 in many years, including years after it stopped being officially supported with patches!

Can a bad driver crash the kernel? Normal programs shouldn’t be able to do so, but I was just CTRL+T in Firefox when the freeze occurred, so I had that old Windows 3.1 feeling that anything can crash the kernel. Creepy. I’m using computers since CP/M and 8-inch floppy disks, but we’re in 2024 and nearing the apocalypse (you know, Putin, Trump, Xi, and Kim), so I’m literally sickened by such shit! (Yes, I know, we should be using ECC memories, but I can’t manufacture computers in the basement, so I purchase what’s available on the “free” and “competitive” market at a reasonable price. Such as, SSDs whose controller can die, and no S.M.A.R.T. monitoring can detect a dying controller.)

Notice the Windows 95/NT teal color

UPDATE: In his review of OnlyOffice Desktop Editors 8.1 on KDE neon (hence on Ubuntu), Dedoimedo had this experience:

I did a number of quick min/max actions, and this caused OnlyOffice to crash my entire system. Everything froze, and I had to hard-boot. I disabled graphics acceleration in the settings, and the problem did not recur since.

User-space software can’t or shouldn’t crash an entire OS. A kernel-space driver could, and this seems to have been the case here, and this is why, for my previous freezes with Fedora, I suspected the nouveau driver. But on my computers, I only have Intel graphics, which should have been more stable. Linux freezing in 2024, on Enterprise Linux (OK, a clone of it), as well as on Ubuntu LTS. Who would have thought of that?

After the forced shutdown (with a paper clip, mind you, because pressing the on/off button indeterminately was useless; oh, boy, how much I miss the old Reset buttons, as well as the old ON/OFF buttons that really cut off the power!), my KDE session was fucked-up, and KDE would refuse to save it on logout, no matter what. Here’s how to fix such situation (nobody will tell you what to do, not even ChatGPT!):

$ rm ~/.config/ksmserverrc
$ /usr/lib64/qt5/bin/qdbus org.kde.ksmserver /KSMServer saveCurrentSession

Now, set the session restoring type to “only when the session was manually saved” (with the second line above, because absolutely no “Save” button could be made to show up anyfuckingwhere in the logout screen or wherever it should be!):

After logging off and on (a reboot might be even safer), changed it back to automatic:

It should work now as expected. If not, apply, rinse, repeat. That’s the beauty of KDE: the most advanced DE in the known Universe can’t have a “Save the session now and reset whatever crap was in the session file” button!

What you also need to learn, if you didn’t know already, is this: Handling package management history (with dnf). The bare minimum:

To display a list of all the latest DNF transactions, use:
$ sudo dnf history

To display a list of all the latest operations for a selected package, use:
$ sudo dnf history list package-name
Replace package-name with the name of the package.

To display details of a particular transaction, use:
$ sudo dnf history info transactionID
Replace transactionID with the ID of the transaction.

Reverting a single DNF transaction by using dnf history undo:
$ sudo dnf history undo transaction_id

Sure enough, this would almost never work in Fedora, because the Fedora Updates repository only contains the latest version of the released updates. If your dnf’s cache still has the old package, lucky you. (Really, why are people using Fedora?!) Bug 1984207: “from dnf perspective this is not a bug – we cannot install package that is not available.” The bug is the how Fedora’s repos are designed.

Some last considerations

Is using Linux on the desktop the easy way out of the Windows nightmare? Hell, no!

Software-wise, perhaps most of what I need would have been easier to get in Fedora, openSUSE (even Leap, not necessarily Tumbleweed), and Arch derivatives. But the problems remain. From the unbelievable bugs recently described in my “saga report” (of which a couple are mentioned here too), to the unacceptable fact that, 30+ years since internationalization and Unicode are with us, KDE5 allows you to set LC_* values that some of its own programs cannot understand! What is this, codepage-based MS-DOS, combined with the misconception that “country and language are the same”? Non-KDE software also crashes or misbehaves when encountering Sci-fi (to them) locales such as en_DE. I must be dreaming. Are we really in 2024, or in 1984? (Some geniuses also designed KDE vulnerable by design, and this is actually true for open source as a whole.)

The last decent consumer OS was Win7. And Windows XP SP3 wasn’t bad either. Win10 was already too restrictive for me, with recurrent bugs (now and then, it couldn’t install an update), and Win11 is death itself. So I can’t use Microsoft’s shit anymore. But it’s been 30 years since I started tinkering with Linux and the *BSDs, and the open-source world isn’t anywhere near decency. I’m not having “a complex setup” in the sense that I’m not a gamer and I don’t use “modern virtualization shit” (containers, Kubernetes, whatever). For people who do use such software, Windows is probably still relatively usable, and the container-centric people can use WSL. Poor me, I just want to use the concept of the Personal Computer launched by IBM in 1981, and I happen to use a relatively large number of GUI programs. Porting my habits and my workflow from Windows (and I mean Win7!) to Linux is more of a PITA than it should have been. In the process, I discovered that this world of incompetent software developers made everything so incredibly buggy that I really wish we were 30 years back. This is how bad it is. How else could it be when the Linux kernel has adopted an NTFS driver that destroys data, when the same Linux kernel team broke the audio on some laptops for eternity, and when modern OS and filesystems concepts made it impossible to restore in-place the data that you just marked as deleted, but it’s right there, on a non-system partition?

I cannot be zen with today’s chaotic, low-quality, leading to nowhere Linux on the desktop. But I have no choice for now.

Succinct postscript: it’s the kernel, stupid!

Today, ELRepo’s kernel-lt version 6.1.101 broke my sound. alsa-sof-firmware was still there, but useless. My sound still worked in 6.1.100, and that’s a good thing that I have 3 kernels from each line (something impossible by design in Arch and Manjaro).

I also installed kernel-ml from the same elrepo-kernel, to get 6.10.1. This one didn’t break anything on my system, but in the past, kernel-ml version 6.9.1 broke my Wi-Fi (MT7663 via m7615e). And using a mainline kernel on an EL9 clone is not logical. Why not use Fedora instead, if I’m a guinea pig for their failed kernels?

This is the quality of today’s Linux. And no, I cannot use the 5.14 kernel provided by Red Hat and rebuilt by AlmaLinux, because it doesn’t support MT7663, a chipset released in 2019. Yes, mt7663-usb-sdio-common.ko exists in Linux since 2019 too (5.1), but it didn’t work until much more recently. This, too, is Linux-grade quality. All the reports that the device with the PCI ID 14c3:7663:11ad:3801 works were made with kernels 5.19.0 or newer. (At least, in FreeBSD, they don’t claim that it works.)

And there are no bonuses for running kernel 6.10.1 or kernel-ml as a rule. Hibernation still breaks m7615e, and it doesn’t just break MT7663, but most likely m7615e and maybe more. As usual with all kernels that support MT7663, resuming from hibernation leads to a lack of Wi-Fi (BT somehow works) and to an extremely unresponsive system that eventually needs to be shut down. During the shutdown, some m7615e timeout errors will be seen, so that driver is a complete fuckup.

Note that 6.10.1 is urgently required to those running 6.10.0, as it fixes a number of important regressions, including that mounting of certain ext4 volumes was broken in 6.10.0.

We don’t need CrowdStrike to break Linux; it’s broken by its creators. How can Greg Kroah-Hartman, the release manager for the stable branches of the Linux kernel, still look at himself in a mirror?

POST-POSTSCRIPT: After another round of updates from ELRepo:

  • kernel-lt 6.1.103 and 6.1.102 still break the audio that was broken starting with by 6.1.101. So the last kernel from the 6.1 LTS line that doesn’t break the Intel Alder Lake audio controller with PCI ID 8086:51c8:1025:161d is 6.1.100. (It seems to be supported in FreeBSD.) I reported the bug on ELRepo, to see if it comes from them or from upstream.
  • kernel-ml 6.10.2 apparently doesn’t break anything. So… I need to use AlmaLinux with a newer kernel than in Fedora, should I want to have both Wi-Fi and audio supported? Yessir.

You can’t say that living with Linux is boring…

AUGUST 20 UPDATE: Regarding the bug I reported on ELRepo as 0001471: kernel-lt 6.1.101 and 6.1.102 break the Intel Alder Lake audio controller with PCI ID 8086:51c8:1025:161d: The bug automagically disappeared in 6.1.106! The sound started to work again.

I couldn’t identify anything relevant in ChangeLog-6.1.106. Nothing reverted or obviously able to have an impact.

But I also couldn’t identify the offensive change in ChangeLog-6.1.101. I had my suspects, which I examined and found nothing peculiar:

  • ASoC: SOF: sof-audio: Skip unprepare for in-use widgets on error rollback
  • ASoC: topology: Do not assign fields that are already set
  • ASoC: topology: Fix references to freed memory

But the same patches have entered 6.9.11 and 6.10, and those kernel lines work(ed) just fine. There was this batch that included the aforementioned patches:

  • tag ‘sound-6.10-rc6’ of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (40 commits)

It’s not related to the build options used by ELRepo, so it will remain a mystery forever.

So I can use again kernel-lt from ELRepo. But can I trust it again?