NVIDIA TV Out (Solaris)

Solaris Express in any recent version will have out of the box NVidia support if you install the Developer Edition or the Community Release. This driver doesn’t differ (at least as far as I know) from the Linux device driver, so setting up secondary screens and tv-outs is quite the same. There even is a preinstalled tool “nvidia-settings” which might help you do the job, but it didn’t help me that much since you have to implement at least the second screen by hand in your X configuration file.
Before you begin, make a backup of your working /etc/X11/xorg.conf file.
We will now take a look at how this xorg.conf file has to be changed for TV-Out support.

  • Change the “Device” section that it looks like this:
    Section "Device"
        Identifier              "Videocard0"
        Driver                  "nvidia"
        # optional (find out with "$ Xorg -scanpci")
        BusID                  "[Your BusID, e.g.: PCI:2:0:0]"   
        Screen                0
    EndSection
    
  • Add a new “Device” section for the TV, just like the one before, but change “Screen 0” to “Screen 1” and “Videocard0” to “Videocard1”
  • Change the “Monitor” section as follows:
    Section "Monitor"
       Identifier        "Monitor0"
       HorizSync      30.0 - 100.0       #adjust to your monitor
       VertRefresh   50.0 - 94.0         #adjust to your monitor
       Option            "DPMS"
    EndSection
    
  • Add a new “Monitor” section for the TV, just like the one before, but change “Monitor0” to “Monitor1”
  • Now we configure the possible resolutions for CRT and TV

    You will have to adjust them to your liking. “Screen0” deals with the CRT, “Screen1” with the TV.

    
    Section "Screen"
        Identifier     "Screen0"
        Device         "Videocard0"
        Monitor        "Monitor0"
        DefaultDepth    24
        Option         "metamodes" "CRT: 1600x1200 +0+0; CRT: 1400x1050 +0+0; 
        CRT: 1280x1024 +0+0; CRT: 1024x768 +0+0; CRT: 800x600 +0+0; 
        CRT: 640x480 +0+0"
        SubSection     "Display"
            Depth       24
            Modes      "1600x1200" "1280x1024" "1024x768" "800x600" "640x480"
        EndSubSection
    EndSection
    
    Section "Screen"
        Identifier     "Screen1"
        Device         "Videocard1"
        Monitor        "Monitor1"
        DefaultDepth    24
        Option         "metamodes" "TV: 1024x768 +0+0"
        SubSection     "Display"
            Depth       24
            Modes      "1600x1200" "1280x1024" "1024x768" "800x600" "640x480"
        EndSubSection
    EndSection
    
  • Now you we are physically set up and can define a Serverlayout which defines how the monitors do correspond to each other.
    In this example the CRT will be the primary monitor whereas the TV can be reached by dragging the mouse cursor out the left side of your monitor.

    Section "ServerLayout"
        Identifier     "Layout0"
        Screen      0  "Screen0" 1024 0
        Screen      1  "Screen1" LeftOf "Screen0"
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Mouse0" "CorePointer"
    EndSection
    

Now we are all done. Save xorg.conf and restart your Xserver(in Solaris logging out and in again will do the job).
A working copy of my file as an example can be downloaded here.