In the configuration file, everything between a # and the end of the line is ignored. Empty lines are also ignored. Since the driver you will use may not know all config options here, unknown commands are silently ignored. Please think of that when something does not work as you expect. I know this is a nuisance because misformed configuration statements do not cause errors. Multiple commands are allowed in one line, and commands can exceed lines.
Actually, svgalib simply reads a list of whitespace separated tokens from the file until it finds one it knows and it then assumes the following tokens to be arguments of that command until one is encountered which may not be an argument.
New style options are in general case insensitive whereas the old style options are case sensitive. The old style options are included to allow for old config files still being used. For completeness they are documented in the OBSOLETE COMMANDS section. You should not use them anymore.
In addition, svgalib(7) parses the files ~/.svgalibrc and the file given in the environment variable SVGALIB_CONFIG_FILE.
Finally, the contents of the environment variable SVGALIB_CONFIG are parsed like the files before.
Configuration commands which control hardware settings that might cause harm to your hardware are called privileged. By default the privileged commands can only be used in the main configuration file /etc/vga/libvga.config for safety (s.t. a non root user can not cause any harm to your hardware by misconfiguring svgalib(7)).
Enable them in the other locations as well with the command overrideenable in the main config file. BEWARE! This allows every user to change the monitor and clocks (and other configs) and thus damaging the hardware. I strongly discourage the use of overrideenable except for debugging/testing purposes.
Generally you only need to use:
gpm allows for (hopefully) peaceful interaction with gpm, Spaceball enables support for the 6-axes Spacetec Spaceball mouse (well, probably more like a trackball), IntelliMouse and IMPS2 refer to the Microsoft IntelliMouse or Logitech MouseMan+, where IntelliMouse is for serial port and IMPS2 for such a mouse on the PS/2 port.
Note that it is not possible to specify the Microsoft IntelliMouse or Logitech MouseMan+ by a number. This is due to historical and compatibility reasons.
If given, svgalib ignores any mouse type the program specifies but uses the type configured with the mouse command.
For example, DOOM does not recognize MouseMan as a valid mouse type and defaults the mouse type to MouseSystems. This command allows to make svgalib ignore whatever DOOM specifies and use MouseMan anyway.
mdev /dev/ttyS0 # mouse is at /dev/ttyS0
Some multiprotocol mice use the state of RTS and DTR to find out which protocol to enable:
For example my mouse can emulate Microsoft and MouseSystems. It needs a low RTS to go into MouseSystems mode. Thus I use:
mouse MouseSystems clearRTS
Still I could just use mouse Microsoft and use the mouse with that protocol.. But then only 2 buttons instead of 3 are supported (not that I know many svgalib programs that uses more than 2 buttons.)
Other mice might need clearDTR as well or one set and clear. Try yourself.
Note: Having crtscts handshake enabled on the mouse tty may interfer with this options. Do not do that.
Finally, a special goodie for wheel mice:
The up and down scancodes are the scancodes of the keys to simulate when the wheel is turned up and down, respectively.
The following can be specified for the scancodes: letters (A-Z), numbers (0-9), function keys (F1-F12), or any of the following - ESCAPE, MINUS, EQUAL, BACKSPACE, TAB, BRACKET_LEFT, BRACKET_RIGHT, ENTER, LEFTCONTROL, SEMICOLON, APOSTROPHE, GRAVE, LEFTSHIFT, BACKSLASH, COMMA, PERIOD, SLASH, RIGHTSHIFT, KEYPADMULTIPLY, LEFTALT, SPACE, CAPSLOCK, NUMLOCK, SCROLLLOCK, KEYPAD7, CURSORUPLEFT, KEYPAD8, CURSORUP, KEYPAD9, CURSORUPRIGHT, KEYPADMINUS, KEYPAD4, CURSORLEFT, KEYPAD5, KEYPAD6, CURSORRIGHT, KEYPADPLUS, KEYPAD1, CURSORDOWNLEFT, KEYPAD2, CURSORDOWN, KEYPAD3, CURSORDOWNRIGHT, KEYPAD0, KEYPADPERIOD, KEYPADCENTER, RIGHTCONTROL, CONTROL, KEYPADDIVIDE, PRINTSCREEN, RIGHTALT, BREAK, BREAK_ALTERNATIVE, HOME, CURSORBLOCKUP, PAGEUP, CURSORBLOCKLEFT, CURSORBLOCKRIGHT, END, CURSORBLOCKDOWN, PAGEDOWN, INSERT.
Note that this option has no effect unless the IntelliMouse or IMPS2 mouse type is used (see above). Also note that the simulated keypresses are instantaneous, so they cannot be used for functions that require a key to be held down for a certain length of time.
This example simulates a press of the left bracket ([) when the wheel is turned up and a press of the right bracket (]) when the wheel is turned down (good for selecting items in Quake II):
mouse_fake_kbd_event BRACKET_LEFT BRACKET_RIGHT
Svgalib versions 1.3.0 and later use the following commands to control the logarithmic mouse acceleration:
Threshold has the same meaning as in normal mode. The one I use for *uaking... :)
It is calculated like this:
if (abs(dx) > 1) /* to prevent losing resolution */
dx = (abs(dx) >=
mouse_accel_thresh ) ?
It is calculated like this:
if (abs(dx) > 1)
dx = (abs(dx) >=
mouse_accel_thresh ) ?
(float)dx * abs(dx) *
The enhanced acceleration was done by 101 (Attila Lendvai) <email@example.com>
This is one I use in *uake: it turns around, looks down a bit and when the key is released it does the opposite, so it gets back to the starting state. With this one and the help of a rocket you can fly though the whole map :) (Scancode 28 is <Enter>):
kbd_fake_mouse_event 28 both deltax 8182
down deltay -1500
up deltay 1500
This one will switch off the y axis of the mouse while the key <Right Ctrl> is kept pressed.
kbd_fake_mouse_event 97 down deltay off
up deltay on
This one is the same as if you were pressing the left mouse button. (But if you move your mouse then the button state will reset even if you keep <Right Ctrl> down...)
kbd_fake_mouse_event 97 down button1 pressed
up button1 released
NOTE: This does only work when the keyboard is in raw keyboard mode!
Yet another feature brought to you by 101 (Attila Lendvai) <firstname.lastname@example.org>
This works regardless of ordinary or raw keyboard mode (albeit the hot key might be different from <Ctrl-C> in the first case).
Note that this is a very dangerous option. Disabling SIGINT will lock you in programs which can only by quit by <Ctrl-C>! However, there were request for it for Quake playing.
HorizSync 31.5 35.5
VertRefresh 50 70
monitor 0 # Max horizontal sync is 31.5 kHz
monitor 1 # Max horizontal sync is 35.1 kHz
monitor 2 # Max horizontal sync is 35.5 kHz
monitor 3 # Max horizontal sync is 37.9 kHz
monitor 4 # Max horizontal sync is 48.3 kHz
monitor 5 # Max horizontal sync is 56.0 kHz
monitor 6 # No restrictions.
For your convenience you may specify the max horizontal sync explicitly. The correct class will the be chosen. You may use floats consisting of digits and a decimal point for this too:
monitor 40.0 # equivalent to monitor 3
This command is privileged.
Everything should be on one line. The values for the horizontal timings must be multiples of eight.
These are prefered over the default timings (if monitor and chipset can handle them). The format is identical to the one used by XFree86, but the label following the modeline keyword is ignored by vgalib.
Here some examples:
modeline 640x480@100 43 640 664 824 848 480 483 490 504
modeline 800x600@73 50 800 856 976 1024 600 637 643 666
modeline 1024x768@75 85 1024 1048 1376 1400 768 771 780 806
IMPORTANT! Not all drivers, that is SVGA cards, use the values. Only drivers using timing.c. As of this writing, drivers using this feature are: Ark, Cirrus, Chips & Technologies, Et6000, S3.
The Mach32 driver provides a similar feature separately, you have to use the define command described below.
ET4000 (and to some extent EGA) allow one to use a binary file created by some utility. All other chipset driver use predefined timings that are hardcoded in register dumps within the drivers. See svgalib.et4000(7) for more information.
You can also specify a number in range 1 - 22 to specify the type-th chipset type or 0 to enforce autodetection.
Warning, incorrect settings may damage your hardware. This command is privileged.
chipset Mach32 0 2048
Note that always two integers have to be specified. Usually (Mach32) the second parameter is the memory amount. Look at the *_init function of the specific device driver sources or information on that type of cards in svgalib(7).
Note that there is a more convenient command setuplinear for enforcing specific memory-aperture configurations for Mach32
This command is privileged.
This command is privileged.
BEWARE! The Mach32 driver features an own ramdac command (which is usually not required). If you have a Mach32, see svgalib.mach32(7).
Some chipsets need a list of dot clocks for optimum operation. Some includes or supports a programmable clock chip. You'll need to specify them here.
Fixed clocks example: (The following is just an example, get the values for your card from you X setup)
Clocks 25.175 28.3 40 70 50 75 36 44.9 0 118 77 31.5 110 65 72 93.5
BEWARE! The Clocks command for the Mach32 features only integer clocks. Please round your clocks to the next integer data. The Mach32 only uses these values to check monitor requirements and to compare the quality of modes. The rounding errors are of no importance there as the difference in the resulting monitor timings is barely measurable. See the Mach32 section below.
The maxclock commands are privileged.
Note that the mach32 can divide clocks by 2. Thus there are actually 32 clocks And you can also use the divided clocks in a define command. On contrary to Xfree96 or the clocks command above only integers are allowed for Mach32. Simply round them to the nearest integer.
This line is mandatory for Mach32. If it is not there it will be auto detected and added at the beginning of the config file. The program will then exit and when you start it next, everything should be ok.
Common clock values for Mach32:
clocks 100 126 92 36 50 56 0 45
135 32 110 80 40 45 75 65
clocks 18 22 25 28 36 44 50 56
30 32 37 39 40 0 75 65
Please read svgalib.mach32(7) for additional info on clocks.
The clocks command is privileged.
This command enforces this default operation and adjusts xbytes appropriately, thus overriding the standard svgalib mode. This may yield to problems with ..umm.. not well designed applications.
To enforce the standard linelength for non-conforming modes use setlinelength below.
The linelength commands are not privileged.
In the following commands a mode is specified with horzXvertXcolors. Valid settings for colors in the mach32 driver are: 256, 32K, 64K, 16M, 16M4. 16M4 is for the 16M colors with 32bpp modes. These are expected to support slightly faster drawing.
Examples: 640x480x256, 1024x768x64K, etc...
inhibit 800x600x32K 800x600x64K 800x600x16M
disallows the maybe toasted mach32 800x600 modes.
The inhibit command is not privileged.
setlinelength 800 800x600x32K 800x600x64K 800x600x16M
sets the linelength, and thus xbytes, for the 800x600 modes to the equivalent of 800 pixels. For Mach32 this will give badly designed applications an 800x600 with which they can cope. However, the Mach32 will generate a noisy video signal in some configurations.
The setlinelength command is not privileged.
You may use :n to specify the n-thclock (n = 0 .. 31 for mach32).
horz_timing is four integers: hdisp h_sync_strt h_sync_wid h_total.
vert_timing has the same format but for vertical.
You may specify one or more flags out of: Interlace, +vsync, -vsync, +hsync, or -hsync to select interlace mode and polarity of sync signals. This format is almost the same Xfree uses, s.t. you may use their mode table and the modegen spreadsheet package for mode creation. You simple need to round the clock to the next integer, add the resolution instead of the timing name for Xfree and replace the modeline keyword with define. Here is a 1024x768x256 mode as example:
define 1024x768x256 80 1024 1024 1184 1312
768 768 772 791 +vsync -hsync
define 1024x768x256 1024x768x32K 1024x768x64K
:11 1024 1024 1184 1312 768 768 772 791
(yes any whitespace in a command is allowed, even a newline !)
Both commands define the same timings (if the 11-th clock is 80) but the first explicitly specifies the polarity of sync signals whereas the second declares that these timings are also to be used for a 32K and 64K mode.
The define command is privileged.
There is one really dangerous option (except faking clocks). Please use it only if you are sure what you are doing. Wrong setup will lead to multiple components accessing your bus at once and thus to probable hardware damage:
Please ensure that the address range from address to address + size (exclusively) is not used in your system. Obey that due to memory remapping for example 16MB Ram may exceed the 16MB address limit.
Valid Mach32 values for size are 1 and 4 (only 4 in PCI configurations), address + size have to be below 16MB for ISA, 4GB for multiplexed PCI, and 128MB else. Example: (my setup)
setuplinear 64 4
for a 4MB linear frame buffer at address 0x4000000.
It is also valid to specify setuplinear 0 0. This will actually disable/de-configure any linear frame buffer. Useful to disable mach32 aperture even if it is enabled in the EEPROM.
The setuplinear command is privileged.
Valid subcommands are bit, fill, image, and hlinelist. They enable support for the corresponding blit functions. Preceed them with no to turn them off (no space after no allowed). Use memimage to emulate the image blit using a linearframebuffer, which is usually much faster for Mach32. Use nomemimage to never use this emulation. On the Mach32 this emulation can be used in more resolutions than the actual imageblit accelerator function. Again order is vital! (esp. for the *image commands).
As the Mach32 now has also new style vga_accel(3) support there are now also the subcommands: settrans, setrop, fillbox, screencopy, drawline, putimage, drawhlinelist, putbitmap, screencopymono, setmode, polyline, polyhline, and polyfillmode. Which are also supported with a leading no. They allow to control support for the subfunctions of vga_accel(3). In addition, memimage emulation applies to putimage as well.
Mach32 default is:
blit bit fill image hlinelist settrans setrop
fillbox screencopy drawline putimage
drawhlinelist putbitmap screencopymono
setmode polyline polyhline polyfillmode
The blit command is not privileged.
The Mach32 has also a few intermediate debug options for low level timing adjust. They are:
There also options which are useful to support broken Mach32 cards or third party hardware based on Mach32 which does not follow the ATI specifications completely. For example:
For details about these options see svgalib.mach32(7). All of them are privileged.
The old svgalib versions actually allowed a new option character to follow a number immediately. The current parser requires white space after the numbers.
Of course, you should not use these cryptic forms anymore. The obsolete commands are:
C0 reenables auto detection of the chipset (default).
Finally this page was edited by Michael Weller <email@example.com>.