4. The fbset utility

The previous discussion focuses on changing the options by modifying the kernel boot parameters and rebooting. However, some of the video parameters can be changed on the fly without rebooting. You will need the fbset utility. The fbset utility, on its own, is already useful just as an informational tool on the status of the driver and the current video mode. Of course, you can also use it to change the settings of the current display. Although it has many options, I decided to keep only the most important ones settable by the user. The others are private to the driver and cannot be set even if the utility seems to have an option for it. Settable parameters are the display resolution and acceleration. See also the Linux Framebuffer site.

4.1. Informational

fbset

typing fbset alone will give you information on the video mode. Aside from the usual parameters such as resolution and color map, it will also give you information on the current timings. Note that if the 'use VESA GTF for Video Timings' option is enabled, the vertical refresh rate will always be maximized (hysnc parameter will be very near to hsync2)

fbset -x

will give you the mode timings in X modeline format. You can even use this utility as a modeline calculator which you can use in your XFree86 configuration file.

fbset -i

will give additional information on the 'low-level details' about the driver.

4.2. Setting Modes

fbset -xres value -yres value

you can change the display resolution of a particular virtual console on the fly. Note that the early versions of the driver always use a 4:3 aspect ratio, so the vertical resolution is dependent on the horizontal resolution. For versions that support Variable Display Aspect Ratios, and the 'NonStandard Video Timings' option is selected in the kernel, then yres must also be specified. If you enable the 'Nonstandard Video Timings' option, you can even set the resolution to something like 936x702. I sometimes use this with an old monitor because 1024x768 flickers a lot and 800x600 is too 'big'. The 'middle ground' is a good compromise of display resolution and refresh rate.

fbset -vyres value

if you change display resolution or color depths and the driver complains that you don't have enough memory, although you know that you do, then the virtual vertical resolution might be to big. Adjust the virtual resolution to a more acceptable number and try setting the mode again.

starting with v0.0.29, specifying vyres = 0 will use all of available memory as virtual memory.

fbset -accel true/false

I sometimes use this when the hardware engine just hanged on me :) I turn acceleration off and let the software do all the drawing. I also use this when benchmarking. Also, if your display is rotated, turning acceleration off will un-rotate the display.

fbset -rgba r,g,b,a

Use this if you want to change the color mapping. This is useful for 16-bit modes, since two formats are supported, RGB 5551 and RGB 565. To switch to RGB 5551, use 'fbset -rgba 5,5,5,1' and to RGB 565, use 'fbset -rgba 5,6,5'.

fbset -t <pixclock> <left margin> <right margin> <upper margin> <lower margin> <hsync length> <vsync length>

Beginning with i810fb-xxx-0.0.26, customized timings support has been add to the i810fb driver.  This will allow you to enter your own timings especially for display hardware that has strict timings requirement.  If your display does not work correctly with the Intel or VESA GTF, then this is your last option.  You have to generate your own timings which is not necessarily a piece of cake.  Then use this command or the other fbset options to adjust your video timings on the fly.  This is very similar to XFree86's xvidtune utility.  Check the fbset manual for more information.