← luna

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 ![Sekwencja interakcji](docs/images/demo-montage.png)
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')."