← luna

Commit 82b941a

2
files
+24
added
-2
deleted
@@ -125,7 +125,8 @@ SELENE_BACKEND=drm XDG_RUNTIME_DIR="$PWD/.selene-runtime" cargo run -p selene
125 125 ```
126 126
127 127 Uwaga: tryb DRM przejmuje ekran (page-flip); gdy master trzyma Twoja sesja, Selene
128 -zgłasza to i **nie** rusza wyświetlaczy.
128 +zgłasza to i **nie** rusza wyświetlaczy. Gdy sesję startuje menedżer logowania, greeter
129 +potrafi jeszcze chwilę trzymać master — Selene czeka na niego do ~5 s, po czym się poddaje.
129 130
130 131 Instalator środowiska (binarki + sesja „Luna” + tłumaczenia + motywy) — `scripts/install.sh`:
131 132
@@ -62,13 +62,34 @@ pub fn spawn(
62 62 });
63 63 }
64 64
65 +/// Otwiera backend DRM, czekając chwilę, gdy mastera trzyma jeszcze greeter LightDM.
66 +///
67 +/// LightDM potrafi wystartować sesję Wayland, **zanim ubije greeter** (Xorg), który
68 +/// trzyma master DRM. Bez ponowień Selene od razu widzi `MasterBusy` i zostawia czarny
69 +/// ekran. Czekamy do ~5 s, aż greeter zwolni mastera.
70 +fn open_drm_waiting() -> Result<DrmBackend, DrmError> {
71 + match DrmBackend::open() {
72 + Err(DrmError::MasterBusy) => {
73 + for _ in 0..50 {
74 + std::thread::sleep(Duration::from_millis(100));
75 + match DrmBackend::open() {
76 + Err(DrmError::MasterBusy) => continue,
77 + other => return other,
78 + }
79 + }
80 + Err(DrmError::MasterBusy)
81 + }
82 + other => other,
83 + }
84 +}
85 +
65 86 /// Uruchamia wątek wyjścia DRM/KMS — renderuje scenę do buforów i skanuje na monitorach.
66 87 ///
67 88 /// Wymaga bycia DRM masterem; jeśli inną sesję trzyma master, kończy bez efektu
68 89 /// (wywołujący powinien wtedy użyć wyjścia nested).
69 90 pub fn spawn_drm(model: WindowModel) {
70 91 std::thread::spawn(move || {
71 - let mut backend = match DrmBackend::open() {
92 + let mut backend = match open_drm_waiting() {
72 93 Ok(backend) => backend,
73 94 Err(reason) => {
74 95 // Rozróżniamy powód — inaczej „brak mastera” maskuje błędy inicjalizacji.