Red Hat Enterprise Linux is the leading Linux distribution used by enterprises. Red Hat, its developer, has built a very successful FOSS business using this core product, generating revenue from RHEL support subscriptions and other large scale technologies built with RHEL at their core.
In 2014, Red Hat took control of CentOS, a community developed clone of RHEL produced by recompiling Red Hat source. In 2020 it changed the CentOS development model and purpose from a binary compatible community supported clone of RHEL to an upstream development testbed for future RHEL releases, situated between RHEL and Fedora and renamed CentOS Stream. In the last month, as this article was nearing publication, Red Hat made another controversial decision: it has stopped publishing the source of Red Hat releases, preventing the clones -- the major ones being Alma Linux and Rocky Linux -- from easily rebuilding and distributing their RHEL compatible distributions.
These actions were controversial, disrupting many organizations relying on a free clone of RHEL. Despite these controversial and -- in the view of some Linux users -- unethical actions, around the same time it took over CentOS, Red Hat made another decision that was beneficial to individual developers by making RHEL available through its Individual Developer Subscription program, even for production use -- with some limitations.
This article reviews RHEL 9 obtained through this Individual Developer Subscription program in July of 2022. The initial installation has been upgraded through the two new minor versions in the 9 series released since the installation -- RHEL 9.1 and 9.2. This review is based on observations of RHEL from the initial installation with the "Server with GUI" software selection through the two minor version updates.
When I purchased the Lenovo Legion 5i Pro, I removed the Samsung 970 Evo Plus with which I upgraded the storage on the Dell G5 and installed it in the second NVMe slot of the Lenovo Legion. Since then I replaced the 970 Evo Plus in the Lenovo Legion with a Samsung 980 Pro, making the 970 Evo Plus available again for the Dell G5 which -- while four years old and with an older NVIDIA GPU without the recent architectural changes that allow Runtime D3 Power Management -- is still a decent computer for serious long term experimentation, including someday Linux From Scratch and FreeBSD which I've used as a VM.
For now I am taking advantage of the Individual Developer Subscription and starting experimentation on the Dell G5 with RHEL, specifically RHEL 9, released in May of 2022. The subscription allows -- for no-cost -- download of the installation ISO, a license to install on up to 16 virtual or physical hosts, access to Red Hat repositories for update and installation of the additional Red Hat software technologies, and full access to online resources including documentation. The initial subscription is valid for one year and must be renewed yearly.
The subscription and its relationship to package management and updates, as well as the tools to manage it are described later in the article, but as an introduction to some of its aspects the following set of slides are presented, the first showing one of the pages of the Red Hat Customer Portal which allows subscribers to view and manage the subscription, the second and third showing the re-registration emails, and the last showing two agreements applicable to using RHEL with the Individual Developer Subscription and the dialog where the terms are accepted as part of registering.
As this installation is for experimentation, I chose some installation characteristics which I usually don't bother with on my primary laptop, or the Acer V15 Nitro Black Edition that is still performing usefully as my entertainment laptop. These novel (for me) installation characteristics include RAID1 mirroring for the / and /home partitions and LUKS2 encryption for the / and /home partition RAID set and the separate /var and /var/tmp partitions -- required to be on separate partitions due to the security profile (described below) chosen for the installed OS.
The storage setup of the installed system is shown in the following set of images of GNOME Disks displaying the disk configuration. The first image shows the first disk's partition layout; notable in this image is that there is a separate /boot partition recommended by the RHEL documentation, the / partition is a RAID member, the /home partition is a RAID member, /tmp is an ext4 LUKS encrypted partition, and /var/tmp is a LUKS encrypted partition. The second image displays the second disk's partition layout; notable in this image are that the second members of the / and /home RAID1 arrays. The third and fourth images are GNOME Disks display of the / amd /home RAID1 arrays, respectively. The Disks utility indicates that both of these RAID arrays are LUKS encrypted.
The storage setup as it appears in /etc/fstab is shown in the following image. The encrypted and RAID1 mirrored partitions that comprise the / and /home partition and the encrypted /tmp and /var/tmp partitions are logically accessible through Device Mapper and appear as devices at /dev/mapper/......
I added two external partitions for data after installation, an ext4 partition mounted at /home/brook/G5_DataEXT4 and NTFS partition mounted at /home/brook/G5_DataNTFS. As discussed more fully later in the article, the NTFS partition would not have been usable in RHEL without the ntfs-3g driver distributed by a semi-official repository.
With yearly renewals of the individual developer subscription, this installation will be fully supported through 2032 with minor version releases occurring every six months. The installation will also have available to it a set of important applications with a guaranteed life cycle equal to the 10 year RHEL 9 lifecycle. The lifecycles of the RHEL 8 and 9 series is shown in the following set of slides.
The seven year overlap in the supported life of the 8 series and the 9 series is a possible explanation for some of the negative aspects of my experience with RHEL 9. Read on for what I observed while using it on and off for almost a year, including my overall positive impression and why the support overlap may have contributed to deficiencies in RHEL 9.
The largest impression I have formed in my first use of Red Hat Enterprise Linux is the extreme focus on security, as it should be for a Linux distribution that is used by extremely large organizations that include, not only large commercial enterprises but government entities with an interest in preserving data confidentiality. This focus is especially apparent when compared to the typical (community) Linux distributions which focus primarily on ease of use and apparently never consider security to the extent that RHEL does. I should qualify this impression with the observation that perhaps other distributions meet the security standards imposed by the certifications but do not go through the actual certification process.
The other major impression I had was with the focus on stability and reliability, achieved with the development, testing, and release sequence that begins with forking a previous Fedora release, which undergoes its own prerelease testing as beta releases. The Fedora base then becomes the basis of development for a CentOS Stream release with the same version number as a an eventual RHEL release. This multiple level of testing beginning with Fedora then continuing to CentOS Stream results in a well tested set of applications and system components. In the case of RHEL 9, this sequence began with the forking of Fedora 34 released in April of 2021 and continued development and testing as CentOS Stream 9, released in December of 2021.
Because of this development and testing timeline the software included is stable but as a result is somewhat older than what might be available in non-enterprise distributions. An important example of this is the Linux kernel, the version included in RHEL 9 being version 5.14.X, released almost a full year before RHEL 9. Stability is also maintained by only distributing a limited set of well supported software needed by enterprise customers in the official RHEL repositories. Further enhancing stability is RHEL is the focus of updates is only to provide bug-fixes and security patches, as exemplified by the fact that after updates through two minor version releases to 9.2 over the past year, the kernel is still at version 5.14, although the patch version has increased due to backpacking of bug and security fixes.
Other observations, further discussed later in the article, include:
Some of the aspects of RHEL 9 introduced above are discussed further in the following sections.
The focus on security is evident in RHEL from the beginning even during installation where the Anaconda installer (familiar to Fedora users) allows specification of various security characteristics. This includes
Security profiles which can be applied to the installed system are viewable and selectable in the installer from the Security Profile item in the installer's main hub (first image in following set). Selecting Security Profile advances to a screen in which security profiles are listed with descriptions, and can be selected to be applied to the installed system (second image in following set).
I chose to apply the CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation security profile. CIS benchmarks are, according to CIS, the maintainer of the benchmarks,
are prescriptive configuration recommendations for more than 25+ vendor product families. They represent the consensus-based effort of cybersecurity experts globally to help you protect your systems against threats more confidently... The CIS Benchmarks are community-developed secure configuration recommendations for hardening organizations' technologies against cyber attacks. Mapped to the CIS Critical Security Controls (CIS Controls), the CIS Benchmarks elevate the security defenses for cloud provider platforms and cloud services, containers, databases, desktop software, server software, mobile devices, network devices, and operating systems. They also help organizations demonstrate compliance with components of various industry regulations and frameworks.
CIS offers benchmarks for various operating systems on both server and workstation platforms, and at two levels where generally, Level 1 offers security without inhibiting the utility or practicality of the OS past an acceptable point, and Level 2 extends the recommendations of Level 1 benchmarks for use in environments where security is paramount. The title of the benchmark reflects these characteristics. All profiles of CIS benchmarks for a certain operating system and version are documented in a single document, available for download from the CIS Benchmarks List page.
The RHEL 9 CIS Level 1 benchmark for workstations requires as part of the system configuration -- as shown in the secondary window of Anaconda's security profile selection screen -- the noexec and nosuid mount options for the mount point /tmp; nodev and noexec mount options for /var/tmp; and nodev mount option for /home (first image in following set). It also requires that certain packages must be installed, such as firewalld amd rsyslog, and that certain other packages must not be installed, such as telnet, openldap-clients, and xinetd.
The list of configuration requirements to comply with the CIS benchmark is actually much, much more extensive than that shown in Anaconda, and covers many more components of the OS and associated supporting applications. Highlights from the RHEL 9 CIS benchmark standards document include:
In addition to the CIS security profile, as mentioned above, other security profiles are available, some of which are visible as selection items in the secondary screen opened when selecting Anaconda's Security Profile main menu item (shown in images above). Some of these profiles are described below:
This security profile is primarily based on the Protection Profile for General Purpose Operating Systems Version 4.2.1 published by the NIAP. This standard requires the OS[1] to be configured and have resources such that it is protected from certain threats defined by the standard such as, among others, network attacks, local attacks, and an improper user. These broad requirements are met by functional requirements that specify the type, level, and methods of cryptographic support available on the system. The standard relies on references to other standards in its specifications, for example, various FIPS publications. For more information on this standard see Protection Profile for General Purpose Operating Systems, Version 4.2.1; 2019-04-22.
The description of the profile also mentions that certain system configuration items are derived from the CNSS Instruction No. 1253.
The Configuration Annex to Protection Profile for General Purpose Operating Systems also applies, requiring certain configuration parameters, such as a minimum password length. The requiements of this standard are consistent with CNSS No. 1253.
RHEL can operate in FIPS mode, a mode in which the cryptographic module self-checks required by the FIPS 140-3 standard are enabled. FIPS 140-3 is the latest in a series of standards published by the NIST and refers to a variety of other standards, primarily ISO/IEC 19790:2012(E), Information technology — Security techniques — Security requirements for cryptographic modules.
A kernel command line parameter, fips=1 is available to start the system in FIPS mode. This kernel parameter can also be used when starting the installer, which will enable FIPS mode in the installed system.
Commands are also available to start FIPS mode in a system in which it was not enabled at startup, as well as other commands to manage FIPS mode, the use of one of which -- fips-mode-setup -- is mentioned below.
RHEL implements a system to ensure that the cryptographic components are sufficiently current, and thus remain secure, and to ensure that the various applications which use cryptographic back-ends apply the current components consistently. The system includes pre-configured profiles that define allowed cryptographic components and versions: DEFAULT and FIPS. Setting the systemwide crypto policy to FIPS is another method of enabling FIPS mode.
The effectiveness of the system-wide crypto policy framework and that RHEL is more secure with regard to cryptographic components included in the OS compared to most other Linux distributions was evident the first time I attempted to connect to my home WiFi network. I had started the installer with the kernel parameter fips=1 so the installed system was operating in FIPS mode by default. The cryptographic components required by FIPS were not compatible with an old inexpensive Linksys Wi-Fi router from 2019. This required relaxation of the crypto policies, first by disabling FIPS mode with the command
fips-mode-setup --disable
which, in addition to disabling FIPS mode, sets the systemwide crypto policy to DEFAUT. Normally, modifying the systemwide crypto policy would be done with
update-crypto-policies --set DEFAULT
but if trying to set the system-wide crypto policy to the less stringent DEFAULT mode while FIPS mode is enabled, there will be an error stating that the operation can't be performed while FIPS mode is active.
I also saw the effectiveness of the systemwide crypto policy framework of ensuring consistent use of appropriately secure cryptographic components throughout the system in my attempt to modify SSH configuration. Comments in the SSH daemon's configuration indicate that changing parameters related to cryptography in the configuration file have no effect and may only be modified by changing the systemwide crypto policy.
# This system is following system-wide crypto policy. The changes to # crypto properties (Ciphers, MACs, ...) will not have any effect here. # They will be overridden by command-line options passed to the server # on command line. # Please, check manual pages for update-crypto-policies(8) and sshd_config(5).
Besides ensuring cryptographic algorithms of adequate strength and FIPS compliance, the overall environment is configured for enhanced security as required by the chosen security profile, at least compared to the many Linux distributions I have used that are not targeted at enterprise use.
One area where the security enhanced configuration is noticeable is the file permission policies reflected in umask, dmask, and fmask. After manually installing Firefox Beta and Firefox Developer Edition, I created .desktop files for these applications by copying the the installed Firefox's .desktop file using sudo to elevate privileges. As the following listing shows, the resulting files did not have read permission for other users whereas the Firefox .desktop file did. This permission setting behavior in RHEL is not the same as in Arch Linux, for example, where the the same operation would set read permission for other users.
[brook@G5-RHEL9 ~]$ ls -l /usr/share/applications/ | grep fire -rw-r-----. 1 root root 9350 Jul 7 01:28 firefox-beta.desktop -rw-r--r--. 1 root root 9288 Jun 23 09:34 firefox.desktop -rw-r-----. 1 root root 9522 Jul 7 01:22 firefox-developer-edition.desktop [brook@G5-RHEL9 ~]$ sudo chmod o+r /usr/share/applications/firefox-beta.desktop [sudo] password for brook: [brook@G5-RHEL9 ~]$ sudo chmod o+r /usr/share/applications/firefox-developer-edition.desktop [brook@G5-RHEL9 ~]$
The GNOME desktop environment is also configured for a high level of security. For example the login screen background includes a warning message "for authorized use only". Also paranoid is that the GNOME Terminal and Nautilus window close after a period of inactivity, something that might annoy some users.
The Server with GUI software selection in the installation medium includes the essential software for workstation use, installing GNOME and a standard, but limited set of applications that includes Firefox, Evince document viewer, and GEdit text editor. But the installation can be more than just a desktop OS judging by the "Role" field in the subscription information provided by the output of subscription-manager list --consumed (see second image below). The output lists the "Roles" for the subscribed product as
Further package installations and updates require a registration of the installation with the Individual Developer Subscription credentials. Additional RHEL repositories besides those already enabled can be added for specialized software; some of these repositories are displayed in the output of subscription-manager list --consumed, shown in the above slides, before the "Roles" list.
The capability to install module streams also exists in order to allow installation of a specific version of important software and bundled dependencies. (However, as mentioned above and discussed more fully below, this capability is limited to the point of insignificance.) Some examples of software that might benefit users by installing as module streams are server and development software such as PostgreSQL and node.js. For this review I only considered installing the NVIDIA GPU driver as a module, however as discussed below, it was only available for the RHEL 8.X series and not for the 9.X series..
Some software that I like to have in my Linux desktop installations were not available in official repositories -- understandably, since this is a commercially supported distribution for enterprise use. This makes semi-official repositories such as the Extra Packages for Enterprise Linux (EPEL), maintained by the Fedora Project for RHEL and its clones -- Rocky Linux, Alma Linux, Scientific Linux, and others, and third-party repositories such as RPMFusion essential for comfortable and flexible use of RHEL on a desktop. The former provides, for example, applications such as KeePassXC and the Plasma desktop environment from KDE; and the latter provides proprietary multimedia codecs and plugins, and an alternative source for NVIDIA drivers as well as other proprietary firmware and software. The Fedora community package build and distribution service, Copr, similar to SUSE/openSUSE's OBS,[2] is also available to RHEL (and its clones), which was necessary for me to install the Starship terminal prompt.
Unfortunately, despite these numerous sources for software I still had to resort to building the KeePassXC package using the RPM build tool rpmbuild. This was necessary even though the EPEL normally distributes this package, as I could see it was available for RHEL 8.6 but not yet built for RHEL 9.0. This, like only draft versions of security profiles being available at installation, is one of the reflections of one of the -- minor -- negative aspects of RHEL in my experience: that some needed resources -- officially supported or unofficial and unsupported -- were not ready for the release.
These and other aspects of software and package management are further discussed below.
The default installation with the Anaconda installer software selection item set to Server with GUI provides a very limited set of software. The set includes
The following set of images shows the installed software as seen in GNOME shell's overview. Apparently applications added to Favorites are not shown in the grid, because Firefox, for example, installed by default, is not visible in the grid. The same is true for Files, Terminal, and Help. Extensions, shown in the grid was actually installed by me after the OS installation, not included by default.
The more system oriented software includes:
Registering the Individual Developer Subscription in the installed system is necessary to associate the system to the subscription, enabling the RHEL installation to receive updates from the various Red Hat repositories and to install new software as long as the subscription is active. The About tab of GNOME Settings includes the non-standard item added by Red Hat, Subscription, (first image in following set) which opens a dialog that provides users one of the ways in which they can register the system (second image in following set).
After registering the installation, selecting the item shows the registration status (fourth thumbnail in the following set) instead of the registration dialog. Registering the installation attaches it to the subscription and makes it viewable and manageable in the Red Hat Customer Portal (first - third images in following set).
Unfortunately this registration mechanism initially did have a minor issue: when I tried to perform the first update, the operation resulted in an error message, as shown below. The issue did ultimately resolve itself, maybe after some background communication between the RHEL instance and Red Hat's subscription management servers.
[brook@localhost ~]$ sudo dnf upgrade Updating Subscription Management repositories. This system is registered with an entitlement server, but is not receiving updates. You can use subscription-manager to assign subscriptions. Error: There are no enabled repositories in "/etc/yum.repos.d", "/etc/yum/repos.d", "/etc/distro.repos.d".
I then used the subscription-manager attach --auto command to remedy the problem, which then informed me that there was no problem, as shown below.
[brook@localhost ~]$ sudo subscription-manager attach --auto All installed products are covered by valid entitlements. No need to update subscriptions at this time. Installed Product Current Status: Product Name: Red Hat Enterprise Linux for x86_64 Status: Subscribed
An important aspect of Red Hat Subscription Management was described above as part of the initial use of the system where the system was registered; here subscription management is described more fully. The Red Hat subscription service consists of three parts:
An identity certificate is generated and installed on the system for each of these components for authentication.
Generally, subscription management associates subscriptions and products to which a subscription is entitled to systems which "consume" the products. One possible method of achieving this -- through GNOME settings -- was described above. (Using the GNOME Settings' Subscription item actually performs two of the major subscription management functions listed below.)
The subscription service infrastructure tracks products purchased or available to the subscription, tracks systems on which products are installed, and synchronizes the status of these elements between the systems and remote subscription management infrastructure. More formally, according to Red Hat documentation, Red Hat Subscription Management involves three major tasks:
Subscription management also involves other minor tasks, such as viewing available and "consumed" products for the subscription. (This was seen earlier in the article when subscription-manager list --consumed was used to show consumed subscriptions.)
Multiple Red Hat Subscription Management tools are available to perform the subscription management, each suitable to a certain type and scale of deployment and organizational needs. The locally installed tool is the Red Hat Subscription Manager which has two interfaces, a CLI activated with the command subscription-manager and a standalone GUI. The standalone GUI components are also built into the GNOME desktop environment, such as the part built into the GNOME Settings component, and the part built into GNOME Shell as actionable notification displayed upon first boot regarding registration status of the system. The use of the GNOME Settings component of the Subscription Manager GUI was described above. The CLI component was also mentioned above in describing a possible solution to an error. Other uses of the subscription-manager are also shown in some of the images of this article.
Although not as obvious, it seems some Subscription Manager functionality is also incorporated into the package management back ends. This is apparent in the initial output of any dnf command which states the status of the subscription. It is also apparent in that Red Hat repositories are shown in the package management GUIs and able to be added using these GUIs.
The other subscription management tool applicable to small scale deployments of RHEL is that which is incorporated into the Red Hat Customer Portal shown in the first image of this article and some other images below. Large scale deployments use Red Hat Sattelite to manage large fleets of servers from an on premises installation.
In my practical experience with RHEL, which included a typical use by a developer as described in Adding a Git Client Node in an Individual Developer Centralized Workflow, the major tasks of subscription management were simply and automatically performed after I intuitively activated the GNOME Settings Subscription item. This registered the system and attached the subscription to the system. The only other task for which the subscription manager tool was necessary was to add some of the optional repositories, where I used the CLI command subscription-manager repos --enable=< repo-name >. This particular task was also able to be performed with the package management GUI. (None of the additional repositories, while containing a lot of Red Hat software technologies, were not useful to me in my first experimental use of RHEL.)
As shown in the image of the RHEL 9 lifecycle, near the top of the article, minor versions of RHEL 9 are released every six months. Updates to the identity of the system, i.e whether the installed system is a RHEL 9.0, a RHEL 9.1, or a RHEL 9.2, etc. system, happen automatically depending on the minor version that is current at the time, and is controlled by communication to the Red Hat subscription management server. It does not matter whether the system has actually been updated or not. The actual updating of the software to new minor version releases does not require a special process other than normal package update transactions using the CLI dnf tool, GNOME Software, or even the Plasma desktop environment's Discover, which works well although not officially supported (see the section Plasma Experience, below).
Red Hat software is primarily distributed through two main repositories enabled at installation, the BaseOS and the AppStream repositories. The non-default and unsupported CodeReady Linux Builder repository is also available to provide additional packages needed by developers. (As discussed later, adding this repository was necessary in order to enable the EPEL.) These repositories are listed in the output of dnf repolist shown in the third image of the following set of images. The enabled non-RHEL repositories, EPEL, RPMFusion, and a COPR repository -- mentioned above and further discussed below -- are also displayed in the output, as well as the single software RPM repositories provided by Google and Vivaldi to distribute their browsers.
Specialized Red Hat software is distributed through other specific repositories also available with the subscription. Some of these are displayed in the output of dnf repolist --all command, shown in the second image of the following set of images. GNOME Software's Software Repositories (first image in the follwing set) and Discover's Settings (fifth image in following set) screens also shows some of these additional official Red Hat repositories. Both of these package management GUIs can also be used to enable the repositories.
Additional Red Hat repositories are enabled from GNOME Software, as mentioned above, or with the subscription-manager CLI program. For those who install the Plasma dekstop from the EPEL, KDE's Discover is also installed, which can also be used to enable additional Red Hat repositories. After a repository is added to the installation, it is visible in the Subscriptions status page accessed from GNOME Settings's About tab. The state of this screen after adding the Codeready Linux Builder repository is shown in the fourth image of the above set of images.
App Streams are essentially regular versioned RPM packages of userland applications distributed from the repository. App Streams have specific supported life cycle periods that vary between different App Streams. Some have life cycles that coincide with the life cycle of the RHEL release, while others have a life cycle that is shorter. Shorter life cycle applications will be updated periodically as opposed to those whose life cycles coincide with the RHEL release.
When I reviewed Fedora 28 and 32, one of the largest impressions I had of the distribution was of the usefulness of the unique package management technology called Modularity in Fedora documentation. This package management innovation makes different versions of important software for production servers or development available to a system. The RPM packages of a particular application and its dependencies are logically bundled into a module. A module can have multiple versions, called streams or module streams where each module stream contains a particular version of an application and its dependencies. Each module can also have a module profile that defines the set of packages that will be installed as part of a module installation, useful, for example, for only installing the subset of packages in a module necessary for production or for production and development. Modules are distributed from the same repositories as regular unbundled RPMs.
Some of the important commands to manage modules are shown in the following table.
Action | Command |
---|---|
List modules available from enabled repositories | dnf module list |
List the available streams for a module | dnf module list < module-name > |
List the details of a module | dnf module info < module-name > |
Enable a module stream | dnf module enable < module-name:stream > |
Install a module stream | dnf module install < module-name:stream > |
(For more information on Module Streams and important concepts, such as the interaction of module and non-module package dependencies, see the relevant references at the end of the article.)
Modularity, referred to as simply Modules or Module Streams in Red Hat documentation, was made available in RHEL beginning with the 8 series. It is still available in RHEL 9, however, according to a post in the CentOS forum titled No Modules on Centos 9 Stream, due to the reception of the technology in RHEL 8 the philosophy to its inclusion is evolving in RHEL 9.
The observation in the forum post was reflected in my experience with RHEL 9 beginning with the installed 9.0 and as updated through 9.1 and 9.2. While the underlying package management infrastructure -- i.e. the dnf commands to manage modules -- still exists in RHEL 9, it seems to have been abandoned to a certain extent in that the number of applications delivered as modules and the number of streams for available modules is extremely limited. To illustrate consider the following set of images showing the output of some dnf module commands. The first image shows the output of dnf module list, displaying the available modules by repository in RHEL 9. Only six applications are distributed as modules, seven if including the one module distributed from the Codeready Linux Builder repository, whereas in RHEL 8 over forty applications are distributed as modules, although a few of the modules only offer a single stream. (See REHL 8 Documentation >> Package manifest >> Chapter 2 The Appstream Repository >> The Appstream modules for the full list of applications distributed as streams in RHEL 8.)
Of the applications available as modules in RHEL 8, many have numerous streams available. In RHEL 9, however, of the seven applications that are available as modules, none have more than one stream, defeating Modularity's purpose of making multiple version of an application available bundled with its specific dependencies allowing users to chose the specific version to install according to their needs. This difference between RHELs 8 and 9 is evident when comparing the second image to the fourth image in the following set of images which show the streams available for the PostgreSQL module in RHEL 8 and RHEL 9, respectively. The top of the second image shows the output of dnf module list postgresql in RHEL 9 which lists the single stream available for PostgreSQL, namely version 15 of the application. The fourth image, taken from RHEL 8 documentation, shows the output of yum module list postgresql listing the five streams available for PostgreSQL in RHEL 8, each making a different version of the application available.
I hope the commitment to Modularity in Fedora has not changed as I am planning to use its functionality in the near future. But in RHEL 9 my only need for Modularity was as the method documented by NVIDIA for installing a driver for RHEL (not necessarily for graphics in RHEL but for CUDA), as shown in the following image of an NVIDIA documentation webpage. According to the documentation, multiple streams are available, each for a different driver branch. Disappointingly, the NVIDIA documentation only applies to RHEL 8, and the corresponding module streams for RHEL 9 from RHEL 9 repositories are not available. Fortunately, as described below an alternative source is available for the NVIDIA driver for Fedora, RHEL and its clones from which I installed the driver.
As previously mentioned, software selection is very limited for desktop applications in official repositories, presumably a necessary tradeoff for the stability by only supporting a limited set of applications. Also, by policy KDE's Plasma desktop and non-KDE Qt applications, and other software, such as the NTFS driver, ntfs-3g are not available in regular RHEL repositories. (Newer kernels have a module available that can be used as an alternative to ntfs-3g, but this is apparently not available in the older kernel version used by RHEL.)
Fortunately, additional software repositories are available, such as the EPEL maintained by Fedora, the third-party RPMFusion repositories, one of the sources for proprietary NVIDIA GPU drivers, and various COPR repositories -- maintained by community members -- for miscellaneous software, such as the Starship command prompt.
The EPEL repository, maintained by the Fedora Project, as its name suggests, is a source for extra packages for RHEL not included in the official repositories. Versions of the repository are also available for CentOS Stream and the RHEL clones, Alma Linux and Rocky Linux. In the Fedora project's words
Extra Packages for Enterprise Linux (or EPEL) is a Fedora Special Interest Group that creates, maintains, and manages a high quality set of additional packages for Enterprise Linux, including, but not limited to, Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux (SL), Oracle Linux (OL), AlmaLinux (AL) and Rocky Linux (RL).
EPEL packages are usually based on their Fedora counterparts and will never conflict with or replace packages in the base Enterprise Linux distributions. EPEL uses much of the same infrastructure as Fedora, including buildsystem, Bugzilla instance, updates manager, mirror manager and more.
In order to enable the EPEL, it is first necessary to enable the Codeready Builder for RHEL 9 repository, with
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
as shown in the first image of the following set of images.
Then, it was necessary to add the repository by installing a package by URL that contains the repository metadata and signatures:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
The end of the output of this operation is shown in the second image of the following set.
These steps would normally be enough to enable the EPEL, however, a fix was required to the actual repository configuration file installed by the second step, /etc/yum.repos.d/epel.repo. The necessary fixes are shown in the following image which shows two Konsole window panes with the original version of /etc/yum.repos.d/epel.repo in the bottom pane and the edited version in the top pane. The line that identifies the URI where the metalink definition for the repository had to be commented out as it did not work. The alternative was to uncomment the line that identifies the repository URL and replace the boilerplate domain download.example.com with the actual domain dl.fedoraproject.org.
The larger of the two disks on the Dell G5 has two partitions for data, one ext4 and one ntfs, both of which I added to /etc/fstab. Unfortunately, in RHEL 9, because the NTFS driver is proprietary, it can not be distributed by Red Hat. (NTFS support has been added in recent versions of the Linux kernel, but is not available in the version included in RHEL.) Fortunately, the EPEL does distribute the ntfs-3g package, previously used by all Linux distributions prior to the inclusion of NTFS support directly in the kernel.
The EPEL also distributes the KDE Plasma desktop environment and KDE applications (See Review >> Plasma Experience below.), as well as other applications not distributed officially through the RHEL repositories.
So the EPEL is necessary for those who prefer an alternative desktop environment, or other applications not distributed by Red Hat. Ii is essential for packages such as ntfs-3g, although other proprietary items must be installed from RPMFusion, discussed below. Unfortunately, as with many aspects of this .0 release, it was not ready at the time of release, with some packages -- KeepassXc and aria2, for example -- available for the 8.X series not yet built for RHEL 9, as evidenced by the following images. The first shows that another KeepassXC user is missing the availability of their favored password manager in the EPEL repository for RHEL 9. The second shows the Fedora build system's webpage for aria2 which indicates stable RPM builds for current and past Fedora versions and past RHEL versions are available, but not for RHEL 9.
(These unavailable packages illustrate that fmailiarity with a chosen dsitribution's default package building tool is useful. I built bouth locally using the PRM package building tool, rpmbuild discussed below as one aspect of software managment.)
I should note despite my complaining about these two packages, the Fedora Project providing this repository is a great service to Red Hat users for essential packages such as ntfs-3g and less essential like aria2. I especially appreciate the fact that this repository provides the KDE Plasma desktop environment and KDE applications.
RPMFusion is a third-party repository that provides proprietary software such as multimedia codecs and drivers for Fedora, RHEL, and RHEL clones. It has been essential for me in order to enable these proprietary components, allowing all use cases of a desktop Linux fully functional. It is also essential for the same reasons for users who install RHEL 9 with a GUI for workstation use. Since NVIDIA drivers were not available as modules as they had been in RHEL 8, this was the only source for a precompiled NVIDIA driver distributed as an RPM package. Adding the repository to the RHEL system only required a single dnf command to install a package from a remote URL as shown in the following listing.
[brook@G5-RHEL9 ~]$ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
Copr is an online package build system and a collection of user repositories distributing packages built with the build system. A dnf plugin exists (first image in the following set) that provides the dnf subcommand copr which is used to enable and disable Copr repositories.
Like the Arch User Repository, it is a way to obtain software not in official repositories that is shared by the user community, but unlike the AUR it incorporates an online build system, whereas the AUR only distributes the package building recipes -- PKGBUILD files -- and actual building of packages is done on locally the users machine. It is more similar to the openSUSE Build Service which also offers an online build service and user repositories of packages built with the build system. Unlike the OBS which provides the build and repository service to all distributions and many package formats, the Copr limits its build targets to Fedora and related distributions.
In the past, I used the Copr to install more recent versions of the Plasma desktop environment on Fedora. In the current test of RHEL 9, I used the Copr to install the Starship command prompt. The second image below shows the adding of the atim/starship Copr repository in a GNOME terminal window, as well as the project repository's page in Firefox. The third - fifth images show the installation of the starship package using DNF.
When some software is not available in a distribution's repositories or third-party repositories are not available, some Linux users resort to installing software manually, bypassing the system package manager, using the make and make install commands. For the less causal Linux use, familiarity with a distribution's native package building tool is useful for installing software in these situations without bypassing the package manager. And for a large number of Enterprise Linux users, I assume it might be a job requirement. It was useful to me in my use of RHEL to build packages for Aria2, the download manager, and KeePassXC the password manager, which were not available in any of the repositories -- official, semi-official, or third-party.
To use rpmbuild, the RPM package building tool, it was first necessary to install it and other development packages. I then used existing .spec -- the RPM package building recipe format -- for previous versions of these two packages in the EPEL as a guide.
The default graphical user interface in RHEL -- and the only one available in the official Red Hat repositories is GNOME. The desktop environment and a few applications were installed when using the "Server with GUI" software selection during installation. As with all software installed on RHEL, the version of GNOME is somewhat old, but is recent enough to include some of the significant improvements and feature additions to GNOME in recent years. In the early days of GNOME 3, soon after my return to Linux, GNOME was my desktop of choice, but since discovering Plasma and its richness of functionality, I abandoned GNOME for it and can't use any desktop environment other than Plasma for more than a few minutes. Despite my affinity for Plasma, I was impressed by these new the new additions, most notably a feature I haven't seen before in GNOME's file manager, Nautilus, but a feature I have regularly used in KDE's Dolphin for many years, the ability to open remote locations.
Also impressive, and what I liked about GNOME 3 in its early days, was the look of the environment, but only after the application of a suitable theme (or, as i was enthusiastic about GNOME, by editing the GNOME Shell .css files to modify existing themes). I think most users would prefer an alternative to the bland gray of the default Adwaita theme, highlighted in the following images in which the GNOME appearance is in its default state.
Some of the other images throughout the article and the one below show the GNOME shell after the application of the Skeuos Red Dark GTK and GNOME Shell themes and the Tela Red dark variant icons.
The ability to customize and extend GNOME Shell behavior is what makes the DE usable, in the opinion of some, including linus Torvalds himself. One such extension is the User Theme extension which allows custom themes to be used, without which I would not have been able to switch the theme to the above mentioned Skeuos GTK and GNOME Shell themes. This and about twenty more extensions are available in the official Red Hat repositories (first thumbnail image below). Other extensions are installable on a user level from Firefox through Firefox's own extension, GNOME Shell Integration (shown in the second and third thumbnails below). The Extensions application can be used to enable, disable, and configure extensions (thumbnails four - six in following set).
For those using RHEL as a workstation, but prefer the power and flexibility of the Plasma desktop environment over the GNOME desktop environment, the Plasma desktop and KDE applications are available from the EPEL repository. The versions available are fairly recent as opposed to the officially supported DE, GNOME, which is at version 40 in RHEL, while the latest released version is 44. When I installed Plasma in July of 2022, the version available was 5.23.4, I believe a fairly recent version at that time. An update immediately after installation bumped it up to 5.24.5, and a recent update of the system in June of 2023 updated Plasma to version 5.27.4, almost at the same version of the Plasma 5.27.5 on the Arch installation on which I am writing this.
The installation of the entire desktop environment and a good selection of KDE applications was performed with a
sudo dnf group install 'KDE (K Desktop Environment)'
the output of which is shown in the following listing.
[brook@G5-RHEL9 SPECS]$ sudo dnf group install 'KDE (K Desktop Environment)' Updating Subscription Management repositories. Last metadata expiration check: 0:04:51 ago on Thu 07 Jul 2022 06:03:55 PM EDT. No match for group package "k3b-extras-freeworld" Dependencies resolved. ======================================================================================================================== Package Arch Version Repository Size ======================================================================================================================== Installing group/module packages: akregator x86_64 21.08.3-1.el9 epel 2.0 M bluedevil x86_64 5.23.4-1.el9 epel 352 k breeze-icon-theme noarch 5.90.0-1.el9 epel 4.1 M colord-kde x86_64 0.5.0-15.el9 epel 208 k dolphin x86_64 21.08.3-1.el9 epel 3.8 M firewall-config noarch 1.0.0-4.el9 rhel-9-for-x86_64-appstream-rpms 87 k gwenview x86_64 1:21.08.3-1.el9 epel 6.3 M initial-setup-gui x86_64 0.3.90.2-2.el9 rhel-9-for-x86_64-appstream-rpms 28 k kaddressbook x86_64 21.08.3-1.el9 epel 3.1 M kamera x86_64 21.04.2-2.el9 epel 205 k kate x86_64 21.08.3-1.el9 epel 6.9 M kcalc x86_64 21.04.3-1.el9 epel 612 k kcharselect x86_64 21.04.3-1.el9 epel 431 k kcolorchooser x86_64 21.04.2-2.el9 epel 48 k kde-gtk-config x86_64 5.23.5-1.el9 epel 100 k kde-partitionmanager x86_64 21.12.0-1.el9 epel 2.2 M kde-print-manager x86_64 21.04.3-1.el9 epel 359 k kde-settings-pulseaudio noarch 35.0-2.el9.1 epel 9.5 k kdegraphics-thumbnailers x86_64 21.04.2-2.el9 epel 61 k kdeplasma-addons x86_64 5.23.5-2.el9 epel 1.2 M kdialog x86_64 21.08.3-1.el9 epel 148 k kdnssd x86_64 21.04.3-1.el9 epel 82 k keditbookmarks x86_64 21.08.3-1.el9 epel 331 k kf5-akonadi-server x86_64 21.08.3-1.el9 epel 2.4 M kf5-akonadi-server-mysql x86_64 21.08.3-1.el9 epel 11 k kf5-baloo-file x86_64 5.90.0-1.el9 epel 125 k kf5-kipi-plugins x86_64 21.04.2-2.el9 epel 1.2 M kfind x86_64 21.08.3-1.el9 epel 461 k kgpg x86_64 21.04.3-1.el9 epel 3.1 M khelpcenter x86_64 1:21.08.3-1.el9 epel 4.8 M khotkeys x86_64 5.23.5-1.el9 epel 2.0 M kinfocenter x86_64 5.23.4-1.el9 epel 1.6 M kmag x86_64 21.04.3-1.el9 epel 820 k kmail x86_64 21.08.3-1.el9 epel 5.8 M kmenuedit x86_64 5.23.5-1.el9 epel 1.1 M kmousetool x86_64 21.04.3-1.el9 epel 244 k kmouth x86_64 21.04.3-1.el9 epel 1.9 M konsole5 x86_64 21.08.3-1.el9 epel 904 k kontact x86_64 21.08.3-1.el9 epel 745 k korganizer x86_64 21.08.3-1.el9 epel 1.9 M kruler x86_64 21.04.2-2.el9 epel 312 k kscreen x86_64 1:5.23.4-1.el9 epel 279 k kscreenlocker x86_64 5.23.4-1.el9 epel 226 k ksshaskpass x86_64 5.23.4-1.el9 epel 49 k kwalletmanager5 x86_64 21.04.3-1.el9 epel 992 k kwin x86_64 5.23.4-1.el9 epel 12 k kwrite x86_64 21.08.3-1.el9 epel 283 k okular x86_64 21.04.2-2.el9 epel 4.5 M pam-kwallet x86_64 5.23.4-1.el9 epel 23 k phonon-qt5-backend-gstreamer x86_64 2:4.10.0-6.el9 epel 163 k plasma-breeze x86_64 5.23.5-1.el9 epel 326 k plasma-desktop x86_64 5.23.5-1.el9 epel 13 M plasma-desktop-doc noarch 5.23.5-1.el9 epel 4.7 M plasma-discover x86_64 5.23.5-2.el9 epel 7.1 M plasma-discover-notifier x86_64 5.23.5-2.el9 epel 76 k plasma-drkonqi x86_64 5.23.4-1.el9 epel 872 k plasma-nm x86_64 5.23.5-1.el9 epel 950 k plasma-nm-l2tp x86_64 5.23.5-1.el9 epel 121 k plasma-nm-openconnect x86_64 5.23.5-1.el9 epel 113 k plasma-nm-openswan x86_64 5.23.5-1.el9 epel 50 k plasma-nm-openvpn x86_64 5.23.5-1.el9 epel 209 k plasma-nm-pptp x86_64 5.23.5-1.el9 epel 76 k plasma-pa x86_64 5.23.5-1.el9 epel 292 k plasma-systemmonitor x86_64 5.23.5-1.el9 epel 267 k plasma-thunderbolt x86_64 5.23.4-1.el9 epel 152 k plasma-workspace x86_64 5.23.5-2.el9 epel 7.0 M plasma-workspace-geolocation x86_64 5.23.5-2.el9 epel 53 k polkit-kde x86_64 5.23.4-1.el9 epel 91 k sddm x86_64 0.19.0-18.el9 epel 664 k sddm-breeze noarch 5.23.5-2.el9 epel 859 k sddm-kcm x86_64 5.23.4-1.el9 epel 133 k spectacle x86_64 21.04.2-2.el9 epel 1.3 M Installing dependencies: LibRaw x86_64 0.20.2-5.el9 rhel-9-for-x86_64-appstream-rpms 380 k NetworkManager-l2tp x86_64 1.20.4-1.el9 epel 187 k NetworkManager-libreswan x86_64 1.2.14-1.el9.3 rhel-9-for-x86_64-appstream-rpms 141 k NetworkManager-openconnect x86_64 1.2.6-9.el9 epel 440 k NetworkManager-openvpn x86_64 1:1.8.16-1.el9.1 epel 266 k NetworkManager-pptp x86_64 1:1.2.8-5.el9 epel 148 k PackageKit-Qt5 x86_64 1.0.2-3.el9 epel 98 k accounts-qml-module x86_64 0.7-6.el9 epel 83 k akonadi-import-wizard x86_64 21.08.3-1.el9 epel 749 k akregator-libs x86_64 21.08.3-1.el9 epel 539 k anaconda-core x86_64 34.25.0.29-1.el9_0 rhel-9-for-x86_64-appstream-rpms 2.6 M anaconda-gui x86_64 34.25.0.29-1.el9_0 rhel-9-for-x86_64-appstream-rpms 485 k anaconda-tui x86_64 34.25.0.29-1.el9_0 rhel-9-for-x86_64-appstream-rpms 197 k anaconda-user-help noarch 1:9.0.0-1.el9 rhel-9-for-x86_64-appstream-rpms 35 k anaconda-widgets x86_64 34.25.0.29-1.el9_0 rhel-9-for-x86_64-appstream-rpms 127 k appstream-qt x86_64 0.14.5-1.el9 codeready-builder-for-rhel-9-x86_64-rpms 80 k augeas-libs x86_64 1.13.0-1.el9 rhel-9-for-x86_64-appstream-rpms 459 k baloo-widgets x86_64 21.08.3-1.el9 epel 134 k blivet-data noarch 1:3.4.0-13.el9_0 rhel-9-for-x86_64-appstream-rpms 116 k breeze-cursor-theme noarch 5.23.5-1.el9 epel 329 k breeze-gtk-common noarch 5.23.5-1.el9 epel 243 k daxctl-libs x86_64 71.1-6.el9 rhel-9-for-x86_64-baseos-rpms 43 k dbus-x11 x86_64 1:1.12.20-5.el9 rhel-9-for-x86_64-appstream-rpms 27 k dbusmenu-qt5 x86_64 0.9.3-0.27.20160218.el9 epel 78 k desktop-backgrounds-compat noarch 35.0.0-1.el9 epel 8.9 k dolphin-libs x86_64 21.08.3-1.el9 epel 488 k f35-backgrounds-base noarch 35.0.1-4.el9 epel 20 M f35-backgrounds-kde noarch 35.0.1-4.el9 epel 12 k google-noto-sans-fonts noarch 20201206-3.el9 rhel-9-for-x86_64-appstream-rpms 7.6 M google-noto-serif-fonts noarch 20201206-3.el9 rhel-9-for-x86_64-appstream-rpms 8.5 M gpgmepp x86_64 1.15.1-6.el9 rhel-9-for-x86_64-appstream-rpms 124 k gpsd-libs x86_64 1:3.23.1-1.el9 epel 63 k grantlee-editor x86_64 21.08.3-1.el9 epel 282 k grantlee-editor-libs x86_64 21.08.3-1.el9 epel 44 k grantlee-qt5 x86_64 5.2.0-11.el9 epel 315 k gtk2-engines x86_64 2.20.2-24.el9 epel 300 k gwenview-libs x86_64 1:21.08.3-1.el9 epel 458 k iceauth x86_64 1.0.8-4.el9 epel 26 k imath x86_64 3.1.2-1.el9 rhel-9-for-x86_64-appstream-rpms 98 k initial-setup x86_64 0.3.90.2-2.el9 rhel-9-for-x86_64-appstream-rpms 141 k jasper-libs x86_64 2.0.28-3.el9 rhel-9-for-x86_64-appstream-rpms 154 k kaccounts-integration x86_64 21.04.3-1.el9 epel 156 k kactivitymanagerd x86_64 5.23.4-1.el9 epel 265 k kaddressbook-libs x86_64 21.08.3-1.el9 epel 228 k kcolorpicker x86_64 0.1.6-2.el9 epel 31 k kde-cli-tools x86_64 5.23.5-1.el9 epel 824 k kde-filesystem x86_64 4-66.el9 epel 43 k kde-print-manager-libs x86_64 21.04.3-1.el9 epel 158 k kde-settings noarch 35.0-2.el9.1 epel 33 k kde-settings-plasma noarch 35.0-2.el9.1 epel 13 k kdecoration x86_64 5.23.4-1.el9 epel 86 k kdegraphics-mobipocket x86_64 21.04.2-2.el9 epel 40 k kdepim-runtime x86_64 1:21.08.3-1.el9 epel 3.3 M kdepim-runtime-libs x86_64 1:21.08.3-1.el9 epel 398 k kdesu x86_64 1:5.23.5-1.el9 epel 231 k kdiagram x86_64 2.8.0-3.el9 epel 558 k kdsoap x86_64 2.0.0-2.el9 epel 145 k keditbookmarks-libs x86_64 21.08.3-1.el9 epel 46 k kernel-modules-extra x86_64 5.14.0-70.17.1.el9_0 rhel-9-for-x86_64-baseos-rpms 966 k keybinder3 x86_64 0.3.2-13.el9 rhel-9-for-x86_64-appstream-rpms 23 k kf5-akonadi-calendar x86_64 21.08.3-1.el9 epel 514 k kf5-akonadi-contacts x86_64 21.08.3-1.el9 epel 611 k kf5-akonadi-mime x86_64 21.08.3-1.el9 epel 204 k kf5-akonadi-notes x86_64 21.08.3-1.el9 epel 54 k kf5-akonadi-search x86_64 21.08.3-1.el9 epel 327 k kf5-attica x86_64 5.90.0-1.el9 epel 170 k kf5-baloo x86_64 5.90.0-1.el9 epel 236 k kf5-baloo-libs x86_64 5.90.0-1.el9 epel 229 k kf5-bluez-qt x86_64 5.90.0-1.el9 epel 238 k kf5-calendarsupport x86_64 21.08.3-1.el9 epel 603 k kf5-eventviews x86_64 21.08.3-1.el9 epel 667 k kf5-filesystem x86_64 5.90.0-1.el9 epel 11 k kf5-frameworkintegration x86_64 5.90.0-1.el9 epel 1.6 M kf5-frameworkintegration-libs x86_64 5.90.0-1.el9 epel 30 k kf5-grantleetheme x86_64 21.08.3-1.el9 epel 87 k kf5-incidenceeditor x86_64 21.08.3-1.el9 epel 595 k kf5-kactivities x86_64 5.90.0-1.el9 epel 138 k kf5-kactivities-stats x86_64 5.90.0-1.el9 epel 107 k kf5-kalarmcal x86_64 21.08.3-1.el9 epel 281 k kf5-karchive x86_64 5.90.0-1.el9 epel 106 k kf5-kauth x86_64 5.90.0-1.el9 epel 130 k kf5-kbookmarks x86_64 5.90.0-1.el9 epel 167 k kf5-kcalendarcore x86_64 1:5.90.0-1.el9 epel 282 k kf5-kcalendarutils x86_64 21.08.3-1.el9 epel 324 k kf5-kcmutils x86_64 5.90.0-1.el9 epel 239 k kf5-kcodecs x86_64 5.90.0-1.el9 epel 179 k kf5-kcompletion x86_64 5.90.0-1.el9 epel 136 k kf5-kconfig-core x86_64 5.90.0-1.el9 epel 317 k kf5-kconfig-gui x86_64 5.90.0-1.el9 epel 49 k kf5-kconfigwidgets x86_64 5.90.0-1.el9 epel 432 k kf5-kcontacts x86_64 1:5.90.0-1.el9 epel 269 k kf5-kcoreaddons x86_64 5.90.0-1.el9 epel 465 k kf5-kcrash x86_64 5.90.0-1.el9 epel 38 k kf5-kdav x86_64 1:5.90.0-1.el9 epel 113 k kf5-kdbusaddons x86_64 5.90.0-1.el9 epel 86 k kf5-kdeclarative x86_64 5.90.0-1.el9 epel 323 k kf5-kded x86_64 5.90.0-1.el9 epel 79 k kf5-kdelibs4support x86_64 5.90.0-1.el9 epel 2.1 M kf5-kdelibs4support-libs x86_64 5.90.0-1.el9 epel 788 k kf5-kdesu x86_64 5.90.0-1.el9 epel 99 k kf5-kdnssd x86_64 5.90.0-1.el9 epel 98 k kf5-kdoctools x86_64 5.90.0-1.el9 epel 627 k kf5-kfilemetadata x86_64 5.90.0-1.el9 epel 220 k kf5-kglobalaccel x86_64 5.90.0-1.el9 epel 66 k kf5-kglobalaccel-libs x86_64 5.90.0-1.el9 epel 105 k kf5-kguiaddons x86_64 5.90.0-1.el9 epel 104 k kf5-kholidays x86_64 1:5.90.0-1.el9 epel 274 k kf5-khtml x86_64 5.90.0-1.el9 epel 2.6 M kf5-ki18n x86_64 5.90.0-1.el9 epel 1.7 M kf5-kiconthemes x86_64 5.90.0-1.el9 epel 175 k kf5-kidentitymanagement x86_64 21.08.3-1.el9 epel 126 k kf5-kidletime x86_64 5.90.0-1.el9 epel 59 k kf5-kimap x86_64 21.08.3-1.el9 epel 227 k kf5-kinit x86_64 5.90.0-1.el9 epel 173 k kf5-kio-core x86_64 5.90.0-1.el9 epel 613 k kf5-kio-core-libs x86_64 5.90.0-1.el9 epel 464 k kf5-kio-doc noarch 5.90.0-1.el9 epel 2.5 M kf5-kio-file-widgets x86_64 5.90.0-1.el9 epel 303 k kf5-kio-gui x86_64 5.90.0-1.el9 epel 89 k kf5-kio-ntlm x86_64 5.90.0-1.el9 epel 21 k kf5-kio-widgets x86_64 5.90.0-1.el9 epel 255 k kf5-kio-widgets-libs x86_64 5.90.0-1.el9 epel 424 k kf5-kipi-plugins-libs x86_64 21.04.2-2.el9 epel 741 k kf5-kirigami2 x86_64 5.90.0-1.el9 epel 415 k kf5-kitemmodels x86_64 5.90.0-1.el9 epel 141 k kf5-kitemviews x86_64 5.90.0-1.el9 epel 130 k kf5-kitinerary x86_64 21.08.3-1.el9 epel 1.1 M kf5-kjobwidgets x86_64 5.90.0-1.el9 epel 129 k kf5-kjs x86_64 5.90.0-1.el9 epel 322 k kf5-kldap x86_64 21.08.3-1.el9 epel 233 k kf5-kmailtransport x86_64 21.08.3-1.el9 epel 246 k kf5-kmailtransport-akonadi x86_64 21.08.3-1.el9 epel 45 k kf5-kmbox x86_64 21.08.3-1.el9 epel 44 k kf5-kmime x86_64 21.08.3-1.el9 epel 170 k kf5-knewstuff x86_64 5.90.0-2.el9 epel 813 k kf5-knotifications x86_64 5.90.0-1.el9 epel 167 k kf5-knotifyconfig x86_64 5.90.0-1.el9 epel 113 k kf5-kontactinterface x86_64 21.08.3-1.el9 epel 73 k kf5-kpackage x86_64 5.90.0-1.el9 epel 211 k kf5-kparts x86_64 5.90.0-1.el9 epel 224 k kf5-kpeople x86_64 5.90.0-1.el9 epel 144 k kf5-kpimtextedit x86_64 21.08.3-1.el9 epel 386 k kf5-kpkpass x86_64 21.08.3-1.el9 epel 49 k kf5-kpty x86_64 5.90.0-1.el9 epel 76 k kf5-kquickcharts x86_64 5.90.0-1.el9 epel 149 k kf5-kross-core x86_64 5.90.0-1.el9 epel 307 k kf5-krunner x86_64 5.90.0-1.el9 epel 123 k kf5-kservice x86_64 5.90.0-1.el9 epel 346 k kf5-ksmtp x86_64 21.08.3-1.el9 epel 79 k kf5-ktexteditor x86_64 5.90.0-1.el9 epel 2.4 M kf5-ktextwidgets x86_64 5.90.0-1.el9 epel 323 k kf5-ktnef x86_64 21.08.3-1.el9 epel 144 k kf5-kunitconversion x86_64 5.90.0-1.el9 epel 916 k kf5-kwallet x86_64 5.90.0-1.el9 epel 309 k kf5-kwallet-libs x86_64 5.90.0-1.el9 epel 88 k kf5-kwayland x86_64 5.90.0-1.el9 epel 512 k kf5-kwidgetsaddons x86_64 5.90.0-1.el9 epel 1.6 M kf5-kwindowsystem x86_64 5.90.0-1.el9 epel 190 k kf5-kxmlgui x86_64 5.90.0-1.el9 epel 709 k kf5-kxmlrpcclient x86_64 5.90.0-1.el9 epel 74 k kf5-libgravatar x86_64 21.08.3-1.el9 epel 67 k kf5-libkdcraw x86_64 21.08.3-1.el9 epel 49 k kf5-libkdepim x86_64 21.08.3-1.el9 epel 110 k kf5-libkexiv2 x86_64 21.08.3-1.el9 epel 145 k kf5-libkipi x86_64 21.04.2-2.el9 epel 102 k kf5-libkleo x86_64 21.08.3-1.el9 epel 642 k kf5-libksieve x86_64 21.08.3-1.el9 epel 852 k kf5-mailcommon x86_64 21.08.3-1.el9 epel 857 k kf5-mailimporter x86_64 21.08.3-1.el9 epel 237 k kf5-mailimporter-akonadi x86_64 21.08.3-1.el9 epel 29 k kf5-messagelib x86_64 21.08.3-1.el9 epel 6.3 M kf5-modemmanager-qt x86_64 5.90.0-1.el9 epel 171 k kf5-networkmanager-qt x86_64 5.90.0-1.el9 epel 342 k kf5-pimcommon x86_64 21.08.3-1.el9 epel 382 k kf5-pimcommon-akonadi x86_64 21.08.3-1.el9 epel 225 k kf5-plasma x86_64 5.90.0-1.el9 epel 3.1 M kf5-prison x86_64 5.90.0-1.el9 epel 54 k kf5-purpose x86_64 5.90.0-1.el9 epel 448 k kf5-solid x86_64 5.90.0-1.el9 epel 387 k kf5-sonnet-core x86_64 5.90.0-1.el9 epel 184 k kf5-sonnet-ui x86_64 5.90.0-1.el9 epel 166 k kf5-syndication x86_64 1:5.90.0-1.el9 epel 190 k kf5-syntax-highlighting x86_64 5.90.0-1.el9 epel 1.6 M kf5-threadweaver x86_64 5.90.0-1.el9 epel 75 k kimageannotator x86_64 0.5.3-1.el9 epel 362 k kio-extras x86_64 21.04.3-2.el9 epel 1.4 M kmail-account-wizard x86_64 21.08.3-1.el9 epel 572 k kmail-libs x86_64 21.08.3-1.el9 epel 1.0 M konsole5-part x86_64 21.08.3-1.el9 epel 626 k kontact-libs x86_64 21.08.3-1.el9 epel 94 k korganizer-libs x86_64 21.08.3-1.el9 epel 832 k kpmcore x86_64 21.12.1-1.el9 epel 664 k ksystemstats x86_64 5.23.5-1.el9 epel 219 k kuserfeedback x86_64 1.0.0-8.el9 epel 200 k kwayland-integration x86_64 5.23.4-1.el9 epel 65 k kwayland-server x86_64 5.23.4-1.el9 epel 380 k kwin-common x86_64 5.23.4-1.el9 epel 2.5 M kwin-libs x86_64 5.23.4-1.el9 epel 1.5 M kwin-wayland x86_64 5.23.4-1.el9 epel 516 k kwrited x86_64 5.23.4-1.el9 epel 34 k langtable noarch 0.0.54-4.el9 rhel-9-for-x86_64-appstream-rpms 48 k layer-shell-qt x86_64 5.23.4-1.el9 epel 34 k ldns x86_64 1.7.1-10.el9 rhel-9-for-x86_64-appstream-rpms 163 k libXScrnSaver x86_64 1.2.3-10.el9 rhel-9-for-x86_64-appstream-rpms 27 k libaccounts-glib x86_64 1.25-7.el9 epel 84 k libaccounts-qt5 x86_64 1.16-4.el9 epel 61 k libchewing x86_64 0.5.1-22.el9 epel 1.8 M libdmtx x86_64 0.7.5-8.el9 epel 62 k libimobiledevice x86_64 1.3.0-5.el9 epel 75 k libkgapi x86_64 21.08.3-1.el9 epel 506 k libkolabxml x86_64 1.2.0-7.el9 epel 703 k libkscreen-qt5 x86_64 5.23.4-1.el9 epel 251 k libksysguard x86_64 5.23.5-1.el9 epel 1.1 M libksysguard-common x86_64 5.23.5-1.el9 epel 46 k libkworkspace5 x86_64 5.23.5-2.el9 epel 112 k libmarkdown x86_64 2.2.4-7.el9 epel 46 k libmng x86_64 2.0.3-17.el9 rhel-9-for-x86_64-appstream-rpms 190 k libpinyin x86_64 2.6.0-4.el9 rhel-9-for-x86_64-appstream-rpms 204 k libpinyin-data x86_64 2.6.0-4.el9 rhel-9-for-x86_64-appstream-rpms 13 M libplist x86_64 2.2.0-5.el9 epel 76 k libpskc x86_64 2.6.7-2.el9 epel 34 k libqalculate x86_64 3.22.0-1.el9 epel 1.9 M libraw1394 x86_64 2.1.2-14.el9 epel 65 k libreport x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 522 k libreport-anaconda x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 22 k libreport-cli x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 29 k libreport-gtk x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 80 k libreport-plugin-reportuploader x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 44 k libreport-web x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 34 k libreswan x86_64 4.6-3.el9 rhel-9-for-x86_64-appstream-rpms 1.3 M libtimezonemap x86_64 0.4.5.1-11.el9_0.1 rhel-9-for-x86_64-appstream-rpms 2.0 M libusbmuxd x86_64 2.0.2-5.el9 epel 38 k lm_sensors-libs x86_64 3.6.0-10.el9 rhel-9-for-x86_64-appstream-rpms 44 k maliit-framework x86_64 2.0.0-4.el9 epel 71 k maliit-framework-qt5 x86_64 2.0.0-4.el9 epel 309 k maliit-keyboard x86_64 2.0.0-4.el9 epel 577 k mariadb x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 1.6 M mariadb-common x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 39 k mariadb-connector-c x86_64 3.2.6-1.el9_0 rhel-9-for-x86_64-appstream-rpms 203 k mariadb-connector-c-config noarch 3.2.6-1.el9_0 rhel-9-for-x86_64-appstream-rpms 11 k mariadb-errmsg x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 199 k mariadb-server x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 9.4 M mesa-libGLU x86_64 9.0.1-6.el9 rhel-9-for-x86_64-appstream-rpms 149 k mysql-selinux noarch 1.0.4-2.el9 rhel-9-for-x86_64-appstream-rpms 37 k ndctl x86_64 71.1-6.el9 rhel-9-for-x86_64-baseos-rpms 193 k ndctl-libs x86_64 71.1-6.el9 rhel-9-for-x86_64-baseos-rpms 84 k nss-mdns x86_64 0.15.1-3.el9 epel 46 k okular-libs x86_64 21.04.2-2.el9 epel 363 k okular-part x86_64 21.04.2-2.el9 epel 1.7 M openal-soft x86_64 1.19.1-16.el9 rhel-9-for-x86_64-appstream-rpms 539 k openconnect x86_64 9.01-1.el9 epel 864 k openexr-libs x86_64 3.1.1-2.el9 rhel-9-for-x86_64-appstream-rpms 1.1 M openvpn x86_64 2.5.7-1.el9 epel 652 k oxygen-sound-theme noarch 5.23.4-1.el9 epel 1.8 M perl-DBD-MariaDB x86_64 1.21-16.el9_0 rhel-9-for-x86_64-appstream-rpms 156 k perl-Sys-Hostname x86_64 1.23-479.el9 rhel-9-for-x86_64-appstream-rpms 29 k phonon-qt5 x86_64 4.11.1-8.el9 epel 295 k pim-data-exporter x86_64 21.08.3-1.el9 epel 346 k pim-data-exporter-libs x86_64 21.08.3-1.el9 epel 167 k pim-sieve-editor x86_64 21.08.3-1.el9 epel 578 k pkcs11-helper x86_64 1.27.0-6.el9 epel 62 k plasma-breeze-common noarch 5.23.5-1.el9 epel 77 M plasma-discover-libs x86_64 5.23.5-2.el9 epel 474 k plasma-integration x86_64 5.23.4-1.el9 epel 207 k plasma-systemsettings x86_64 5.23.5-1.el9 epel 409 k plasma-workspace-common x86_64 5.23.5-2.el9 epel 40 k plasma-workspace-geolocation-libs x86_64 5.23.5-2.el9 epel 25 k plasma-workspace-libs x86_64 5.23.5-2.el9 epel 2.1 M plasma-workspace-wayland x86_64 5.23.5-2.el9 epel 33 k polkit-qt5-1 x86_64 0.114.0-2.el9 epel 85 k poppler-qt5 x86_64 21.01.0-12.el9 codeready-builder-for-rhel-9-x86_64-rpms 209 k powerdevil x86_64 5.23.5-1.el9 epel 962 k ppp x86_64 2.4.9-5.el9 rhel-9-for-x86_64-baseos-rpms 424 k pptp x86_64 1.10.0-14.el9 rhel-9-for-x86_64-appstream-rpms 74 k python3-blivet noarch 1:3.4.0-13.el9_0 rhel-9-for-x86_64-appstream-rpms 880 k python3-blockdev x86_64 2.25-11.el9 rhel-9-for-x86_64-appstream-rpms 33 k python3-bytesize x86_64 2.5-3.el9 rhel-9-for-x86_64-appstream-rpms 23 k python3-kickstart noarch 3.32.5-1.el9 rhel-9-for-x86_64-appstream-rpms 539 k python3-langtable noarch 0.0.54-4.el9 rhel-9-for-x86_64-appstream-rpms 1.2 M python3-libreport x86_64 2.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 59 k python3-meh noarch 0.50-4.el9 rhel-9-for-x86_64-appstream-rpms 134 k python3-meh-gui noarch 0.50-4.el9 rhel-9-for-x86_64-appstream-rpms 17 k python3-pid noarch 2.2.3-12.el9 rhel-9-for-x86_64-appstream-rpms 28 k python3-productmd noarch 1.31-3.el9 rhel-9-for-x86_64-appstream-rpms 83 k python3-pwquality x86_64 1.4.4-8.el9 rhel-9-for-x86_64-appstream-rpms 19 k python3-pyparted x86_64 1:3.11.7-4.el9 rhel-9-for-x86_64-appstream-rpms 114 k python3-pytz noarch 2021.1-4.el9 rhel-9-for-x86_64-appstream-rpms 56 k python3-pyudev noarch 0.22.0-6.el9 rhel-9-for-x86_64-baseos-rpms 94 k python3-requests-file noarch 1.5.1-4.el9 rhel-9-for-x86_64-appstream-rpms 18 k python3-requests-ftp noarch 0.3.1-23.el9 rhel-9-for-x86_64-appstream-rpms 27 k python3-simpleline noarch 1.8-3.el9 rhel-9-for-x86_64-appstream-rpms 143 k qca-qt5 x86_64 2.3.4-2.el9 epel 459 k qgpgme x86_64 1.15.1-6.el9 codeready-builder-for-rhel-9-x86_64-rpms 215 k qqc2-desktop-style x86_64 5.90.0-1.el9 epel 119 k qt5-qtbase-mysql x86_64 5.15.2-29.el9 rhel-9-for-x86_64-appstream-rpms 44 k qt5-qtfeedback x86_64 20180903gita14bd0b-2.el9 epel 71 k qt5-qtgraphicaleffects x86_64 5.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 125 k qt5-qtlocation x86_64 5.15.2-9.el9 rhel-9-for-x86_64-appstream-rpms 3.1 M qt5-qtmultimedia x86_64 5.15.2-7.el9 rhel-9-for-x86_64-appstream-rpms 824 k qt5-qtnetworkauth x86_64 5.15.2-4.el9 epel 81 k qt5-qtquickcontrols x86_64 5.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 1.1 M qt5-qtquickcontrols2 x86_64 5.15.2-7.el9 rhel-9-for-x86_64-appstream-rpms 1.7 M qt5-qtscript x86_64 5.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 1.0 M qt5-qtsensors x86_64 5.15.2-7.el9 rhel-9-for-x86_64-appstream-rpms 234 k qt5-qtspeech x86_64 5.15.2-4.el9 epel 44 k qt5-qtwayland x86_64 5.15.2-15.el9 rhel-9-for-x86_64-appstream-rpms 1.1 M qt5-qtwebchannel x86_64 5.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 104 k qt5-qtwebengine x86_64 5.15.8-3.el9.1 epel 59 M qt5-qtwebkit x86_64 5.212.0-0.60.alpha4.el9 epel 13 M qt5-qtxmlpatterns x86_64 5.15.2-7.el9 rhel-9-for-x86_64-appstream-rpms 1.0 M qtkeychain-qt5 x86_64 0.11.1-3.el9 epel 63 k satyr x86_64 0.38-3.el9 rhel-9-for-x86_64-appstream-rpms 117 k signon x86_64 8.60-9.el9 epel 323 k signon-plugin-oauth2 x86_64 0.24-3.el9 epel 79 k signon-ui x86_64 0.15-16.el9 epel 111 k socat x86_64 1.7.4.1-5.el9 rhel-9-for-x86_64-appstream-rpms 309 k stoken-libs x86_64 0.92-6.el9 epel 46 k tigervnc-license noarch 1.11.0-21.el9 rhel-9-for-x86_64-appstream-rpms 17 k tigervnc-server-minimal x86_64 1.11.0-21.el9 rhel-9-for-x86_64-appstream-rpms 1.1 M trousers-lib x86_64 0.3.15-5.el9 epel 165 k vpnc-script noarch 20220404-1.git40a8c62c.el9 epel 17 k xapian-core-libs x86_64 1.4.18-5.el9 rhel-9-for-x86_64-appstream-rpms 745 k xcb-util-cursor x86_64 0.1.3-13.el9 epel 19 k xerces-c x86_64 3.2.3-5.el9 epel 963 k xl2tpd x86_64 1.3.16-4.el9 epel 94 k xmessage x86_64 1.0.5-4.el9 epel 21 k xmlrpc-c x86_64 1.51.0-16.el9_0 rhel-9-for-x86_64-appstream-rpms 148 k xmlrpc-c-client x86_64 1.51.0-16.el9_0 rhel-9-for-x86_64-appstream-rpms 32 k Installing weak dependencies: breeze-gtk-gtk2 noarch 5.23.5-1.el9 epel 19 k breeze-gtk-gtk3 noarch 5.23.5-1.el9 epel 28 k breeze-gtk-gtk4 noarch 5.23.5-1.el9 epel 27 k cyrus-sasl-md5 x86_64 2.1.27-20.el9 rhel-9-for-x86_64-appstream-rpms 46 k dolphin-plugins x86_64 21.08.3-1.el9 epel 441 k exfatprogs x86_64 1.1.2-2.el9 rhel-9-for-x86_64-baseos-rpms 68 k google-noto-sans-mono-fonts noarch 20201206-3.el9 rhel-9-for-x86_64-appstream-rpms 3.4 M kaccounts-providers x86_64 21.04.3-1.el9 epel 109 k kate-plugins x86_64 21.08.3-1.el9 epel 1.6 M kdepim-addons x86_64 21.08.3-1.el9 epel 1.9 M kf5-kimageformats x86_64 5.90.0-1.el9 epel 165 k kwin-x11 x86_64 5.23.4-1.el9 epel 143 k libblockdev-dm x86_64 2.25-11.el9 rhel-9-for-x86_64-appstream-rpms 22 k libblockdev-kbd x86_64 2.25-11.el9 rhel-9-for-x86_64-appstream-rpms 29 k libblockdev-mpath x86_64 2.25-11.el9 rhel-9-for-x86_64-appstream-rpms 24 k libblockdev-nvdimm x86_64 2.25-11.el9 rhel-9-for-x86_64-appstream-rpms 24 k mariadb-backup x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 6.4 M mariadb-gssapi-server x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 22 k mariadb-server-utils x86_64 3:10.5.13-2.el9 rhel-9-for-x86_64-appstream-rpms 219 k media-player-info noarch 23-9.el9 epel 65 k plasma-browser-integration x86_64 5.23.5-1.el9 epel 230 k plasma-discover-flatpak x86_64 5.23.5-2.el9 epel 109 k plasma-discover-packagekit x86_64 5.23.5-2.el9 epel 143 k plasma-milou x86_64 5.23.4-1.el9 epel 95 k plasma-workspace-x11 x86_64 5.23.5-2.el9 epel 46 k qca-qt5-ossl x86_64 2.3.4-2.el9 epel 114 k qt5-qtimageformats x86_64 5.15.2-6.el9 rhel-9-for-x86_64-appstream-rpms 109 k qt5-qtspeech-speechd x86_64 5.15.2-4.el9 epel 24 k qt5-qtvirtualkeyboard x86_64 5.15.2-4.el9 epel 2.3 M samba-client x86_64 4.15.5-108.el9_0 rhel-9-for-x86_64-appstream-rpms 677 k udftools x86_64 2.2-5.el9 rhel-9-for-x86_64-appstream-rpms 153 k xdg-desktop-portal-kde x86_64 5.23.4-1.el9 epel 231 k xsettingsd x86_64 1.0.2-2.el9 epel 39 k Installing Groups: KDE (K Desktop Environment) Transaction Summary ======================================================================================================================== Install 433 Packages Total download size: 463 M Installed size: 1.3 G Is this ok [y/N]:
The resulting Plasma experience was usable, but not the best. Before the update to Plasma 5.27, everything generally worked fine; even switching the display manager to SDDM from the default GDM had presented no issues. The only issue was that if the system went to sleep, it was not possoble to unlock the system through the screen locker (the greeter for the screen locker, not the greeter managed by SDDM), requiring a reboot. This problem never occured with GNOME shell when the system went to sleep, its screen locker accepted credentials and resumed the system immediately.
After the update to Plasma 5.27, the experinece of using Plasma became much worse. GDM was able to start Plasma, however, unlike before the update when it was working as expected, plasmashell, if it was in fact excecutde, did not have a background or panels. I had to use KRunner, activated through the keyboard shortcut, to execute plasmashell --replace in order to get a working desktop. The situation was worse with SDDM which did not even present a greeter. Fortunately, installing sddm-wayland-plasma, which caused the removal of sddm-x11, resolved the issue. While the issue was resolved, the behavior of the greeter was different in that there were some duplicates in the desktop session type selection dropdown, as shown in the following image.
Interestingly, none of these issues were apparent in AlmaLinux 9.2, which I installed this month using the distribution's KDE live ISO on my old Acer V15 Nitro.
Before the Lenovo Legion 5 Pro replaced the Dell G5 as my primary computer and before I started using a second external screen, on the Dell I would generally block Nouveau, the FOSS NVIDIA driver, from loading and install Bumblebee and bbswitch, the former providing a daemon that would provide NVIDIA graphics on-demand and the latter performing the actual power management of the GPU. With this graphics configuration the integrated Intel GPU would be used with the Intel driver by default, with the option to use the NVIDIA GPU and the proprietary NVIDIA driver on demand and per application. This configuration became unusable with an external screen because the HDMI and USB-C/DisplayPort/Thunderbolt connector is wired to the NVIDIA GPU requiring it to be always available. I then discovered the tools provided by distributions to switch between the discrete graphics and integrated graphics modes, allowing me to use the NVIDIA GPU with the NVIDIA driver system-wide instead of the Nouveau driver and the integrated GPU with the Intel driver when on battery. (See The Best Distributions for Problematic Nvidia Optimus Hybrid Graphics.)
When I reviewed Fedora 32, I found that the Nouveau driver worked so much better than it had in the past, didn't require switching, provided excellent battery life, and because it powered the NVIDIA GPU, I could use an external screen without having to log out, so I stayed with the Nouveau driver. The only drawback was that the Nouveau driver would not use the dedicated GPUs memory.
The situation is the same in RHEL 9 as it was in Fedora 32, with everything working well with the default FOSS Nouveau driver. However, in order to take full advantage of the Dell G5's capability and test RHEL 9 fully, I wanted to install the proprietary NVIDIA GPU driver. As mentioned previously, I could not install the driver using a module stream as I desired because, unlike in RHEL 8, the NVIDIA drivers are not available as module streams. Fortunately, RPMFusion is not only available to Fedora users, but to users of RHEL and its clones as well, providing an alternative to the unavailable module streams for prebuilt NVIDIA drivers. The installation process, which essentially only required installing the kmod-nvidia package, causing dependencies to be installed, is described below in the section NVIDIA Driver Installation.
The NVIDIA driver as installed from RPMFusion enabled the full capability of the GPU including the GPU dedicated memory. The following image of the output of nvidia-smi, which was provided by the optional package install xorg-x11-drv-nvidia-cuda, shows the statistics of the GPU at the time, including the amount of dedicated GPU memory in use (341MB in this case) and an enumeration of memory usage by process.
Unfortunately, Optimus management on Fedora and RHEL is not as robust as those available for Ubuntu, Arch, and to a lesser extent openSUSE. On all of these distributions, the Optimus management utilities allow switching between discrete graphics, hybrid graphics, and integrated graphics modes for pre-Turing microarchitecture generation NVIDIA GPUs with power management of the GPU performed by external tools such as bbswitch; and between discrete and hybrid graphics modes for post-Turing microarchitecture generation NVIDIA GPUs with power management handled by the NVIDIA driver itself. Ubuntu's solution even integrates into the NVIDIA Settings as well as providing a CLI to switching between graphics modes. (For the reason as to the difference between the available graphics modes for Optimus laptops with pre and post-Turing generation NVIDIA GPUs, and other details, see Nvidia Optimus on Linux.)
All that is possible in Fedora nd RHEL, according to the RPMFusion documentation, is to choose whether the NVIDIA or the Nouveau driver kernel modules are loaded at boot based on the values of certain kernel commandline parameters (see NVIDIA Driver Installation, below). For pre-Turing Optimus laptops, where integrated mode is available in addition to hybrid and discrete modes, there does not seem to be a way to chose integrated mode using only the Intel driver. Also, there does not seem to be any mechanism to manage the actual power state of the NVIDIA GPU for pre-Turing Optimus laptops which require either an external utility, such as bbswitch or, manual methods. And for post-Turing NVIDIA GPUs, whose power states can be managed by the NVIDIA driver when the laptop is set to hybrid graphics, no mechanism is provided to switch between the discrete and hybrid graphics modes as can be done with Optimus Manager on Arch, NVIDIA Prime on Ubuntu, and SUSEPrime on openSUSE. For a discussion of these issues see Nvidia Optimus on Linux.
Despite these limitations, there is no practical issue on the Dell G5 with an older GPU, if choosing the NVIDIA driver when on external power and the Nouveau module when on battery power; the performance of the NVIDIA driver, as well as the dedicated GPU memory, is available when power conservation is not an issue and the power saving of the Nouveau driver is available when on battery. On a newer laptop such as the Lenovo Legion 5i Pro with a post-Turing GPU (Ampere), usage would be limited to using only the NVIDIA mode as Nouveau performance is typically not as good as the proprietary driver for newer GPUs.
The following images show RHEL 9 in use with the NVIDIA driver loaded at boot.
One difference between the installation of NVIDIA drivers in Fedora and in RHEL is that the documentation states that RHEL and CentOS users can install the kmod-nvidia meta package instead of akmod-nvidia, the difference -- according to a Fedora Forum thread -- being that the former causes prebuilt NVIDIA modules to be installed, whereas the latter will cause the prebuilt module to be installed, if available, and if not, cause it to be built from included sources and installed. In this case installing kmod-nvidia causes akmod-nvidia to be installed as well.
A basic installation and configuration process that works on the Dell G5 and its pre-Turing NVIDIA GPU is summarized below. For details see the RPMFusion Optimus Howto.
sudo dnf install kmod-nvidia
sudo dnf install xorg-x11-drv-nvidia-cuda
sudo systemctl enable nvidia-{suspend,resume,hibernate}
[brook@G5-RHEL9 ~]$ sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf
Section "OutputClass" Indentifier "nvidia" MatchDriver "nvidia-drm" Driver "nvidia" Option "PrimaryGPU" "yes" EndSection
Optimus management on Fedora is not as feature rich as those available for Ubuntu, Arch, and to a lesser extent openSUSE (see Nvidia Optimus on Linux). All that is possible is to choose whether the FOSS or proprietary drivers are loaded at boot using a different set of kernel command line options. For NVIDIA drivers use
And for the FOSS Nouveau driver, use
No mechanism to manage the actual power state of the NVIDIA GPU is provided for pre-Turing Optimus laptops, which require either an external utility such as bbswitch or manual methods. And for post-Turing NVIDIA GPUs, whose power states can be managed by the driver when the laptop is set to hybrid graphics, no mechanism is provided to switch between the discrete and hybrid graphics modes as can be done with Optimus Manager on Arch, NVIDIA Prime on Ubuntu, and SUSEPrime on openSUSE. For a discussion of these issues see Nvidia Optimus on Linux.
Despite these limitations -- which is not an issue if using the laptop on an external power -- it is possible to make sure that the proprietary NVIDIA driver is used to benefit from it. The following image shows the output of nvidia-smi, showing that the GPUs memory is used.
RHEL 9 with the Server with GUI software selection for use as a workstation is polished and stable, and -- most impressively -- secure. I did experience some disappontment with the distribution, however.
After a year of intermittently using Red Hat Enterprise Linux, installed as a 9.0 and updated through release 9.2, I have a generally favorable view of the distribution used as a workstation. I was especially impressed with the enterprise level security certified to multiple standards. The only officially supported desktop environment, GNOME, works without any issue, although I imagine many users will install extensions and custom themes.
Software is not the latest, but distributing older, thus well tested software, is one of the ways Red Hat can ensure a stable OS. Software is also limited in official repositories, but unofficial and third-party repositories are available as alternative sources of software, including additional desktop environments, proprietary drivers, and multimedia codecs.
Despite the overall positive impression I have developed, there were some characterisitcs of RHEL that I found disappointing. First, the distribution is not LSB compliant, as I learned when trying to install Epson multifunction printer drivers and management software downloaded as RPM packages directly from EPSON. Second, one of the most innovative features, introduced first in Fedora and appearing in RHEL for the first time in version 8, Modularity seems to be abandoned in RHEL 9.
More generally, the distribution was not ready for release, not necessarily in its functionality, but in various areas that support the distribution. In addition to modular streams essentially not being available, perhaps because the RHEL 8 series is still currently supported where module streams are plentiful, packages in the semi-official EPEL are not yet available for RHEL 9, while they are available for RHEL 8; some security profile standards are in unofficial draft status; and documentation for RHEL 9 is not as complete as for RHEL 8.
The controversy regarding Red Hat's actions to limit clones notwithstanding, the Individual Developer Subscriotion provides those with an interest in pursuing a career that involves RHEL and Red Hat software technologies a way to use the OS with access to all of the other Red Hat technologies and resources. It also provies others without any interest in pursuing a career that involves Red Hat products, a very secure and stable OS for non-commercial use.
with an interest in pursuing careers involving Red Hat Enterprise Linux and associated software technologies, and others, a very secure and
Other certified OSes include SUSE Enterprise Linux and Windows Server.
↩