There is a new config option - "device". After you insert the module, you see output such as (those lines are available with the command dmesg, or in the file /var/log/messages, depending on your syslog setup): svgalib_helper: Initializing, version 1.9.18 svgalib_helper: device1: vendor:1002 id:4c49 device1: region0, base=dd000000 len=16777216 type=0 device1: region1, base=0000d000 len=256 type=1 device1: region2, base=e4000000 len=4096 type=0 svgalib_helper: device2: vendor:12d2 id:0018 device2: region0, base=df000000 len=16777216 type=0 device2: region1, base=e0000000 len=16777216 type=8 svgalib_helper: device3: vendor:102b id:051a device3: region0, base=e1000000 len=16384 type=0 device3: region1, base=e2000000 len=8388608 type=8 device3: region2, base=e3000000 len=8388608 type=0 svgalib_helper: device4: vendor:102b id:0525 device4: region0, base=d8000000 len=33554432 type=8 device4: region1, base=da000000 len=16384 type=0 device4: region2, base=db000000 len=8388608 type=0 (Of course, the number of cards, and their types will be different). From which you can see which number each card is assigned. Then you create a different libvga.config for each card, which contains the device keyword. For example In my system I have /etc/vga/libvga.config.rage: novccontrol secondary device 1 BiosParams 3 29500 include /etc/vga/libvga.config.common mouse none HorizSync 30 38 VertRefresh 40 90 /etc/vga/libvga.config.nv3: helper /dev/svga_helper/2 novccontrol secondary include /etc/vga/libvga.config.common Modeline "6" 14.16 640 776 840 904 240 332 337 625 -hsync -vsync tvmode tvpal newmode 640 240 65536 1280 2 HorizSync 24 60 VertRefresh 55 75 /etc/vga/libvga.config.mystique: helper /dev/svga3 novccontrol secondary chipset g400 include /etc/vga/libvga.config.common Modeline "6" 14.16 640 776 840 904 240 332 337 625 -hsync -vsync tvmode tvpal newmode 640 240 65536 1280 2 HorizSync 30 37 VertRefresh 30 90 /etc/vga/libvga.config.mga: Device 4 OverRideEnable include /etc/vga/libvga.config.common HorizSync 30 115 VertRefresh 40 160 Some explanations: When the environment variable SVGALIB_CARD is set, svgalib opens the config file /etc/vga/libvga.config.$SVGALIB_CARD, instead of the usual /etc/vga/libvga.config. So, if I want to run zgv on the nv3 card, I do export SVGALIB_CARD=nv3 ; zgv The helper keyword can be used similar to the device keyword, to tell svgalib which device to open. All cards except for the primary need to use the secondary and novccontrol keywords. Secondary tells svgalib not to try to use the standard VGA ports when accessing this card (since only one card can be accessed with those, and that is the primary). NoVCControl tells svgalib not to check or try to control the VC, so you can run an svgalib program on a secondary card, while working normally on the main head, including switching virtual consoles. You should use "mouse none", or "mdev" options to make sure no two programs open the mouse at the same time. (Though it is possible with most mice, and can give some funny results). XFree86 likes to disable all PCI video cards that it does not use, whenever it is started, or switched to, so if you switch in and out of X on your main card, you need to patch your X server to prevent this behavior. If you only run X on the main card, and don't return to text mode, there is no need to patch X. There are no limitations on the primary card. As you can see, I currently use nvidia, mystique and rage (mach64) cards as secondaries. Also known to work are sis, r128 (including radeon), laguna, trident and s3 (trio and up) cards. The main issue with secondary cards is initializing them. If your BIOS initializes them, that's the best (I heard rumors of such BIOSes, but never something concrete). The next option is x86emu, this almost always works (on x86 systems). It also works on some other arches, if you use PC video cards. If even that fails, then C code is available to initialize some mach64 cards, and old matrox cards (before G100).