retitle 229850 xserver-xfree86: [debconf] monitor selection methods need to be more careful about clobbering autodetected monitor sync ranges tag 229850 - moreinfo thanks On Sat, Apr 24, 2004 at 07:07:02PM -0400, Jay Berkenbilt wrote: > With this patch to xserver-xfree86.config [...] Thanks a lot for your comprehensive feedback. I agree that the config script logic needs another look in the monitor department, and I will give your patch very serious consideration. That is, I can't remember why I did things the way they are done presently, and that's bad. I either need to document why your patch is the wrong approach, or apply it. :) If you're curious, I am attaching the current work-in-progress rewrite of the config script. I've been working on this off and on for a week or so. If you'd like to play around it with it, that would be great, but you've more than done your part with your followups to date. Thank you very much! -- G. Branden Robinson | Kissing girls is a goodness. It is Debian GNU/Linux | a growing closer. It beats the branden@debian.org | hell out of card games. http://people.debian.org/~branden/ | -- Robert Heinlein
#!/bin/sh
# Debian xserver-xfree86 package configuration script
# Copyright 2000--2004 Branden Robinson.
# Licensed under the GNU General Public License, version 2. See the file
# /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
# $Id: xserver-xfree86.config.in 1188 2004-03-25 23:06:35Z branden $
set -e
# source debconf library
. /usr/share/debconf/confmodule
THIS_PACKAGE=xserver-xfree86
THIS_SCRIPT=config
#INCLUDE_SHELL_LIB#
CONFIG_DIR=/etc/X11
SERVER_SYMLINK="$CONFIG_DIR/X"
XF86CONFIG="$CONFIG_DIR/XF86Config-4"
CONFIG_AUX_DIR=/var/lib/xfree86
SERVER_SYMLINK_CHECKSUM="$CONFIG_AUX_DIR/${SERVER_SYMLINK##*/}.md5sum"
XF86CONFIG_CHECKSUM="$CONFIG_AUX_DIR/${XF86CONFIG##*/}.md5sum"
THIS_SERVER=/usr/bin/X11/XFree86
NCARDS=0
NSERVERS=0
NDRIVERS=0
MULTIHEAD=
# get machine architecture
ARCH=$(dpkg --print-installation-architecture)
discover_video () {
# wrapper for discover command that can distinguish Discover 1.x and 2.x
# Ugh, Discover 1.x didn't exit with nonzero status if given an unrecongized
# option!
DISCOVER_TEST=$(discover --version 2>/dev/null)
if expr "$DISCOVER_TEST" : 'discover 2.*' >/dev/null 2>&1; then
# Discover 2.x
# XXX: this is sort of nasty
VENDOR_MODEL_FILE=$(tempfile)
SERVER_FILE=$(tempfile)
DRIVER_FILE=$(tempfile)
CMD="discover --type-summary display"
run $CMD >$VENDOR_MODEL_FILE
CMD="discover --data-path=xfree86/server/name \
--data-version=${SOURCE_VERSION%-*} display"
run $CMD >$SERVER_FILE
CMD="discover --data-path=xfree86/server/device/driver \
--data-version=${SOURCE_VERSION%-*} display"
run $CMD >$DRIVER_FILE
DISCOVERED_VIDEO=$(paste $VENDOR_MODEL_FILE $SERVER_FILE $DRIVER_FILE)
rm -f $VENDOR_MODEL_FILE $SERVER_FILE $DRIVER_FILE
else
# must be Discover 1.x
DISCOVERED_VIDEO=$(run discover --disable=serial,parallel \
--format="%V %M\t%S\t%D\n" video 2>/dev/null)
fi
echo "$DISCOVERED_VIDEO"
}
validate_string_db_input () {
# Syntax: validate_string_db_input priority template
#
# validate string input; can't have doublequotes
# If $MAY_BE_NULL is a non-null value (e.g., "yes"), the string may be null.
if [ $# -ne 2 ]; then
internal_error "validate_string_db_input() called with wrong number of" \
"arguments: $*"
fi
PRIORITY=$1
TEMPLATE=$2
db_get "$TEMPLATE"
SAFE="$RET"
set +e
while :; do
db_input "$PRIORITY" "$TEMPLATE"
# is the question going to be asked?
if [ $? -eq 30 ]; then
break # no; bail out of validation loop
fi
db_go
db_get "$TEMPLATE"
if [ -n "$RET" ]; then
if ! expr "$RET" : '.*".*' >/dev/null 2>&1; then
break # valid input
else
ERROR=xserver-xfree86/config/doublequote_in_string_error
fi
else
if [ -n "$MAY_BE_NULL" ]; then
break # valid (null) input
else
ERROR=xserver-xfree86/config/null_string_error
fi
fi
# we only get to this point if the input was invalid; restore the known
# good value in case we are interrupted before the user provides a valid
# one
db_set "$TEMPLATE" "$SAFE"
db_fset "$TEMPLATE" seen false
# now show the user the error message
db_fset "$ERROR" seen false
db_input critical "$ERROR"
db_go
done
set -e
}
validate_numeric_db_input () {
# Syntax: validate_numeric_db_input priority template
#
# validate numeric input; must have only digits, can be null
if [ $# -ne 2 ]; then
internal_error "validate_numeric_db_input() called with wrong number of" \
"arguments: $*"
fi
PRIORITY=$1
TEMPLATE=$2
db_get "$TEMPLATE"
SAFE="$RET"
set +e
while :; do
db_input "$PRIORITY" "$TEMPLATE"
# is the question going to be asked?
if [ $? -eq 30 ]; then
break # no; bail out of validation loop
fi
db_go
db_get "$TEMPLATE"
if [ -z "$RET" ] || expr "$RET" : "[0-9]\+$" >/dev/null 2>&1; then
break # valid input
fi
# we only get to this point if the input was invalid; restore the known
# good value in case we are interrupted before the user provides a valid
# one
db_set "$TEMPLATE" "$SAFE"
db_fset "$TEMPLATE" seen false
# now show the user the error message
db_fset xserver-xfree86/config/nonnumeric_string_error seen false
db_input critical xserver-xfree86/config/nonnumeric_string_error
db_go
done
set -e
}
validate_bus_id_db_input () {
# Syntax: validate_bus_id_db_input priority template
#
# validate BusID input
if [ $# -ne 2 ]; then
internal_error "validate_bus_id_db_input() called with wrong number of" \
"arguments: $*"
fi
PRIORITY=$1
TEMPLATE=$2
db_get "$TEMPLATE"
SAFE="$RET"
set +e
while :; do
db_input "$PRIORITY" "$TEMPLATE"
# is the question going to be asked?
if [ $? -eq 30 ]; then
break # no; bail out of validation loop
fi
db_go
db_get "$TEMPLATE"
if [ -z "$RET" ] \
|| expr "$RET" : "[A-Z]\+:[0-9]\{1,3\}:[0-9]\{1,3\}:[0-9]\{1,3\}$" \
>/dev/null 2>&1; then
break # valid input
fi
# we only get to this point if the input was invalid; restore the known good
# value in case we are interrupted before the user provides a valid one
db_set "$TEMPLATE" "$SAFE"
db_fset "$TEMPLATE" seen false
# now show the user the error message
db_fset xserver-xfree86/config/device/bus_id_error seen false
db_input critical xserver-xfree86/config/device/bus_id_error
db_go
done
set -e
}
validate_monitor_frequency_db_input () {
# Syntax: validate_monitor_frequency_db_input priority template
#
# validate monitor frequency input
if [ $# -ne 2 ]; then
internal_error "validate_monitor_frequency_db_input() called with wrong" \
"number of arguments: $*"
fi
PRIORITY=$1
TEMPLATE=$2
db_get "$TEMPLATE"
SAFE="$RET"
set +e
while :; do
db_input "$PRIORITY" "$TEMPLATE"
# is the question going to be asked?
if [ $? -eq 30 ]; then
break # no; bail out of validation loop
fi
db_go
db_get "$TEMPLATE"
# string, needs input validation; a simple regex match will have to do;
# force first character to be a number to avoid hideous problems in the
# debconf dialog frontend in 0.3.83 (it needs to be one anyway)
if expr "$RET" : "^[0-9][-0-9,. ]\+$" >/dev/null 2>&1; then
break # valid input
fi
# we only get to this point if the input was invalid; restore the known
# good value in case we are interrupted before the user provides a
# valid one
db_set "$TEMPLATE" "$SAFE"
db_fset "$TEMPLATE" seen false
# now show the user the error message
db_fset xserver-xfree86/config/monitor/range_input_error seen false
db_input critical xserver-xfree86/config/monitor/range_input_error
db_go
done
set -e
}
auto_answer () {
# Syntax: auto_answer input_command priority template default_answer
#
# Used to auto-answer questions that don't have reasonable defaults. Some
# people insist on running the xserver-xfree86 config script with the
# non-interactive frontend. For this to work, the debconf database will need
# to be pre-loaded with answers to several questions. You have been
# warned...
if [ $# -ne 4 ]; then
internal_error "auto_answer() called with wrong number of arguments: $*"
fi
INPUT_COMMAND=$1
PRIORITY=$2
TEMPLATE=$3
DEFAULT_ANSWER=$4
set +e
observe "auto_answer() \"$INPUT_COMMAND $PRIORITY $TEMPLATE\" with default" \
"\"$DEFAULT_ANSWER\""
# are we re-configuring?
if [ -n "$RECONFIGURE" ]; then
# yes, we are reconfiguring
db_get "$TEMPLATE"
observe "auto_answer: (reconfiguring) preserving existing answer \"$RET\""
else
# not reconfiguring; has the question been seen before?
db_fget "$TEMPLATE" seen
if [ "$RET" = "true" ]; then
db_get "$TEMPLATE"
observe "auto_answer: (not reconfiguring) preserving existing answer" \
"\"$RET\""
else
observe "auto_answer: auto-answering with \"$DEFAULT_ANSWER\""
db_set $TEMPLATE "$DEFAULT_ANSWER"
fi
fi
"$INPUT_COMMAND" "$PRIORITY" "$TEMPLATE"
if [ $? -eq 30 ]; then
observe "auto_answer: $TEMPLATE is not being asked"
else
observe "auto_answer: asking $TEMPLATE"
fi
set -e
db_go
db_get "$TEMPLATE"
observe "auto_answer: $TEMPLATE is \"$RET\""
}
set_db_priority () {
# syntax: set_db_priority requested_priority
#
# Given a variable PRIORITY_CEILING and a "requested_priority" argument, set
# the PRIORITY environment variable to the lesser of the two.
# Implementation note: a clever version of this could be done using "eval", or
# embedding a Perl script, but those would be more difficult to maintain.
# Better just to go the simple and stupid route. Yes, I know this is not very
# efficient.
local priority_ceiling requested_priority
# Validate arguments.
if [ $# -ne 1 ]; then
warn "set_db_priority() called with empty or bogus arguments \"$*\";" \
"assuming argument of \"low\""
requested_priority=low
else
requested_priority="$1"
fi
# If PRIORITY_CEILING is null or unset, it's same as not having one at all;
# the sky's the limit. We use a locally scoped priority_ceiling variable
# because we don't want to affect the value of the global one.
if [ -n "$PRIORITY_CEILING" ]; then
priority_ceiling="$PRIORITY_CEILING"
else
priority_ceiling=critical
fi
# Ensure the value of PRIORITY_CEILING is reasonable.
if [ "$priority_ceiling" != "critical" ] \
&& [ "$priority_ceiling" != "high" ] \
&& [ "$priority_ceiling" != "medium" ] \
&& [ "$priority_ceiling" != "low" ]; then
warn "set_db_priority() called with bogus value of \$PRIORITY_CEILING" \
"\"$PRIORITY_CEILING\"; treating as \"critical\""
priority_ceiling=critical
fi
case "$requested_priority" in
critical)
# This is the highest priority, so there is nowhere to go but down.
PRIORITY="$priority_ceiling"
;;
high)
case "$priority_ceiling" in
critical)
PRIORITY="$requested_priority"
;;
high|medium|low)
PRIORITY="$priority_ceiling"
;;
esac
;;
medium)
case "$priority_ceiling" in
critical|high)
PRIORITY="$requested_priority"
;;
medium|low)
PRIORITY="$priority_ceiling"
;;
esac
;;
low)
# This is the lowest priority, so we can't go any lower.
PRIORITY="$requested_priority"
;;
*)
warn "set_db_priority() called with bogus argument" \
"\"$requested_priority\"; returning \"low\""
PRIORITY="low"
;;
esac
}
select_default_x_server () {
# Ask debconf questions that determine the destination of the default X server
# symbolic link.
local bailout
# If the symbolic link to the default X server is under manual control, do
# nothing. Perform tests to determine if this is the case.
# First, assume we're going to be configuring it.
bailout=
# Is the symbolic link really a symbolic link? If not, bail.
if [ -e "$SERVER_SYMLINK" ] && [ ! -L "$SERVER_SYMLINK" ]; then
# The symbolic link is not a symbolic link.
observe "$SERVER_SYMLINK exists but is not a symbolic link"
bailout=yes
else
# Does the symbolic link's checksum exist but not match the actual
# destination? If so, bail.
if [ -e "$SERVER_SYMLINK_CHECKSUM" ]; then
if [ "$(readlink "$SERVER_SYMLINK" | md5sum)" != \
"$(cat "$SERVER_SYMLINK_CHECKSUM")" ]; then
observe "$SERVER_SYMLINK link destination has been manually modified"
bailout=yes
fi
else
observe "no stored checksum available for $SERVER_SYMLINK"
bailout=yes
fi
fi
# Bail out now if we're supposed to.
if [ -n "$bailout" ]; then
return 1
fi
# If the X server symlink file already exists and points to an executable X
# server, it's not as important to ask questions related to it (these
# questions "have a reasonable default").
PRIORITY_CEILING=
if [ -e "$SERVER_SYMLINK" ]; then
if [ -x "$(readlink "$SERVER_SYMLINK")" ]; then
observe "X server symlink exists and points to executable X server;" \
"capping X server question priority at medium"
PRIORITY_CEILING=medium
fi
fi
# priority of shared/default-x-server
set_db_priority "high"
db_metaget shared/default-x-server owners
OWNERS="$RET"
db_metaget shared/default-x-server choices
CHOICES="$RET"
if [ "$OWNERS" != "$CHOICES" ]; then
observe "\$OWNERS does not equal \$CHOICES: \"$OWNERS\" != \"$CHOICES\""
db_subst shared/default-x-server choices $OWNERS
db_fset shared/default-x-server seen false
fi
if ! expr "$OWNERS" : ".*,.*" >/dev/null 2>&1; then
observe "\$OWNERS has only one value; shared/default-x-server will not be" \
"asked"
fi
# set a failsafe default answer for shared/default-x-server
DEFAULT="$THIS_PACKAGE"
# if configuring for the first time, ask if user wants to autodetect
if [ -z "$RECONFIGURE" ]; then
if which discover >/dev/null 2>&1; then
set_db_priority "medium"
auto_answer db_input "$PRIORITY" \
xserver-xfree86/autodetect_video_card "false"
db_get xserver-xfree86/autodetect_video_card
AUTODETECT_VIDEO_CARD="$RET"
if [ "$AUTODETECT_VIDEO_CARD" = "true" ]; then
if [ $NSERVERS -eq 0 ]; then
observe "could not autodetect X server: no video card detected, or" \
"no server known for it"
set_db_priority "high"
run db_input "$PRIORITY" shared/no_known_x-server
db_go
elif [ $NSERVERS -eq 1 ]; then
observe "autodetected X server: $SERVERS"
if [ "$SERVERS" = "${THIS_SERVER##*/}" ]; then
# the autodetected X server is the only one on the system, and the
# one we're currently configuring; it's unlikely the user will want
# to use something else
set_db_priority "low"
else
observe "X server autodetected, but does not correspond to this" \
"package"
# we do not set shared/default-x-server here, because the
# autodetected X server might not be getting installed
fi
elif [ $NSERVERS -gt 1 ]; then
observe "could not autodetect X server: multiple servers for video" \
"cards"
VIDEOCARD_SERVER_REPORT=$(echo "$DISCOVERED_VIDEO" \
| awk 'BEGIN { FS="\t"; printf " %-40s%20s\n .\n", "Detected Video Card", "Suggested X server" } { printf " %-50s%10s\n", $1, $2 } END { printf " .\n" }')
# can't do this until there is a way to embed newlines into debconf
# command streams :(
# db_subst shared/multiple_possible_x-servers detected_cards \
# "$VIDEOCARD_SERVER_REPORT"
observe "$VIDEOCARD_SERVER_REPORT"
set_db_priority "high"
run db_input "$PRIORITY" shared/multiple_possible_x-servers
db_go
fi
else
observe "user declined video card autodetection (server)"
fi
else
observe "could not autodetect X server: discover not found"
fi
else
observe "not prompting for video card autodetection; reconfiguring"
fi
# now the default-x-server question may be asked
db_fget shared/default-x-server seen
observe "seen flag of shared/default-x-server is $RET"
observe "db_input $PRIORITY shared/default-x-server"
auto_answer db_input $PRIORITY shared/default-x-server \
"$DEFAULT"
}
configure_xfree86_x_server () {
# Ask debconf questions that determine what XF86Config-4 will look like.
# TODO: This function should be broken up into several sub-functions, probably
# roughly mapping to the Section elements of the XF86Config-4 file. We could
# then construct a menu of available "functions", and give the user a lot more
# flexibility in configuring the XFree86 X server with debconf.
local bailout
# If the XF86Config-4 configuration file is under manual control, do nothing.
# Perform tests to determine if this is the case.
# First, assume we're going to be configuring it.
bailout=
# Does the configuration file exist?
if [ -e "$XF86CONFIG" ]; then
# If so, check for the existence of the checksum file; if it doesn't exist,
# the file is under manual control.
if [ -e "$XF86CONFIG_CHECKSUM" ]; then
# Compare the current and stored checksums; if they do not match, the
# file is under manual control.
if [ "$(md5sum "$XF86CONFIG")" != "$(cat "$XF86CONFIG_CHECKSUM")" ]; then
observe "$XF86CONFIG file has been customized"
bailout=yes
fi
else
observe "no stored checksum available for $XF86CONFIG"
bailout=yes
fi
fi
# Bail out now if we're supposed to.
if [ -n "$bailout" ]; then
return 1
fi
# if the XFree86 4.x X server configuration file already exists, it's not as
# important to ask questions related to it (these questions "have a reasonable
# default")
PRIORITY_CEILING=
if [ -e "$XF86CONFIG" ]; then
observe "$XF86CONFIG file exists; capping configuration question" \
"priority at medium"
PRIORITY_CEILING=medium
fi
# video driver selection
# priority of xserver-xfree86/config/device/driver
set_db_priority "high"
DRIVER_DIR=/usr/X11R6/lib/modules/drivers
# Build list of available video drivers, omitting the atimisc, r128, and
# radeon sub-modules (the ati driver knows when and how to load these).
# v4l is not a display driver, and dummy is for advanced users.
DRIVER_LIST="$(echo $(find "$DRIVER_DIR" -name '*_drv.o' 2>/dev/null \
| sed 's|^.*/\(.*\)_drv\.o|\1|' \
| egrep -v '(atimisc|dummy|r128|radeon|v4l)' | sort) \
| sed 's/ /, /g')"
if [ -z "$DRIVER_LIST" ]; then
observe "no video driver modules found in $DRIVER_DIR"
fi
# Set a hard-coded module list (if necessary) and default driver module on an
# architecture-specific basis.
case "$ARCH" in
alpha)
DRIVER_LIST=${DRIVER_LIST:=ati, cirrus, glint, mga, nv, rendition, s3, s3virge, savage, siliconmotion, tdfx, tga, vga}
DEFAULT_DRIVER=vga
;;
arm|hppa)
DRIVER_LIST=${DRIVER_LIST:=ati, chips, fbdev, glint, mga, nv, s3, s3virge, savage, sis, tdfx, trident, vga}
DEFAULT_DRIVER=fbdev
;;
hurd-i386)
DRIVER_LIST=${DRIVER_LIST:=apm, ark, ati, chips, cirrus, cyrix, fbdev, glint, i128, i740, i810, imstt, mga, neomagic, newport, nsc, nv, rendition, s3, s3virge, savage, siliconmotion, sis, tdfx, tga, trident, tseng, vesa, vga, vmware}
DEFAULT_DRIVER=vesa
;;
i386)
DRIVER_LIST=${DRIVER_LIST:=apm, ark, ati, chips, cirrus, cyrix, fbdev, glide, glint, i128, i740, i810, imstt, mga, neomagic, newport, nsc, nv, rendition, s3, s3virge, savage, siliconmotion, sis, tdfx, tga, trident, tseng, vesa, vga, vmware}
DEFAULT_DRIVER=vesa
;;
ia64)
DRIVER_LIST=${DRIVER_LIST:=apm, ark, ati, chips, cirrus, cyrix, fbdev, glint, i128, i740, i810, imstt, mga, neomagic, newport, nv, rendition, s3, s3virge, savage, siliconmotion, sis, tdfx, tga, trident, tseng, vesa, vga, vmware}
DEFAULT_DRIVER=fbdev
;;
m68k|powerpc)
DRIVER_LIST=${DRIVER_LIST:=ati, chips, fbdev, glint, imstt, mga, nv, s3, s3virge, savage, sis, tdfx, trident, vga}
DEFAULT_DRIVER=fbdev
;;
mips|mipsel)
DRIVER_LIST=${DRIVER_LIST:=ati, chips, fbdev, glint, mga, newport, nv, s3, s3virge, savage, sis, tdfx, trident}
DEFAULT_DRIVER=fbdev
;;
sparc)
DRIVER_LIST=${DRIVER_LIST:=apm, ark, ati, chips, cirrus, fbdev, glint, i128, i740, imstt, mga, neomagic, nv, rendition, s3virge, savage, siliconmotion, sunbw2, suncg14, suncg3, suncg6, sunffb, sunleo, suntcx, tdfx, trident, vesa, vga}
DEFAULT_DRIVER=fbdev
;;
*)
internal_error "no driver list known for architecture $ARCH"
;;
esac
observe "available video driver list set to \"$DRIVER_LIST\""
# attempt to autodetect
if which discover >/dev/null 2>&1; then
if [ "$AUTODETECT_VIDEO_CARD" = "true" ]; then
if [ $NDRIVERS -eq 0 ]; then
observe "could not autodetect X server driver: no video card" \
"detected, or no driver known for it"
elif [ $NDRIVERS -eq 1 ]; then
observe "autodetected X server driver: $DRIVERS"
set_db_priority "low"
DEFAULT_DRIVER="$DRIVERS"
elif [ $NDRIVERS -gt 1 ]; then
observe "could not autodetect X server driver: multiple drivers for" \
"video cards"
VIDEOCARD_DRIVER_REPORT=$(echo "$DISCOVERED_VIDEO" \
| awk 'BEGIN { FS="\t"; printf " %-30s%30s\n .\n", "Detected Video Card", "Suggested driver module" } { printf " %-50s%10s\n", $1, $3 } END { printf " .\n" }')
# can't do this until there is a way to embed newlines into debconf
# command streams :(
# db_subst shared/multiple_possible_x-drivers detected_cards \
# "$VIDEOCARD_DRIVER_REPORT"
observe "$VIDEOCARD_DRIVER_REPORT"
set_db_priority "high"
run db_input "$PRIORITY" xserver-xfree86/multiple_possible_x-drivers
db_go
fi
else
observe "user declined video card autodetection (driver)"
fi
else
observe "could not autodetect X server driver: discover not found"
fi
db_subst xserver-xfree86/config/device/driver choices "$DRIVER_LIST"
auto_answer db_input "$PRIORITY" \
xserver-xfree86/config/device/driver "$DEFAULT_DRIVER"
# card identifier; try to set a sensible default
DEFAULT=
if [ -n "$NDRIVERS" ] && [ -n "$NCARDS" ] && [ $NDRIVERS -eq 1 ] \
&& [ $NCARDS -eq 1 ]; then
if which discover >/dev/null 2>&1; then
if [ "$AUTODETECT_VIDEO_CARD" = "true" ]; then
DEFAULT=$(echo "$DISCOVERED_VIDEO" | cut -f1)
fi
fi
fi
if [ -z "$DEFAULT" ]; then
# fall back to some language-specific generic text
# TODO: make this a read-only debconf template
case "${LC_ALL:-${LC_MESSAGES:-$LANG}}" in
ca_*) DEFAULT="Targeta de v�o gen�ca" ;;
# da
de_*) DEFAULT="Standardgrafikkarte" ;;
es_*) DEFAULT="Tarjeta de v�o gen�ca" ;;
fr_*) DEFAULT="Carte vid�g�rique" ;;
gl_*) DEFAULT="Tarxeta de Video Xen�ca" ;;
it_*) DEFAULT="Scheda video generica" ;;
# ja
# nl
pt_BR) DEFAULT="Placa de V�o Gen�ca" ;;
# ru
# sv
*) DEFAULT="Generic Video Card" ;;
esac
fi
set_db_priority "low"
# this question requires input validation
MAY_BE_NULL= auto_answer validate_string_db_input "$PRIORITY" \
xserver-xfree86/config/device/identifier "$DEFAULT"
# BusID
set_db_priority "low"
DEFAULT=
if [ "$ARCH" = "powerpc" ] || [ "$MULTIHEAD" = "yes" ]; then
if [ "$ARCH" = "powerpc" ]; then
set_db_priority "medium"
fi
if [ "$MULTIHEAD" = "yes" ]; then
set_db_priority "high"
fi
if which lspci >/dev/null 2>&1; then
# try to guess the correct BusID
VIDEO_CARD=$(LC_ALL=C lspci -n | grep "Class 0300:" | head -n 1 \
| cut -d\ -f1)
if [ -n "$VIDEO_CARD" ]; then
# we now have an entry in "hex:hex.hex" format, need
# "PCI:decimal:decimal:decimal"
BUS=$(printf "%d" 0x$(echo $VIDEO_CARD | cut -d: -f1) )
DEVICE=$(printf "%d" 0x$(echo $VIDEO_CARD | cut -d: -f2 | cut -d. -f1) )
FUNCTION=$(printf "%d" 0x$(echo $VIDEO_CARD | cut -d. -f2) )
DEFAULT=PCI:$BUS:$DEVICE:$FUNCTION
fi
fi
fi
# this question requires input validation
if [ -n "$DEFAULT" ]; then
auto_answer validate_bus_id_db_input "$PRIORITY" \
xserver-xfree86/config/device/bus_id "$DEFAULT"
else
run validate_bus_id_db_input "$PRIORITY" \
xserver-xfree86/config/device/bus_id
fi
set_db_priority "low"
# this question requires input validation
run validate_numeric_db_input "$PRIORITY" \
xserver-xfree86/config/device/video_ram
# Use fbcon kernel interface?
set_db_priority "high"
case "$ARCH" in
alpha|hurd-i386|i386)
DEFAULT_USEFBDEV=false
;;
*)
DEFAULT_USEFBDEV=true
;;
esac
DEFAULT_USEFBDEV=
# XXX: is this a good test for /proc being mounted?
if [ -e /proc/self ]; then
if [ -e /proc/fb ]; then
FB_TYPE="$(grep '^0 ' /proc/fb | sed 's/[^[:space:]] //')"
observe "/proc/fb reports framebuffer type \"$FB_TYPE\""
# did we actually get back anything?
if [ -n "$FB_TYPE" ]; then
set_db_priority "medium"
case "$FB_TYPE" in
OFfb|VESA)
observe "this framebuffer type does not support UseFBDev"
DEFAULT_USEFBDEV=false
;;
*)
# other framebuffers do support UseFBDev
DEFAULT_USEFBDEV=true
;;
esac
fi
else
observe "/proc/fb does not exist; assuming fbcon not in use"
fi
else
observe "/proc not mounted; cannot determine if fbcon in use"
fi
# re-set the default answer to false if need be
run db_get xserver-xfree86/config/device/use_fbdev
if [ "$RET" = "true" ] && [ "$DEFAULT_USEFBDEV" = "false" ]; then
observe "xserver-xfree86/config/device/use_fbdev is \"true\" but" \
"/proc/fb does not exist, is empty, or reports a framebuffer" \
"type with which UseFBDev cannot be used; setting template to" \
"\"false\""
db_set xserver-xfree86/config/device/use_fbdev false
fi
auto_answer db_input "$PRIORITY" xserver-xfree86/config/device/use_fbdev \
"$DEFAULT_USEFBDEV"
# keyboard setup
# TODO: query of debian-installer's keyboard configuration debconf template
# goes here
# these questions require input validation
set_db_priority "medium"
if [ "$ARCH" = "sparc" ]; then
DEFAULT=sun
else
DEFAULT=xfree86
fi
MAY_BE_NULL= auto_answer validate_string_db_input \
"$PRIORITY" \
xserver-xfree86/config/inputdevice/keyboard/rules "$DEFAULT"
db_get xserver-xfree86/config/inputdevice/keyboard/rules
if [ "$RET" = "sun" ]; then
DEFAULT=type5
elif [ "$RET" = "xfree86" ]; then
if [ "$ARCH" = "powerpc" ]; then
DEFAULT=macintosh
# good old-fashioned BRAIN DAMAGE
if [ -e /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes ]; then
if [ "$(cat /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes)" \
= "0" ]; then
DEFAULT=macintosh_old
fi
fi
else
DEFAULT=pc104
fi
fi
MAY_BE_NULL= auto_answer validate_string_db_input \
"$PRIORITY" \
xserver-xfree86/config/inputdevice/keyboard/model "$DEFAULT"
MAY_BE_NULL= auto_answer validate_string_db_input \
"$PRIORITY" \
xserver-xfree86/config/inputdevice/keyboard/layout "us"
db_get xserver-xfree86/config/inputdevice/keyboard/layout
if [ "$RET" != "us" ]; then
set_db_priority "medium"
else
set_db_priority "low"
fi
MAY_BE_NULL=yes validate_string_db_input \
"$PRIORITY" \
xserver-xfree86/config/inputdevice/keyboard/variant
MAY_BE_NULL=yes validate_string_db_input \
"$PRIORITY" \
xserver-xfree86/config/inputdevice/keyboard/options
# mouse device detection
# priority of xserver-xfree86/config/inputdevice/mouse/{port,protocol}
set_db_priority "high"
AUTODETECTED_PORT=
AUTODETECTED_PROTOCOL=
# determine if we're using devfs
if [ -c /dev/.devfsd ]; then
USING_DEVFS=true
else
USING_DEVFS=
fi
if [ -n "$USING_DEVFS" ]; then
MOUSE_PORT_CHOICES="/dev/misc/psaux, /dev/tts/0, /dev/tts/1, /dev/tts/2, /dev/tts/3, /dev/input/mice, /dev/misc/atixl, /dev/gpmdata"
DEFAULT_PORT="/dev/misc/psaux"
else
MOUSE_PORT_CHOICES="/dev/psaux, /dev/ttyS0, /dev/ttyS1, /dev/ttyS2, /dev/ttyS3, /dev/input/mice, /dev/atibm, /dev/sunmouse, /dev/gpmdata"
DEFAULT_PORT="/dev/psaux"
fi
# if configuring for the first time, ask if user wants to autodetect
if [ -z "$RECONFIGURE" ]; then
while :; do
# bail out if autodetection tool not available
which mdetect >/dev/null 2>&1 || break
auto_answer db_input "$PRIORITY" \
xserver-xfree86/autodetect_mouse "false"
db_get xserver-xfree86/autodetect_mouse
if [ "$RET" = "true" ]; then
MDETECT_OUTPUT=$(run mdetect -x)
if [ -n "$MDETECT_OUTPUT" ]; then
if [ $(echo "$MDETECT_OUTPUT" | wc -l) -ne 2 ]; then
observe "bug in mdetect; did not return two lines of output"
break
fi
AUTODETECTED_PORT=$(echo "$MDETECT_OUTPUT" | head -n 1)
AUTODETECTED_PROTOCOL=$(echo "$MDETECT_OUTPUT" | tail -n 1)
observe "mdetect returned port \"$AUTODETECTED_PORT\"; protocol" \
"\"$AUTODETECTED_PROTOCOL\""
if [ -n "$AUTODETECTED_PORT" ]; then
# /dev/input/mouse* means we autodetected a USB pointer; we will
# store /dev/input/mice instead.
if expr "$AUTODETECTED_PORT" : "/dev/input/mouse.*" >/dev/null \
2>&1; then
AUTODETECTED_PORT="/dev/input/mice"
fi
else
observe "bug in mdetect: returned nothing for mouse port"
break
fi
if [ -z "$AUTODETECTED_PROTOCOL" ]; then
observe "bug in mdetect: returned nothing for mouse protocol"
break
fi
else
observe "mdetect returned no output; unable to autodetect mouse"
# permit user to retry, but set to false in the case question doesn't
# get asked (for noninteractive configuration)
db_set xserver-xfree86/autodetect_mouse "false"
fi
if [ -n "$AUTODETECTED_PORT" ] && [ -n "$AUTODETECTED_PROTOCOL" ]; then
set_db_priority "medium"
break # port and protocol determined
fi
else
observe "user declined mouse autodetection"
break # bail out; autodetection not desired
fi
done
else
observe "not prompting for mouse autodetection; reconfiguring"
fi
db_subst xserver-xfree86/config/inputdevice/mouse/port choices \
"$MOUSE_PORT_CHOICES"
auto_answer db_input "$PRIORITY" \
xserver-xfree86/config/inputdevice/mouse/port \
"${AUTODETECTED_PORT:-$DEFAULT_PORT}"
db_get xserver-xfree86/config/inputdevice/mouse/port
case "$RET" in
*psaux)
MOUSE_PROTOCOL_CHOICES="PS/2, ImPS/2, GlidePointPS/2, NetMousePS/2, NetScrollPS/2, ThinkingMousePS/2, MouseManPlusPS/2, ExplorerPS/2"
DEFAULT_PROTOCOL="PS/2"
;;
*ttyS*|*tts/*)
MOUSE_PROTOCOL_CHOICES="Auto, Microsoft, MouseSystems, GlidePoint, ThinkingMouse, MouseMan, Logitech, IntelliMouse, MMSeries, MMHitTab"
DEFAULT_PROTOCOL="Auto"
;;
*input/mice)
MOUSE_PROTOCOL_CHOICES="ImPS/2"
DEFAULT_PROTOCOL="ImPS/2"
;;
*atibm|*atixl|*sunmouse)
MOUSE_PROTOCOL_CHOICES="BusMouse"
DEFAULT_PROTOCOL="BusMouse"
;;
*gpmdata)
MOUSE_PROTOCOL_CHOICES="IntelliMouse"
DEFAULT_PROTOCOL="IntelliMouse"
;;
esac
db_subst xserver-xfree86/config/inputdevice/mouse/protocol choices \
"$MOUSE_PROTOCOL_CHOICES"
if ! expr "$MOUSE_PROTOCOL_CHOICES" : ".*,.*" >/dev/null 2>&1; then
observe "\$MOUSE_PROTOCOL_CHOICES has only one value; setting" \
"xserver-xfree86/config/inputdevice/mouse/protocol to" \
"\"$DEFAULT_PROTOCOL\""
db_set xserver-xfree86/config/inputdevice/mouse/protocol "$DEFAULT_PROTOCOL"
else
auto_answer db_input "$PRIORITY" \
xserver-xfree86/config/inputdevice/mouse/protocol \
"${AUTODETECTED_PROTOCOL:-$DEFAULT_PROTOCOL}"
fi
set_db_priority "low"
run db_input "$PRIORITY" \
xserver-xfree86/config/inputdevice/mouse/emulate3buttons
run db_input "$PRIORITY" \
xserver-xfree86/config/inputdevice/mouse/zaxismapping
db_go
# monitor setup
set_db_priority "high"
DEFAULT_HORIZ_SYNC="28-50"
DEFAULT_VERT_REFRESH="43-75"
db_fget xserver-xfree86/config/monitor/identifier seen
if [ "$RET" = "false" ]; then
observe "xserver-xfree86/config/monitor/identifier has not been seen"
fi
db_get xserver-xfree86/config/monitor/identifier
observe "xserver-xfree86/config/monitor/identifier is already set to \"$RET\""
# The horiz-sync and vert-refresh questions may have answers even though they
# haven't been seen; autodetection, pre-loading, and the simple and medium
# selection methods can fill them in.
db_fget xserver-xfree86/config/monitor/horiz-sync seen
if [ "$RET" = "false" ]; then
observe "xserver-xfree86/config/monitor/horiz-sync has not been seen"
fi
db_get xserver-xfree86/config/monitor/horiz-sync
observe "xserver-xfree86/config/monitor/horiz-sync is already set to \"$RET\""
db_fget xserver-xfree86/config/monitor/vert-refresh seen
if [ "$RET" = "false" ]; then
observe "xserver-xfree86/config/monitor/vert-refresh has not been seen"
fi
db_get xserver-xfree86/config/monitor/vert-refresh
observe "xserver-xfree86/config/monitor/vert-refresh is already set to" \
"\"$RET\""
# if configuring for the first time, ask if user wants to autodetect
if [ -z "$RECONFIGURE" ]; then
if which get-edid >/dev/null 2>&1; then
auto_answer db_input "$PRIORITY" \
xserver-xfree86/autodetect_monitor "false"
db_get xserver-xfree86/autodetect_monitor
if [ "$RET" = "true" ]; then
set +e
EDID_DUMP=$( (get-edid | parse-edid) 2>/dev/null)
set -e
if [ $? -eq 0 ]; then
# quite crude
MONITOR_IDENTIFIER=$(echo "$EDID_DUMP" | grep Identifier \
| cut -f2 -d\")
if [ -n "$MONITOR_IDENTIFIER" ]; then
observe "get-edid reports monitor identifier of" \
"\"$MONITOR_IDENTIFIER\""
DEFAULT_MONITOR_IDENTIFIER="$MONITOR_IDENTIFIER"
else
observe "got null monitor identifier from get-edid"
fi
# even cruder
HORIZ_SYNC=$(echo "$EDID_DUMP" | grep HorizSync | awk '{print $2}')
VERT_REFRESH=$(echo "$EDID_DUMP" | grep VertRefresh \
| awk '{print $2}')
# get-edid may succeed but be unable to return info anyway
if [ -n "$HORIZ_SYNC" ]; then
observe "get-edid reports horizonal sync of \"$HORIZ_SYNC\""
DEFAULT_HORIZ_SYNC="$HORIZ_SYNC"
else
observe "get-edid returned blank hsync"
fi
if [ -n "$VERT_REFRESH" ]; then
observe "get-edid reports vertical refresh of \"$VERT_REFRESH\""
DEFAULT_VERT_REFRESH="$VERT_REFRESH"
else
observe "get-edid returned blank vrefresh"
fi
else
observe "get-edid returned an error"
fi
else
observe "user declined monitor autodetection"
fi
else
observe "could not autodetect monitor frequencies; get-edid not found"
fi
else
observe "not prompting for monitor autodetection; reconfiguring"
fi
# priority of xserver-xfree86/config/monitor/identifier
set_db_priority "low"
# monitor identifier; try to set a sensible default
if [ -n "$DEFAULT_MONITOR_IDENTIFIER" ]; then
DEFAULT="$DEFAULT_MONITOR_IDENTIFIER"
else
# fall back to some language-specific generic text
# TODO: make this a read-only debconf template
case "${LC_ALL:-${LC_MESSAGES:-$LANG}}" in
ca_*) DEFAULT="Monitor gen�c" ;;
# da
de_*) DEFAULT="Standardbildschirm" ;;
es_*) DEFAULT="Monitor gen�co" ;;
# fr
# gl
it_*) DEFAULT="Monitor Generico" ;;
# ja
# nl
pt_BR) DEFAULT="Monitor Gen�co" ;;
# ru
# sv
*) DEFAULT="Generic Monitor" ;;
esac
fi
# this question requires input validation
MAY_BE_NULL= auto_answer validate_string_db_input \
"$PRIORITY" xserver-xfree86/config/monitor/identifier \
"$DEFAULT"
# priority of xserver-xfree86/config/monitor/selection-method
set_db_priority "medium"
if [ -n "$HORIZ_SYNC" ] && [ -n "$VERT_REFRESH" ]; then
observe "\$HORIZ_SYNC: \"$HORIZ_SYNC\" ; \$VERT_REFRESH:" \
"\"$VERT_REFRESH\"; setting question priority to low"
set_db_priority "low"
else
observe "at least of one of hsync \"$HORIZ_SYNC\" or vrefresh" \
"\"$VERT_REFRESH\" is null; not setting question priority to low"
fi
observe "monitor hsync and vrefresh question priority is $PRIORITY"
auto_answer db_input "$PRIORITY" \
xserver-xfree86/config/monitor/lcd "false"
db_get xserver-xfree86/config/monitor/lcd
observe "xserver-xfree86/config/monitor/lcd is $RET"
MONITOR_IS_LCD="$RET"
if [ "$RET" = "true" ]; then
db_subst xserver-xfree86/config/monitor/selection-method choices \
"Medium, Advanced"
else # not an LCD
db_subst xserver-xfree86/config/monitor/selection-method choices \
"Simple, Medium, Advanced"
fi
# Flat panels are more and more common, so set the default to medium.
db_subst xserver-xfree86/config/monitor/selection-method default "Medium"
run db_input "$PRIORITY" xserver-xfree86/config/monitor/selection-method
# priority of xserver-xfree86/config/monitor/{several things}
set_db_priority "high"
db_get xserver-xfree86/config/monitor/selection-method
case "$RET" in
Simple)
run db_input "$PRIORITY" \
xserver-xfree86/config/monitor/screen-size
db_go
db_get xserver-xfree86/config/monitor/screen-size
case "$RET" in
'Up to 14 inches (355 mm)')
db_set xserver-xfree86/config/monitor/horiz-sync "28-33"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
;;
'15 inches (380 mm)')
db_set xserver-xfree86/config/monitor/horiz-sync "28-50"
db_set xserver-xfree86/config/monitor/vert-refresh "43-75"
;;
'17 inches (430 mm)')
db_set xserver-xfree86/config/monitor/horiz-sync "30-70"
db_set xserver-xfree86/config/monitor/vert-refresh "50-160"
;;
'19-20 inches (480-510 mm)')
db_set xserver-xfree86/config/monitor/horiz-sync "30-100"
db_set xserver-xfree86/config/monitor/vert-refresh "50-160"
;;
'21 inches (530 mm) or more')
db_set xserver-xfree86/config/monitor/horiz-sync "30-130"
db_set xserver-xfree86/config/monitor/vert-refresh "50-160"
;;
esac
;;
Medium)
run db_input "$PRIORITY" \
xserver-xfree86/config/monitor/mode-list
db_go
db_get xserver-xfree86/config/monitor/mode-list
case "$RET" in
"640x480 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "28-33"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="640x480"
;;
"640x480 @ 72Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "28-38"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="640x480"
;;
"800x600 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "28-38"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="800x600"
;;
"800x600 @ 72Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "28-48"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="800x600"
;;
"800x600 @ 85Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-54"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="800x600"
;;
"1024x768 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "28-49"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="1024x768"
;;
"1024x768 @ 70Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-57"
db_set xserver-xfree86/config/monitor/vert-refresh "43-72"
DEFAULT_MODES="1024x768"
;;
"1024x768 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-60"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1024x768"
;;
"1152x864 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-68"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="1152x864"
;;
"1280x960 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-60"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1280x960"
;;
"1280x960 @ 85Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-92"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="1280x960"
;;
"1600x1200 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-75"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="1600x1200"
;;
"1600x1200 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-94"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1600x1200"
;;
"1600x1200 @ 85Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-107"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="1600x1200"
;;
"1792x1344 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-107"
db_set xserver-xfree86/config/monitor/vert-refresh "50-85"
DEFAULT_MODES="1792x1344"
;;
"1792x1344 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-84"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1792x1344"
;;
"1856x1392 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-87"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1856x1392"
;;
"1856x1392 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-113"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1856x1392"
;;
"1920x1440 @ 60Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-90"
db_set xserver-xfree86/config/monitor/vert-refresh "50-75"
DEFAULT_MODES="1920x1440"
;;
"1920x1440 @ 75Hz")
db_set xserver-xfree86/config/monitor/horiz-sync "30-130"
db_set xserver-xfree86/config/monitor/vert-refresh "60-160"
DEFAULT_MODES="1920x1440"
;;
esac
;;
Advanced)
auto_answer validate_monitor_frequency_db_input \
"$PRIORITY" \
xserver-xfree86/config/monitor/horiz-sync "28-50"
auto_answer validate_monitor_frequency_db_input \
"$PRIORITY" \
xserver-xfree86/config/monitor/vert-refresh "43-75"
;;
esac
# Configure available video modes. For certain drivers we will override any
# existing value of $DEFAULT_MODES, because they only support certain modes.
# Otherwise, the existing value of $DEFAULT_MODES is preserved.
db_get xserver-xfree86/config/device/driver
case "$RET" in
newport)
DEFAULT_DEPTH=8
DEFAULT_MODES="1280x1024"
;;
vga)
DEFAULT_DEPTH=4
DEFAULT_MODES="640x480"
;;
*)
DEFAULT_DEPTH=24
DEFAULT_MODES=${DEFAULT_MODES:="800x600, 640x480"}
;;
esac
observe "\"xserver-xfree86/config/device/driver\" is \"$RET\"; set default" \
"color depth to $DEFAULT_DEPTH and available video modes to" \
"\"$DEFAULT_MODES\""
set_db_priority "medium"
# list of desired display modes
auto_answer db_input "$PRIORITY" xserver-xfree86/config/display/modes \
"$DEFAULT_MODES"
# default display depth
auto_answer db_input "$PRIORITY" \
xserver-xfree86/config/display/default_depth "$DEFAULT_DEPTH"
# server modules to load
db_get xserver-xfree86/config/device/driver
set_db_priority "low"
db_input "$PRIORITY" xserver-xfree86/config/modules
db_go
# files and dri sections
run db_input "$PRIORITY" xserver-xfree86/config/write_files_section
run db_input "$PRIORITY" xserver-xfree86/config/write_dri_section
db_go
}
# analyze arguments; used by auto_answer()
if [ "$1" = "reconfigure" ] || [ -n "$2" ]; then
# if we are reconfiguring, or already have installed the package at least
# once before, we should not let auto_answer stomp on existing answers to
# debconf questions
observe "package being reconfigured"
RECONFIGURE=true
else
RECONFIGURE=
fi
# migrate from old select-type templates
for TEMPLATE in xserver-xfree86/config/inputdevice/mouse/emulate3buttons \
xserver-xfree86/config/inputdevice/mouse/zaxismapping; do
db_get "$TEMPLATE"
if [ "$RET" = "Yes" ]; then
observe "migrating template \"$TEMPLATE\" from \"Yes\" to \"true\""
db_set $TEMPLATE "true"
elif [ "$RET" = "No" ]; then
observe "migrating template \"$TEMPLATE\" from \"No\" to \"false\""
db_set $TEMPLATE "false"
fi
done
# migrate from "expert" to "advanced"
db_get xserver-xfree86/config/monitor/selection-method
if [ "$RET" = "Expert" ]; then
observe "migrating template" \
"\"xserver-xfree86/config/monitor/selection-method\" from" \
"\"Expert\" to \"Advanced\""
db_set xserver-xfree86/config/monitor/selection-method "Advanced"
fi
# migrate to XFree86 4.2 or later, where there are no pex or xie modules
db_get xserver-xfree86/config/modules
SELECTED_MODULES="$(echo $RET | awk 'BEGIN { RS=", "} {print $1}')"
# are the pex or xie modules selected?
if echo "$SELECTED_MODULES" | egrep -q "(pex|xie)"; then
observe "removing pex and xie modules from list of selected modules"
observe "old value of template \"xserver-xfree86/config/modules\": \"$RET\""
# get rid of them
SELECTED_MODULES=$(echo "$SELECTED_MODULES" | egrep -v "(pex|xie)")
SELECTED_MODULES=$(echo $SELECTED_MODULES | sed 's/ /, /g')
db_set xserver-xfree86/config/modules "$SELECTED_MODULES"
db_get xserver-xfree86/config/modules
observe "new value of template \"xserver-xfree86/config/modules\": \"$RET\""
fi
# migrate from ATI driver sub-modules to ATI driver
db_get xserver-xfree86/config/device/driver
case "$RET" in
atimisc|r128|radeon)
observe "migrating template \"xserver-xfree86/config/device/driver\" from" \
"\"$RET\" to \"ati\""
db_set xserver-xfree86/config/device/driver "ati"
;;
*)
;;
esac
# The only supported protocol (per Zephaniah Hull) for the GPM repeater is
# IntelliMouse; migrate anyone using that mouse device to that protocol. Other
# values used to work as well, but no longer do since the XFree86 mouse driver
# was rewritten for XFree86 4.3.0. See Debian bug #233933 for more details.
db_get xserver-xfree86/config/inputdevice/mouse/port
if [ "$RET" = "/dev/gpmdata" ]; then
db_get xserver-xfree86/config/inputdevice/mouse/protocol
if [ "$RET" != "IntelliMouse" ]; then
observe "migrating template" \
"\"xserver-xfree86/config/inputdevice/mouse/protocol\" from" \
"\"$RET\" to \"IntelliMouse\""
db_set xserver-xfree86/config/inputdevice/mouse/protocol "IntelliMouse"
fi
fi
# collect information about installed video card(s), if possible
if which discover >/dev/null 2>&1; then
DISCOVERED_VIDEO=$(discover_video)
if [ -n "$DISCOVERED_VIDEO" ]; then
NCARDS=$(echo "$DISCOVERED_VIDEO" | wc -l | tr -d '[:blank:]')
SERVERS=$(echo "$DISCOVERED_VIDEO" | cut -f2 | grep -v unknown | sort -u)
NSERVERS=$(echo "$SERVERS" | wc -l | tr -d '[:blank:]')
DRIVERS=$(echo "$DISCOVERED_VIDEO" | cut -f3 | grep -v unknown | sort -u)
NDRIVERS=$(echo "$DRIVERS" | wc -l | tr -d '[:blank:]')
if [ $NCARDS -gt 1 ]; then
MULTIHEAD=yes
fi
else
observe "discover reported nothing"
fi
else
observe "discover command not available"
fi
# select default X server
SKIP_XFREE86_X_SERVER_CONFIG=
if select_default_x_server; then
# is this the selected X server?
db_get shared/default-x-server
if [ "$RET" != "$THIS_PACKAGE" ]; then
# nothing else to do in this script
observe "skipping further configuration of $THIS_PACKAGE; it is not the" \
"default X server package"
SKIP_XFREE86_X_SERVER_CONFIG=yes
fi
else
if [ -n "$RECONFIGURE" ]; then
warn "not reconfiguring default X server; manual modifications have been" \
"made --- please see /usr/share/doc/xfree86-common/FAQ.gz"
else
observe "not configuring default X server; manual modifications have been" \
"made --- please see /usr/share/doc/xfree86-common/FAQ.gz"
fi
fi
# configure XFree86 X server
# Do not be tempted to move this into the "if select_default_x_server" block
# above; we want to permit the user to reconfigure the XF86Config-4 file even if
# the default X server is being handled manually.
if [ -z "$SKIP_XFREE86_X_SERVER_CONFIG" ]; then
if ! configure_xfree86_x_server; then
if [ -n "$RECONFIGURE" ]; then
warn "not reconfiguring XFree86 X server; manual modifications have" \
"been made --- please see /usr/share/doc/xfree86-common/FAQ.gz"
else
observe "not configuring XFree86 X server; manual modifications have" \
"been made --- please see /usr/share/doc/xfree86-common/FAQ.gz"
fi
fi
fi
exit 0
# vim:set ai et sts=2 sw=2 tw=80:
Attachment:
signature.asc
Description: Digital signature