Provided by: libsvga1-dev_1.4.3-31_amd64 bug


       vga_init - initialize svgalib library


       #include <vga.h>

       int vga_init(void);


       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

       Svgalib  catches a bunch of signals that usually kill your program to restore textmode. If
       you catch signal's before calling vga_init() svgalib will 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.

       WARNING!  svgalib needs two signals for  it's  own  purposes  (that  is  managing  console
       switches).  To  avoid  problems  it uses the otherwise unused signals SIGUSR1 and SIGUSR2.
       However, this means that you cannot use them in your program by any means. They are  setup
       by vga_init() as 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 in Makefile.cfg 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).

       vga_init()  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

       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:

       security compat

       in the configuration file /etc/vga/libvga.conf will reinstate the old behaviour whereas

       security revoke-all-privs

       enables the (currently default) action.


       svgalib(7),   vga_setmode(3),   mouse_init(3),   vga_claimvideomemory(3),  vga_ext_set(3),
       vga_fillblt(3),   vga_getcurrentchipset(3),   vga_getdefaultmode(3),   vga_getgraphmem(3),
       vga_runinbackground(3),         vga_runinbackground_version(3),        vga_safety_fork(3),
       vga_setchipset(3), vga_setchipsetandfeatures(3), vgagl(7), libvga.config(5),


       This manual page was edited by Michael Weller  <>.  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 Hanemaayer

       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