Display resolution problem using VGA splitter

5,277

Solution 1

Here's how monitor autodetection works: Every monitor's firmware contains a chunk of data called EDID which encodes the monitor's resolutions and refresh rates and so on. The video driver makes a hardware call to retrieve this data, via the video card / monitor connection.

Splitters (like KVMs) manipulate the path from the card to the monitor. Some KVMs pass the EDID properly, others don't. My guess is that your splitter is not allowing the EDID to be passed back.

Indeed, I would guess that the system call has a built-in assumption that only one EDID chunk is present on a given connector, so even if it was returning something, it probably wouldn't be what you wanted.

Also, while all monitors return EDID, some TVs don't, or return a corrupted EDID. But since you tested it without the splitter and it worked correctly, I don't think this problem affects you.

Different monitors support different sets of resolutions and frequencies, but all monitors are required by the VESA Standard to support at least two: 640x480 and 800x600. So when X doesn't know anything about the monitor connected to it, it falls back to those two resolutions. That's why those are the only ones you see available.

Anyway, I think in this case you can't rely on EDID to get your monitors magically auto-configured. Instead, you'll need to manually specify the data yourself.

If you had specified your video driver or linked to your Xorg.0.log, I could give you more specific info. The procedure varies depending on what video driver you're using. If it is a KMS-enabled driver like -intel or -ati you have to specify it via the kernel. If you have KMS turned off or are using a non-KMS driver, but the driver supports RANDR (e.g. -fglrx), you can add a modeline using the xrandr command line tool such as documented at the bottom of https://wiki.ubuntu.com/X/Config/Resolution. If you are using a non-KMS, non-RANDR driver such as -nvidia, it is controlled entirely in your /etc/X11/xorg.conf; in this latter case you'll need to look up the vertical and horizontal refresh rates for all the monitors (hopefully they're all close to the same ranges, else you're screwed), and then specify those via the HorizSync and VertRefresh options in xorg.conf. You'll also need to add the resolution in the xorg.conf. Possibly you may need to construct a ModeLine as well, but I'll bet just the HorizSync and VertRefresh will be enough.

Good luck, and if you get stuck be sure to post your /var/log/Xorg.0.log.

Solution 2

It looks like X isn't able to correctly detect the resolution of the splitter.

You can force it to use arbitrary resolutions using xrand. There are some documentation on it, check the Adding undetected resolutions section and the Setting Xrand change persistent.

Share:
5,277

Related videos on Youtube

Toto
Author by

Toto

Updated on September 17, 2022

Comments

  • Toto
    Toto over 1 year

    Hardware

    I have the following hardware configuration:

    • PC running Ubuntu 10.04
    • Onboard video card with one VGA output (Intel P4M800 - Via Unichrome)
    • VGA splitter: 1 input, 4 outputs. Up to 2048x1536 (according to spec)
    • One 42'' TV/Monitor connected to the splitter via its VGA input
    • Two 32'' TV/Monitor connected to the splitter via its VGA input

    Problem

    With that configuration, Ubuntu only shows 640x480 and 800x800 as possible resolutions. However, if I connect any of the TV/Monitor directly to the PC (via VGA) then Ubuntu shows a long list of possible resolution (I tried several of them and they worked fine).

    It seems that X Window System automatic configuration is not working properly. How do I manually configure it? What info should knows of the different devices involved beforehand?


    Context: The monitors are intalled in public spaces across one building to display dynamic information that is processed in the PC (a Flash presentation running in Firefox in fullscreen mode).

    Update:

    I tried the following, as the link provided in the answers said:

    1. Get the modeline for the resolution using cvt

    2. Created the new mode using xrandr --newmode

    3. Added the mode to the output display using xrandr --addmode

    4. Tried to change the resolution using xrandr --output ... --mode ...

    But I get this: xrandr screen cannot be larger than 800x600 (desired size ...)

    • Javier Rivera
      Javier Rivera over 13 years
      What video card are you using?. Not all the drivers play nice with xrandr.
    • Toto
      Toto over 13 years
      @Javier, I've added the video card to the question
    • Javier Rivera
      Javier Rivera over 13 years
      openchrome... not good news :(.
    • Toto
      Toto over 13 years
      @Javier I didn't understand your last comment
    • Javier Rivera
      Javier Rivera over 13 years
      Openchrome drivers are not exactly the best, and I don't know a thing about them. I have only used one computer with Ubuntu and an OpenChrome card, I just put an old ATI on it after a couple of week to break free of the continuous problems. There is also very little documentation about it on the web.
  • Toto
    Toto over 13 years
    +1 @Bryce for the excellent explaination. See the update in the question as I tried using xrandr
  • Toto
    Toto over 13 years
    +1 @Javier for the great link, see the question update as I tried what the article says.
  • artfulrobot
    artfulrobot almost 12 years
    I cannot believe that while Ubuntu still requires people to "craft" a xorg.conf file there are no nice easy GUI tools to do it. It's such a faff and well beyond a non-technical user, yet essential for a workable experience of using ubuntu. #ubuntufail I got mine working with cvt, xrandr --newmode and xrandr --addmode but I know it's gonna fail at next reboot unless I spend the next 2 hours getting an xorg.conf file working.