Kernel mode setting
zh-CN:Kernel Mode Setting zh-TW:Kernel Mode Setting Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end
Kernel Mode Setting (KMS) is a method for setting display resolution and depth in the kernel space rather than user space.
The Linux kernel's implementation of KMS enables native resolution in the framebuffer and allows for instant console (tty) switching. KMS also enables newer technologies (such as DRI2) which will help reduce artifacts and increase 3D performance, even kernel space power-saving.
Previously, setting up the video card was the job of the X server. Because of this, it was not easily possible to have fancy graphics in virtual consoles. Also, each time a switch from X to a virtual console was made (
Ctrl+Alt+F1), the server had to give control over the video card to the kernel, which was slow and caused flickering. The same "painful" process happened when the control was given back to the X server (
With Kernel Mode Setting (KMS), the kernel is now able to set the mode of the video card. This makes fancy graphics during bootup, virtual console and X fast switching possible, among other things.
At first, note that for any method you use, you should always disable:
- Any "vga=" options in your bootloader as these will conflict with the native resolution enabled by KMS.
- Any "video=" lines that enable a framebuffer that conflicts with the driver.
- Any other framebuffer drivers (such as uvesafb).
Late KMS start
Early KMS start
To load KMS as early as possible in boot process, add the module radeon (for ATI/AMD cards), i915 (for Intel integrated graphics) or nouveau (for Nvidia cards) to the
MODULES line in
/etc/mkinitcpio.conf. For example:
MODULES="... i915 ..."
If you are using a custom EDID file (not applicable for the built-in resolutions), you should embed it into initramfs as well:
Rebuild your kernel image (refer to the mkinitcpio article for more info):
# mkinitcpio -p <name of your kernel preset; e.g. linux>
My fonts are too tiny
See changing the default font for how to change your console font to a large font. Terminus font in [community] is available in many sizes, including larger sizes.
Issue upon bootloading and dmesg
Polling for connected display devices on older systems can be quite expensive. Poll will happen periodically and can in worst cases take several hundred milliseconds, depending on the hardware. This will cause visible stalls, for example in video playback. These stalls might happen even when your video is on HDP output but you have other non HDP outputs in your hw configuration. If you experience stalls in display output occurring every 10 seconds, disabling polling might help.
If you see an error code of 0x00000010 (2) while booting up, (You will get about 10 lines of text, the last part denoting that error code), then add the following line into
options drm_kms_helper poll=0
Forcing modes and EDID
In case that your monitor/TV is not sending the appropriate EDID data or similar problems, you will notice that the native resolution is not automatically configured or no display at all. The kernel has a provision to load the binary EDID data, and provides as well data to set four of the most typical resolutions.
If you have the EDID file for your monitor the process is easy. If you don't have, you can either use one of the built-in resolution-EDID binaries (or generate one during kernel compilation, more info here) or build your own EDID.
In case you have an EDID file (e.g. extracted from Windows drivers for your monitor), create a dir
# mkdir /lib/firmware/edid
and then copy your binary into the
To load it at boot, specify the following in the kernel command line:
You can also specify it only for a specified connection:
For the four built-in resolutions, see table below for the name to specify:
|Resolution||Name to specify|
|1600x1200 (kernel 3.10 or higher)||edid/1600x1200.bin|
If you are doing early KMS, you must include the custom EDID file in the initramfs or you will run into problems.
video=command line may be useful in some scenarios
From the nouveau wiki:
A mode can be forced on the kernel command line. Unfortunately, the command line option video is poorly documented in the DRM case. Bit and pieces on how to use it can be found in
The format is:
- <conn>: Connector, e.g. DVI-I-1, see your kernel log.
- <xres> x <yres>: resolution
- M: compute a CVT mode?
- R: reduced blanking?
- -<bpp>: color depth
- @<refresh>: refresh rate
- i: interlaced (non-CVT mode)
- m: margins?
- e: output forced to on
- d: output forced to off
- D: digital output forced to on (e.g. DVI-I connector)
You can override the modes of several outputs using "video" several times, for instance, to force DVI to 1024x768 at 85 Hz and TV-out off:
You may want to disable KMS for various reasons, such as getting a blank screen or a "no signal" error from the display, when using the Catalyst driver, etc. To disable KMS, add
nomodeset as a kernel parameter. See Kernel parameters for more info.