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

Bug#344785: xserver-xorg: mode configuration question broken on fresh install



Package: xserver-xorg
Version: 6.8.2.dfsg.1-11
Severity: important
Tags: d-i, patch

I've been working on d-i's new first-stage package selection component.
If you aren't familiar with it, this is one of the last pieces in our
quest to get rid of base-config and do everything in a single-stage
install: it installs packages in the target system using the debconf
passthrough frontend, which allows the installer's cdebconf frontend to
be used to display questions. It took me a while to verify that this
wasn't a bug in this setup, but I mention this because it's possible
that you may not be able to reproduce the exact same effects of the bug
in a normal system.

The video mode question (xserver-xorg/config/display/modes) appears
quite badly corrupted, with blank lines in between each valid choice;
furthermore, no matter whether I select other modes, only 640x480 is
ever actually written to xorg.conf. I got a DEBCONF_DEBUG=developer
trace, and the relevant portion is:

  debconf (developer): starting /var/lib/dpkg/info/xserver-xorg.postinst configure
  [...]
  debconf (developer): <-- METAGET xserver-xorg/config/display/modes choices
  debconf (developer): --> 0
  debconf (developer): <-- SUBST xserver-xorg/config/display/modes choices 1920x1440,, 1920x1200,, 1856x1392,, 1792x1344,, 1680x1050,, 1600x1200,, 1440x900,, 1400x1050,, 1280x1024,, 1280x960,, 1280x854,, 1280x800,, 1280x768,, 1200x800,, 1152x864,, 1152x768,, 1024x768,, 800x600,, 640x480
  debconf (developer): --> 0

This corresponds to the following code in xserver-xorg.postinst:

  db_metaget xserver-xorg/config/display/modes choices
  if [ -n "$RET" ]; then
    DCRESOLUTIONS="$RET"
    DCRESOLUTIONS=$(echo $DCRESOLUTIONS | sed -e 's/, / /g')
  else
    DCRESOLUTIONS="1920x1440, 1920x1200, 1856x1392, 1792x1344, 1680x1050, 1600x1200, 1440x900, 1400x1050, 1280x1024, 1280x960, 1280x854, 1280x800, 1280x768, 1200x800, 1152x864, 1152x768, 1024x768, 800x600, 640x480"
  fi
  if [ -n "$RESOLUTIONS" ]; then
    DCRESOLUTIONS=$(for i in $DCRESOLUTIONS $RESOLUTIONS; do echo $i; done | sort -unr)
  fi
  # set the old choice + the probed ones (if any).
  DCRESOLUTIONS=$(echo $DCRESOLUTIONS | sed -e 's/ /, /g')
  db_subst xserver-xorg/config/display/modes choices "$DCRESOLUTIONS"

Note how the true branch of the first if makes sure that $DCRESOLUTIONS
doesn't contain commas between the choices, but the false branch
doesn't. This causes the doubled commas in the trace above, which in
turn confuses cdebconf into (a) displaying the blank lines I mentioned
earlier and (b) only considering 640x480 (the only choice without an
extra comma attached to it) as a valid choice.

The following patch should clear this up. Since this affects new
installations quite badly, could you please include this in your next
upload as soon as possible so that we can include it in d-i etch beta 2?

diff -ru xorg-x11-6.8.2.dfsg.1.orig/debian/xserver-xorg.postinst.in xorg-x11-6.8.2.dfsg.1/debian/xserver-xorg.postinst.in
--- xorg-x11-6.8.2.dfsg.1.orig/debian/xserver-xorg.postinst.in	2005-12-26 10:16:58.258819431 +0000
+++ xorg-x11-6.8.2.dfsg.1/debian/xserver-xorg.postinst.in	2005-12-26 10:14:50.000000000 +0000
@@ -392,10 +392,10 @@
   db_metaget xserver-xorg/config/display/modes choices
   if [ -n "$RET" ]; then
     DCRESOLUTIONS="$RET"
-    DCRESOLUTIONS=$(echo $DCRESOLUTIONS | sed -e 's/, / /g')
   else
     DCRESOLUTIONS=@DEFAULT_DCRESOLUTIONS@
   fi
+  DCRESOLUTIONS=$(echo $DCRESOLUTIONS | sed -e 's/, / /g')
   if [ -n "$RESOLUTIONS" ]; then
     DCRESOLUTIONS=$(for i in $DCRESOLUTIONS $RESOLUTIONS; do echo $i; done | sort -unr)
   fi

Thanks,

-- 
Colin Watson                                       [cjwatson@debian.org]



Reply to: