Let's say you've just downloaded your free copy of Red Hat Enterprise Linux (RHEL) 8 and created a virtual machine (VM) using Microsoft's Hyper-V virtual environment in Windows. So far, so good. But now you find yourself presented with an old-school 1024x768 screen resolution.
I don't know about you, but I prefer to run my VM in full-screen mode. When I'm using multiple monitors, it's a great convenience (and a powerful feeling) to have one screen running Windows 10 and the other running RHEL.
If you click the right mouse button on the RHEL desktop and look at available screen resolutions, only the default will appear, as shown in Figure 1.
Hunting around in my Hyper-V settings didn't turn up any options, so I thought I might be stuck with a tiny portal into my powerful VM. But then I found a way to change the default.
How to change the default screen resolution
Fortunately, there's a simple command in your RHEL VM to improve the screen resolution. In my case, I wanted to run full-screen at a 1920x1080 resolution. The following example shows how to enter a grubby
command as superuser (root), after which you should reboot:
$ su
# grubby --update-kernel=ALL --args="video=hyperv_fb:1920x1080"
# reboot
Note: The fb
in hyperv_fb
stands for frame buffer, the memory used by the virtual screen driver.
When the machine rebooted, there was my 1920x1080 resolution, in all its screen-hogging glory, as shown in Figure 2.
Did we just hack the kernel?
No, not exactly.
When RHEL boots, it uses a boot loader called grub2. Grub2 reads information from a configuration file, which in turn refers to a key environment variable. The configuration file is located in the /boot/loader/entries/
directory. Here's that directory on my Red Hat Enterprise Linux 8 VM:
$ sudo ls /boot/loader/entries/
a7eef0f4eafb43ae806ac4597d9c4ad8-0-rescue.conf
a7eef0f4eafb43ae806ac4597d9c4ad8-4.18.0-305.el8.x86_64.conf
As the listing shows, there are two entries. One is the rescue mode, while the other is the kernel boot option I normally choose. Here are the contents of that file:
sudo cat /boot/loader/entries/a7eef0f4eafb43ae806ac4597d9c4ad8-4.18.0-305.el8.x86_64.conf
title Red Hat Enterprise Linux (4.18.0-305.el8.x86_64) 8.4 (Ootpa)
version 4.18.0-305.el8.x86_64
linux /vmlinuz-4.18.0-305.el8.x86_64
initrd /initramfs-4.18.0-305.el8.x86_64.img $tuned_initrd
options $kernelopts $tuned_params
id rhel-20210429130346-4.18.0-305.el8.x86_64
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
Notice the reference to $kernelopts
. This is an environment variable that refers to yet another file, /boot/grub2/grubenv
. The contents of that file follow:
sudo cat /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=a7eef0f4eafb43ae806ac4597d9c4ad8-4.18.0-305.el8.x86_64
kernelopts=root=/dev/mapper/rhel-root ... video=hyperv_fb:1920x1080
boot_success=1
boot_indeterminate=0
This is the file that was modified when we ran the grubby
command. Notice the end of the line that starts with kernelopts
. There's our hyperv_fb
value. (I removed some of that line from the example in order to show the trailing entry.)
And voilà, we have our screen resolution set to 1920x1080.
Food for thought: Can you use a different setting?
Final note
It's often said that, in Unix and Linux, "everything is a file." The procedure in this article only helps to underscore that claim. In this case, one file tweak can change your environment from bothersome to awesome.
Last updated: October 8, 2024