1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
import os
import string
import kudzu
import isys
import sys
import time
from xf86config import *
def startX():
global serverPath
global mode
os.environ['DISPLAY'] = ':1'
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':
mousePrototol = "Sun"
mouseEmulate = 0
else:
mouseProtocol = "Microsoft"
mouseEmulate = 1
x = XF86Config ((mouseProtocol, mouseEmulate, mouseDev))
x.probe ()
if x.server[0:3] == 'Sun':
serverPath = '/usr/X11R6/bin/Xs' + x.server[1:]
elif x.server:
serverPath = '/usr/X11R6/bin/XF86_' + x.server
else:
print "Unknown card, falling back to VGA16"
serverPath = '/usr/X11R6/bin/XF86_VGA16'
if not os.access (serverPath, os.X_OK):
print serverPath, "missing. Falling back to VGA16"
serverPath = '/usr/X11R6/bin/XF86_VGA16'
settings = { "mouseDev" : '/dev/' + mouseDev ,
"mouseProto" : mouseProtocol }
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/"
EndSection
Section "ServerFlags"
EndSection
Section "Keyboard"
Protocol "Standard"
AutoRepeat 500 5
LeftAlt Meta
RightAlt Meta
ScrollLock Compose
RightCtl Control
XkbKeymap "xfree86(us)"
XkbKeycodes "xfree86"
XkbTypes "default"
XkbCompat "default"
XkbSymbols "us(pc101)"
XkbGeometry "pc"
XkbRules "xfree86"
XkbModel "pc101"
XkbLayout "us"
EndSection
Section "Pointer"
Protocol "%(mouseProto)s"
Device "%(mouseDev)s"
Emulate3Buttons
Emulate3Timeout 50
EndSection
""" % settings)
f.write (x.monitorSection ())
f.write (x.deviceSection ())
x.modes["8"] = [ "640x480" ]
x.modes["16"] = [ "640x480" ]
x.modes["32"] = [ "640x480" ]
f.write (x.screenSection ())
f.close ()
server = os.fork()
if (not server):
print "starting", serverPath
if serverPath[0:19] == '/usr/X11R6/bin/Xsun':
try:
os.unlink("/dev/mouse")
except:
pass
os.symlink(mouseDev, "/dev/mouse")
os.execv(serverPath, [serverPath, 'vt7', '-dev', '/dev/' + x.device])
else:
os.execv(serverPath, [serverPath, ':1', '-xf86config',
'/tmp/XF86Config', 'vt7'])
# give time for the server to fail (if it is going to fail...)
time.sleep (1)
pid, status = os.waitpid (server, os.WNOHANG)
if status:
raise RuntimeError, "X server failed to start"
child = os.fork()
if (child):
try:
pid, status = os.waitpid(child, 0)
except:
sys.exit (-1)
sys.exit((status >> 8) & 0xf)
return ((mouseProtocol, mouseEmulate, mouseDev), x)
|