Change Virtual Console Font Size
openSUSE Tumbleweed follows a rolling release update cycle. And, when there are major updates to KDE, I like to switch to the virtual console (Ctrl+Alt+F1) to run zypper so that the update doesn't fail. Sometimes KDE will reset (and kill the update process) if one of its critical files is updated. So, using the virtual console avoids that potential issue.
The problem I'm having is that the virtual console is impossible to read. The font size is too small. Or, the display resolution is too high. And, I need some way to make the console more readable.
setfont
The easiest and fastest way to fix the issue is to issue the setfont command from within a virtual console. Use the -d option to double the default font size:
setfont -d
vconsole.conf
If you want to permanently change the font size, you'll have to modify the relevant systemd configuration file. The relevant file is vconsole.conf:
/etc/vconsole.conf
Before you do that, you'll probably want to list the potential fonts. In PowerShell, you can list the contents of the consolefonts directory and look for Lat15 fonts which correspond to English:
Get-ChildItem -Path /usr/share/kbd/consolefonts -Filter Lat15* Directory: /usr/share/kbd/consolefonts UnixMode User Group LastWriteTime Size Name -------- ---- ----- ------------- ---- ---- -rw-r--r-- root root 10/1/2023 06:32 2438 Lat15-Fixed13.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2573 Lat15-Fixed14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2540 Lat15-Fixed15.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2543 Lat15-Fixed16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2579 Lat15-Fixed18.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2374 Lat15-Terminus12x6.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2439 Lat15-Terminus14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2465 Lat15-Terminus16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2936 Lat15-Terminus18x10.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2962 Lat15-Terminus20x10.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3185 Lat15-Terminus22x11.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3212 Lat15-Terminus24x12.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3498 Lat15-Terminus28x14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3827 Lat15-Terminus32x16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2441 Lat15-TerminusBold14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2477 Lat15-TerminusBold16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2986 Lat15-TerminusBold18x10.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3014 Lat15-TerminusBold20x10.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3228 Lat15-TerminusBold22x11.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3265 Lat15-TerminusBold24x12.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3676 Lat15-TerminusBold28x14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3791 Lat15-TerminusBold32x16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2450 Lat15-TerminusBoldVGA14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2477 Lat15-TerminusBoldVGA16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2477 Lat15-VGA14.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2543 Lat15-VGA16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3220 Lat15-VGA28x16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 3312 Lat15-VGA32x16.psf.gz -rw-r--r-- root root 10/1/2023 06:32 2243 Lat15-VGA8.psf.gz
Linux fonts are stored as bitmaps. So, each font file contains one font with a fixed height and width. The file names typically reflect the font size.
TerminusBold32x16 has one of the largest font sizes available from the console fonts.
If we specify the full font name in vconsole.conf then the virtual consoles should use that font file and therefore font size.
To modify vconsole.conf, you'll need super user access. I'll use sudo and vim to edit the file:
sudo vim /etc/vconsole.conf
The default configuration looks like this:
KEYMAP=us FONT=eurlatgr.psfu FONT_MAP= FONT_UNIMAP= XKBLAYOUT=us XKBMODEL=pc105+inet XKBOPTIONS=terminate:ctrl_alt_bksp
We'll just change the FONT= variable to use the font with a larger size.
KEYMAP=us FONT=Lat15-TerminusBold32x16 FONT_MAP= FONT_UNIMAP= XKBLAYOUT=us XKBMODEL=pc105+inet XKBOPTIONS=terminate:ctrl_alt_bksp
This change will take effect after you reboot.
Or, you can apply the changes immediately by restarting the appropriate systemd service:
sudo systemctl restart systemd-vconsole-setup
console-setup
You can also use the third-party console-setup utility.
From the README:
This package provides the console with the same keyboard configuration
scheme that X Window System has. In result, there is no need to
duplicate or change the console keyboard files just to make simple
customizations such as the use of dead keys, the key functioning as
AltGr or Compose key, the key(s) to switch between Latin and non-Latin
layouts, etc. Besides the keyboard, the package configures also the
font on the console. It includes a rich collection of fonts and
supports several languages that would be otherwise unsupported on the
console (such as Armenian, Georgian, Lao and Thai).
Install the console-setup package. It seems to be available for Debian, Ubuntu, and openSUSE. Below, I use zypper on openSUSE Tumbleweed:
sudo zypper install console-setup
The configuration file is simply called "console-setup".
sudo vim /etc/default/console-setup
The default settings are:
# CONFIGURATION FILE FOR SETUPCON # Consult the console-setup(5) manual page. ACTIVE_CONSOLES=guess CHARMAP=guess CODESET=guess FONTFACE=TerminusBold FONTSIZE=16 VIDEOMODE= # The following is an example how to use a braille font # FONT='lat9w-08.psf.gz brl-8x8.psf'
You can change the FONTSIZE value to one of the accepted values mentioned in the manual page (eg man console-setup(5)).
For example:
FONTSIZE=16x32
Then, save the changes to the console-setup file.
After switching to a virtual console (eg Ctrl+Alt+F1) and logging in, you can apply the console-setup configuration with the setupcon command. The -f option limits the changes to just the console font.
setupcon -f
Unlike using the vconsole.conf file, console-setup does not have a way to permanently change the font. You will have to run the setupcon command each time you log into a virtual console.
video=
Another option is to use the video kernel parameter.
This solves the problem in a different way. Instead, of increasing the font size, the video option allows you to reduce the screen resolution in the virtual consoles. This has the effect of enlarging the text.
Normally, you would have to modify your boot loader configuration and apply the changes. Since I'm using Tumbleweed, I'll take advantage of the YaST Boot Loader applet. You will be prompted to enter your password--just like when using sudo.
- In YaST Boot Loader, I'll click on the Kernel Parameters tab.
- Then I can add a space and then my parameter to the Optional Kernel Command Line Parameter field: being careful to leave the current parameters untouched.
By default, my Parameter field looked like this:
splash=silent quiet security=apparmor
Then I added the video= kernel parameter:
splash=silent quiet security=apparmor video=1024x768
Some other common values are:
- 640x480
- 800x600
- 1024x768
- 1280x1024
- Continuing, I click the OK button in YaST Boot Loader. This will apply the changes to my boot loader for me.
When I reboot, the virtual consoles will use this resolution.
The only problem I found with this approach is that using a lower resolution means that your video card will have to switch modes when switching to the virtual console. So, once you press Ctrl+Alt+F1, instead of switching immediately, the system will take a moment to switch video modes. And, you'll have the same problem when switching back to the desktop.
Otherwise, Wayland did not have a problem with the video= parameter being present. And my login screen and desktop were fine with the video kernel parameter applied.
Shell Profile
For commands like setfont and setupcon, you might take advantage of your shell profile to automatically run these commands. Your shell profile is a script that runs when you log in.
In PowerShell, we typically refer to the profile using the PowerShell automatic variable $profile which resolves to your profile file path.
Make sure that $profile exists or create it:
if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
Then edit $profile:
vim $profile
I'll add a line to my file and instruct PowerShell to run either setfont or setupcon:
setfont -d
And, since it only makes sense to run this command while logging into a virtual console, we can check the XDG_SESSION_TYPE environment variable for the value 'tty' before running the command.
if ('tty' -eq $Env:XDG_SESSION_TYPE) { setfont -d }
By convention in PowerShell, we place the variable on the right side of the comparison operator to force a scalar comparison. This will output $True or $False and allow the if statement to work properly.
Also, PowerShell uses the Env:\ ($Env:) provider to access environment variables. For Windows users, this can be understood as a type of 'letter drive' that allows you to access environment variables.
By default, Linux uses the Bash shell. So, these changes to my PowerShell profile will only take effect if I change my login shell or if I launch pwsh after logging in. That's fine for me.
I'm less familiar with Bash profiles. Though, if you want to use Bash then I'm sure you can find an appropriate example online: including how to check the value of an environment variable. Your Bash profile probably already has default stuff in it from your Linux distribution. So, add your changes to the bottom of the file.
References
Main Methods
vconsole.conf | Arch Manual Pages
console-setup | Debian Manpages
Video Kernel Parameter | Linux Kernel Documentation
Q&A
How to change resolution of virtual terminal? | Linux Systems
Virtual Console Font Size | Unix & Linux Stack Exchange
Mentions Kernel Mode Setting | Unix & Linux Stack Exchange
Can I change the font of the text-mode console? | Unix & Linux Stack Exchange
PowerShell
about_Profiles | Microsoft Learn
about_Environment_Variables | Microsoft Learn
about_Comparison_Operators | Microsoft Learn
about_Providers | Microsoft Learn
Background
Where is .bash_profile? | NewbeDev
Explanation of Linux Shell Profiles | Greg's Wiki
Kernel Mode Setting | ArchWiki
Direct Rendering Manager | Wikipedia
sudo dpkg-reconfigure console-setup | TechInfected
console-setup Source | Debian GitLab
Created: Tuesday, July 16, 2024
Updated: Tuesday, July 16, 2024
/gemlog/