Commit 55d5a04
5
files
+193
added
-0
deleted
@@ -146,6 +146,32 @@ cargo test -p luna-demo --test interaction # te same interakcje jako aserc
146
146
147
147

148
148
149
+## Instalacja środowiska na PC (testowo / na stałe)
150
+
151
+`scripts/install.sh` buduje binarki w trybie release i instaluje **środowisko Luna**
152
+(kompozytor `selene`, powłoka `luna-shell`, sesja `luna-session`, demo, tłumaczenia, motywy,
153
+wpis sesji Wayland):
154
+
155
+```bash
156
+# instalacja testowa do katalogu (bez ruszania systemu) — nic nie wymaga uprawnień
157
+./scripts/install.sh --destdir /tmp/luna-test --prefix /usr
158
+
159
+# podgląd planu bez zmian
160
+./scripts/install.sh --dry-run
161
+
162
+# instalacja systemowa
163
+sudo ./scripts/install.sh --prefix /usr
164
+
165
+# usunięcie
166
+sudo ./scripts/install.sh --prefix /usr --uninstall
167
+```
168
+
169
+Po instalacji sesja „Luna” pojawia się w menedżerze logowania (`share/wayland-sessions/selene.desktop`).
170
+Na sprzęcie Selene przejmuje ekran przez DRM/KMS — trzeba **wylogować bieżący pulpit** (wolny
171
+master DRM) i mieć dostęp do `/dev/input` (grupa `input`) dla wejścia. Testowo, obok działającej
172
+sesji, można uruchomić `SELENE_BACKEND=nested selene` (okno na obecnym pulpicie) i podłączyć
173
+`luna-shell`. Szczegóły: `de/README.md`.
174
+
149
175
## Budowanie własnej aplikacji na libLunie
150
176
151
177
Najszybsza droga to **fasada `libluna`** — jedna zależność zamiast czterech. Trzy sposoby:
@@ -114,6 +114,16 @@ SELENE_BACKEND=drm XDG_RUNTIME_DIR="$PWD/.selene-runtime" cargo run -p selene
114
114
Uwaga: tryb DRM przejmuje ekran (page-flip); gdy master trzyma Twoja sesja, Selene
115
115
zgłasza to i **nie** rusza wyświetlaczy.
116
116
117
+Instalator środowiska (binarki + sesja „Luna” + tłumaczenia + motywy) — `scripts/install.sh`:
118
+
119
+```sh
120
+./scripts/install.sh --destdir /tmp/luna-test --prefix /usr # test bez zmian w systemie
121
+sudo ./scripts/install.sh --prefix /usr # instalacja systemowa
122
+```
123
+
124
+Pliki sesji: `de/session/luna-session` (launcher) i `de/session/selene.desktop`
125
+(`share/wayland-sessions`).
126
+
117
127
Klienta podłączysz ustawiając `WAYLAND_DISPLAY=wayland-0` i `XDG_RUNTIME_DIR` na ten sam
118
128
katalog (renderowanie pojawi się, gdy wejdzie backend wyświetlania).
119
129
120
130
new file mode 100755
@@ -0,0 +1,16 @@
1
+#!/bin/sh
2
+# Sesja środowiska Luna — uruchamia kompozytor Selene.
3
+#
4
+# Domyślnie startujemy na DRM/KMS (własny ekran, bez nadrzędnego kompozytora).
5
+# Gdy master DRM trzyma inna sesja, Selene sam to zgłosi i spadnie do wyjścia
6
+# nested — ustaw wtedy SELENE_BACKEND=nested (albo wyloguj bieżącą sesję).
7
+set -eu
8
+
9
+export XDG_CURRENT_DESKTOP=Luna
10
+export XDG_SESSION_TYPE=wayland
11
+export XDG_SESSION_DESKTOP=Luna
12
+
13
+: "${SELENE_BACKEND:=drm}"
14
+export SELENE_BACKEND
15
+
16
+exec selene
0
17
new file mode 100644
@@ -0,0 +1,9 @@
1
+[Desktop Entry]
2
+Type=Application
3
+Name=Luna
4
+Name[pl]=Luna
5
+Comment=Luna desktop — Selene Wayland compositor
6
+Comment[pl]=Środowisko Luna — kompozytor Wayland Selene
7
+Exec=luna-session
8
+TryExec=selene
9
+DesktopNames=Luna
0
10
new file mode 100755
@@ -0,0 +1,132 @@
1
+#!/usr/bin/env bash
2
+# Instalator środowiska Luna (libLuna + Selene + powłoka Luna) na zwykłym PC.
3
+#
4
+# Buduje binarki w trybie release i instaluje je do prefiksu (domyślnie /usr/local):
5
+# bin/selene, bin/luna-shell, bin/luna-demo, bin/luna-session
6
+# share/wayland-sessions/selene.desktop (sesja „Luna” w menedżerze logowania)
7
+# share/luna/i18n/*.lang, share/luna/themes/*.theme
8
+# share/licenses/luna/LICENSE
9
+#
10
+# Przykłady:
11
+# ./scripts/install.sh # instalacja do /usr/local (wymaga uprawnień)
12
+# sudo ./scripts/install.sh --prefix /usr
13
+# ./scripts/install.sh --destdir /tmp/test --prefix /usr # instalacja „do paczki”/testowa
14
+# ./scripts/install.sh --dry-run # tylko pokaż, co zostanie zrobione
15
+# sudo ./scripts/install.sh --uninstall # usuń zainstalowane pliki
16
+#
17
+# Test bez psucia systemu: ./scripts/install.sh --destdir /tmp/luna-test --prefix /usr --no-build
18
+
19
+set -euo pipefail
20
+
21
+prog="$(basename "$0")"
22
+root="$(cd "$(dirname "$0")/.." && pwd)"
23
+
24
+prefix="/usr/local"
25
+destdir=""
26
+do_build=1
27
+dry_run=0
28
+uninstall=0
29
+cargo="${CARGO:-cargo}"
30
+
31
+usage() {
32
+ cat <<EOF
33
+$prog — instalator środowiska Luna
34
+
35
+Użycie: $prog [opcje]
36
+
37
+ --prefix DIR prefiks instalacji (domyślnie /usr/local)
38
+ --destdir DIR katalog pośredni (DESTDIR) — instalacja „do paczki”/testowa
39
+ --no-build nie buduj binarek (użyj istniejących z target/release)
40
+ --dry-run pokaż planowane operacje, nic nie zmieniaj
41
+ --uninstall usuń zainstalowane pliki
42
+ -h, --help ta pomoc
43
+
44
+Zmienne: CARGO (domyślnie: cargo), PREFIX, DESTDIR
45
+EOF
46
+}
47
+
48
+while [ $# -gt 0 ]; do
49
+ case "$1" in
50
+ --prefix) prefix="$2"; shift 2 ;;
51
+ --prefix=*) prefix="${1#*=}"; shift ;;
52
+ --destdir) destdir="$2"; shift 2 ;;
53
+ --destdir=*) destdir="${1#*=}"; shift ;;
54
+ --no-build) do_build=0; shift ;;
55
+ --dry-run) dry_run=1; shift ;;
56
+ --uninstall) uninstall=1; shift ;;
57
+ -h|--help) usage; exit 0 ;;
58
+ *) echo "nieznana opcja: $1" >&2; usage; exit 2 ;;
59
+ esac
60
+done
61
+
62
+dest="${destdir}${prefix}"
63
+lib="$root/target/release"
64
+
65
+say() { printf '%s\n' "$*"; }
66
+step() { printf '\n\033[1m%s\033[0m\n' "$*"; }
67
+do_cmd() { if [ "$dry_run" = 1 ]; then say " [dry-run] $*"; else "$@"; fi; }
68
+
69
+# ── Pliki: źródło | cel | prawa ───────────────────────────────────────────────
70
+files() {
71
+ printf '%s|%s|%s\n' "$lib/selene" "$dest/bin/selene" "755"
72
+ printf '%s|%s|%s\n' "$lib/luna-shell" "$dest/bin/luna-shell" "755"
73
+ printf '%s|%s|%s\n' "$lib/luna-demo" "$dest/bin/luna-demo" "755"
74
+ printf '%s|%s|%s\n' "$lib/gallery" "$dest/bin/luna-gallery" "755"
75
+ printf '%s|%s|%s\n' "$root/de/session/luna-session" "$dest/bin/luna-session" "755"
76
+ printf '%s|%s|%s\n' "$root/de/session/selene.desktop" "$dest/share/wayland-sessions/selene.desktop" "644"
77
+ printf '%s|%s|%s\n' "$root/LICENSE" "$dest/share/licenses/luna/LICENSE" "644"
78
+ local f
79
+ for f in "$root"/crates/libluna-i18n/i18n/*.lang; do
80
+ printf '%s|%s|%s\n' "$f" "$dest/share/luna/i18n/$(basename "$f")" "644"
81
+ done
82
+ for f in "$root"/examples/luna/themes/*.theme; do
83
+ printf '%s|%s|%s\n' "$f" "$dest/share/luna/themes/$(basename "$f")" "644"
84
+ done
85
+}
86
+
87
+if [ "$uninstall" = 1 ]; then
88
+ step "Odinstalowywanie Luna z $dest"
89
+ while IFS='|' read -r _ dst _; do
90
+ do_cmd rm -f "$dst"
91
+ done < <(files)
92
+ # Puste katalogi po naszych plikach.
93
+ for d in "$dest/share/luna/i18n" "$dest/share/luna/themes" "$dest/share/luna" \
94
+ "$dest/share/wayland-sessions" "$dest/share/licenses/luna"; do
95
+ do_cmd rmdir "$d" 2>/dev/null || true
96
+ done
97
+ say "Gotowe."
98
+ exit 0
99
+fi
100
+
101
+if [ "$do_build" = 1 ]; then
102
+ step "Budowanie (release, --locked)"
103
+ command -v "$cargo" >/dev/null 2>&1 || { echo "brak cargo ($cargo) na PATH" >&2; exit 1; }
104
+ ( cd "$root" && do_cmd "$cargo" build --release --locked -p selene -p luna -p luna-demo )
105
+fi
106
+
107
+# Brak binarek przy --no-build to błąd.
108
+if [ "$dry_run" = 0 ] && [ "$do_build" = 0 ]; then
109
+ [ -x "$lib/selene" ] || { echo "brak $lib/selene — zbuduj lub usuń --no-build" >&2; exit 1; }
110
+fi
111
+
112
+step "Instalacja do $dest"
113
+while IFS='|' read -r src dst mode; do
114
+ if [ "$dry_run" = 0 ] && [ ! -f "$src" ]; then
115
+ echo "brak pliku źródłowego: $src" >&2
116
+ exit 1
117
+ fi
118
+ do_cmd install -D -m "$mode" "$src" "$dst"
119
+done < <(files)
120
+
121
+step "Gotowe"
122
+say "Zainstalowano w: $dest"
123
+say ""
124
+say "Uruchomienie sesji Luna na PC:"
125
+say " 1) wyloguj się z bieżącego pulpitu (Selene musi przejąć master DRM),"
126
+say " 2) wybierz sesję „Luna” w menedżerze logowania, albo z konsoli (TTY):"
127
+say " SELENE_BACKEND=drm luna-session"
128
+say " 3) testowo, obok działającej sesji (bez przejmowania ekranu):"
129
+say " SELENE_BACKEND=nested selene & # okno Selene na obecnym pulpicie"
130
+say " WAYLAND_DISPLAY=wayland-0 luna-shell"
131
+say ""
132
+say "Uwaga: na DRM/KMS potrzebny jest wolny master i dostęp do /dev/input (grupa 'input')."