Re: panorama for dual head displays: howto?

Paul Johnson <[email protected]> Thu, 03 Nov 2005 14:36:04 -0600
Newsgroups gmane.compw.window-managers.windowmaker.user
Message-ID <[email protected]>
Ah, thanks. That gave me the information I needed.

In the Twinview documents, it says that one must make sure xinerama is 
NOT running in order for Twinview to work. Furthermore, Twinview tries 
to give Xinerama style hints to window managers to let them access the 
background. Unfortunately, their docs say, some window managers are 
defective and misunderstand these signals.  That's why WindowMaker 
treats the 2 screens as separate things.

THe solution is an option "NoTwinViewXineramaInfo", as used in this 
example from xorg.conf.  After that, WindowMaker sees the entire 
background as a single screen.

Section "Device"
         Identifier  "Videocard0"
         Driver      "nvidia"
         VendorName  "Videocard vendor"
         BoardName   "NVIDIA GeForce FX (generic)"

         Option "TwinView" "true"
         Option "NoTwinViewXineramaInfo" "true"
         Option "SecondMonitorHorizSync"  "30.0-85.0"
         Option "SecondMonitorVertRefresh"  "50.0-160.0"
         Option "MetaModes" "1280x1024, 1280x1024; 1024x768, 1024x768"
         Option "TwinViewOrientation" "RightOf"
         Option "ConnectedMonitor" "CRT, CRT"
EndSection


I also have some ATI dual head machines in a lab with the same trouble, 
I'm going to have to look harder at their documentation to see how they 
deal with it.

pj


[email protected] wrote:
> 
> On Thu, 03 Nov 2005 11:00:21 -0600
> Paul Johnson <[email protected]> wrote:
> 
> 
>>Can somebody tell me where the WM source code for wmsetbg controls how 
>>backgrounds are shown on dual head displays?  I have an Nvidia dual 
>>video card and have been happy that WM shows the same image on both 
>>monitors.  That's different from Gnome's Nautilus/Metacity, which 
>>stretches one background across the two monitors. Nvidia does not use 
>>Xinerama. Rather, it has something they call Twinview which makes the 
>>dual head appear as one big 2056x1024 monitor.  But the WM backgrounds 
>>don't cooperate--the 2 monitors are still backgrounded separately.  But 
>>I can drag windows across the heads and the Gnome workspace pager thing 
>>does show the double wide monitors as single workspaces.
> 
> 
> actually the nvidia Twinview driver will reply to a xinerama query correctly
> if Xinerama is enabled in X as mentioned in the nvidia README
> twinview will work as you mentioned only when xinerama isn't enabled
> to disable wmsetbg's knowledge of Xinerama 
> 
> attached you'll find a patch which i believe works for disabling wmsetbgs default
> behavior when xinerama is enabled
> 
> Enjoy 
> 
>>Lately I've found some wide images and want to re-configure WM to 
>>stretch across dual monitors.  I feel sure this is possible because 
>>there was a brief time when WM did stretch the background across the 
>>dual displays.  It was about 2 years ago, I think.  I've been looking 
>>through the WM source code, but I can't find the right part.
>>
>>
>>-- 
>>Paul E. Johnson                       email: [email protected]
>>Dept. of Political Science            http://lark.cc.ku.edu/~pauljohn
>>1541 Lilac Lane, Rm 504
>>University of Kansas                  Office: (785) 864-9086
>>Lawrence, Kansas 66044-3177           FAX: (785) 864-5700
>>_______________________________________________
>>INFO: https://windowmaker.org/lists/listinfo/wm-user
>>ARCHIVE: https://windowmaker.org/lists/archive/wm-user/
>>FAQ: http://windowmaker.org/faq.html
>>
>>
>>------------------------------------------------------------------------
>>
>>--- wm-anon/util/wmsetbg.c	2005-11-03 14:05:04.000000000 -0500
>>+++ wmsetbg.c	2005-11-03 14:04:12.000000000 -0500
>>@@ -61,6 +61,7 @@
>> typedef struct {
>>     WMRect *screens;
>>     int count;                 /* screen count, 0 = inactive */
>>+    Bool ignoreXinerama;
>> } WXineramaInfo;
>> 
>> 
>>@@ -566,7 +567,7 @@
>>                 texture->height = scrHeight;
>> 
>> #ifdef XINERAMA
>>-                if (xineInfo.count) {
>>+                if (xineInfo.count && !xineInfo.ignoreXinerama) {
>>                     int i;
>>                     for (i=0; i<xineInfo.count; ++i) {
>>                         applyImage(rc, texture, image, type[0],
>>@@ -1294,6 +1295,9 @@
>>     P(" -c, --colors <cpc>		colors per channel to use");
>>     P(" -p, --parse <texture>		proplist style texture specification");
>>     P(" -w, --workspace <workspace>	update background for the specified workspace");
>>+#ifdef XINERAMA
>>+    P(" -i, --ignoreXinerama       ignore Xinerama head configuration");
>>+#endif
>>     P("     --version 			show version of wmsetbg and exit");
>>     P("     --help 			show this help and exit");
>> #undef P
>>@@ -1354,6 +1358,7 @@
>>     int update=0, cpc=4, render_mode=RDitheredRendering, obey_user=0;
>>     char *texture = NULL;
>>     int workspace = -1;
>>+    xineInfo.ignoreXinerama = False;
>> 
>>     signal(SIGINT, SIG_DFL);
>>     signal(SIGTERM, SIG_DFL);
>>@@ -1401,7 +1406,14 @@
>>         } else if (strcmp(argv[i], "-S")==0
>>                    || strcmp(argv[i], "--smooth")==0) {
>>             smooth = True;
>>-        } else if (strcmp(argv[i], "-u")==0
>>+        } 
>>+#ifdef XINERAMA
>>+	else if (strcmp(argv[i], "-i")==0
>>+                   || strcmp(argv[i], "--ignoreXinerama")==0) {
>>+            xineInfo.ignoreXinerama = True;
>>+	}
>>+#endif
>>+	else if (strcmp(argv[i], "-u")==0
>>                    || strcmp(argv[i], "--update-wmaker")==0) {
>>             update++;
>>         } else if (strcmp(argv[i], "-D")==0
>>
>>
>>------------------------------------------------------------------------
>>
>>_______________________________________________
>>INFO: https://windowmaker.org/lists/listinfo/wm-user
>>ARCHIVE: https://windowmaker.org/lists/archive/wm-user/
>>FAQ: http://windowmaker.org/faq.html


-- 
Paul E. Johnson                       email: [email protected]
Dept. of Political Science            http://lark.cc.ku.edu/~pauljohn
1541 Lilac Lane, Rm 504
University of Kansas                  Office: (785) 864-9086
Lawrence, Kansas 66044-3177           FAX: (785) 864-5700
_______________________________________________
INFO: https://windowmaker.org/lists/listinfo/wm-user
ARCHIVE: https://windowmaker.org/lists/archive/wm-user/
FAQ: http://windowmaker.org/faq.html