diff --git a/scripts/launcher.py b/scripts/launcher.py index a45fc5f9b..31e906a34 100644 --- a/scripts/launcher.py +++ b/scripts/launcher.py @@ -78,7 +78,10 @@ class Launcher: plugin = os.path.join(self.plugin_dir, "libgnome-shell.la") args.extend(['metacity', '--mutter-plugins=' + plugin, '--replace']) return subprocess.Popen(args, env=env) - + + def is_verbose (self): + """Returns whether the Launcher was started in verbose mode""" + return self.options.verbose diff --git a/scripts/start-replace b/scripts/start-replace index 2bf5f1c69..af914aa2a 100755 --- a/scripts/start-replace +++ b/scripts/start-replace @@ -8,29 +8,54 @@ from launcher import Launcher launcher = Launcher() +def find_cmd (cmd_list): + """ + Takes a list of command candidates and returns the first one that exists. + Raises a system exit if none of the commands exist. + """ + for cmd in cmd_list: + if os.path.exists(cmd): + return cmd + + raise SystemExit("None of the commands %s exist" % cmd_list) + try: # Kill gnome-panel in a way that it won't autorespawn - pidof = subprocess.Popen(["/sbin/pidof", "gnome-panel"], stdout=subprocess.PIPE) + pidof_cmd = find_cmd(["/sbin/pidof", "/bin/pidof", "/usr/bin/pidof"]) + + pidof = subprocess.Popen([pidof_cmd, "gnome-panel"], stdout=subprocess.PIPE) pids = pidof.communicate()[0].split() pidof.wait() devnull = open("/dev/null", "w") for pid in pids: + if launcher.is_verbose(): + print "Terminating panel process %s" % pid subprocess.call(["gdb", "-batch-silent", "-ex", "call panel_session_do_not_restart()", "-ex", "call exit(0)", "-p", pid], stdout=devnull, stderr=devnull) devnull.close() - + + if launcher.is_verbose(): + print "Starting shell" shell = launcher.start_shell() # Wait for shell to exit try: + if launcher.is_verbose(): + print "Waiting for shell to exit" shell.wait() + if launcher.is_verbose(): + print "Shell is dead" except KeyboardInterrupt, e: os.kill(shell.pid, signal.SIGKILL) shell.wait() + if launcher.is_verbose(): + print "Shell killed" finally: # Restart gnome-panel and window manager - + if launcher.is_verbose(): + print "Restarting Metacity and Gnome Panel" + subprocess.Popen(["/usr/bin/metacity"]) subprocess.Popen(["/usr/bin/gnome-panel"])