Two ways of connecting a projector to your Solaris laptop
By ashu on Apr 20, 2007
Having seen enough people struggling with $subject (sometimes in front of, gasp , live audience), i do know this is not such a slam-dunk topic as one may first assume. If you have researched this topic at all, you probably have heard widely different takes on this, ranging all the way from "No problem dude, just run Xorg instead of Xsun and you are good, what is the big deal?" to.. "This is simply not gonna work, stop wasting your time and just use Linux/Windows instead".
Here i will share with you what i have found the hard way.
What i have found is that yes, you do need Xorg and that some laptops are better at this then others. The newer Acer Ferraris which are popular with the Solaris crowd, tend to do better, the older Toshiba ones, not so much. So before you do anything, login as root on the text console (for those who haven't done this, this means choosing the Options drop-down menu from the kdm login screen and selecting "Command Line Login"), run kdmconfig and choose Xorg. Then run /usr/X11/bin/xorgcfg and let it create a xorg.conf for you. Test to see that the setup works for you even with just the laptop display before proceeding further.
From this point on, i have seen two ways to proceed.
The easy way, use the BIOS Luke
This method relies on the laptop BIOS to "clone" the LCD output on the external VGA port (where you would connect the projector). To use this method, reboot your laptop and press the BIOS menu key (typically ESC, F1, DEL or F2) to get into BIOS setup. There you should find a setting for keeping the external VGA port active. On my Toshiba Tecra, the BIOS setting is called "Power on Display" and it needs to have the value "LCD+Analog RGB" in order for it to work this way. YMMV.
But wait! You are not done yet! What you are most likely going to find is that the output is visible on both the monitor as well as the projector AS LONG AS THE DISPLAY IS IN TEXT MODE. The moment X starts up, the projector output vanishes, only the LCD monitor is active and you are back to square one.
WTF!, you exclaim? What is going on is that the X display driver is acting smart and is resetting the graphics card to a state which it likes and knows about. And since the default Xorg driver knows nothing about cloning the LCD output to the external VGA port, we get into this mess.
So, what we need is a Dumb Xorg Driver (yes i am aware of the irony of this) which would leave the graphics card alone and not mess with the settings BIOS configured it with. The solution: the "vesa" driver. This driver uses the graphics in only the most basic way. They don't come any dumber then this, but it is a life saver here. Just modify your Xorg config file (/etc/X11/xorg.conf) to use the vesa driver instead of whatever was choosen automatically by the xorgcfg program. This would be under the "Driver" section. For example, i have commented out the original entry ("nv") and changed Xorg to use the "vesa" driver, as shown below:
Restart X. And you should be in much better shape, now the projector as well as the LCD monitor have the same output. Should you find Xorg to be a bit too slow, the reason is that the "vesa" driver is pretty dumb. It does most of its work on the CPU and hardly uses the graphics card at all, so it is gonna be a bit slow. You can try reducing DefaultDepth parameter to 16 (it is typically 24). Yes, that is less colors, but you would hardly notice it unless you are doing something very graphics intensive.
DefaultDepth parameter can be found in the "Screen" section of your xorg.conf. If it is not there, just add it as so:
Sometimes, i have found that after you connect your laptop to the external projector, just restarting X is not sufficient and you have to reboot. I am not sure why that is... i suppose because the BIOS only detects and auto-configures the graphics card at boot time??
The hard way, Xorg TwinView configuration
Given the limitations of the Xorg "vesa" driver, and to just be macho, let us play a bit with the advanced configuration options of Xorg drivers to see how that pans out in this scenario. The thing to try is the so called TwinView configuration which is a way to deal with multiple screens with Xorg. It is useful, for example, when you are connecting multiple monitors to your graphics card which has multiple output ports (say: VGA and DVI). For the purpose of the discussion here though, we shall limit our discussion to just the scenario where a projector is being connected on the VGA port and we want the content on the projector and the LCD Screen to be the same.
Before we begin, i have found that as of Xorg7.1, the Xorg open source drivers don't support TwinView, so you would have to download properitery drivers from Nvidia's website. As we all are painfully aware, ati doesn't have a driver for Solaris. So if you have a ati card in your laptop, go ahead return it to whereever you bought it from and be sure to also log a complaint at the ati's driver web-site.
Once you have Nvidia's driver installed on the system (you may have to reboot once), update your xorg.conf file to start using it with TwinView. Here is what your xorg.conf device section should look like:
Option "NoLogo" "True" # Just to avoid having to look at it
Option "TwinView" "True"
Option "TwinViewOrientation" "Clone"
Now, restart X (by logging out of JDS and logging back in) and you should see the projector output come on. Reboot once if it doesn't. What i have found that this method works most of the time, but often times, the Size of the display gets confused between the LCD Monitor and the projector. Meaning either the laptop LCD monitor or the projector display would be of the right size, but not both. Removing any Modes lines from your xorg.conf helps. Just comment it out and let the driver pick the best one for you. The Modes line typically sits in the Display subsection of xorg.conf:
#Modes "1280x1024" "1024x768" # Let the driver pick the best mode
Restart X again and things should be better. Although, this is the part i have found to be the least reliable. Sometimes it would work just fine with one projector, but with another projector, the driver gets confused with the sizes of the monitor and projector and messes up one vs the other. Also, some latops work better then other (i suspect because they have better support for auto-detecting whatever is connected on the VGA port via EDID). YMMV.
There supposedly is another way by specifying a MetaModes parameter for the driver in xorg.conf. This allows one to tell the driver to use specific resolution modes on both ports. In theory, this sounds good, but i never could this to work right. Again, YMMV.
So which method should i actually use?
If you have access to the specific projector you would be using, try out various things i have mentioned here and see what works best. However, if you don't, go with the BIOS method. At worst, you may have to do one reboot of the laptop while connected to the projector (for it to be auto-detected and auto-configured), at best it may just work without any problems. If you do have to reboot, use the time to regale your audience with your wit!
This write up turned out to be a bit longer then i had intended it to be, but hopefully someone out there would find it useful.