VMWare and high resolution console (VESA)
October 11, 2005 10:10 amupdate 10.14.05:
(Thanks to Nikolas Britton from FreeBSD questions mailing list)
Your computer (VMware) doesn’t have a "proper" VESA BIOS and that is
why 800×600 raster text mode won’t work etc. FreeBSD 6 has this all
worked just put ‘allscreens_flags="MODE_279"’ in rc.conf for
1024×768… you can get a list of other modes supported by typing in
vidcontrol -i MODE (I think, can never remember :-)). if you want this
for FreeBSD 5.x then your going to have to manually patch your system,
but I have a simple script that will do it for you. somewhere around
here…… check for patch errors after you run the script.
————————————————–
cd /tmp
rm current-vesa_patch.tar.gz
fetch http://www.nbritton.org/uploads/current-vesa_patch.tar.gz
rm -r current-vesa_patch
tar -zxf current-vesa_patch.tar.gz
cd /usr/src/sys/dev/syscons
patch </tmp/current-vesa_patch/current-syscons.diff
cd /usr/src/usr.sbin/vidcontrol
cp /tmp/current-vesa_patch/current-vidcontrol.1 ./vidcontrol.1
cp /tmp/current-vesa_patch/current-vidcontrol.c ./vidcontrol.c
make && make install && make clean
—————————————————–
You still need to put in your kernel (both FreeBSD 5 and 6):
options VESA
options SC_PIXEL_MODE
and when you cvsup your src in FreeBSD 5 you will need to reapply the
patch, cvsup will overwrite the files becouse the cvs revision tags
don’t match up.
end update
The black magic of VMWARE and VESA:
I simply wanted a high resolution FreeBSD console PTYs running under VMWare. It was surprisingly more complex than I expected:
When attempting to change screen resolution for a console in FreeBSD running under VMWare, I ran across this error message:
> vidcontrol -g 100×37 VESA_800×600
vidcontrol: cannot set videomode inappropriate ioctl for device
It seemed to me that VMWare was unable to init VESA correctly in console but strangely enough Xorg is capable of changing to a higher resolution without any problems.
After some googling:
VESA driver in current source tree checks the NONVGA flag
of VESA information block when loading. If this flag is set
it will refuse to initialize. Most VESA adapters do not set
this flag, but the virtual display adapter in VMWare does.
As a result VESA cannot be used on VMWare.
in src/sys/i386/isa/vesa.c, there is a check for the flag V_NONVGA in line 655.
If you comment it out, flag check will be bypassed. After all, if Xorg can use higher resolution, there shouldn’t be a problem using VESA on the console!
Re-compiling my kernel to include the below as suggested by several more web searches:
options VESA
options SC_PIXEL_MODE
options VGA_WIDTH90
rebooting then:
> vidcontrol -g 100×37 VESA_800×600
vidcontrol: operation not supported by device
Arrrgghhhh! Any more tips for me?
FreeBSDRelated posts:


