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 repolistshows 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:
| Task | RHEL 9 | RHEL 10 |
|---|---|---|
| Package manager | DNF | DNF |
| Desktop | GNOME | GNOME |
| GUI environment | Server with GUI | Server with GUI |
| Display manager | GDM | GDM |
| Graphical systemd target | graphical.target | graphical.target |
| Install command | dnf 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.