|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/22697/root/usr/share/firstboot/ |
Upload File : |
#!/usr/bin/python2
#
# xfirstboot.py - X-related firstboot functions
#
# Copyright (C) 2002, 2003, 2005 Red Hat, Inc.
# Copyright (C) 2002, 2003 Brent Fox <bfox@redhat.com>
# Copyright (C) 2005, 2006 Chris Lumens <clumens@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import os
import sys
import rhpl.keyboard as keyboard
import rhpl
import firstbootBackend
sys.path.append("/usr/share/firstboot")
from firstboot import Firstboot
DISPLAY_FILE = "/etc/rhgb/temp/display"
class XFirstboot (Firstboot):
def mergeXresources(self):
path = "/etc/X11/Xresources"
if os.access(path, os.R_OK):
os.system("xrdb -merge %s" % path)
# Initializes the UI for firstboot by starting up an X server and
# window manager, but returns control to the caller to proceed.
def startGraphicalUI(self):
import rhpxl.xserver
import rhpxl.xhwstate as xhwstate
import rhpxl.monitor
xserver = rhpxl.xserver.XServer()
xserver.probeHW(skipMouseProbe=0)
xserver.setHWState()
xserver.keyboard = keyboard.Keyboard()
if self.lowRes:
xserver.resolution = "640x480"
else:
xserver.resolution = "800x600"
xhwstate.get_valid_resolution(xserver)
try:
xserver.generateConfig()
xserver.addExtraScreen("Firstboot")
xserver.serverflags.extend(["-screen", "Firstboot"])
self.xserver_pid = xserver.startX()
except RuntimeError:
sys.stderr.write("X SERVER FAILED TO START")
raise RuntimeError, "X server failed to start"
# Init GTK to connect to the X server, then write a token on a pipe to
# tell our parent process that we're ready to start metacity.
(rd, wr) = os.pipe()
pid = os.fork()
if pid == 0:
import gtk
os.write(wr, "#")
# block until the X server is killed
gtk.main()
os._exit(0)
# Block on read of token
os.read(rd, 1)
os.close(rd)
os.close(wr)
self.wm_pid = self.startWindowManager()
self.mergeXresources()
# Initializes the UI for firstboot via rhgb, but returns control to
# the caller to proceed.
def startRhgbUI(self):
try:
os.environ["DISPLAY"] = open(DISPLAY_FILE, "r").read()
except:
os.environ["DISPLAY"] = "127.0.0.1:0"
#However, we still need to start up metacity and merge the X resources
self.wm_pid = self.startWindowManager()
self.mergeXresources()
self.rhgb = True
# Attempt to start up the window manager. Check the value of self.wm_pid
# afterwards to see if this succeeded.
def startWindowManager(self):
self.wm_pid = os.fork()
if not self.wm_pid:
path = '/usr/bin/metacity'
args = [path, '--display=%s' % os.environ["DISPLAY"]]
os.execvp(path, args)
status = 0
try:
pid, status = os.waitpid (self.wm_pid, os.WNOHANG)
except OSError, (errno, msg):
print "in except"
print __name__, "waitpid:", msg
if status:
raise RuntimeError, "Window manager failed to start"