/usr/bin/cinnamon-launcher is in cinnamon 3.2.7-4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 | #!/usr/bin/python3
#
""" Launches or restarts cinnamon
"""
FALLBACK_COMMAND = "metacity"
FALLBACK_ARGS = ("--replace",)
import os
import sys
import gettext
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
gettext.install("cinnamon", "/usr/share/locale")
panel_process_name = None
panel_cmd = None
if os.path.exists("/usr/bin/mate-panel"):
panel_process_name = "mate-panel"
panel_cmd = "mate-panel --replace &"
elif os.path.exists("/usr/bin/gnome-panel"):
panel_process_name = "gnome-panel"
panel_cmd = "gnome-panel --replace &"
elif os.path.exists("/usr/bin/tint2"):
panel_process_name = "tint2"
panel_cmd = "killall tint2; tint2 &"
def confirm_restart():
d = Gtk.MessageDialog(parent=None, flags=0, message_type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.YES_NO)
d.set_keep_above(True)
d.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
d.set_markup("<span size='large'><b>%s</b></span>\n\n%s" % (_("Cinnamon just crashed. You are currently running in Fallback Mode."), _("Do you want to restart Cinnamon?")))
d.show_all()
resp = d.run()
d.destroy()
return (resp == Gtk.ResponseType.YES)
if __name__ == "__main__":
cinnamon_pid = os.fork()
if cinnamon_pid == 0:
os.execvp("cinnamon", ("cinnamon", "--replace", ) + tuple(sys.argv[1:]))
else:
exit_status = os.waitpid(cinnamon_pid, 0)[1]
if exit_status != 0:
if os.fork() == 0:
# Start the fallback panel
if panel_cmd is not None:
os.system(panel_cmd)
# Start the fallback window manager
os.execvp(FALLBACK_COMMAND, (FALLBACK_COMMAND,) + FALLBACK_ARGS)
else:
if confirm_restart():
# Kill the fallback panel
os.system("killall %s" % panel_process_name)
# Restart Cinnamon
os.execvp(sys.argv[0], (sys.argv[0], "--replace"))
|