Skip to content

HackerOS-Linux-System/HWDE

Repository files navigation

HWDE — HackerOS Wayland Desktop Environment (v0.0.1)

Nowoczesne, lekkie, mocno personalizowalne środowisko graficzne dla HackerOS / Debiana, napisane w Rust, z kompozytorem na bazie Smithay 0.7 (+ XWayland) i powłoką w Vizia 0.4. Konfiguracja w autorskim formacie .hk (hk-parser). Całość — kompozytor, powłoka, pasek, WM, demony systemowe oraz wbudowane aplikacje — jest kompilowana jako zestaw rlib i statycznie linkowana w jedną binarkę: starthwde.

Najważniejsza zmiana w tej wersji: aplikacje mają teraz realne okna

W poprzedniej iteracji każda aplikacja (settings, files, editor, ...) tylko logowała informacje do konsoli — żadna nie rysowała niczego na ekranie. To zostało naprawione: powstał hwde-miniui (winit + softbuffer + fontdue), lekki natywny renderer okien, i wszystkie 7 wbudowanych aplikacji renderują teraz prawdziwe, widoczne okna z realną treścią (listy katalogów z dysku, zawartość plików, piksele wczytanych obrazów, żywe wartości z konfiguracji .hk). Zweryfikowane zrzutami ekranu z rzeczywistego uruchomienia — patrz sekcja "Co zostało przetestowane" poniżej.

Co jest tu naprawdę zaimplementowane

  • Smithay 0.7 + XWayland (hwde-compositor) — prawdziwy wayland_server::Display, prawdziwe globalne obiekty wl_compositor/xdg_wm_base/wl_shm/wl_seat/xwayland_shell_v1, pełny stos handlerów (CompositorHandler, XdgShellHandler, ShmHandler, SeatHandler, XWaylandShellHandler, XwmHandler) z desktop::Space zarządzającym oknami Wayland i X11 w jednej wspólnej przestrzeni, prawdziwy kontekst EGL/GLES (smithay::backend::winit) z realnym renderowaniem, oraz prawdziwy serwer XWayland (XWayland::spawn + X11Wm::start_wm) — aplikacje X11-only mogą się uruchamiać pod HWDE. Sesja standalone realnie korzysta z libseat (zastąpił logind/dbus z poprzedniej wersji — działa z seatd, systemd-logind lub bezpośrednim TTY).
  • hwde-miniui — realne okna aplikacji (winit 0.30 + softbuffer + fontdue): panel boczny z sekcjami, kliknięcia faktycznie przełączają sekcję (hit-testing zsynchronizowany z rysowaniem), tekst renderowany prawdziwą czcionką TTF systemu, a Przeglądarka Obrazów rysuje rzeczywiste piksele wczytanego obrazu (skalowane najbliższym sąsiadem).
  • .hk (hwde-common::config) — HwdeConfig/Theme w pełni serializowane/deserializowane do/z .hk przy użyciu prawdziwego crate'a hk-parser = "0.3.0", bez TOML.
  • Vizia 0.4.0 (hwde-shell::ui, cecha vizia-ui) — kod napisany względem potwierdzonego, realnego API z tagu 0.4.0 (nie niepinowanego main). Domyślnie wyłączona w tym repo — patrz "Dlaczego Vizia jest domyślnie wyłączona" poniżej. Bez tej cechy hwde-shell renderuje ten sam stan jako diagram ASCII (starthwde shell-preview).

Dlaczego Vizia jest domyślnie wyłączona — pełna historia

Budowanie tego repo napotkało twardy limit toolchaina: domyślny rustc z apt na Debianie/Ubuntu to 1.75, a zarówno Smithay 0.7 (MSRV 1.80.1) jak i Vizia 0.4 (edycja 2024, wymaga 1.85) potrzebują nowszego kompilatora. rustup/static.rust-lang.org bywają zablokowane w niektórych środowiskach z restrykcyjną listą dozwolonych domen sieciowych (tak było w środowisku, w którym powstało to repo) — w takim wypadku zadziałał obejściowy, ale w pełni legalny sposób: pakiety npm @rusttonpm/{rustc,cargo,rust-std}-linux-x64 to prawdziwa, kompletna dystrybucja toolchaina Rust (tu: 1.92.0-nightly), zmirrorowana na rejestrze npm. Jeśli budujesz HWDE na normalnym Debianie z dostępem do rustup, po prostu użyj rustup — to najprostsza droga.

Z rustc 1.92 Smithay 0.7 kompiluje się bez problemu (zweryfikowane uruchomieniem, patrz niżej). Vizia 0.4 też się rozwiązuje poprawnie względem toolchaina — ale jej zależność skia-bindings kompiluje Skia ze źródeł i synchronizuje dziesiątki pod-zależności (git-sync-deps) z skia.googlesource.com i chromium.googlesource.com. W środowisku, w którym powstało to repo, te dwa hosty były strukturalnie zablokowane (zwracały HTTP 403 z allowlisty sieciowej) — co zweryfikowano bezpośrednio, więc Vizia 0.4 nie mogła zostać skompilowana w tym konkretnym sandboksie, niezależnie od wersji Rust. Na zwykłej maszynie z pełnym dostępem do internetu (lub w typowym CI) tego ograniczenia nie ma — odkomentowanie zależności i cargo build --features hwde-shell/vizia-ui powinno po prostu zadziałać.

Wymagania toolchaina

Komponent Minimalny rustc Uwaga
Cały workspace bez vizia-ui 1.80.1 (Smithay 0.7 MSRV) W tym repo budowane i testowane na rustc 1.92.0-nightly.
hwde-shell z cechą vizia-ui 1.85+ Wymaga też dostępu do skia.googlesource.com/chromium.googlesource.com przy pierwszym budowaniu (patrz wyżej).

Struktura repozytorium (Cargo workspace)

HWDE/
├── Cargo.toml                  # workspace root, wersja 0.0.1
├── Cargo.lock                  # commitowany świadomie (reprodukowalność)
├── bin/starthwde                # skompilowana binarka (jedyna!)
├── compositor/                  # hwde-compositor — Smithay 0.7 + XWayland
│   └── src/
│       ├── state.rs               # CompositorHandler/XdgShellHandler/SeatHandler/
│       │                          # XWaylandShellHandler/XwmHandler + desktop::Space
│       ├── nested.rs              # tryb --in: winit+GLES, prawdziwy XWayland, calloop
│       ├── standalone.rs          # tryb pełny: libseat + udev + DrmDevice + libinput
│       └── compositor.rs          # dispatch Standalone/Nested
├── core/
│   ├── common/                   # hwde-common — Theme, HwdeConfig (.hk!), AppEntry
│   ├── miniui/                    # hwde-miniui — realne okna (winit+softbuffer+fontdue)
│   ├── source-code/{bar,wm,de,sd}/
│   └── apps/                      # 7 aplikacji wbudowanych, każda z realnym oknem hwde-miniui
│       ├── system-settings/       # (NIEUSUWALNE)
│       ├── control-center/        # (NIEUSUWALNE)
│       ├── file-manager/          # + HackerOS Package Manager (HPM)
│       ├── archive-manager/, document-viewer/, image-viewer/, text-editor/
├── shell/                         # hwde-shell — Vizia 0.4.0 (cecha vizia-ui) + fallback ASCII
├── launcher/                      # crate binarny "starthwde" — CLI
├── assets/themes/, config/hwde.hk  # motywy i konfiguracja (.hk)
├── packaging/                      # SDDM session + pliki .desktop
└── scripts/{build-deps-debian.sh, install.sh}

Budowanie

sudo ./scripts/build-deps-debian.sh   # libwayland-dev, libseat-dev, libpixman-1-dev, ...
rustc --version                       # sprawdź >= 1.80.1 (zainstaluj rustup jeśli trzeba)
cargo build --release
cp target/release/starthwde bin/starthwde

starthwde — CLI

starthwde [OPTIONS] [COMMAND]
Flaga Opis
--in <wayland|x11> Tryb zagnieżdżony (smithay::backend::winit, prawdziwy EGL/GLES + XWayland).
--renderer <auto|opengl|vulkan> Backend renderujący (domyślnie auto).
--config <PATH> Własny plik .hk.
Podkomenda Opis
settings System Settings — prawdziwe okno, panel boczny 12 sekcji, NIEUSUWALNE
control-center Control Center — prawdziwe okno, przełączniki Wi-Fi/Bluetooth/itd., NIEUSUWALNE
files [PATH] File Manager — prawdziwe okno, realna lista katalogu z dysku + HPM
archive [FILE] Manager Archiwów — prawdziwe okno, realna zawartość ZIP/TAR/TAR.GZ
docs [FILE] Przeglądarka Dokumentów — prawdziwe okno, realna treść tekstu/Markdown
images [FILE] Przeglądarka Obrazów — prawdziwe okno, realne piksele wczytanego obrazu
editor [FILE] Edytor Tekstu — prawdziwe okno, realna treść pliku, karty
theme list|show|reset Zarządzanie motywami (.hk)
session status Integracja z SDDM/.desktop
shell-preview [--app-drawer] Diagram ASCII layoutu powłoki (bez Vizii)
info Wersja (0.0.1), motyw, renderer, lista komponentów

Co zostało przetestowane (uruchomieniem, ze zrzutami ekranu)

  • starthwde settings przeciw prawdziwemu X serwerowi (Xvfb) — zrzut ekranu potwierdza: prawdziwy panel boczny z 12 sekcjami, realne wartości z HwdeConfig (#2D3741, #15191C, 14px, ...), realny toggle. Kliknięcie na inną sekcję faktycznie przełącza widok (zweryfikowane przez xdotool + zrzut ekranu przed/po: aktywna sekcja i treść strony zmieniły się z "Wygląd i motywy" na "Sieć").
  • starthwde files <katalog> — zrzut ekranu pokazuje prawdziwą, żywą listę plików rzeczywistego katalogu projektu (z rozmiarami w bajtach).
  • starthwde editor <plik> i starthwde control-center — zrzuty ekranu potwierdzają realne karty/treść pliku i realne stany przełączników (Wi-Fi/Bluetooth/Tryb ciemny = ON, inne = OFF).
  • starthwde --in x11 (kompozytor) — log potwierdza: prawdziwą inicjalizację EGL/GLES (Mesa llvmpipe), prawdziwy plik socketu wayland-N, prawdziwy spawn serwera Xwayland z komunikatem xwayland: ready on display :N, oraz że X11Wm::start_wm przejął rolę menadżera okien X11.
  • cargo test — wszystkie testy jednostkowe przechodzą w całym workspace (hwde-compositor, hwde-shell: parsowanie kolorów, generator CSS, podgląd ASCII).

Integracja z SDDM i aplikacje zewnętrzne

Bez zmian względem poprzedniej wersji — packaging/sddm/wayland-sessions/hwde.desktop oraz pliki .desktop dla Hacker Term / Sklep / Hacker Launcher / HackerOS Welcome. starthwde session status sprawdza ich obecność.

Co nadal wymaga rozbudowy (lista, szczerze)

  1. hwde-shell::ui (Vizia) — kod gotowy, zablokowany lokalnie przez sieć (patrz wyżej); powinien po prostu zadziałać na hoście z pełnym dostępem do internetu.
  2. hwde-compositor::standalone — wybór crtc/connector/Mode i DrmDevice::create_surface per wyjście, oraz pętla renderowania napędzana DrmEvent::VBlank (wymaga rzeczywistego GPU/roota - nie do zweryfikowania w sandboksie bez sprzętu).
  3. Integracja kompozytor ↔ aplikacje — aplikacje hwde-miniui otwierają własne okna winit niezależnie od hwde-compositor; docelowo okna klientów aplikacji HWDE powinny renderować się jako prawdziwe xdg_toplevel wewnątrz sesji kompozytora, a nie jako osobne okna najwyższego poziomu w systemie hosta.
  4. hwde-miniui — brak przewijania długich list, brak edycji tekstu w Edytorze (tylko podgląd), brak fontu emoji (glify ikon typu 🎨/🔔 renderują się jako puste prostokąty — DejaVu/Liberation to fonty tekstowe, nie emoji).
  5. hwde-sd — Notification Daemon/Polkit/XDG Portals nadal tylko logują, brak realnej rejestracji na D-Bus (zbus).
  6. Edytor: brak podświetlania składni (syntect). Przeglądarka Dokumentów: brak renderowania PDF/ODT/DOCX.

Motyw „HackerOS (Default)” (.hk)

Bez zmian: accent=#2D3741, background=#15191C, surface=#1E242A, foreground=#FFFFFF, foreground_dim=#C8CDD2, radius=14px. Pełny plik: config/hwde.hk.

Packages

 
 
 

Contributors