diff options
author | Matt Wilson <msw@redhat.com> | 2000-04-27 15:39:02 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 2000-04-27 15:39:02 +0000 |
commit | 7fb1679581871ed83bac3cbcddcc46aa162dc5c4 (patch) | |
tree | 8caeb16188f142ed8948b6f24fc09b0d9352d6eb | |
parent | 58fbf93ed369ca8cf76f712db9f10a90c36d6e0c (diff) | |
download | anaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.tar.gz anaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.tar.xz anaconda-7fb1679581871ed83bac3cbcddcc46aa162dc5c4.zip |
second pass at XFree86 4.0 support
-rwxr-xr-x | gui.py | 2 | ||||
-rw-r--r-- | iw/mouse_gui.py | 19 | ||||
-rw-r--r-- | mouse.py | 129 | ||||
-rw-r--r-- | todo.py | 13 | ||||
-rw-r--r-- | xf86config.py | 1135 | ||||
-rw-r--r-- | xserver.py | 147 |
6 files changed, 687 insertions, 758 deletions
@@ -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 @@ -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') + @@ -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) |