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: