[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gdm and xorg from testing...



Hello BERTRAND,

* BERTRAND Joël <joel.bertrand@systella.fr>, [2007-07-02 20:09 +0200]:
>  	Xorg works fine, but gdm cannot start. I can see in /var/log/syslog :
>  
>  Jul  2 15:22:08 fermat gdm[7287]: Xinerama active, but <= 0 screens?
>  Jul  2 15:22:09 fermat gdm[7286]: gdm_child_action : abandon de 
>  l'affichage :0
>  
>  	I don't understand this message. I don't use Xinerama. I have tried 
>  	to add a ServerFlas section in xorg.conf with Option "Xinerama" "false" 
>  without any success.

It seems that gdm doesn't check the values returned by
XineramaQueryScreens.

libgtk's approach in a similar situation is to assume there's no
Xinerama if the number of monitors returned by XineramaQueryScreen is
<= 0.

Please try the attached patch, works fine here.

ciao,
    ema
--- gdm-2.18.2.old/daemon/slave.c	2007-07-02 21:22:15.000000000 +0200
+++ gdm-2.18.2/daemon/slave.c	2007-07-02 21:25:49.000000000 +0200
@@ -979,30 +979,32 @@
 			XineramaQueryScreens (display->dsp,
 					      &screen_num);
 
+        if (xscreens) {
+            if G_UNLIKELY (screen_num <= 0)
+                gdm_fail ("Xinerama active, but <= 0 screens?");
+
+            if (screen_num <= gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN))
+                gdm_set_value_int (GDM_KEY_XINERAMA_SCREEN, 0);
+
+            xineramascreen = gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN);
+
+            display->screenx = xscreens[xineramascreen].x_org;
+            display->screeny = xscreens[xineramascreen].y_org;
+            display->screenwidth = xscreens[xineramascreen].width;
+            display->screenheight = xscreens[xineramascreen].height;
+
+            display->lrh_offsetx =
+                DisplayWidth (display->dsp,
+                          DefaultScreen (display->dsp))
+                - (display->screenx + display->screenwidth);
+            display->lrh_offsety =
+                DisplayHeight (display->dsp,
+                           DefaultScreen (display->dsp))
+                - (display->screeny + display->screenheight);
 
-		if G_UNLIKELY (screen_num <= 0)
-			gdm_fail ("Xinerama active, but <= 0 screens?");
-
-		if (screen_num <= gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN))
-			gdm_set_value_int (GDM_KEY_XINERAMA_SCREEN, 0);
-
-		xineramascreen = gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN);
-
-		display->screenx = xscreens[xineramascreen].x_org;
-		display->screeny = xscreens[xineramascreen].y_org;
-		display->screenwidth = xscreens[xineramascreen].width;
-		display->screenheight = xscreens[xineramascreen].height;
-
-		display->lrh_offsetx =
-			DisplayWidth (display->dsp,
-				      DefaultScreen (display->dsp))
-			- (display->screenx + display->screenwidth);
-		display->lrh_offsety =
-			DisplayHeight (display->dsp,
-				       DefaultScreen (display->dsp))
-			- (display->screeny + display->screenheight);
+            XFree (xscreens);
+        }
 
-		XFree (xscreens);
 	} else
 #elif HAVE_SOLARIS_XINERAMA
  /* This code from GDK, Copyright (C) 2002 Sun Microsystems */

Reply to: