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.

The default screen size for terminal on a Hyper-V virtual machine is just 1024x768.
Figure 1: The default screen size of a Hyper-V VM on Red Hat Enterprise Linux.

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.

After changing the screen size, the terminal takes up the full 1920x1080 size.
Figure 2: The full screen size on a RHEL virtual machine.

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/

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
kernelopts=root=/dev/mapper/rhel-root ... video=hyperv_fb:1920x1080

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: September 12, 2022