vga_init - initialize svgalib library
It detects the chipset and gives up supervisor rights. This is the recommended
first line of any program that uses svgalib. vga_setchipset
(3) can be
called before it to avoid detection.
Svgalib catches a bunch of signals that usually kill your program to restore
textmode. If you catch signal's before calling vga_init()
restore textmode and prepare for shutdown and then call your handler routine.
If you don't want this, catch the signal after
calling vga_init and do
not daisychain to svgalib's original handler.
svgalib needs two signals for it's own purposes (that is
managing console switches). To avoid problems it uses the otherwise unused
. However, this means that you cannot
use them in your program by any means. They are setup by vga_init()
everything else is.
Since version 1.2.11 vga_init()
includes code to hunt for a free virtual
console on its own in case you are not starting the program from one (but
instead over a network or modem login, from within 'screen' or an 'xterm').
Provided there is a free console, this succeeds if you are root or if the
svgalib calling user own the current console. This is to avoid people not
using the console being able to fiddle with it. On graceful exit the program
returns to the console from which it was started. Otherwise it remains in text
mode at the VC which svgalib allocated to allow you to see any error messages.
In any case, any I/O the svgalib makes in text mode (after calling vga_init)
will also take place at this new console.
Alas, some games misuse their suid root priviledge and run as full root process.
svgalib cannot detect this and allows Joe Blow User to open a new VC on the
console. If this annoys you ROOT_VC_SHORTCUT
allows you to disable allocating a new VC for root (except when he owns the
current console) when compiling svgalib. This is the default (disabling the
allocation for root).
returns a non-zero value in case of errors. As of this writing
it will return -1 if it is unable to allocate a graphical console. Otherwise,
0 is returned.
Svgalib versions prior to 1.2.11 had a security hole where it would be possible
to regain root priviledges even after a vga_init()
call. This is not
necessarily a problem, but if your program is vulnerable to buffer overflows
and other attacks, an attacker may exploit this.
However, prior to your call, your program will need to run setuid root, so you
should be very careful. The ioperm library by Olaf Titz will allow svgalib
programs to run not setuid root. However, it gives all programs unlimited
access to the hardware. Again, a malicious person can exploit this (albeit a
bit more difficult) too. Thus, in general, make your svgalib programs as
secure as any setuid root program.
Some programs may (accidently) rely on the old behaviour (which was probably due
to the author not knowing about saved uids (which might actually even not have
existed in Linux at that time)). A line:
in the configuration file /etc/vga/libvga.conf
will reinstate the old
enables the (currently default) action.
This manual page was edited by Michael Weller
<email@example.com>. The exact source of the referenced
function as well as of the original documentation is unknown.
It is very likely that both are at least to some extent are due to Harm
Occasionally this might be wrong. I hereby asked to be excused by the original
author and will happily accept any additions or corrections to this first
version of the svgalib manual.