Le fichier main.py est situé à la racine du projet (grimos_build/). C'est le tout premier fichier exécuté par Python lorsque le système d'exploitation démarre (généralement appelé par le script .xinitrc de Linux via la commande startx). C'est l'étincelle qui allume le moteur de GrimOS.
root = tk.Tk(), qui est la fenêtre mère absolue de tout le système. Elle est configurée pour prendre tout l'écran (-fullscreen).on_global_click) : Ce script contient un "hack" essentiel. Il intercepte tous les clics gauches (<ButtonPress-1>) sur l'écran. Si l'utilisateur clique à l'intérieur d'une fausse fenêtre (Window), ce gestionnaire ordonne à la fenêtre de passer au premier plan (w.lift()), simulant le comportement d'un vrai bureau.root.mainloop(). C'est cette boucle infinie qui maintient l'ordinateur éveillé et gère l'affichage à 60 images par seconde.restart_requested), le script utilise os.execl pour tuer le processus Python actuel et le relancer immédiatement à partir de zéro, permettant de recharger tous les fichiers du système sans redémarrer le serveur X11.root.geometry() ici pour étendre le Canvas sur plusieurs moniteurs.import sys
import os
import tkinter as tk
# Add project root to path
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from core.config import load_settings
from core.desktop import Desktop
def main():
settings = load_settings()
root = tk.Tk()
root.config(cursor="left_ptr")
root.title("GrimOS")
def on_global_click(event):
try:
if hasattr(event.widget, 'focus_target'):
event.widget.focus_target.focus_set()
else:
event.widget.focus_set()
except Exception:
pass
w = event.widget
while hasattr(w, 'master') and w.master:
if w.__class__.__name__ == 'Window':
w.lift()
break
w = w.master
root.bind_all("<ButtonPress-1>", on_global_click, add="+")
if settings.get("fullscreen", False):
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
root.geometry(f"{w}x{h}+0+0")
root.attributes('-fullscreen', True)
else:
res = settings.get("resolution", "1024x768")
root.geometry(res)
theme_name = settings.get("theme", "GrimOS")
from core.theme import apply_theme
apply_theme(root, theme_name)
desktop = Desktop(root, settings)
desktop.restart_requested = False
root.mainloop()
if getattr(desktop, "restart_requested", False):
script = os.path.abspath(sys.argv[0])
os.execl(sys.executable, sys.executable, script)
if __name__ == "__main__":
main()