summaryrefslogtreecommitdiffstats
path: root/xserver.py
diff options
context:
space:
mode:
authorMike Fulbright <msf@redhat.com>2002-11-12 16:50:41 +0000
committerMike Fulbright <msf@redhat.com>2002-11-12 16:50:41 +0000
commitb25fb5e80f8034b964f31030320c658b8be3ef86 (patch)
treee631f8c590f51003a13118233b6f62e92b5ca522 /xserver.py
parenta1d21620790fd4b31a9d006145c18b19ab083f48 (diff)
downloadanaconda-b25fb5e80f8034b964f31030320c658b8be3ef86.tar.gz
anaconda-b25fb5e80f8034b964f31030320c658b8be3ef86.tar.xz
anaconda-b25fb5e80f8034b964f31030320c658b8be3ef86.zip
changes to work with new xsetup object
Diffstat (limited to 'xserver.py')
-rw-r--r--xserver.py217
1 files changed, 174 insertions, 43 deletions
diff --git a/xserver.py b/xserver.py
index 7dea40c5f..ae6e166ec 100644
--- a/xserver.py
+++ b/xserver.py
@@ -20,7 +20,6 @@ import kudzu
import isys
import sys
import time
-from xf86config import *
from flags import flags
@@ -29,11 +28,8 @@ from constants_text import *
from mouse_text import MouseWindow, MouseDeviceWindow
from rhpl.translate import _
-from rhpl.keyboard import Keyboard
-from rhpl.mouse import Mouse
-from rhpl.videocard import VGA16Card, VESADriverCard
-
-serverPath = ""
+from rhpl.xhwstate import *
+from rhpl.log import log
def mouseWindow(mouse):
screen = SnackScreen()
@@ -92,10 +88,7 @@ def startMiniWM(root='/'):
# start X server for install process ONLY
-def startX(resolution, nofbmode, video, monitor, mouse, keyboard):
- global serverPath
- global mode
-
+def startX(resolution, video, monitor, mouse, keyboard):
os.environ['DISPLAY'] = ':1'
serverPath = None
@@ -109,7 +102,7 @@ def startX(resolution, nofbmode, video, monitor, mouse, keyboard):
if attempt == 'PROBED':
if video.primaryCard():
print _("Attempting to start native X server")
- card = video.primaryCard()
+ card = video.primaryCard().getDevID()
else:
card = None
next_attempt = 'VESA'
@@ -118,38 +111,32 @@ def startX(resolution, nofbmode, video, monitor, mouse, keyboard):
print _("Attempting to start VESA driver X server")
vram = video.primaryCard().getVideoRam()
if vram:
- card = VESADriverCard(vram)
+ card = "VESA driver (generic)"
else:
card = None
else:
card = None
next_attempt = 'END'
-#
-# Disabling VGA16 - does bad things with Xft currently
-#
-# elif attempt == 'VGA16':
- # if no xserver then try falling back to VGA16 in no fb
-# card = VGA16Card()
-#
-# print _("Attempting to start VGA16 X server")
-# next_attempt = 'END'
else:
print "Got off end somehow!"
break
- if card and card.getXServer() != None:
- serverPath = '/usr/X11R6/bin/' + card.getXServer()
+ if card:
+ #
+ # XXX - assuming 'XFree86' is the binary for server
+ #
+ servername = 'XFree86'
+ serverPath = '/usr/X11R6/bin/' + servername
if os.access (serverPath, os.X_OK):
try:
- x = XF86Config (card, monitor, mouse, keyboard, resolution)
-
- if x.res == "640x480":
- x.setForcedDPI(75)
- else:
- x.setForcedDPI(96)
-
- testx(x)
+ hwstate = XF86HardwareState(defcard=video,
+ defmon=monitor,
+ probeflags=XF86HW_PROBE_NONE)
+ hwstate.set_resolution(resolution)
+ hwstate.set_videocard_card(card)
+ testx(hwstate, mouse, keyboard)
+
failed = 0
break
@@ -162,19 +149,23 @@ def startX(resolution, nofbmode, video, monitor, mouse, keyboard):
if failed:
raise RuntimeError, "No X server binaries found to run"
- return x
+ return hwstate
+
-def testx(x):
+def testx(hwstate, mouse, keyboard):
try:
- server = x.test ([':1', 'vt7', '-s', '1440', '-terminate',
- '-dpms', '-v', '-ac', '-nolisten', 'tcp'], spawn=1)
+ server = writeXConfigAndRunX(hwstate, mouse, keyboard,
+ serverflags = [':1', 'vt7', '-s', '1440',
+ '-terminate', '-dpms', '-v',
+ '-ac', '-nolisten', 'tcp'],
+ standalone = 1)
except:
- import traceback
- server = None
- (type, value, tb) = sys.exc_info()
- list = traceback.format_exception (type, value, tb)
- text = string.joinfields (list, "")
- print text
+ import traceback
+ server = None
+ (type, value, tb) = sys.exc_info()
+ list = traceback.format_exception (type, value, tb)
+ text = string.joinfields (list, "")
+ print text
# give time for the server to fail (if it is going to fail...)
# FIXME: Should find out if X server is already running
@@ -216,7 +207,12 @@ def testx(x):
print _(" X server started successfully.")
# now start up mini-wm
- if not flags.test:
+ #
+ # I think its ok to always try if we actually had to start an X server
+ #
+ # if not flags.test or 1:
+
+ if 1:
try:
miniwm_pid = startMiniWM()
log("Started mini-wm")
@@ -225,7 +221,26 @@ def testx(x):
log("Unable to start mini-wm")
else:
miniwm_pid = None
-
+
+ # test to setup dpi
+ # cant do this if miniwm didnt run because otherwise when
+ # we open and close an X connection in the xutils calls
+ # the X server will exit since this is the first X
+ # connection (if miniwm isnt running)
+ if miniwm_pid is not None:
+ import xutils
+
+ if xutils.screenWidth() > 640:
+ dpi = "96"
+ else:
+ dpi = "75"
+
+ xutils.setRootResource('Xft.antialias', '1')
+ xutils.setRootResource('Xft.dpi', dpi)
+ xutils.setRootResource('Xft.hinting', '1')
+ xutils.setRootResource('Xft.hintstyle', 'hintslight')
+ xutils.setRootResource('Xft.rgba', 'none')
+
child = os.fork()
if (child):
# here we fork and wait on our child, which will contine
@@ -258,3 +273,119 @@ def testx(x):
sys.exit(0)
sys.exit(-1)
+
+#
+# should probably be in rhpl
+#
+def writeXConfig(filename, hwstate, mouse, keyboard, standalone = 0):
+ if hwstate.videocard == None:
+ return None
+
+ standalone_fontpaths = ["/usr/X11R6/lib/X11/fonts/misc:unscaled",
+ "/usr/X11R6/lib/X11/fonts/Type1/",
+ "/usr/X11R6/lib/X11/fonts/Speedo/",
+ "/usr/X11R6/lib/X11/fonts/75dpi:unscaled",
+ "/usr/X11R6/lib/X11/fonts/100dpi:unscaled",
+ "/usr/X11R6/lib/X11/fonts/korean:unscaled",
+ "/usr/X11R6/lib/X11/fonts/cyrillic:unscaled",
+ "/usr/share/fonts/ISO8859-2/misc:unscaled",
+ "/usr/share/fonts/ISO8859-2/75dpi:unscaled",
+ "/usr/share/fonts/ISO8859-2/100dpi:unscaled",
+ "/usr/share/fonts/ISO8859-9/misc:unscaled",
+ "/usr/share/fonts/ISO8859-9/75dpi:unscaled",
+ "/usr/share/fonts/ISO8859-9/100dpi:unscaled",
+ "/usr/share/fonts/KOI8-R/misc:unscaled",
+ "/usr/share/fonts/KOI8-R/75dpi:unscaled"
+ ]
+
+ #
+ # get an xg86config object that represents the config file we're going
+ # to write out
+ #
+ xcfgdata = hwstate.generate_xconfig(mouse, keyboard)
+
+ # add the font paths we need if desired
+ if standalone:
+ files = xcfgdata.files
+ tmpfp = files.fontpath
+ newfp = ""
+ for fp in standalone_fontpaths:
+ newfp = newfp + fp + ","
+
+ newfp = newfp + tmpfp
+
+ files.fontpath = newfp
+
+ xcfgdata.write(filename)
+
+#
+# should probably be in rhpl
+#
+#
+# hwstate is a X hw state object from rhpl.xhwstate
+# mouse is mouse object from rhpl.mouse
+# keyboard is a keyboard object from rhpl.keyboard
+# serverflags are extra flags to throw at X server command line
+# root is top of hierarchy we look for X server in
+# standalone = 1 means we're running without xfs (anaconda mode essentially)
+#
+def writeXConfigAndRunX(hwstate, mouse, keyboard, serverflags=None,
+ root='/', standalone = 0):
+
+ if hwstate.videocard == None:
+ return None
+
+ #
+ # XXX - Assuming X server binary is 'XFree86'
+ #
+ servername = 'XFree86'
+ use_resolution = hwstate.get_resolution()
+
+ #
+ # make text fit on screen
+ #
+ if use_resolution == "640x480":
+ forced_dpi = 75
+ else:
+ forced_dpi = 96
+
+ # write X Config
+ writeXConfig('%s/tmp/XF86Config.test' % (root,), hwstate, mouse, keyboard, standalone)
+
+ # setup to run X server
+ serverPath = "/usr/X11R6/bin/" + servername
+
+ serverpid = os.fork()
+
+ if (not serverpid):
+ if (root and root != '/'):
+ os.chroot (root)
+ os.chdir("/")
+
+ args = [serverPath, '-xf86config', '/tmp/XF86Config.test' ]
+ logFile = "/tmp/X.log"
+ if servername == "XFree86":
+ args = args + [ "-logfile", "/dev/null" ]
+ if serverflags:
+ args = args + serverflags
+ else:
+ args = args + [ ":9", "vt6" ]
+ logFile = "/tmp/X-Test.log"
+
+ try:
+ err = os.open(logFile, os.O_RDWR | os.O_CREAT)
+ if err < 0:
+ sys.stderr.write("error opening /tmp/X.log\n")
+ else:
+ os.dup2(err, 2)
+ os.close(err)
+ except:
+ # oh well
+ pass
+
+ os.execv(args[0], args)
+ sys.exit (1)
+
+ return serverpid
+
+