How to Install a GUI on an Existing RHEL 9 or RHEL 10 Virtual Machine

Learn how to install the GNOME GUI on an existing RHEL 9 or RHEL 10 virtual machine without reinstalling the OS. This guide covers Server with GUI installation, graphical target configuration, GDM, and common troubleshooting steps.

By Network Nuts Team · Published 2026-08-14

Red Hat Enterprise Linux virtual machines are often deployed using Minimal Install or a cloud image. This is particularly common when creating RHEL virtual machines on platforms such as:

  • Proxmox
  • VMware ESXi
  • VMware Workstation
  • KVM
  • OpenStack
  • AWS
  • Other virtualization platforms

These installations normally boot directly into a command-line interface.

But what if you later need a graphical desktop?

The good news is that you do not need to reinstall RHEL using the DVD ISO just to get a GUI. An existing RHEL 9 or RHEL 10 system can be converted into a graphical system by installing the required GNOME packages and changing the default systemd target.

In this guide, we will install the GNOME desktop environment on an existing RHEL 9 or RHEL 10 virtual machine.


What We Are Starting With

Assume we already have a working RHEL virtual machine that currently looks something like this:

Red Hat Enterprise Linux 10

localhost login:

After logging in, you only have a shell:

[user@rhel ~]$

Our objective is to convert this machine into:

RHEL
 ├── Existing CLI installation
 ├── GNOME desktop packages
 ├── GDM graphical login manager
 └── Graphical desktop on boot

Red Hat provides a Server with GUI software environment for both RHEL 9 and RHEL 10.


Step 1: Check Your RHEL Version

First, verify which version of RHEL is running.

cat /etc/redhat-release

For example:

Red Hat Enterprise Linux release 10.0 (Coughlan)

You can also use:

cat /etc/os-release

The procedure in this article applies to both:

RHEL 9
RHEL 10

Step 2: Check Internet and Repository Access

Installing a desktop environment requires downloading a significant number of RPM packages.

First, confirm that the VM has network connectivity.

For example:

ping -c 4 8.8.8.8

Then test DNS:

ping -c 4 redhat.com

Next, check whether DNF can see your configured repositories:

sudo dnf repolist

You should see repositories available to the system.

For example:

repo id
rhel-10-for-x86_64-appstream-rpms
rhel-10-for-x86_64-baseos-rpms

The exact repository names depend on how the RHEL VM was provisioned.


Step 3: Check RHEL Subscription Status

If you installed RHEL manually from an ISO, your machine might need to be registered before it can download packages.

Check the current status:

sudo subscription-manager status

You can also check the registered identity:

sudo subscription-manager identity

If the machine has not been registered, register it using your Red Hat account or your organization's subscription mechanism.

For example:

sudo subscription-manager register

Follow the prompts.

Then check the available repositories:

sudo dnf repolist

Note: Cloud-hosted RHEL systems may obtain Red Hat packages through the cloud provider's repository infrastructure instead of requiring conventional Subscription Manager registration. The important test is whether dnf repolist shows usable BaseOS and AppStream content.


Step 4: Check the Current Boot Target

RHEL uses systemd targets to determine whether the machine boots into a CLI or graphical environment.

Check the current default target:

systemctl get-default

A minimal RHEL server will normally return:

multi-user.target

multi-user.target is roughly equivalent to the traditional non-graphical multi-user mode.

Later, we will change this to:

graphical.target

Step 5: Check Available DNF Groups

RHEL organizes related software into package groups and environment groups.

Run:

sudo dnf group list

Look for an environment similar to:

Available Environment Groups:
   Server with GUI
   Server
   Minimal Install
   Workstation
   Custom Operating System
   Virtualization Host

The exact list depends on your repositories and RHEL version.

Red Hat's RHEL installation documentation identifies Server with GUI as one of the available base environments.


Step 6: Install the Server with GUI Environment

Now install the graphical environment:

sudo dnf group install "Server with GUI" -y

Depending on your current installation, DNF may need to install hundreds of packages.

You will see packages related to components such as:

GNOME Shell
GNOME Desktop
GDM
Wayland
GTK
Fonts
Graphical utilities
NetworkManager GUI components
Desktop applications

Allow the installation to complete.

This may take several minutes depending on your VM's CPU, disk performance, and internet connection.


Alternative: Use the Environment Group ID

The graphical server environment internally uses the environment identifier:

graphical-server-environment

Red Hat's RHEL 10 documentation, for example, uses:

@^graphical-server-environment

when selecting the graphical server environment in package configuration.

For most administrators, however, the easier command is simply:

sudo dnf group install "Server with GUI"

Step 7: Verify That GNOME Was Installed

After installation, check for GNOME Shell:

rpm -q gnome-shell

You should receive a package version rather than:

package gnome-shell is not installed

You can also verify GDM:

rpm -q gdm

GDM stands for GNOME Display Manager and provides the graphical login screen.


Step 8: Change the Default Boot Target

Installing GNOME does not necessarily mean the server will automatically boot into graphical mode.

Change the default target:

sudo systemctl set-default graphical.target

You should see output similar to:

Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.

Verify it:

systemctl get-default

The output should now be:

graphical.target

Red Hat's GNOME administration documentation uses systemctl set-default graphical.target to configure graphical startup.


Step 9: Reboot the VM

The easiest way to transition to the graphical environment is to reboot:

sudo reboot

When the VM boots again, you should see the graphical RHEL login screen.

You can then log in with your existing Linux user account.


Starting the GUI Without Rebooting

A reboot is not strictly required.

You can ask systemd to switch immediately to the graphical target:

sudo systemctl isolate graphical.target

However, when converting a VM from a minimal CLI installation into a desktop system, rebooting is generally the cleaner approach.


Step 10: Verify GDM

If the machine reboots but the graphical screen does not appear, check GDM.

Connect through SSH or switch to a TTY and run:

systemctl status gdm

You want to see:

Active: active (running)

If GDM is not running, try:

sudo systemctl enable --now gdm

Then check again:

systemctl status gdm

RHEL 9 vs RHEL 10 GUI

The overall installation procedure is almost identical:

TaskRHEL 9RHEL 10
Package managerDNFDNF
DesktopGNOMEGNOME
GUI environmentServer with GUIServer with GUI
Display managerGDMGDM
Graphical systemd targetgraphical.targetgraphical.target
Install commanddnf group install "Server with GUI"dnf group install "Server with GUI"

There are, however, changes underneath the desktop stack.

RHEL 9 uses GNOME with Wayland as its default graphical stack. RHEL 10 continues the move toward the Wayland-based GNOME environment.

For most users installing a desktop on a VM, these implementation differences do not change the basic installation process.


A RHEL 10 Difference: Initial Setup

There is one RHEL 10 difference worth knowing about.

RHEL 9 could use the packages:

initial-setup
initial-setup-gui

for certain post-installation setup workflows.

RHEL 10 removed the initial-setup package. Red Hat recommends gnome-initial-setup for the graphical workflow instead.

You normally do not need to install this package simply to enable GNOME on an existing VM, but it is important when following older RHEL tutorials because some RHEL 8 or RHEL 9 instructions reference initial-setup.


Installing GUI on a RHEL Cloud Image

The same approach can usually be used if the VM was created from a RHEL cloud image.

For example, suppose you downloaded a RHEL cloud image:

rhel-10.x-x86_64-kvm.qcow2

and imported it into Proxmox or KVM.

Cloud images are deliberately kept small, so they frequently do not contain the GNOME desktop environment.

You do not need to replace the cloud image with a DVD ISO installation just because you need a desktop.

As long as the machine has access to the required RHEL repositories, you can run:

sudo dnf group install "Server with GUI" -y

followed by:

sudo systemctl set-default graphical.target

and:

sudo reboot

The VM remains the same RHEL installation; you are simply adding the graphical software stack.


Recommended Resources for a GUI Virtual Machine

A minimal CLI server can operate with relatively little memory.

GNOME requires considerably more resources.

For a comfortable training or lab VM, a practical starting configuration is:

CPU:      2 vCPUs
RAM:      4 GB
Storage:  25-40 GB
Display:  Virtual VGA/SPICE/VMware display adapter

For very light use, the GUI may operate with fewer resources, but giving GNOME additional memory significantly improves responsiveness.

If the VM will be used for running browsers, IDEs, development tools, or multiple graphical applications, consider:

4 vCPUs
8 GB RAM

Proxmox Considerations

If the RHEL VM is running on Proxmox, make sure the VM has an appropriate virtual display device configured.

For example, in:

VM → Hardware → Display

you can use an appropriate virtual display configuration supported by your environment.

After GNOME has been installed, open the VM's graphical console instead of relying only on the serial console.

This distinction matters because a cloud image may originally have been configured primarily for serial-console access.

Even if GNOME is running correctly, you will not magically see the graphical desktop inside a serial terminal.


VMware Considerations

If RHEL is running under VMware, GNOME normally detects the virtual graphics hardware automatically.

Red Hat specifically documents troubleshooting scenarios where GNOME may fail to start or perform poorly on VMware virtual machines.

Installing VMware guest integration packages can also improve VM usability.

For example:

sudo dnf install open-vm-tools

If a graphical desktop is installed, you can additionally check what VMware-related packages are available:

dnf search open-vm-tools

What If You Installed a Minimal RHEL VM?

No problem.

This procedure is specifically useful for scenarios such as:

Minimal RHEL installation
        ↓
dnf group install "Server with GUI"
        ↓
GNOME + GDM installed
        ↓
graphical.target
        ↓
Graphical RHEL workstation/server

There is no technical requirement to reinstall the operating system solely because the original installation did not include GNOME.


What If Server with GUI Is Not Listed?

If:

sudo dnf group list

does not show:

Server with GUI

the most likely issue is repository availability rather than GNOME itself.

Check:

sudo dnf repolist

Then inspect all repositories:

sudo dnf repolist --all

Also try refreshing DNF metadata:

sudo dnf clean all
sudo dnf makecache

Then run:

sudo dnf group list

again.

On a normal RHEL installation you generally need access to the relevant BaseOS and AppStream content.


Troubleshooting: GUI Does Not Appear After Reboot

First check the default systemd target:

systemctl get-default

It should return:

graphical.target

If it returns:

multi-user.target

run:

sudo systemctl set-default graphical.target

and reboot.


Check GDM

Run:

systemctl status gdm

If required:

sudo systemctl restart gdm

Check the logs:

journalctl -u gdm

For logs from the current boot:

journalctl -u gdm -b

Check Whether GNOME Is Installed

Run:

rpm -q gnome-shell

and:

rpm -q gdm

You can also check the installed environment groups:

sudo dnf group list --installed

Check Disk Space

A cloud or minimal RHEL image may have a relatively small filesystem.

Check:

df -h

Pay particular attention to:

/

and:

/var

The GUI installation requires substantially more space than a minimal server installation.


Switching Back to CLI Mode

Installing GNOME does not mean that the machine must permanently boot into the GUI.

If you later want the VM to boot into CLI mode again:

sudo systemctl set-default multi-user.target

Then reboot:

sudo reboot

GNOME remains installed, but the system will boot into the command line.

To switch back later:

sudo systemctl set-default graphical.target

Temporarily Switch Between CLI and GUI

You can switch to graphical mode without changing the permanent boot configuration:

sudo systemctl isolate graphical.target

Similarly, you can switch to multi-user CLI mode:

sudo systemctl isolate multi-user.target

Be careful when doing this from an active graphical session because switching targets can terminate the desktop session and graphical applications.


Do You Actually Need a GUI on a RHEL Server?

Before installing GNOME on every RHEL server, consider why you need it.

For production servers, a graphical desktop is often unnecessary.

A CLI-only server provides several advantages:

  • Fewer installed packages
  • Lower memory consumption
  • Lower storage consumption
  • Smaller software footprint
  • Fewer unnecessary services
  • Easier server automation
  • Less attack surface to maintain

A GUI makes considerably more sense for:

  • Linux training labs
  • RHCSA practice environments
  • Desktop application testing
  • Developer workstations
  • Browser-based demonstrations
  • Administrative training
  • Students learning Linux for the first time
  • Applications that explicitly require a graphical session

For example, an instructor may intentionally use a minimal RHEL cloud image because it is quick to clone:

RHEL Cloud Image
        ↓
Clone VM
        ↓
Install GNOME
        ↓
Student graphical lab

This can be much more convenient than maintaining separate operating-system images for CLI and GUI labs.


Complete Installation in Three Commands

If your repositories are already configured correctly, the entire process can essentially be reduced to three commands:

sudo dnf group install "Server with GUI" -y
sudo systemctl set-default graphical.target
sudo reboot

After the reboot, the RHEL VM should start with the graphical GNOME login screen.


Quick Verification Commands

Here are some useful commands to remember:

Check RHEL version:

cat /etc/redhat-release

Check repositories:

dnf repolist

Check GUI environments:

dnf group list

Check installed GNOME:

rpm -q gnome-shell

Check GDM:

systemctl status gdm

Check boot target:

systemctl get-default

Enable graphical boot:

sudo systemctl set-default graphical.target

Enable CLI boot:

sudo systemctl set-default multi-user.target

Conclusion

A RHEL virtual machine does not need to be reinstalled simply because it was originally deployed without a graphical desktop.

Whether you are running RHEL 9 or RHEL 10, an existing minimal installation or cloud-image-based VM can be converted into a graphical system by installing the Server with GUI environment:

sudo dnf group install "Server with GUI" -y

and changing the default systemd target:

sudo systemctl set-default graphical.target

After rebooting, GNOME and GDM provide the normal graphical RHEL experience.

This is particularly useful in virtualization and training environments where lightweight RHEL cloud images can be cloned quickly and converted into GUI machines only when a graphical environment is actually required.