Just for those who might be interested, I have figured out how to get
bezel management support working for the TH2G and twinview on
Linux by monitoring the USB traffic between the Matrox setup tool and
the TH2G, and by defining special metamodes:
Preliminary Bezel Management Support for Linux
Bezel Management through TH2G
The Matrox TripleHead2Go allows to "bridge the gaps"
between displays, in order to avoid distortion.
This features is called "Bezel Management".
For details, please check the following web page:
However, Matrox supports this features only for Windows
and Mac. With some effort, it was possible to figure out
the parts of the USB protocol necessary to create preliminary
support for Linux.
- At the moment, only the 5040x1050 widescreen mode is supported.
Using th2gctrl for other modes will mix up the output! More monitoring
of the USB traffic is required for full support.
- th2gctrl currently need superuser right, so you need to use sudo
or set the suid bit. I'm pretty sure this could be avoided by creating an
appropriate udevd rule.
- The maximum number of supported TH2G boxes is currently
hard-coded to 32. This should be sufficient for most applications :-)
The source code for th2gctrl is attached to this posting
On Fedora, you may need to install the package "libusb-devel"
prior to compile th2gctrl. The name of this package my differ
for other Linux distributions
gcc -Wall -O2 -o th2gctrl th2gctrl.c -lusb
Here's an example on how to enable bezel support for two TH2Gs:
sudo ./th2gctrl -n 0 -l 72 -r 72
sudo ./th2gctrl -n 1 -l 72 -r 72
This will shift the output of the left and the right
displays by 72 pixel towards the center display.
Means: on the left and right display 72 pixel will
be hidden under the frames of the LCDs, so that
you will only see 1608 pixel instead of 1680 pixel
for an LCD with a resolutions of 1680x1050 pixel.
Please note that i got distortion when applying more
than 72 pixel. My assumption is that my Acer V223Wbd
LCDs don't like the timing generated by the TH2Gs
under this circumstances.
And this example shows how to disable it again:
sudo ./th2gctrl -n 0 -d
sudo ./th2gctrl -n 1 -d
So to make bezel management effective, you need to add
appropriate th2gctrl commands in some system startup
scripts. BTW.: the settings will persist even when
the PC is turned off but in standby mode. Only a full
power cycle (i.e. disconnect/re-connect the TH2G) will
cause a complete reset.
Here's the full list of command line options the th2gctrl:
Usage: th2gctrl [<options>]*
-n <num> device number (default=0)
-l <offset> left bezel offset (default=0)
-r <offset> right bezel offset (default=0)
-d bezel management disabled
Please note that applying the disable option "-d" will
override any provided left/right bezel offset settings.
Bezel Management trough Twinview/Metamodes
Even without any TH2Gs, you can archive bezel management
through special crafted twinview metamodes, so that
you can have bezel management with an nvidia twinview
setup with only two displays. However, this feature is mostly
useful when you have two TH2G boxes (each attached to a DVI
output of a single card) where you have two rows with three
displays, each: for the horizontal bezel management, you
need to use th2gctrl and for the vertical bezel management,
you need to use an appropriate metamode.
Attached to this posting, please find a sample xorg.conf
including a metamode for vertical twinview bezel support.
In this example, the LCD frames between the two LCDs display
rows corresponds to 136 pixel - so the lower 5040x1050 screen
is placed to vertical position 1186 rather then the default
1050. Means, the display is actually 5040x2236 pixel big
rather then 5040x2100, but the 136 pixel in the middle are
Propper window maximization for bezel support
Since a number of pixels are hidden under the LCDs frames,
you need to apply an appropriate "TwinViewXineramaInfoOverride"
option in your xorg.conf, or otherwise parts of a maximized
window will end up in a hidden area. In the attached xorg.conf,
the values for this options have been pre-calculated as
an example with the following assumptions: the display
setup consists of two LCDs rows with three displays, each
(2x 3x 1680x1050). Each LCD row is connected to a DVI output
of a video card through a TH2G (two TH2Gs altogether).
So for the left and right screens, you need to subtract 72
(1680-72=1608) and you need to displace the right screen by
72 (2x1680+72=3432). Also, all lower screens need to be
displaced by 136 pixel (1050+136=1186).
Feedback is highly appreciated!