1170
1065
rm -f $CONFIG_AUX_DIR/.migrateconfig
1173
if [ -n "$DEBUG_XORG_PACKAGE" ]; then
1174
XRESPROBE_DEBUG="yes"
1181
db_input $PRIORITY xserver-xorg/autodetect_monitor || debug_echo "db_get xserver-xorg/autodetect_monitor"
1183
db_get xserver-xorg/autodetect_monitor || debug_echo "db_get xserver-xorg/autodetect_monitor"
1184
# well, you'd better like the values you get, eh?
1185
if [ "$RET" = "true" ]; then
1186
AUTODETECT_VIDEO="yes"
1188
if [ -n "$AUTODETECT_VIDEO" ] && [ -z "$UPGRADE" ]; then
1194
# clear out all values
1195
for i in horiz-sync vert-refresh use_sync_ranges \
1196
selection-method screen-size; do
1197
db_reset xserver-xorg/config/monitor/$i
1201
db_reset xserver-xorg/config/display/$i
1203
# Support preseeding of this one even when autodetecting; will mean
1204
# people get the wrong default presented on second and subsequent
1205
# low-priority reconfigures, though. Too bad.
1206
for i in default_depth; do
1207
db_fget xserver-xorg/config/display/$i seen
1208
if [ "$RET" = false ]; then
1209
db_reset xserver-xorg/config/display/$i
1213
db_get xserver-xorg/config/device/driver || debug_echo "db_get xserver-xorg/config/device/driver"
1214
DEVICE_DRIVER="$RET"
1215
db_get xserver-xorg/config/device/identifier || debug_echo "db_get xserver-xorg/config/device/driver"
1216
DEVICE_IDENTIFIER="$RET"
1218
if which fbset >/dev/null 2>&1; then
1219
if [ "$DEVICE_DRIVER" = "fbdev" ] && [ "$ARCH" = "hppa" ] && [ -r /dev/fb0 ]; then
1220
HPPAFBOUT="$(fbset)"
1221
HPPARES="$(echo "$HPPAFBOUT" | grep ^mode | sed -e 's/^mode "//g' -e 's/"//g')"
1222
HPPADEPTH="$(echo "$HPPAFBOUT" | grep ^[[:space:]]*geometry | awk '{print $NF}')"
1223
PROBE_DUMP="$(echo -e "res: $HPPARES\ndepth: $HPPADEPTH")"
1227
# first install, we attempt a probe
1228
if which xresprobe >/dev/null 2>&1; then
1230
PROBE_DUMP="$(xresprobe "$DEVICE_DRIVER")"
1235
RESOLUTIONS="$(echo "$PROBE_DUMP" | grep "^res:" | sed -e 's/^res: //g')"
1236
HORIZ_SYNC="$(echo "$PROBE_DUMP" | grep "^freq:" | sed -e 's/^freq: //g' | cut -d " " -f 1)"
1237
VERT_REFRESH="$(echo "$PROBE_DUMP" | grep "^freq:" | sed -e 's/^freq: //g' | cut -d " " -f 2)"
1238
DISPLAY_TYPE="$(echo "$PROBE_DUMP" | grep "^disptype:" | sed -e 's/^disptype: //g')"
1239
DISPLAY_DEPTH="$(echo "$PROBE_DUMP" | grep "^depth:" | sed -e 's/^depth: //g')"
1241
if [ -n "$XORG_SYNC_RANGES" ]; then
1242
debug_echo "writing sync ranges due to XORG_SYNC_RANGES"
1243
MONITOR_SYNC_RANGES="yes"
1246
# nv, savage, trident and via will take the panel resolution from a BIOS table,
1247
# but then fail to infer sane sync ranges from these, so mode validation will
1248
# fail when it uses the standard VGA sync ranges. hack around this by producing
1249
# a sane sync range for the resolution in the config file when they're almost
1250
# certain to be using LVDS.
1251
if [ "$DEVICE_DRIVER" = "nv" ] || [ "$DEVICE_DRIVER" = "savage" ] || \
1252
[ "$DEVICE_DRIVER" = "trident" ] || [ "$DEVICE_DRIVER" = "via" ] || \
1253
[ "$DEVICE_DRIVER" = "siliconmotion" ] || \
1254
[ "$DEVICE_DRIVER" = "chips" ] || [ "$DEVICE_DRIVER" = "tdfx" ] || \
1255
[ "$DEVICE_DRIVER" = "neomagic" ]; then
1256
if [ "$DISPLAY_TYPE" = "lcd/lvds" ]; then
1257
debug_echo "known-bad laptop chipset detected; writing sync ranges"
1258
MONITOR_SYNC_RANGES="yes"
1262
if [ "$DEVICE_DRIVER" = "s3" ]; then
1263
debug_echo "known-bad chipset detected; writing sync ranges"
1264
MONITOR_SYNC_RANGES="yes"
1267
if [ "$DEVICE_DRIVER" = "ati" ]; then
1268
# r128 is in the same 'special' list, AFAICT.
1269
if [ "$DISPLAY_TYPE" = "lcd/lvds" ]; then
1270
if [ "$DEVICE_IDENTIFIER" = "ATI Technologies Inc Rage Mobility M3 (AGP)" ] || \
1271
[ "$DEVICE_IDENTIFIER" = "ATI Technologies Inc Rage Mobility M4 (AGP)" ] || \
1272
echo "$DEVICE_IDENTIFIER" | grep -q "Rage 128"; then
1273
MONITOR_SYNC_RANGES="yes"
1274
debug_echo "r128 laptop chipset detected; writing sync ranges"
1277
# ddc via i2c on ati/powerpc seems to be too flaky to be relied upon
1278
if [ "$ARCHITECTURE" = "powerpc" ]; then
1279
MONITOR_SYNC_RANGES="yes"
1280
debug_echo "ati chipset on powerpc detected; writing sync ranges"
1285
if [ "$DEVICE_DRIVER" = "i810" ]; then
1286
# and i810, but *not* i830
1287
if [ "$DISPLAY_TYPE" = "lcd/lvds" ]; then
1288
if [ "$DEVICE_IDENTIFIER" = "Intel Corporation 82810 CGC [Chipset Graphics Controller]" ] || \
1289
[ "$DEVICE_IDENTIFIER" = "Intel Corporation 82810 DC-100 CGC [Chipset Graphics Controller]" ] || \
1290
[ "$DEVICE_IDENTIFIER" = "Intel Corporation 82810E DC-133 CGC [Chipset Graphics Controller]" ] || \
1291
[ "$DEVICE_IDENTIFIER" = "Intel Corporation 82815 CGC [Chipset Graphics Controller]" ]; then
1292
MONITOR_SYNC_RANGES="yes"
1293
debug_echo "i810 laptop chipset detected; writing sync ranges"
1298
# reconfiguring. debconf should have sane defaults
1299
db_get xserver-xorg/config/display/modes || debug_echo "db_get xserver-xorg/config/display/modes"
1300
RESOLUTIONS=$(echo "$RET" | sed -e 's/,//g')
1301
db_get xserver-xorg/config/monitor/horiz-sync || debug_echo "db_get xserver-xorg/config/monitor/horiz-sync"
1303
db_get xserver-xorg/config/monitor/vert-refresh || debug_echo "db_get xserver-xorg/config/monitor/vert-refresh"
1305
db_get xserver-xorg/config/monitor/use_sync_ranges || debug_echo "db_get xserver-xorg/config/monitor/use_sync_ranges"
1306
if [ "$RET" = "true" ]; then
1307
MONITOR_SYNC_RANGES="yes"
1308
debug_echo "preserving sync ranges from debconf"
1314
# we need to know if we probed resolutions, if so add them to debconf template
1315
# as choices, so that we don't lose them across updates or reconfiguration.
1317
if [ -n "$AUTODETECT_VIDEO" ]; then
1319
for i in $RESOLUTIONS; do
1320
NRES="$(expr $NRES + 1)"
1323
if [ "$NRES" -gt "0" ]; then
1324
# got RESOLUTIONS. Lower question priority
1326
DCRESOLUTIONS="$(for i in $DCRESOLUTIONS $RESOLUTIONS; do echo $i; done | sort -t x -k1,1nr -k2,2nr -u)"
1327
DCRESOLUTIONS="$(echo $DCRESOLUTIONS | sed -e 's/ /, /g')"
1330
# if we're not running an internal panel and we don't have a list of sync
1331
# ranges, X isn't going to be able to figure it out; give it a hand
1332
if [ -z "$UPGRADE" ]; then
1333
if ! [ "$DISPLAY_TYPE" = "lcd/lvds" ]; then
1334
if [ -z "$HORIZ_SYNC" ] || [ -z "$VERT_REFRESH" ]; then
1335
# the actual default sync ranges are calculated further down
1336
MONITOR_SYNC_RANGES="yes"
1337
debug_echo "no sync ranges available from DDC; writing own ranges"
1343
if [ -n "$UPGRADE" ]; then
1344
# drop priority on upgrades
1348
db_metaget xserver-xorg/config/display/modes choices
1349
DEFRESOLUTIONS="$(echo @DEFAULT_DCRESOLUTIONS@ | sed -e 's/, / /g')"
1350
if [ -n "$RET" ]; then
1351
DCRESOLUTIONS="$RET"
1352
DCRESOLUTIONS="$(echo $DCRESOLUTIONS | sed -e 's/, / /g')"
1354
DCRESOLUTIONS=$DEFRESOLUTIONS
1356
if [ -n "$RESOLUTIONS" ]; then
1357
DCRESOLUTIONS="$(for i in $DCRESOLUTIONS $DEFRESOLUTIONS $RESOLUTIONS; do echo $i; done | sort -t x -k1,1nr -k2,2nr -u)"
1359
# set the old choice + the probed ones (if any).
1360
DCRESOLUTIONS="$(echo $DCRESOLUTIONS | sed -e 's/ /, /g')"
1361
db_subst xserver-xorg/config/display/modes choices "$DCRESOLUTIONS"
1362
if [ -n "$RESOLUTIONS" ]; then
1363
RESOLUTIONS="$(echo $RESOLUTIONS | sed -e 's/ /, /g')"
1364
db_set xserver-xorg/config/display/modes "$RESOLUTIONS"
1366
db_input $PRIORITY xserver-xorg/config/display/modes || debug_echo "db_input $PRIORITY xserver-xorg/config/display/modes"
1369
db_subst xserver-xorg/config/monitor/selection-method choices "Simple, Medium, Advanced"
1370
db_subst xserver-xorg/config/monitor/selection-method default "Medium"
1372
if [ -n "$AUTODETECT_VIDEO" ]; then
1373
if [ -n "$HORIZ_SYNC" ] && [ -n "$VERT_REFRESH" ]; then
1374
# monitor frequencies detected, we set them as defaults and we switch to Advanced mode.
1375
# there is no need to get crazy feeding "Medium"
1376
db_set xserver-xorg/config/monitor/horiz-sync "$HORIZ_SYNC"
1377
db_set xserver-xorg/config/monitor/vert-refresh "$VERT_REFRESH"
1378
db_set xserver-xorg/config/monitor/selection-method "Advanced"
1380
# if we are here we did not detect the frequencies, but we have the resolution.
1381
# get the highest resolution.
1382
db_get xserver-xorg/config/display/modes || debug_echo "db_get xserver-xorg/config/display/modes"
1383
if [ -n "$RET" ]; then
1384
# Only do this if the user selects at least one mode to write to the
1385
# conf file. If not, then the section won't be written by dexconf
1386
# and the server will pick the highest mode it can figure out
1387
MAXRES="$(echo $RET | sed -e 's/,//g')"
1388
MAXRES="$(for i in $MAXRES; do echo $i; done | sort -t x -k1,1nr -k2,2nr -u | head -n 1)"
1389
# set a sane default for mode-list
1390
MAXRES="$MAXRES @ 60Hz"
1391
db_set xserver-xorg/config/monitor/mode-list "$MAXRES"
1392
# apparently all the known resolution/horiz-sync combinantion have a ratio that
1393
# can go from 19 to 21. Only one exception was 18. We can safely assume a ratio of 20
1394
# for default setup. DDC should do the rest.
1395
HMAX=$(echo "$MAXRES" | cut -d "x" -f 1)
1396
HMAX=$(expr "$HMAX" / 20)
1397
# set sane defaults as fallback, in case there is no mode-list match otherwise we
1398
# prefer a well known match.
1399
HORIZ_SYNC="28-$HMAX"
1400
VERT_REFRESH="43-60"
1401
db_set xserver-xorg/config/monitor/horiz-sync "$HORIZ_SYNC"
1402
db_set xserver-xorg/config/monitor/vert-refresh "$VERT_REFRESH"
1403
db_set xserver-xorg/config/monitor/selection-method "Advanced"
1408
db_input low xserver-xorg/config/monitor/selection-method || debug_echo "db_input low xserver-xorg/config/monitor/selection-method"
1411
db_get xserver-xorg/config/monitor/selection-method
1414
db_input low xserver-xorg/config/monitor/screen-size || debug_echo "db_input low xserver-xorg/config/monitor/screen-size"
1416
db_get xserver-xorg/config/monitor/screen-size
1418
'Up to 14 inches (355 mm)')
1419
db_set xserver-xorg/config/monitor/horiz-sync "28-33"
1420
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1422
'15 inches (380 mm)')
1423
db_set xserver-xorg/config/monitor/horiz-sync "28-50"
1424
db_set xserver-xorg/config/monitor/vert-refresh "43-75"
1426
'17 inches (430 mm)')
1427
db_set xserver-xorg/config/monitor/horiz-sync "30-70"
1428
db_set xserver-xorg/config/monitor/vert-refresh "50-160"
1430
'19-20 inches (480-510 mm)')
1431
db_set xserver-xorg/config/monitor/horiz-sync "30-100"
1432
db_set xserver-xorg/config/monitor/vert-refresh "50-160"
1434
'21 inches (530 mm) or more')
1435
db_set xserver-xorg/config/monitor/horiz-sync "30-130"
1436
db_set xserver-xorg/config/monitor/vert-refresh "50-160"
1441
db_input low xserver-xorg/config/monitor/mode-list || true
1443
if [ -n "$MAXRES" ]; then
1446
db_get xserver-xorg/config/monitor/mode-list
1450
db_set xserver-xorg/config/monitor/horiz-sync "28-33"
1451
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1454
db_set xserver-xorg/config/monitor/horiz-sync "28-38"
1455
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1458
db_set xserver-xorg/config/monitor/horiz-sync "28-38"
1459
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1462
db_set xserver-xorg/config/monitor/horiz-sync "28-48"
1463
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1466
db_set xserver-xorg/config/monitor/horiz-sync "30-54"
1467
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1470
db_set xserver-xorg/config/monitor/horiz-sync "30-50"
1471
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1474
db_set xserver-xorg/config/monitor/horiz-sync "28-49"
1475
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1478
db_set xserver-xorg/config/monitor/horiz-sync "30-57"
1479
db_set xserver-xorg/config/monitor/vert-refresh "43-72"
1482
db_set xserver-xorg/config/monitor/horiz-sync "30-60"
1483
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1485
"1152x768 @ 54.8Hz")
1486
# This is a 15" PowerBook G4 mode; its video hardware (LCD) was also
1487
# capable of 896x600 and 720x480 pixels at a 3:2 aspect ratio and
1488
# 1024x768, 800x600, and 640x480 pixels at a 4:3 aspect ratio, so give
1489
# its horizontal and vertical ranges a little more "headroom" than
1490
# that required by this specific mode to accomodate the others.
1491
db_set xserver-xorg/config/monitor/horiz-sync "30-50"
1492
db_set xserver-xorg/config/monitor/vert-refresh "50-72"
1495
db_set xserver-xorg/config/monitor/horiz-sync "30-68"
1496
db_set xserver-xorg/config/monitor/vert-refresh "50-70"
1499
db_set xserver-xorg/config/monitor/horiz-sync "30-68"
1500
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1503
db_set xserver-xorg/config/monitor/horiz-sync "30-65"
1504
db_set xserver-xorg/config/monitor/vert-refresh "30-60"
1507
db_set xserver-xorg/config/monitor/horiz-sync "30-67"
1508
db_set xserver-xorg/config/monitor/vert-refresh "30-60"
1511
db_set xserver-xorg/config/monitor/horiz-sync "30-60"
1512
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1515
db_set xserver-xorg/config/monitor/horiz-sync "30-92"
1516
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1519
db_set xserver-xorg/config/monitor/horiz-sync "30-65"
1520
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1523
db_set xserver-xorg/config/monitor/horiz-sync "30-67"
1524
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1527
db_set xserver-xorg/config/monitor/horiz-sync "30-85"
1528
db_set xserver-xorg/config/monitor/vert-refresh "50-80"
1531
db_set xserver-xorg/config/monitor/horiz-sync "30-70"
1532
db_set xserver-xorg/config/monitor/vert-refresh "50-90"
1535
db_set xserver-xorg/config/monitor/horiz-sync "30-75"
1536
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1539
db_set xserver-xorg/config/monitor/horiz-sync "30-94"
1540
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1543
db_set xserver-xorg/config/monitor/horiz-sync "30-107"
1544
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1547
db_set xserver-xorg/config/monitor/horiz-sync "30-90"
1548
db_set xserver-xorg/config/monitor/vert-refresh "50-60"
1551
db_set xserver-xorg/config/monitor/horiz-sync "30-107"
1552
db_set xserver-xorg/config/monitor/vert-refresh "50-85"
1555
db_set xserver-xorg/config/monitor/horiz-sync "30-84"
1556
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1559
db_set xserver-xorg/config/monitor/horiz-sync "30-87"
1560
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1563
db_set xserver-xorg/config/monitor/horiz-sync "30-113"
1564
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1567
db_set xserver-xorg/config/monitor/horiz-sync "30-75"
1568
db_set xserver-xorg/config/monitor/vert-refresh "30-60"
1571
db_set xserver-xorg/config/monitor/horiz-sync "30-90"
1572
db_set xserver-xorg/config/monitor/vert-refresh "50-75"
1575
db_set xserver-xorg/config/monitor/horiz-sync "30-130"
1576
db_set xserver-xorg/config/monitor/vert-refresh "60-160"
1579
db_set xserver-xorg/config/monitor/horiz-sync "30-130"
1580
db_set xserver-xorg/config/monitor/vert-refresh "60-160"
1583
db_set xserver-xorg/config/monitor/horiz-sync "30-100"
1584
db_set xserver-xorg/config/monitor/vert-refresh "60-85"
1587
db_set xserver-xorg/config/monitor/horiz-sync "30-125"
1588
db_set xserver-xorg/config/monitor/vert-refresh "60-100"
1591
db_set xserver-xorg/config/monitor/horiz-sync "30-140"
1592
db_set xserver-xorg/config/monitor/vert-refresh "60-160"
1597
validate_monitor_frequency_db_input low xserver-xorg/config/monitor/horiz-sync || true
1598
validate_monitor_frequency_db_input low xserver-xorg/config/monitor/vert-refresh || true
1603
# don't write sync ranges if it's exactly what we picked up from DDC
1604
db_get xserver-xorg/config/monitor/horiz-sync
1606
db_get xserver-xorg/config/monitor/vert-refresh
1607
USER_VREFRESH="$RET"
1608
if [ -z "$UPGRADE" ]; then
1609
if [ -n "$AUTODETECT_VIDEO" ]; then
1610
if ! [ "$USER_HSYNC" = "$HORIZ_SYNC" ] || \
1611
! [ "$USER_VREFRESH" = "$VERT_REFRESH" ]; then
1612
MONITOR_SYNC_RANGES="yes"
1613
debug_echo "writing out user-customised sync ranges"
1616
# always write them out if we refused probing for some reason
1617
MONITOR_SYNC_RANGES="yes"
1618
debug_echo "not probing; writing out sync ranges"
1620
# we don't do anything here because we're just upgrading; leave it alone.
1623
if [ -n "$MONITOR_SYNC_RANGES" ]; then
1624
db_set xserver-xorg/config/monitor/use_sync_ranges true
1626
db_input low xserver-xorg/config/monitor/use_sync_ranges || debug_echo "db_input low xserver-xorg/config/monitor/use_sync_ranges"
1628
case "$DEVICE_DRIVER" in
1629
# nVidia laptop chipsets should use 16bpp per default, or face horrific
1630
# colour banding issues, per Olivier Grawert and Trent Lloyd.
1632
if [ -n "$LAPTOP" ]; then
1643
if [ -n "$DISPLAY_DEPTH" ]; then
1644
DEFAULT_DEPTH="$DISPLAY_DEPTH"
1647
db_fget xserver-xorg/config/display/default_depth seen
1648
if [ "$RET" = "false" ]; then
1649
db_set xserver-xorg/config/display/default_depth $DEFAULT_DEPTH
1652
db_input low xserver-xorg/config/display/default_depth || true
1656
1070
# register this package as a (potential) handler of the X server symlink and
1657
1071
# X.Org X server configuration file
1658
1072
for ROSTER in "$SERVER_SYMLINK_ROSTER" "$XORGCONFIG_ROSTER"; do