[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[rhel6-branch] set the resolution with resolution= from the cmdline (#594918).



tested x86_64 and vmware. note that the xrandr call does nothing if
--dpi=96 is also present, so I didn't use it. The fonts can therefore look
smaller/larger than usual.
---
 anaconda             |   35 +++++++++++++++++++++++++----------
 scripts/upd-instroot |    1 +
 2 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/anaconda b/anaconda
index 7be6cc8..4319fd5 100755
--- a/anaconda
+++ b/anaconda
@@ -73,7 +73,7 @@ def startAuditDaemon():
     os.waitpid(childpid, 0)
 
 # function to handle X startup special issues for anaconda
-def doStartupX11Actions(runres="800x600"):
+def doStartupX11Actions():
     global wm_pid
 
     setupGraphicalLinks()
@@ -89,7 +89,6 @@ def doStartupX11Actions(runres="800x600"):
 
     if wm_pid is not None:
         import xutils
-        import gtk
 
         try:
             xutils.setRootResource('Xcursor.size', '24')
@@ -104,6 +103,23 @@ def doStartupX11Actions(runres="800x600"):
             sys.stderr.write("X SERVER STARTED, THEN FAILED");
             raise RuntimeError, "X server failed to start"
 
+def set_x_resolution(runres):
+    # cant do this if no window manager is running 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 no window manager is running)
+    if runres and opts.display_mode == 'g' and not flags.usevnc and wm_pid :
+        try:
+            log.info("Setting the screen resolution to: %s.", runres)
+            iutil.execWithRedirect("xrandr", 
+                                   ["-d", ":1", "-s", runres, "--dpi", "96"],
+                                   stdout="/dev/tty5", stderr="/dev/tty5")
+        except RuntimeError as e:
+            log.error("The X resolution not set")
+            iutil.execWithRedirect("xrandr",
+                                   ["-d", ":1", "-q"],
+                                   stdout="/dev/tty5", stderr="/dev/tty5")
+
+
 def doShutdownX11Actions():
     global wm_pid
     
@@ -167,8 +183,6 @@ def setupPythonUpdates():
         shutil.copyfile(rule, target)
 
 def parseOptions():
-    def resolution_cb (option, opt_str, value, parser):
-        parser.values.runres = value
 
     op = OptionParser()
     # Interface
@@ -198,8 +212,7 @@ def parseOptions():
     # Display
     op.add_option("--headless", dest="isHeadless", action="store_true", default=False)
     op.add_option("--nofb")
-    op.add_option("--resolution", action="callback", callback=resolution_cb, dest="runres",
-                  default="800x600", nargs=1, type="string")
+    op.add_option("--resolution", dest="runres", default=None)
     op.add_option("--serial", action="store_true", default=False)
     op.add_option("--usefbx", dest="xdriver", action="store_const", const="fbdev")
     op.add_option("--virtpconsole")
@@ -961,10 +974,10 @@ if __name__ == "__main__":
             # us SIGUSR1 if it succeeds.  if it fails, catch SIGCHLD and bomb out.
 
             def sigchld_handler(num, frame):
-                raise OSError
+                raise OSError(0, "SIGCHLD caught when trying to start the X server.")
 
             def sigusr1_handler(num, frame):
-                pass
+                log.debug("X server has signalled a successful start.")
 
             def preexec_fn():
                 signal.signal(signal.SIGUSR1, signal.SIG_IGN)
@@ -982,7 +995,7 @@ if __name__ == "__main__":
             signal.pause()
 
             os.environ["DISPLAY"] = ":1"
-            doStartupX11Actions(opts.runres)
+            doStartupX11Actions()
             xserver_pid = proc.pid
         except (OSError, RuntimeError):
             stdoutLog.warning(" X startup failed, falling back to text mode")
@@ -993,6 +1006,8 @@ if __name__ == "__main__":
             signal.signal(signal.SIGUSR1, old_sigusr1)
             signal.signal(signal.SIGCHLD, old_sigchld)
 
+    set_x_resolution(opts.runres)
+
     if opts.display_mode == 't' and graphical_failed and not anaconda.isKickstart:
         ret = vnc.askVncWindow()
         if ret != -1:
@@ -1004,7 +1019,7 @@ if __name__ == "__main__":
     # if they want us to use VNC do that now
     if opts.display_mode == 'g' and flags.usevnc:
         runVNC()
-        doStartupX11Actions(opts.runres)
+        doStartupX11Actions()
 
     anaconda.setInstallInterface(opts.display_mode)
 
diff --git a/scripts/upd-instroot b/scripts/upd-instroot
index 22b7192..7522db5 100755
--- a/scripts/upd-instroot
+++ b/scripts/upd-instroot
@@ -582,6 +582,7 @@ usr/bin/vncconfig
 usr/bin/vncpasswd
 usr/bin/wget
 usr/bin/xkbcomp
+usr/bin/xrandr
 usr/bin/zenity
 usr/lib/anaconda
 usr/lib/anaconda-runtime
-- 
1.6.6


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]