summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Wilson <msw@redhat.com>2000-04-27 15:39:02 +0000
committerMatt Wilson <msw@redhat.com>2000-04-27 15:39:02 +0000
commit7fb1679581871ed83bac3cbcddcc46aa162dc5c4 (patch)
tree8caeb16188f142ed8948b6f24fc09b0d9352d6eb
parent58fbf93ed369ca8cf76f712db9f10a90c36d6e0c (diff)
downloadanaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.tar.gz
anaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.tar.xz
anaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.zip
second pass at XFree86 4.0 support
-rwxr-xr-xgui.py2
-rw-r--r--iw/mouse_gui.py19
-rw-r--r--mouse.py129
-rw-r--r--todo.py13
-rw-r--r--xf86config.py1135
-rw-r--r--xserver.py147
6 files changed, 687 insertions, 758 deletions
diff --git a/gui.py b/gui.py
index efd0d6da2..420cd29a1 100755
--- a/gui.py
+++ b/gui.py
@@ -614,7 +614,7 @@ class InstallControlWindow (Thread):
self.mutex.acquire ()
class InstallControlState:
- def __init__ (self, cw, ii, todo, title = "Install Window",
+ def __init__ (self, cw, ii, todo, title = _("Install Window"),
prevEnabled = 1, nextEnabled = 0, html = ""):
self.searchPath = [ "/usr/share/anaconda/", "./" ]
self.ii = ii
diff --git a/iw/mouse_gui.py b/iw/mouse_gui.py
index 6896bb070..9082111b8 100644
--- a/iw/mouse_gui.py
+++ b/iw/mouse_gui.py
@@ -6,7 +6,6 @@ from string import *
from re import *
import tree
from translate import _
-import xmouse
class MouseWindow (InstallWindow):
@@ -84,23 +83,7 @@ class MouseWindow (InstallWindow):
else:
self.todo.mouse.setDevice(device)
- cur = self.getCurrentKey()
- (gpm, xdev, device, emulate) = self.availableMice[cur]
-
- try:
- curmouse = xmouse.get()
- except RuntimeError:
- # ignore errors when switching mice
- return None
- curmouse[0] = "/dev/" + device
- # XXX
- # IntelliMouse requires a full mouse reinit - X does not
- # handle this properly from the mouse extention at this time
- # so leave it alone
- if not xdev == "IMPS/2" and not xdev == "IntelliMouse":
- curmouse[1] = xdev
- curmouse[6] = emulate
- apply (xmouse.set, curmouse)
+ self.todo.mouse.setXProtocol ()
return None
diff --git a/mouse.py b/mouse.py
index 94ed8e3fa..a0986fe78 100644
--- a/mouse.py
+++ b/mouse.py
@@ -1,6 +1,5 @@
import kudzu
from simpleconfig import SimpleConfigFile
-from snack import *
import os
class Mouse (SimpleConfigFile):
@@ -68,46 +67,39 @@ class Mouse (SimpleConfigFile):
}
# XXX fixme - externalize
- def __init__ (self, xmouseType = None, mouseType = None):
+ def __init__ (self):
self.info = {}
self.device = None
+ self.emulate = 0
+ self.set ("None - None")
- if (xmouseType):
- (proto, emulate, device) = xmouseType
- mouseType = None
- mice = self.mice.keys()
- mice.sort()
- for desc in mice:
- (gpm, x11, dev, em) = self.mice[desc]
-# print "trying %s: '%s', '%s'" % (desc, x11, proto)
- if (x11 == proto and emulate == em):
- if (desc[:7] == "Generic" or desc[:3] == "Sun"):
- mouseType = (desc, emulate, device)
- break
- self.device = device
- if not mouseType:
- raise KeyError, "unknown X11 mouse type %s" % proto
-
- if (mouseType):
- if (len(mouseType) == 3):
- apply(self.set, mouseType)
- else:
- list = kudzu.probe(kudzu.CLASS_MOUSE, kudzu.BUS_UNSPEC,
- kudzu.PROBE_ONE)
- if (list):
- (device, module, desc) = list[0]
-
- if device == "sunmouse":
- self.set("Sun - Mouse", 0)
- elif device == "psaux":
- self.set("Generic - 3 Button Mouse (PS/2)", 0)
- else:
- self.set("Generic - 2 Button Mouse (serial)", 1)
-
- self.device = device
- else:
- self.set("Generic - 2 Button Mouse (serial)", 1, 'ttyS0')
+ def probe (self):
+ list = kudzu.probe(kudzu.CLASS_MOUSE, kudzu.BUS_UNSPEC,
+ kudzu.PROBE_ONE)
+ if (list):
+ (device, module, desc) = list[0]
+ if device == 'psaux':
+ # kickstart some ps/2 mice. Blame the kernel
+ try:
+ f = open ('/dev/psaux')
+ f.write ('1')
+ f.close
+ except:
+ pass
+
+ if device == "sunmouse":
+ self.set("Sun - Mouse", 0)
+ elif device == "psaux":
+ self.set("Generic - 3 Button Mouse (PS/2)", 0)
+ else:
+ self.set("Generic - 2 Button Mouse (serial)", 1)
+ self.device = device
+ return 1
+ else:
+ self.set("None - None")
+ return 0
+
def available (self):
return self.mice
@@ -146,3 +138,66 @@ class Mouse (SimpleConfigFile):
self.emu = em
if not self.device and thedev: self.device = thedev
if not self.device: self.device = dev
+
+ def setXProtocol (self):
+ import xmouse
+ try:
+ curmouse = xmouse.get()
+ except RuntimeError:
+ # ignore errors when switching mice
+ return None
+ curmouse[0] = "/dev/" + self.device
+ # XXX
+ # IntelliMouse requires a full mouse reinit - X does not
+ # handle this properly from the mouse extention at this time
+ # so leave it alone
+ if (not self.info["XMOUSETYPE"] == "IMPS/2"
+ and not self.info["XMOUSETYPE"] == "IntelliMouse"
+ and not self.info["XMOUSETYPE"] == "None"):
+ curmouse[1] = self.info["XMOUSETYPE"]
+
+ curmouse[6] = self.emulate
+ print curmouse
+ try:
+ apply (xmouse.set, curmouse)
+ except RuntimeError:
+ pass
+ except TypeError:
+ pass
+
+# if (xmouseType):
+# (proto, emulate, device) = xmouseType
+# mouseType = None
+# mice = self.mice.keys()
+# mice.sort()
+# for desc in mice:
+# (gpm, x11, dev, em) = self.mice[desc]
+# # print "trying %s: '%s', '%s'" % (desc, x11, proto)
+# if (x11 == proto and emulate == em):
+# if (desc[:7] == "Generic" or desc[:3] == "Sun"):
+# mouseType = (desc, emulate, device)
+# break
+# self.device = device
+# if not mouseType:
+# raise KeyError, "unknown X11 mouse type %s" % proto
+
+# if (mouseType):
+# if (len(mouseType) == 3):
+# apply(self.set, mouseType)
+# else:
+# list = kudzu.probe(kudzu.CLASS_MOUSE, kudzu.BUS_UNSPEC,
+# kudzu.PROBE_ONE)
+# if (list):
+# (device, module, desc) = list[0]
+
+# if device == "sunmouse":
+# self.set("Sun - Mouse", 0)
+# elif device == "psaux":
+# self.set("Generic - 3 Button Mouse (PS/2)", 0)
+# else:
+# self.set("Generic - 2 Button Mouse (serial)", 1)
+
+# self.device = device
+# else:
+# self.set("Generic - 2 Button Mouse (serial)", 1, 'ttyS0')
+
diff --git a/todo.py b/todo.py
index 840c3b50a..f20247cc4 100644
--- a/todo.py
+++ b/todo.py
@@ -301,10 +301,7 @@ class ToDo:
self.network = Network ()
self.rootpassword = Password ()
self.extraModules = extraModules
- if mouse:
- self.mouse = Mouse (xmouseType = mouse)
- else:
- self.mouse = Mouse ()
+ self.mouse = Mouse ()
self.keyboard = Keyboard ()
self.auth = Authentication ()
self.desktop = Desktop ()
@@ -500,7 +497,7 @@ class ToDo:
for n in packages:
self.selectPackage(n)
- if self.x.server:
+ if self.x.server and not self.x.server == "XFree86":
self.selectPackage('XFree86-' + self.x.server)
def selectPackage(self, package):
@@ -1111,7 +1108,7 @@ class ToDo:
self.hdList['yp-tools'].selected = 1
self.hdList['portmap'].selected = 1
- if self.x.server:
+ if self.x.server and not self.x.server == "XFree86":
self.selectPackage ('XFree86-' + self.x.server)
# make sure that all comps that include other comps are
@@ -1289,10 +1286,10 @@ class ToDo:
if os.access (self.instPath + "/etc/X11/X", os.R_OK):
os.rename (self.instPath + "/etc/X11/X",
self.instPath + "/etc/X11/X.rpmsave")
- os.symlink ("../../usr/X11R6/bin/XF86_" + self.x.server,
+ os.symlink ("../../usr/X11R6/bin/" + self.x.server,
self.instPath + "/etc/X11/X")
- self.x.write (self.instPath + "/etc/X11/XF86Config")
+ self.x.write (self.instPath + "/etc/X11")
self.setDefaultRunlevel ()
# go ahead and depmod modules on alpha, as rtc modprobe
# will complain loudly if we don't do it now.
diff --git a/xf86config.py b/xf86config.py
index 1839cbfd8..0465c9be8 100644
--- a/xf86config.py
+++ b/xf86config.py
@@ -12,6 +12,418 @@ from kbd import Keyboard
from mouse import Mouse
from translate import _
+XF86Config_template = """
+# File generated by anaconda.
+# **********************************************************************
+# Refer to the XF86Config(4/5) man page for details about the format of
+# this file.
+# **********************************************************************
+
+# **********************************************************************
+# Files section. This allows default font and rgb paths to be set
+# **********************************************************************
+
+Section "Files"
+%(files)s
+EndSection
+
+# **********************************************************************
+# Server flags section.
+# **********************************************************************
+
+Section "ServerFlags"
+ # Uncomment this to cause a core dump at the spot where a signal is
+ # received. This may leave the console in an unusable state, but may
+ # provide a better stack trace in the core dump to aid in debugging
+
+ # NoTrapSignals
+
+ # Uncomment this to disable the <Crtl><Alt><BS> server abort sequence
+ # This allows clients to receive this key event.
+
+ # DontZap
+
+ # Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching
+ # sequences. This allows clients to receive these key events.
+
+ # DontZoom
+EndSection
+
+# Pointer section
+# **********************************************************************
+
+Section "Pointer"
+ Protocol "%(mouseProto)s"
+ Device "/dev/%(mouseDevice)s"
+
+# When using XQUEUE, comment out the above two lines, and uncomment
+# the following line.
+# Protocol "Xqueue"
+
+# Baudrate and SampleRate are only for some Logitech mice
+# BaudRate 9600
+# SampleRate 150
+
+# Emulate3Buttons is an option for 2-button Microsoft mice
+# Emulate3Timeout is the timeout in milliseconds (default is 50ms)
+ Emulate3Buttons
+ Emulate3Timeout 50
+
+# ChordMiddle is an option for some 3-button Logitech mice
+# ChordMiddle
+
+EndSection
+
+# **********************************************************************
+# Keyboard section
+# **********************************************************************
+
+Section "Keyboard"
+ Protocol "Standard"
+
+%(autorepeat)s
+
+# when using XQUEUE, comment out the above line, and uncomment the
+# following line
+ # Protocol "Xqueue"
+
+# Let the server do the NumLock processing. This should only be
+# required when using pre-R6 clients
+ # ServerNumLock
+
+# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
+ # Xleds 1 2 3
+
+# To set the LeftAlt to Meta, RightAlt key to ModeShift,
+# RightCtl key to Compose, and ScrollLock key to ModeLock:
+
+ LeftAlt Meta
+ RightAlt Meta
+ ScrollLock Compose
+ RightCtl Control
+
+# To disable the XKEYBOARD extension, uncomment XkbDisable.
+# XkbDisable
+
+# To customise the XKB settings to suit your keyboard, modify the
+# lines below (which are the defaults). For example, for a non-U.S.
+# keyboard, you will probably want to use:
+# XkbModel "pc102"
+# If you have a US Microsoft Natural keyboard, you can use:
+# XkbModel "microsoft"
+#
+# Then to change the language, change the Layout setting.
+# For example, a german layout can be obtained with:
+# XkbLayout "de"
+# or:
+# XkbLayout "de"
+# XkbVariant "nodeadkeys"
+#
+# If you'd like to switch the positions of your capslock and
+# control keys, use:
+# XkbOptions "ctrl:nocaps"
+ XkbRules "%(XkbOptions)s"
+ XkbModel "%(XkbModel)s"
+ XkbLayout "%(XkbLayout)s"
+ XkbVariant "%(XkbVariant)s"
+ XkbOptions "%(XkbOptions)s"
+EndSection
+
+# **********************************************************************
+# Monitor section
+# **********************************************************************
+
+# Any number of monitor sections may be present
+Section "Monitor"
+ Identifier "Generic Monitor"
+ VendorName "Unknown"
+ ModelName "Unknown"
+ HorizSync 31.5
+ VertRefresh 60
+ ModeLine "640x480" 25.175 640 664 760 800
+ 480 491 493 525
+EndSection
+
+Section "Monitor"
+ Identifier "%(monitorID)s"
+ VendorName "Unknown"
+ ModelName "Unknown"
+
+# HorizSync is in kHz unless units are specified.
+# HorizSync may be a comma separated list of discrete values, or a
+# comma separated list of ranges of values.
+# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
+# USER MANUAL FOR THE CORRECT NUMBERS.
+
+ HorizSync %(monitorHoriz)s
+
+# VertRefresh is in Hz unless units are specified.
+# VertRefresh may be a comma separated list of discrete values, or a
+# comma separated list of ranges of values.
+# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
+# USER MANUAL FOR THE CORRECT NUMBERS.
+
+ VertRefresh %(monitorVert)s
+
+# Modes can be specified in two formats. A compact one-line format, or
+# a multi-line format.
+
+# These two are equivalent
+
+# ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
+
+# Mode "1024x768i"
+# DotClock 45
+# HTimings 1024 1048 1208 1264
+# VTimings 768 776 784 817
+# Flags "Interlace"
+# EndMode
+
+# This is a set of standard mode timings. Modes that are out of monitor spec
+# are automatically deleted by the server (provided the HorizSync and
+# VertRefresh lines are correct), so there's no immediate need to
+# delete mode timings (unless particular mode timings don't work on your
+# monitor). With these modes, the best standard mode that your monitor
+# and video card can support for a given resolution is automatically
+# used.
+
+# Low-res Doublescan modes
+# If your chipset does not support doublescan, you get a 'squashed'
+# resolution like 320x400.
+
+# --320x200--
+# 320x200 @ 70 Hz, 31.5 kHz hsync, 8:5 aspect ratio
+ Modeline "320x200" 12.588 320 336 384 400
+ 200 204 205 225 Doublescan
+# 320x240 @ 60 Hz, 31.5 kHz hsync, 4:3 aspect ratio
+ Modeline "320x240" 12.588 320 336 384 400
+ 240 245 246 262 Doublescan
+# 320x240 @ 72 Hz, 36.5 kHz hsync
+ Modeline "320x240" 15.750 320 336 384 400
+ 240 244 246 262 Doublescan
+# --400x300--
+# 400x300 @ 56 Hz, 35.2 kHz hsync, 4:3 aspect ratio
+ ModeLine "400x300" 18 400 416 448 512
+ 300 301 302 312 Doublescan
+# 400x300 @ 60 Hz, 37.8 kHz hsync
+ Modeline "400x300" 20 400 416 480 528
+ 300 301 303 314 Doublescan
+# 400x300 @ 72 Hz, 48.0 kHz hsync
+ Modeline "400x300" 25 400 424 488 520
+ 300 319 322 333 Doublescan
+# 480x300 @ 56 Hz, 35.2 kHz hsync, 8:5 aspect ratio
+ ModeLine "480x300" 21.656 480 496 536 616
+ 300 301 302 312 Doublescan
+# 480x300 @ 60 Hz, 37.8 kHz hsync
+ Modeline "480x300" 23.890 480 496 576 632
+ 300 301 303 314 Doublescan
+# 480x300 @ 63 Hz, 39.6 kHz hsync
+ Modeline "480x300" 25 480 496 576 632
+ 300 301 303 314 Doublescan
+# 480x300 @ 72 Hz, 48.0 kHz hsync
+ Modeline "480x300" 29.952 480 504 584 624
+ 300 319 322 333 Doublescan
+
+# Normal video modes
+
+# -- 512x384
+# 512x384 @ 78 Hz, 31.50 kHz hsync
+ Modeline "512x384" 20.160 512 528 592 640
+ 384 385 388 404 -HSync -VSync
+# 512x384 @ 85 Hz, 34.38 kHz hsync
+ Modeline "512x384" 22 512 528 592 640
+ 384 385 388 404 -HSync -VSync
+
+# -- 640x400 --
+# 640x400 @ 70 Hz, 31.5 kHz hsync
+ Modeline "640x400" 25.175 640 664 760 800
+ 400 409 411 450
+# 640x400 @ 85 Hz, 37.86 kHz hsync
+ Modeline "640x400" 31.5 640 672 736 832
+ 400 401 404 445 -HSync +VSync
+
+# --- 640x480 ---
+# 640x480 @ 60 Hz, 31.5 kHz hsync
+ Modeline "640x480" 25.175 640 664 760 800
+ 480 491 493 525
+# 640x480 @ 72 Hz, 36.5 kHz hsync
+ Modeline "640x480" 31.5 640 680 720 864
+ 480 488 491 521
+# 640x480 @ 75 Hz, 37.50 kHz hsync
+ ModeLine "640x480" 31.5 640 656 720 840
+ 480 481 484 500 -HSync -VSync
+# 640x480 @ 85 Hz, 43.27 kHz hsync
+ Modeline "640x480" 36 640 696 752 832
+ 480 481 484 509 -HSync -VSync
+# 640x480 @ 100 Hz, 53.01 kHz hsync
+ Modeline "640x480" 45.8 640 672 768 864
+ 480 488 494 530 -HSync -VSync
+
+# --- 800x600 ---
+# 800x600 @ 56 Hz, 35.15 kHz hsync
+ ModeLine "800x600" 36 800 824 896 1024
+ 600 601 603 625
+# 800x600 @ 60 Hz, 37.8 kHz hsync
+ Modeline "800x600" 40 800 840 968 1056
+ 600 601 605 628 +hsync +vsync
+# 800x600 @ 72 Hz, 48.0 kHz hsync
+ Modeline "800x600" 50 800 856 976 1040
+ 600 637 643 666 +hsync +vsync
+# 800x600 @ 85 Hz, 55.84 kHz hsync
+ Modeline "800x600" 60.75 800 864 928 1088
+ 600 616 621 657 -HSync -VSync
+# 800x600 @ 100 Hz, 64.02 kHz hsync
+ Modeline "800x600" 69.65 800 864 928 1088
+ 600 604 610 640 -HSync -VSync
+
+# --- 1024x768 ---
+# 1024x768 @ 60 Hz, 48.4 kHz hsync
+ Modeline "1024x768" 65 1024 1032 1176 1344
+ 768 771 777 806 -hsync -vsync
+# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync
+ Modeline "1024x768" 44.9 1024 1048 1208 1264
+ 768 776 784 817 Interlace
+# 1024x768 @ 70 Hz, 56.5 kHz hsync
+ Modeline "1024x768" 75 1024 1048 1184 1328
+ 768 771 777 806 -hsync -vsync
+# 1024x768 @ 76 Hz, 62.5 kHz hsync
+ Modeline "1024x768" 85 1024 1032 1152 1360
+ 768 784 787 823
+# 1024x768 @ 85 Hz, 70.24 kHz hsync
+ Modeline "1024x768" 98.9 1024 1056 1216 1408
+ 768 782 788 822 -HSync -VSync
+# 1024x768 @ 100Hz, 80.21 kHz hsync
+ Modeline "1024x768" 115.5 1024 1056 1248 1440
+ 768 771 781 802 -HSync -VSync
+
+# --- 1152x864 ---
+# 1152x864 @ 60 Hz, 53.5 kHz hsync
+ Modeline "1152x864" 89.9 1152 1216 1472 1680
+ 864 868 876 892 -HSync -VSync
+# 1152x864 @ 70 Hz, 62.4 kHz hsync
+ Modeline "1152x864" 92 1152 1208 1368 1474
+ 864 865 875 895
+# 1152x864 @ 78 Hz, 70.8 kHz hsync
+ Modeline "1152x864" 110 1152 1240 1324 1552
+ 864 864 876 908
+# 1152x864 @ 84 Hz, 76.0 kHz hsync
+ Modeline "1152x864" 135 1152 1464 1592 1776
+ 864 864 876 908
+# 1152x864 @ 89 Hz interlaced, 44 kHz hsync
+ ModeLine "1152x864" 65 1152 1168 1384 1480
+ 864 865 875 985 Interlace
+# 1152x864 @ 100 Hz, 89.62 kHz hsync
+ Modeline "1152x864" 137.65 1152 1184 1312 1536
+ 864 866 885 902 -HSync -VSync
+
+# -- 1280x1024 --
+# 1280x1024 @ 61 Hz, 64.2 kHz hsync
+ Modeline "1280x1024" 110 1280 1328 1512 1712
+ 1024 1025 1028 1054
+# 1280x1024 @ 70 Hz, 74.59 kHz hsync
+ Modeline "1280x1024" 126.5 1280 1312 1472 1696
+ 1024 1032 1040 1068 -HSync -VSync
+# 1280x1024 @ 74 Hz, 78.85 kHz hsync
+ Modeline "1280x1024" 135 1280 1312 1456 1712
+ 1024 1027 1030 1064
+# 1280x1024 @ 76 Hz, 81.13 kHz hsync
+ Modeline "1280x1024" 135 1280 1312 1416 1664
+ 1024 1027 1030 1064
+# 1280x1024 @ 85 Hz, 91.15 kHz hsync
+ Modeline "1280x1024" 157.5 1280 1344 1504 1728
+ 1024 1025 1028 1072 +HSync +VSync
+# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync
+ Modeline "1280x1024" 80 1280 1296 1512 1568
+ 1024 1025 1037 1165 Interlace
+# 1280x1024 @ 100 Hz, 107.16 kHz hsync
+ Modeline "1280x1024" 181.75 1280 1312 1440 1696
+ 1024 1031 1046 1072 -HSync -VSync
+
+# -- 1600x1200 --
+# 1600x1200 @ 60Hz, 75.00 kHz hsync
+ Modeline "1600x1200" 162 1600 1664 1856 2160
+ 1200 1201 1204 1250 +HSync +VSync
+# 1600x1200 @ 70 Hz, 87.50 kHz hsync
+ Modeline "1600x1200" 189 1600 1664 1856 2160
+ 1200 1201 1204 1250 -HSync -VSync
+# 1600x1200 @ 75 Hz, 93.75 kHz hsync
+ Modeline "1600x1200" 202.5 1600 1664 1856 2160
+ 1200 1201 1204 1250 +HSync +VSync
+# 1600x1200 @ 85 Hz, 105.77 kHz hsync
+ Modeline "1600x1200" 220 1600 1616 1808 2080
+ 1200 1204 1207 1244 +HSync +VSync
+
+# -- 1800x1400 --
+
+# 1800x1440 @ 64Hz, 96.15 kHz hsync
+ ModeLine "1800X1440" 230 1800 1896 2088 2392
+ 1440 1441 1444 1490 +HSync +VSync
+# 1800x1440 @ 70Hz, 104.52 kHz hsync
+ ModeLine "1800X1440" 250 1800 1896 2088 2392
+ 1440 1441 1444 1490 +HSync +VSync
+
+# -- 1920x1200 --
+
+# 1920x1200 @ 70Hz, 87.50 KHz hsync
+ Modeline "1920x1200" 230 1920 1936 2096 2528
+ 1200 1201 1204 1250 +HSync +VSync
+
+EndSection
+
+# **********************************************************************
+# Graphics device section
+# **********************************************************************
+
+Section "Device"
+ Identifier "Generic VGA Card"
+ VendorName "Unknown"
+ BoardName "Unknown"
+ Chipset "generic"
+EndSection
+
+%(acceleratedDevices)s
+
+# **********************************************************************
+# Screen section
+# **********************************************************************
+
+# The kernel framebuffer server
+Section "Screen"
+ Driver "fbdev"
+ Device "Generic VGA Card"
+ Monitor "%(monitorID)s"
+ Subsection "Display"
+# Depth 16
+ Modes "default"
+ EndSubsection
+EndSection
+
+# The 16-color VGA server
+Section "Screen"
+ Driver "vga16"
+ Device "Generic VGA Card"
+ Monitor "%(monitorID)s"
+ Subsection "Display"
+ Modes "640x480" "800x600"
+ ViewPort 0 0
+ EndSubsection
+EndSection
+
+# The Mono server
+Section "Screen"
+ Driver "vga2"
+ Device "Generic VGA Card"
+ Monitor "%(monitorID)s"
+ Subsection "Display"
+ Modes "640x480" "800x600"
+ ViewPort 0 0
+ EndSubsection
+EndSection
+
+%(acceleratedScreens)s
+"""
+
+
XF86Config_4_template = """
# File generated by anaconda.
@@ -85,17 +497,20 @@ EndSection
class XF86Config:
def __init__ (self, mouse = None):
- self.setMouse(mouse)
+ if mouse:
+ self.setMouse(mouse)
+ else:
+ self.mouse = Mouse ()
self.server = None
self.vidCards = []
self.cardMan = None
self.vidRam = None
self.monEisa = None
self.monName = None
- self.monHoriz = ""
- self.monVert = ""
+ self.monHoriz = "31.5"
+ self.monVert = "60"
self.monSect = None
- self.monID = "Generic Monitor"
+ self.monID = "Unprobed Monitor"
self.devID = None
self.probed = 0
self.skip = 0
@@ -114,6 +529,21 @@ class XF86Config:
self.keyOptions = ""
self.monlist = {}
self.monids = {}
+ self.files = """
+# The location of the RGB database. Note, this is the name of the
+# file minus the extension (like ".txt" or ".db"). There is normally
+# no need to change the default.
+
+ RgbPath "/usr/X11R6/lib/X11/rgb"
+
+# Multiple FontPath entries are allowed (they are concatenated together)
+# By default, Red Hat 6.0 and later now use a font server independent of
+# the X server to render fonts.
+
+ FontPath "/usr/X11R6/lib/X11/fonts/TrueType"
+ FontPath "unix/:-1"
+"""
+
def setKeyboard (self, rules, model, layout, variant, options):
self.keyRules = rules
@@ -244,7 +674,11 @@ class XF86Config:
if self.vidCards:
self.devID = self.vidCards[self.primary]["NAME"]
- self.server = self.vidCards[self.primary]["SERVER"]
+ if (self.vidCards[self.primary].has_key("DRIVER") and
+ not self.vidCards[self.primary].has_key("UNSUPPORTED")):
+ self.server = "XFree86"
+ else:
+ self.server = "XF86_" + self.vidCards[self.primary]["SERVER"]
# locate dictionary entry for requested card name
# case matters
@@ -305,7 +739,11 @@ class XF86Config:
if self.vidCards:
self.devID = self.vidCards[self.primary]["NAME"]
- self.server = self.vidCards[self.primary]["SERVER"]
+ if (self.vidCards[self.primary].has_key("DRIVER") and
+ not self.vidCards[self.primary].has_key("UNSUPPORTED")):
+ self.server = "XFree86"
+ else:
+ self.server = "XF86_" + self.vidCards[self.primary]["SERVER"]
# VESA probe for monitor/videoram, etc.
if probeMonitor:
@@ -386,21 +824,20 @@ class XF86Config:
return probe
def write (self, path):
- config = open (path, 'w')
- config.write (self.preludeSection ())
- config.write (self.keyboardSection ())
- if not self.server or self.server[0:3] != 'Sun':
- config.write (self.mouseSection ())
- config.write (self.monitorSection ())
- config.write (self.deviceSection ())
- config.write (self.screenSection ())
+ config = open (path + "XF86Config", 'w')
+ config.write (self.Version3Config ())
config.close ()
+ try:
+ config4 = self.Version4Config ()
+ except RuntimeError:
+ return
+ config = open (path + "XF86Config-4", 'w')
+ config.write (config)
+ config.close ()
- def test (self):
- config = open ('/tmp/XF86Config.test', 'w')
- config.write (
-"""
-Section "Files"
+ def test (self, serverflags=None, spawn=0):
+ files = self.files
+ self.files = """
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
@@ -414,47 +851,40 @@ Section "Files"
FontPath "/usr/share/fonts/ISO8859-9/misc/"
FontPath "/usr/share/fonts/ISO8859-9/75dpi/"
FontPath "/usr/share/fonts/ISO8859-9/100dpi/"
-EndSection
-
-Section "ServerFlags"
-EndSection
-""")
- config.write (self.keyboardSection ())
+"""
+ f = open ('/tmp/XF86Config.test', 'w')
# XXX if we're going to be using IMPS/2 on
# reboot, but we're using PS/2 now, we'll need
# to temporarily use PS/2 so we don't frob the
# intellimouse into IMPS/2 mode (if we did, we'll
# loose the mouse cursor in the install)
- if self.mouse.info["XMOUSETYPE"] == "IMPS/2":
- mouseproto = "PS/2"
+
+ if len (self.server) >= 7 and self.server[-7:]:
+ config = self.Version4Config
else:
- mouseproto = self.mouse.info["XMOUSETYPE"]
- config.write (
-"""
-Section "Pointer"
- Protocol "%s"
- Device "/dev/%s"
- Emulate3Buttons
- Emulate3Timeout 50
-EndSection
-""" % (mouseproto, self.mouse.device))
- config.write (self.monitorSection ())
- config.write (self.deviceSection ())
- config.write (self.screenSection ())
- config.close ()
+ config = self.Version3Config
+ f.write (config ())
+ f.close ()
- serverPath = "/usr/X11R6/bin/XF86_" + self.server
+ self.files = files
+
+ serverPath = "/usr/X11R6/bin/" + self.server
server = os.fork()
if (not server):
- os.execv(serverPath, ["XF86-test", ':9', '-xf86config',
- '/tmp/XF86Config.test', 'vt6'])
-
+ args = [serverPath, '-xf86config', '/tmp/XF86Config.test' ]
+ if self.server == "XFree86":
+ args = args + [ "-logfile", "/dev/null" ]
+ if serverflags:
+ args = args + serverflags
+ else:
+ args = args + [ ":9", "vt6" ]
+ os.execv(args[0], args)
time.sleep (1)
-## pid, status = os.waitpid (server, os.WNOHANG)
-## if not pid:
-## raise RuntimeError, "X server failed to start"
+ if spawn:
+ return server
+
child = os.fork()
if (not child):
os.environ["DISPLAY"] = ":9"
@@ -465,541 +895,92 @@ EndSection
os.waitpid(server, 0)
if not os.WIFEXITED (status) or os.WEXITSTATUS (status):
if os.WEXITSTATUS (status) not in [ 0, 1, 2 ]:
- raise RuntimeError, "X test failed %d" % (status,)
+ raise RuntimeError, "X startup failed %d" % (status,)
return
- def preludeSection (self):
- return """
-# File generated by anaconda.
-
-# **********************************************************************
-# Refer to the XF86Config(4/5) man page for details about the format of
-# this file.
-# **********************************************************************
-
-# **********************************************************************
-# Files section. This allows default font and rgb paths to be set
-# **********************************************************************
-
-Section "Files"
-
-# The location of the RGB database. Note, this is the name of the
-# file minus the extension (like ".txt" or ".db"). There is normally
-# no need to change the default.
-
- RgbPath "/usr/X11R6/lib/X11/rgb"
-
-# Multiple FontPath entries are allowed (they are concatenated together)
-# By default, Red Hat 6.0 and later now use a font server independent of
-# the X server to render fonts.
-
- FontPath "/usr/X11R6/lib/X11/fonts/TrueType"
- FontPath "unix/:-1"
-
-EndSection
-
-# **********************************************************************
-# Server flags section.
-# **********************************************************************
-
-Section "ServerFlags"
- # Uncomment this to cause a core dump at the spot where a signal is
- # received. This may leave the console in an unusable state, but may
- # provide a better stack trace in the core dump to aid in debugging
-
- # NoTrapSignals
-
- # Uncomment this to disable the <Crtl><Alt><BS> server abort sequence
- # This allows clients to receive this key event.
-
- # DontZap
-
- # Uncomment this to disable the <Crtl><Alt><KP_+>/<KP_-> mode switching
- # sequences. This allows clients to receive these key events.
-
- # DontZoom
-EndSection
-"""
-
- def mouseSection (self):
- if not self.mouse:
- self.mouse = Mouse(mouseType = ("none", "none", "null"))
- return """
-# **********************************************************************
-# Pointer section
-# **********************************************************************
-
-Section "Pointer"
- Protocol "%(XMOUSETYPE)s"
- Device "/dev/mouse"
-
-# When using XQUEUE, comment out the above two lines, and uncomment
-# the following line.
-# Protocol "Xqueue"
-
-# Baudrate and SampleRate are only for some Logitech mice
-# BaudRate 9600
-# SampleRate 150
-
-# Emulate3Buttons is an option for 2-button Microsoft mice
-# Emulate3Timeout is the timeout in milliseconds (default is 50ms)
- Emulate3Buttons
- Emulate3Timeout 50
-
-# ChordMiddle is an option for some 3-button Logitech mice
-# ChordMiddle
-
-EndSection
-""" % self.mouse.info
-
- def keyboardSection (self):
- autorepeat = "AutoRepeat 500 5"
- if iutil.getArch() == "sparc":
- autorepeat = "# AutoRepeat 200 20"
- string = """
-# **********************************************************************
-# Keyboard section
-# **********************************************************************
-
-Section "Keyboard"
- Protocol "Standard"
-
- # when using XQUEUE, comment out the above line, and uncomment the
- # following line
- # Protocol "Xqueue"
-
- %s
-
- # Let the server do the NumLock processing. This should only be
- # required when using pre-R6 clients
- # ServerNumLock
-
- # Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
- # Xleds 1 2 3
-
- # To set the LeftAlt to Meta, RightAlt key to ModeShift,
- # RightCtl key to Compose, and ScrollLock key to ModeLock:
-
- LeftAlt Meta
- RightAlt Meta
- ScrollLock Compose
- RightCtl Control
-
-# To disable the XKEYBOARD extension, uncomment XkbDisable.
-# XkbDisable
-
-# To customise the XKB settings to suit your keyboard, modify the
-# lines below (which are the defaults). For example, for a non-U.S.
-# keyboard, you will probably want to use:
-# XkbModel "pc102"
-# If you have a US Microsoft Natural keyboard, you can use:
-# XkbModel "microsoft"
-#
-# Then to change the language, change the Layout setting.
-# For example, a german layout can be obtained with:
-# XkbLayout "de"
-# or:
-# XkbLayout "de"
-# XkbVariant "nodeadkeys"
-#
-# If you'd like to switch the positions of your capslock and
-# control keys, use:
-# XkbOptions "ctrl:nocaps"
-""" % autorepeat
- for (tag, value) in (("XkbRules", self.keyRules),
- ("XkbModel", self.keyModel),
- ("XkbLayout", self.keyLayout),
- ("XkbVariant", self.keyVariant),
- ("XkbOptions", self.keyOptions)):
- if value:
- string = string + ' %s "%s"\n' % (tag, value)
- string = string + "EndSection\n"
- return string
-
- def monitorSection (self, installer = 0):
- if installer and self.monSect:
- return self.monSect
-
+ def Version3Config (self):
info = {}
-
- if self.monEisa:
- info["EISA"] = self.monEisa
- elif self.monID:
- info["EISA"] = self.monID
- else:
- info["EISA"] = "Generic Monitor"
+ devices = ""
- self.monID = info["EISA"]
-
- if self.monVert:
- info["VERT"] = self.monVert
- else:
- info["VERT"] = "60"
-
- if self.monHoriz:
- info["HORIZ"] = self.monHoriz
- else:
- info["HORIZ"] = "31.5"
-
- return """
-# **********************************************************************
-# Monitor section
-# **********************************************************************
-
-# Any number of monitor sections may be present
-Section "Monitor"
- Identifier "Generic Monitor"
- VendorName "Unknown"
- ModelName "Unknown"
- HorizSync 31.5
- VertRefresh 60
- ModeLine "640x480" 25.175 640 664 760 800
- 480 491 493 525
-EndSection
-
-Section "Monitor"
-
- Identifier "%(EISA)s"
- VendorName "Unknown"
- ModelName "Unknown"
-
-# HorizSync is in kHz unless units are specified.
-# HorizSync may be a comma separated list of discrete values, or a
-# comma separated list of ranges of values.
-# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
-# USER MANUAL FOR THE CORRECT NUMBERS.
-
- HorizSync %(HORIZ)s
-
-# VertRefresh is in Hz unless units are specified.
-# VertRefresh may be a comma separated list of discrete values, or a
-# comma separated list of ranges of values.
-# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
-# USER MANUAL FOR THE CORRECT NUMBERS.
-
- VertRefresh %(VERT)s
-
-# Modes can be specified in two formats. A compact one-line format, or
-# a multi-line format.
-
-# These two are equivalent
-
-# ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
-
-# Mode "1024x768i"
-# DotClock 45
-# HTimings 1024 1048 1208 1264
-# VTimings 768 776 784 817
-# Flags "Interlace"
-# EndMode
-
-# This is a set of standard mode timings. Modes that are out of monitor spec
-# are automatically deleted by the server (provided the HorizSync and
-# VertRefresh lines are correct), so there's no immediate need to
-# delete mode timings (unless particular mode timings don't work on your
-# monitor). With these modes, the best standard mode that your monitor
-# and video card can support for a given resolution is automatically
-# used.
-
-# Low-res Doublescan modes
-# If your chipset does not support doublescan, you get a 'squashed'
-# resolution like 320x400.
-
-# --320x200--
-# 320x200 @ 70 Hz, 31.5 kHz hsync, 8:5 aspect ratio
- Modeline "320x200" 12.588 320 336 384 400
- 200 204 205 225 Doublescan
-# 320x240 @ 60 Hz, 31.5 kHz hsync, 4:3 aspect ratio
- Modeline "320x240" 12.588 320 336 384 400
- 240 245 246 262 Doublescan
-# 320x240 @ 72 Hz, 36.5 kHz hsync
- Modeline "320x240" 15.750 320 336 384 400
- 240 244 246 262 Doublescan
-# --400x300--
-# 400x300 @ 56 Hz, 35.2 kHz hsync, 4:3 aspect ratio
- ModeLine "400x300" 18 400 416 448 512
- 300 301 302 312 Doublescan
-# 400x300 @ 60 Hz, 37.8 kHz hsync
- Modeline "400x300" 20 400 416 480 528
- 300 301 303 314 Doublescan
-# 400x300 @ 72 Hz, 48.0 kHz hsync
- Modeline "400x300" 25 400 424 488 520
- 300 319 322 333 Doublescan
-# 480x300 @ 56 Hz, 35.2 kHz hsync, 8:5 aspect ratio
- ModeLine "480x300" 21.656 480 496 536 616
- 300 301 302 312 Doublescan
-# 480x300 @ 60 Hz, 37.8 kHz hsync
- Modeline "480x300" 23.890 480 496 576 632
- 300 301 303 314 Doublescan
-# 480x300 @ 63 Hz, 39.6 kHz hsync
- Modeline "480x300" 25 480 496 576 632
- 300 301 303 314 Doublescan
-# 480x300 @ 72 Hz, 48.0 kHz hsync
- Modeline "480x300" 29.952 480 504 584 624
- 300 319 322 333 Doublescan
-
-# Normal video modes
-
-# -- 512x384
-# 512x384 @ 78 Hz, 31.50 kHz hsync
- Modeline "512x384" 20.160 512 528 592 640
- 384 385 388 404 -HSync -VSync
-# 512x384 @ 85 Hz, 34.38 kHz hsync
- Modeline "512x384" 22 512 528 592 640
- 384 385 388 404 -HSync -VSync
-
-# -- 640x400 --
-# 640x400 @ 70 Hz, 31.5 kHz hsync
- Modeline "640x400" 25.175 640 664 760 800
- 400 409 411 450
-# 640x400 @ 85 Hz, 37.86 kHz hsync
- Modeline "640x400" 31.5 640 672 736 832
- 400 401 404 445 -HSync +VSync
-
-# --- 640x480 ---
-# 640x480 @ 60 Hz, 31.5 kHz hsync
- Modeline "640x480" 25.175 640 664 760 800
- 480 491 493 525
-# 640x480 @ 72 Hz, 36.5 kHz hsync
- Modeline "640x480" 31.5 640 680 720 864
- 480 488 491 521
-# 640x480 @ 75 Hz, 37.50 kHz hsync
- ModeLine "640x480" 31.5 640 656 720 840
- 480 481 484 500 -HSync -VSync
-# 640x480 @ 85 Hz, 43.27 kHz hsync
- Modeline "640x480" 36 640 696 752 832
- 480 481 484 509 -HSync -VSync
-# 640x480 @ 100 Hz, 53.01 kHz hsync
- Modeline "640x480" 45.8 640 672 768 864
- 480 488 494 530 -HSync -VSync
-
-# --- 800x600 ---
-# 800x600 @ 56 Hz, 35.15 kHz hsync
- ModeLine "800x600" 36 800 824 896 1024
- 600 601 603 625
-# 800x600 @ 60 Hz, 37.8 kHz hsync
- Modeline "800x600" 40 800 840 968 1056
- 600 601 605 628 +hsync +vsync
-# 800x600 @ 72 Hz, 48.0 kHz hsync
- Modeline "800x600" 50 800 856 976 1040
- 600 637 643 666 +hsync +vsync
-# 800x600 @ 85 Hz, 55.84 kHz hsync
- Modeline "800x600" 60.75 800 864 928 1088
- 600 616 621 657 -HSync -VSync
-# 800x600 @ 100 Hz, 64.02 kHz hsync
- Modeline "800x600" 69.65 800 864 928 1088
- 600 604 610 640 -HSync -VSync
-
-# --- 1024x768 ---
-# 1024x768 @ 60 Hz, 48.4 kHz hsync
- Modeline "1024x768" 65 1024 1032 1176 1344
- 768 771 777 806 -hsync -vsync
-# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync
- Modeline "1024x768" 44.9 1024 1048 1208 1264
- 768 776 784 817 Interlace
-# 1024x768 @ 70 Hz, 56.5 kHz hsync
- Modeline "1024x768" 75 1024 1048 1184 1328
- 768 771 777 806 -hsync -vsync
-# 1024x768 @ 76 Hz, 62.5 kHz hsync
- Modeline "1024x768" 85 1024 1032 1152 1360
- 768 784 787 823
-# 1024x768 @ 85 Hz, 70.24 kHz hsync
- Modeline "1024x768" 98.9 1024 1056 1216 1408
- 768 782 788 822 -HSync -VSync
-# 1024x768 @ 100Hz, 80.21 kHz hsync
- Modeline "1024x768" 115.5 1024 1056 1248 1440
- 768 771 781 802 -HSync -VSync
-
-# --- 1152x864 ---
-# 1152x864 @ 60 Hz, 53.5 kHz hsync
- Modeline "1152x864" 89.9 1152 1216 1472 1680
- 864 868 876 892 -HSync -VSync
-# 1152x864 @ 70 Hz, 62.4 kHz hsync
- Modeline "1152x864" 92 1152 1208 1368 1474
- 864 865 875 895
-# 1152x864 @ 78 Hz, 70.8 kHz hsync
- Modeline "1152x864" 110 1152 1240 1324 1552
- 864 864 876 908
-# 1152x864 @ 84 Hz, 76.0 kHz hsync
- Modeline "1152x864" 135 1152 1464 1592 1776
- 864 864 876 908
-# 1152x864 @ 89 Hz interlaced, 44 kHz hsync
- ModeLine "1152x864" 65 1152 1168 1384 1480
- 864 865 875 985 Interlace
-# 1152x864 @ 100 Hz, 89.62 kHz hsync
- Modeline "1152x864" 137.65 1152 1184 1312 1536
- 864 866 885 902 -HSync -VSync
-
-# -- 1280x1024 --
-# 1280x1024 @ 61 Hz, 64.2 kHz hsync
- Modeline "1280x1024" 110 1280 1328 1512 1712
- 1024 1025 1028 1054
-# 1280x1024 @ 70 Hz, 74.59 kHz hsync
- Modeline "1280x1024" 126.5 1280 1312 1472 1696
- 1024 1032 1040 1068 -HSync -VSync
-# 1280x1024 @ 74 Hz, 78.85 kHz hsync
- Modeline "1280x1024" 135 1280 1312 1456 1712
- 1024 1027 1030 1064
-# 1280x1024 @ 76 Hz, 81.13 kHz hsync
- Modeline "1280x1024" 135 1280 1312 1416 1664
- 1024 1027 1030 1064
-# 1280x1024 @ 85 Hz, 91.15 kHz hsync
- Modeline "1280x1024" 157.5 1280 1344 1504 1728
- 1024 1025 1028 1072 +HSync +VSync
-# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync
- Modeline "1280x1024" 80 1280 1296 1512 1568
- 1024 1025 1037 1165 Interlace
-# 1280x1024 @ 100 Hz, 107.16 kHz hsync
- Modeline "1280x1024" 181.75 1280 1312 1440 1696
- 1024 1031 1046 1072 -HSync -VSync
-
-# -- 1600x1200 --
-# 1600x1200 @ 60Hz, 75.00 kHz hsync
- Modeline "1600x1200" 162 1600 1664 1856 2160
- 1200 1201 1204 1250 +HSync +VSync
-# 1600x1200 @ 70 Hz, 87.50 kHz hsync
- Modeline "1600x1200" 189 1600 1664 1856 2160
- 1200 1201 1204 1250 -HSync -VSync
-# 1600x1200 @ 75 Hz, 93.75 kHz hsync
- Modeline "1600x1200" 202.5 1600 1664 1856 2160
- 1200 1201 1204 1250 +HSync +VSync
-# 1600x1200 @ 85 Hz, 105.77 kHz hsync
- Modeline "1600x1200" 220 1600 1616 1808 2080
- 1200 1204 1207 1244 +HSync +VSync
-
-# -- 1800x1400 --
-
-# 1800x1440 @ 64Hz, 96.15 kHz hsync
- ModeLine "1800X1440" 230 1800 1896 2088 2392
- 1440 1441 1444 1490 +HSync +VSync
-# 1800x1440 @ 70Hz, 104.52 kHz hsync
- ModeLine "1800X1440" 250 1800 1896 2088 2392
- 1440 1441 1444 1490 +HSync +VSync
-
-# -- 1920x1200 --
-
-# 1920x1200 @ 70Hz, 87.50 KHz hsync
- Modeline "1920x1200" 230 1920 1936 2096 2528
- 1200 1201 1204 1250 +HSync +VSync
-
-EndSection
-""" % info
-
- def deviceSection (self):
- section = """
-# **********************************************************************
-# Graphics device section
-# **********************************************************************
-
-Section "Device"
- Identifier "Generic VGA Card"
- VendorName "Unknown"
- BoardName "Unknown"
- Chipset "generic"
-EndSection
-
-"""
for card in self.vidCards:
- section = section + """
+ devices = devices + """
Section "Device"
Identifier "%(NAME)s"
""" % card
if card.has_key ("VENDOR"):
- section = section + ' VendorName "%(VENDOR)s"\n' % card
+ devices = devices + ' VendorName "%(VENDOR)s"\n' % card
if card.has_key ("BOARDNAME"):
- section = section + ' BoardName "%(BOARD)s"\n' % card
+ devices = devices + ' BoardName "%(BOARD)s"\n' % card
if card.has_key ("RAMDAC"):
- section = section + ' Ramdac "%(RAMDAC)s"\n' % card
+ devices = devices + ' Ramdac "%(RAMDAC)s"\n' % card
if card.has_key ("LINE"):
- section = section + card["LINE"] + "\n"
+ devices = devices + card["LINE"] + "\n"
if self.vidRam:
- section = section + ' VideoRam %s\n' % (self.vidRam,)
- section = section + "EndSection\n"
- return section
-
- def screenSection (self, installer = 0):
- if installer and self.monSect:
- monID = "Probed Monitor"
- else:
- monID = self.monID
- if not monID:
- monID = "Generic Monitor"
-
- info = { "DEVICE" : self.devID,
- "MONITOR" : monID }
-
- maxdepth = -1
- for (depth, modes) in self.modes.items ():
- modes.sort (self.areaCompare)
- if len(modes) > 0 and string.atoi(depth) > maxdepth:
- maxdepth = string.atoi(depth)
-
- section = """
-# **********************************************************************
-# Screen section
-# **********************************************************************
-
-# The kernel framebuffer server
-Section "Screen"
- Driver "fbdev"
- Device "Generic VGA Card"
- Monitor "%(MONITOR)s"
- Subsection "Display"
-# Depth 16
- Modes "default"
- EndSubsection
-EndSection
-
-# The 16-color VGA server
-Section "Screen"
- Driver "vga16"
- Device "Generic VGA Card"
- Monitor "%(MONITOR)s"
- Subsection "Display"
- Modes "640x480" "800x600"
- ViewPort 0 0
- EndSubsection
-EndSection
+ devices = devices + ' VideoRam %s\n' % (self.vidRam,)
+ devices = devices + "EndSection\n"
-# The Mono server
-Section "Screen"
- Driver "vga2"
- Device "Generic VGA Card"
- Monitor "%(MONITOR)s"
- Subsection "Display"
- Modes "640x480" "800x600"
- ViewPort 0 0
- EndSubsection
-EndSection
-""" % info
if self.devID:
+ screens = ""
+ tmp = {}
+ maxdepth = -1
+ for (depth, modes) in self.modes.items ():
+ modes.sort (self.areaCompare)
+ if len(modes) > 0 and string.atoi(depth) > maxdepth:
+ maxdepth = string.atoi(depth)
+
+ if self.monID == "Unprobed Monitor":
+ monitor = "Generic Monitor"
+ else:
+ monitor = self.monID
+
for driver in [ "svga", "accel" ]:
- info["DRIVER"] = driver
- section = section + """
-# The %(DRIVER)s server
+ tmp["driver"] = driver
+ tmp["devID"] = self.devID
+ tmp["monitorID"] = monitor
+ screens = screens + """
+# The %(driver)s server
Section "Screen"
- Driver "%(DRIVER)s"
- Device "%(DEVICE)s"
- Monitor "%(MONITOR)s"
-""" % info
+ Driver "%(driver)s"
+ Device "%(devID)s"
+ Monitor "%(monitorID)s"
+""" % tmp
if maxdepth > 0:
- section = section + " DefaultColorDepth %d\n" % maxdepth
+ screens = screens + " DefaultColorDepth %d\n" % maxdepth
for depth in self.modes.keys ():
if not self.modes[depth]: continue
- section = section + """
+ screens = screens + """
Subsection "Display"
Depth %s
Modes """ % depth
for res in self.modes[depth]:
- section = section + '"' + res + '" '
- section = section + """
+ screens = screens + '"' + res + '" '
+ screens = screens + """
ViewPort 0 0
EndSubsection
"""
- section = section + "EndSection\n"
- return section
-
+ screens = screens + "EndSection\n"
+
+ info = { "acceleratedDevices" : devices,
+ "acceleratedScreens" : screens,
+ "devID" : self.devID,
+ "mouseProto" : self.mouse.info['XMOUSETYPE'],
+ "mouseDevice" : self.mouse.device,
+ "XkbRules" : self.keyRules,
+ "XkbModel" : self.keyModel,
+ "XkbLayout" : self.keyLayout,
+ "XkbVariant" : self.keyVariant,
+ "XkbOptions" : self.keyOptions,
+ "monitorID" : self.monID,
+ "monitorHoriz" : self.monHoriz,
+ "monitorVert" : self.monHoriz,
+ "files" : self.files }
+ if iutil.getArch() == "sparc":
+ info["autorepeat"] = "# AutoRepeat 200 20"
+ else:
+ info["autorepeat"] = " AutoRepeat 500 5"
+ return XF86Config_template % info
+
def Version4Config(self):
data = { "mouseProto" : self.mouse.info['XMOUSETYPE'],
"mouseDevice" : self.mouse.device,
@@ -1022,7 +1003,9 @@ if __name__ == "__main__":
x = XF86Config ()
print x.cards ("ATI Mach64 3D RAGE II")
x.probe ()
-# sys.exit (0)
+# print x.Version3Config()
+ print x.Version4Config()
+ sys.exit (0)
x.filterModesByMemory ()
print x.preludeSection ()
print x.keyboardSection ()
@@ -1033,3 +1016,43 @@ if __name__ == "__main__":
# x.modes["16"] = [ "640x480" ]
# x.modes["32"] = [ "640x480" ]
print x.screenSection ()
+
+# server = os.fork()
+# if not server:
+# print "starting", serverPath
+
+# args = [serverPath, ]
+# if serverPath[0:19] == '/usr/X11R6/bin/Xsun':
+# try:
+# os.unlink("/dev/mouse")
+# except:
+# pass
+# try:
+# f = open("/dev/tty5", "w")
+# f.write("\n")
+# f.close()
+# except:
+# pass
+# os.symlink(mouseDev, "/dev/mouse")
+# if x.device:
+# args.append ("-dev")
+# args.append ('/dev/' + x.device)
+# args.append("-fp")
+# args.append("/usr/X11R6/lib/X11/fonts/misc/,"
+# "/usr/X11R6/lib/X11/fonts/75dpi/,"
+# "/usr/X11R6/lib/X11/fonts/100dpi/,"
+# "/usr/X11R6/lib/X11/fonts/cyrillic/,"
+# "/usr/share/fonts/ISO8859-2/misc/,"
+# "/usr/share/fonts/ISO8859-2/75dpi/,"
+# "/usr/share/fonts/ISO8859-2/100dpi/")
+# else:
+# args.append("-xf86config")
+# args.append("/tmp/XF86Config")
+# # if bpp:
+# # args.append("-bpp")
+# # args.append(bpp)
+# # XXX XFree86 4.0 fatal errors without a /var/log/ to place logfile
+# if serverPath[-7:] == 'XFree86':
+# args.append("-logfile")
+# args.append("/dev/null")
+# os.execv(serverPath, args)
diff --git a/xserver.py b/xserver.py
index 0346b62d2..07b4e998e 100644
--- a/xserver.py
+++ b/xserver.py
@@ -7,6 +7,7 @@ import time
from xf86config import *
from kbd import Keyboard
from mouse import Mouse
+import time
def startX():
global serverPath
@@ -16,33 +17,14 @@ def startX():
serverPath = None
print "Probing for mouse type..."
- mice = kudzu.probe (kudzu.CLASS_MOUSE,
- kudzu.BUS_UNSPEC,
- kudzu.PROBE_ONE);
- if not mice:
- raise RuntimeError, "Unable to find a mouse!"
- device = None
- mouseProtocol = None
- (mouseDev, driver, descr) = mice[0]
- if mouseDev == 'psaux':
- mouseProtocol = "PS/2"
- mouseEmulate = 0
- # kickstart some ps/2 mice. Blame the kernel
- try:
- f = open ('/dev/psaux')
- f.write ('1')
- f.close
- except:
- pass
- elif mouseDev == 'sunmouse':
- mouseProtocol = "sun"
- mouseEmulate = 0
- else:
- mouseProtocol = "Microsoft"
- mouseEmulate = 1
+ mouse = Mouse()
+ if not mouse.probe ():
+ print "No mouse detected, GUI startup can not continue."
+ time.sleep (1)
+ print "Falling back to Text mode"
- x = XF86Config (Mouse((mouseProtocol, mouseEmulate, mouseDev)))
+ x = XF86Config (mouse)
x.probe ()
if x.server and len (x.server) >= 3 and x.server[0:3] == 'Sun':
serverPath = '/usr/X11R6/bin/Xs' + x.server[1:]
@@ -86,117 +68,8 @@ def startX():
symbols = symbols + "+iso9995-3(basic)"
elif kbd.layout != 'us':
symbols = symbols + "+" + kbd.layout
-
-# mouseEmulateStr="""
-# Emulate3Buttons
-# Emulate3Timeout 50
-# """
-# if not mouseEmulate:
-# mouseEmulateStr=""
-# settings = { "mouseDev" : '/dev/' + mouseDev ,
-# "mouseProto" : mouseProtocol,
-# "keycodes" : keycodes,
-# "symbols" : symbols,
-# "geometry" : geometry,
-# "rules" : rules,
-# "model" : model,
-# "emulate" : mouseEmulateStr }
-# f = open ('/tmp/XF86Config', 'w')
-# f.write ("""
-# Section "Files"
-# RgbPath "/usr/X11R6/lib/X11/rgb"
-# FontPath "/usr/X11R6/lib/X11/fonts/misc/"
-# FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
-# FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
-# FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
-# FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
-# FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/"
-# FontPath "/usr/share/fonts/ISO8859-2/misc/"
-# FontPath "/usr/share/fonts/ISO8859-2/75dpi/"
-# FontPath "/usr/share/fonts/ISO8859-2/100dpi/"
-# FontPath "/usr/share/fonts/ISO8859-9/misc/"
-# FontPath "/usr/share/fonts/ISO8859-9/75dpi/"
-# FontPath "/usr/share/fonts/ISO8859-9/100dpi/"
-# EndSection
-
-# Section "ServerFlags"
-# EndSection
-
-# Section "Keyboard"
-# Protocol "Standard"
-# AutoRepeat 500 5
-# LeftAlt Meta
-# RightAlt Meta
-# ScrollLock Compose
-# RightCtl Control
-# XkbKeycodes "%(keycodes)s"
-# XkbTypes "default"
-# XkbCompat "default"
-# XkbSymbols "%(symbols)s"
-# XkbGeometry "%(geometry)s"
-# XkbRules "%(rules)s"
-# XkbModel "%(model)s"
-# XkbLayout "us"
-# EndSection
-# Section "Pointer"
-# Protocol "%(mouseProto)s"
-# Device "%(mouseDev)s"
-# %(emulate)s
-# EndSection
-# """ % settings)
-# f.write (x.monitorSection (1))
-# f.write (x.deviceSection ())
-# if x.monSect:
-# bpp = x.bpp
-# else:
-# x.modes["32"] = [ ]
-# x.modes["16"] = [ ]
-# x.modes["8"] = [ "640x480" ]
-# bpp = None
-# f.write (x.screenSection (1))
- f = open ('/tmp/XF86Config', 'w')
- f.write (x.Version4Config())
- f.close ()
-
- server = os.fork()
- if not server:
- print "starting", serverPath
- args = [serverPath, ':1', 'vt7', '-s', '1440', '-terminate']
- if serverPath[0:19] == '/usr/X11R6/bin/Xsun':
- try:
- os.unlink("/dev/mouse")
- except:
- pass
- try:
- f = open("/dev/tty5", "w")
- f.write("\n")
- f.close()
- except:
- pass
- os.symlink(mouseDev, "/dev/mouse")
- if x.device:
- args.append ("-dev")
- args.append ('/dev/' + x.device)
- args.append("-fp")
- args.append("/usr/X11R6/lib/X11/fonts/misc/,"
- "/usr/X11R6/lib/X11/fonts/75dpi/,"
- "/usr/X11R6/lib/X11/fonts/100dpi/,"
- "/usr/X11R6/lib/X11/fonts/cyrillic/,"
- "/usr/share/fonts/ISO8859-2/misc/,"
- "/usr/share/fonts/ISO8859-2/75dpi/,"
- "/usr/share/fonts/ISO8859-2/100dpi/")
- else:
- args.append("-xf86config")
- args.append("/tmp/XF86Config")
-# if bpp:
-# args.append("-bpp")
-# args.append(bpp)
- # XXX XFree86 4.0 fatal errors without a /var/log/ to place logfile
- if serverPath[-7:] == 'XFree86':
- args.append("-logfile")
- args.append("/dev/null")
- os.execv(serverPath, args)
+ server = x.test ([':1', 'vt7', '-s', '1440', '-terminate'], spawn=1)
# give time for the server to fail (if it is going to fail...)
# FIXME: Should find out if X server is already running
@@ -221,9 +94,7 @@ def startX():
sys.exit((status >> 8) & 0xf)
- return ((mouseProtocol, mouseEmulate, mouseDev), x)
-
-
+ return (mouse, x)
#
# to start X server using existing XF86Config file (reconfig mode use only)