diff options
author | Matt Wilson <msw@redhat.com> | 1999-08-31 16:18:55 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 1999-08-31 16:18:55 +0000 |
commit | 8b7c52b16284d9f6e82e76171debac48dad1a14e (patch) | |
tree | 2e5a1a997a388c0ca99b781e585a1d8e1ce9a89f /xf86config.py | |
parent | 1ed3a0670a91d11c1b380fb283c7d218350221a2 (diff) | |
download | anaconda-8b7c52b16284d9f6e82e76171debac48dad1a14e.tar.gz anaconda-8b7c52b16284d9f6e82e76171debac48dad1a14e.tar.xz anaconda-8b7c52b16284d9f6e82e76171debac48dad1a14e.zip |
xf86config
Diffstat (limited to 'xf86config.py')
-rw-r--r-- | xf86config.py | 644 |
1 files changed, 644 insertions, 0 deletions
diff --git a/xf86config.py b/xf86config.py new file mode 100644 index 000000000..fec260a4d --- /dev/null +++ b/xf86config.py @@ -0,0 +1,644 @@ +import sys +if __name__ == "__main__": + sys.path.append ('kudzu') + sys.path.append ('isys') +import string +import iutil +import kudzu + +def _(x): + return x + +class XF86Config: + def __init__ (self): + self.server = None + self.vidCards = [] + self.vidRam = None + self.monEisa = None + self.monName = None + self.monHoriz = None + self.monVert = None + self.monID = None + self.devID = None + self.probed = 0 + + def cards (self, thecard = None): + cards = {} + db = open ('/usr/X11R6/lib/X11/Cards') + lines = db.readlines () + db.close () + card = {} + name = None + for line in lines: + line = string.strip (line) + if not line and name: + cards[name] = card + card = {} + name = None + continue + + if line and line[0] == '#': + continue + + if len (line) > 4 and line[0:4] == 'NAME': + name = line[5:] + + info = string.splitfields (line, ' ') + if card.has_key (info[0]): + card[info[0]] = card[info[0]] + '\n' + (string.joinfields (info[1:], ' ')) + else: + card[info[0]] = string.joinfields (info[1:], ' ') + + if thecard: + card = cards[thecard] + if card.has_key ("SEE"): + return cards[card["SEE"]] + + return cards[thecard] + return cards + + def monitors (self, lines = None): + monitors = [] + if not lines: + db = open ('/usr/X11R6/share/Xconfigurator/MonitorsDB') + lines = db.readlines () + db.close () + found = 0 + for line in lines: + line = string.strip (line) + if not line: + continue + if line and line[0] == '#': + continue + monitors.append (string.split (line, ';', 1)[0]) + return monitors + + + def probe (self): + if self.probed: + return + self.probed = 1 + # PCI probe for video cards + sections = {} + + cards = kudzu.probe (kudzu.CLASS_VIDEO, + kudzu.BUS_UNSPEC, + kudzu.PROBE_ALL); + for card in cards: + section = "" + (device, server, descr) = card + if len (server) > 5 and server[0:5] == "Card:": + self.vidCards.append (self.cards (server[5:])) + if len (server) > 5 and server[0:7] == "Server:": + { "NAME" : descr, + "SERVER" : server[8:] } + self.vidCards.append ({ "NAME" : descr, "SERVER" : server[8:] }) + + if self.vidCards: + self.devID = self.vidCards[0]["NAME"] + self.server = self.vidCards[0]["SERVER"] + + # VESA probe for monitor/videoram, etc. + probe = string.split (iutil.execWithCapture ("ddcprobe/ddcprobe", ['ddcprobe']), '\n') + + for line in probe: + if line and line[:9] == "OEM Name:": + self.cardMan = string.strip (line[10:]) + + if line and line[:16] == "Memory installed": + memory = string.split (line, '=') + self.vidRam = string.strip (memory[2][:-2]) + + if line and line[:8] == "EISA ID:": + self.monEisa = line[9:] + + if line and line[:6] == "\tName:": + self.monName = line[7:] + + if line and line[:15] == "\tTiming ranges:": + ranges = string.split (line, ',') + self.monHoriz = string.strip (string.split (ranges[0], '=')[1]) + self.monVert = string.strip (string.split (ranges[1], '=')[1]) + + if self.vidCards and self.cardMan: + self.vidCards[0]["VENDOR"] = self.cardMan + + def probeReport (self): + probe = "" + if self.vidCards: + probe = probe + _("Video Card") + ": " + self.vidCards[0]["NAME"] + "\n" + if self.vidRam: + probe = probe + "\t" + _("Video Ram") + ": " + self.vidRam + " kb\n" + if self.server: + probe = probe + "\t" + _("X server") + ": " + self.server + "\n" + + probe = probe + "\n" + + if self.monName: + probe = probe + _("Monitor") + ": " + self.monName + "\n" + elif self.monEisa: + probe = probe + _("Monitor") + ": " + _("Plug and Play Monitor") + "\n" + if self.monHoriz: + probe = probe + "\t" + _("Horizontal frequency range") + ": " + self.monHoriz + " kHz\n" + if self.monHoriz: + probe = probe + "\t" + _("Vertical frequency range") + ": " + self.monVert + " Hz\n" + + return probe + + 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 "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 inputSection (self): + return """ +# ********************************************************************** +# Keyboard section +# ********************************************************************** + +Section "Keyboard" + Protocol "Standard" + + # when using XQUEUE, comment out the above line, and uncomment the + # following line + # Protocol "Xqueue" + + AutoRepeat 500 5 + + # 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" + +# These are the default XKB settings for XFree86 +# XkbRules "xfree86" +# XkbModel "pc101" +# XkbLayout "us" +# XkbVariant "" +# XkbOptions "" + + XkbKeycodes "xfree86" + XkbTypes "default" + XkbCompat "default" + XkbSymbols "us(pc101)" + XkbGeometry "pc" + XkbRules "xfree86" + XkbModel "pc101" + XkbLayout "us" +EndSection +""" + + def mouseSection (self): + return """ +# ********************************************************************** +# Pointer section +# ********************************************************************** + +Section "Pointer" + Protocol "PS/2" + 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 +""" + + def monitorSection (self): + info = {} + + if self.monEisa: + info["EISA"] = self.monEisa + else: + info["EISA"] = "My Monitor" + + self.monID = info["EISA"] + + if self.monVert: + info["VERT"] = self.monVert + else: + info["VERT"] = "50-100" + + if self.monHoriz: + info["HORIZ"] = self.monHoriz + else: + info["HORIZ"] = "50-100" + + return """ +# ********************************************************************** +# Monitor section +# ********************************************************************** + +# Any number of monitor sections may be present +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 + +# --- 640x480 --- +# 640x480 @ 60 Hz, 31.5 kHz hsync + Modeline "640x480" 25.175 640 664 760 800 + 480 491 493 525 +# 640x400 @ 70 Hz, 31.5 kHz hsync + Modeline "640x400" 25.175 640 664 760 800 + 400 409 411 450 +# 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 +# 640x400 @ 85 Hz, 37.86 kHz hsync + Modeline "640x400" 31.5 640 672 736 832 + 400 401 404 445 -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 +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 + """ +Section "Device" + Identifier "%(NAME)s" +""" % card + if card.has_key ("VENDOR"): + section = section + ' VendorName "%(VENDOR)s"\n' % card + if card.has_key ("BOARDNAME"): + section = section + ' BoardName "%(BOARD)s"\n' % card + if card.has_key ("RAMDAC"): + section = section + ' Ramdac "%(RAMDAC)s"\n' % card + if card.has_key ("LINE"): + section = section + card["LINE"] + "\n" + if self.vidRam: + section = section + ' VideoRam %s\n' % (self.vidRam,) + section = section + "EndSection\n" + return section + + def screenSection (self): + info = { "DRIVER" : string.lower (self.server), + "DEVICE" : self.devID, + "MONITOR" : self.monID } + 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 + +# 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 + +# The Mono server +Section "Screen" + Driver "vga2" + Device "Generic VGA Card" + Monitor "%(MONITOR)s" + Subsection "Display" + Modes "640x480" "800x600" + ViewPort 0 0 + EndSubsection +EndSection + +# The accelerated server + Section "Screen" + Driver "%(DRIVER)s" + Device "%(DEVICE)s" + Monitor "%(MONITOR)s" +""" % info +# for depth in self.depths: + for depth in [ '32', '24', '16', '8']: + section = section + """ + Subsection "Display" + Depth %s + Modes "1280x1024" "1024x768" "800x600" "640x480" + ViewPort 0 0 + EndSubsection +""" % (depth,) + section = section + "EndSection\n" + return section + +if __name__ == "__main__": + sys.path.append ("kudzu") + x = XF86Config () + + x.probe () + print x.preludeSection () + print x.inputSection () + print x.mouseSection () + print x.monitorSection () + print x.deviceSection () + print x.screenSection () |