From 1e712495fd9de269da32361642d6166fb686070a Mon Sep 17 00:00:00 2001 From: Nippy Date: Tue, 28 Jul 2026 22:00:50 +0200 Subject: fix raveswitch and db fix --- raveos-hyprland-theme/PKGBUILD | 2 +- raveos-hyprland-theme/raveos-hyprland-apply.sh | 11 ++ .../theme-data/raveswitch/config.ron | 10 ++ raveswitch/PKGBUILD | 2 +- raveswitch/raveswitch-hibajelentes.md | 127 +++++++++++++++++++++ 5 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 raveos-hyprland-theme/theme-data/raveswitch/config.ron create mode 100644 raveswitch/raveswitch-hibajelentes.md diff --git a/raveos-hyprland-theme/PKGBUILD b/raveos-hyprland-theme/PKGBUILD index ad7610a..526e38f 100644 --- a/raveos-hyprland-theme/PKGBUILD +++ b/raveos-hyprland-theme/PKGBUILD @@ -14,7 +14,7 @@ pkgname=raveos-hyprland-theme pkgver=0.0.0 -pkgrel=55 +pkgrel=56 pkgdesc="RaveOS Hyprland theme payload and installer (includes DankMaterialShell)" arch=('any') url="https://raveos.local" diff --git a/raveos-hyprland-theme/raveos-hyprland-apply.sh b/raveos-hyprland-theme/raveos-hyprland-apply.sh index 04e219c..b35282b 100644 --- a/raveos-hyprland-theme/raveos-hyprland-apply.sh +++ b/raveos-hyprland-theme/raveos-hyprland-apply.sh @@ -93,6 +93,12 @@ for d in gtk-3.0 gtk-4.0 nwg-look Thunar xfce4 xsettingsd Kvantum; do fi done +# RaveSwitch alap config (modifier: Super, hogy illeszkedjen a SUPER+TAB +# keybindhez -- az upstream default Alt-ot allitana be, ami nem zarodna be +# a switcher-ablak SUPER elengedesekor) +[[ -f "${PAYLOAD}/raveswitch/config.ron" ]] && \ + install -Dm644 "${PAYLOAD}/raveswitch/config.ron" /etc/skel/.config/raveswitch/config.ron + # SDDM: a téma és konfig a PKGBUILD által van telepítve, itt nincs teendő # --------------------------------------------------------------------------- @@ -178,6 +184,11 @@ SEOF fi done + # RaveSwitch alap config (modifier: Super, lasd fentebb a skel-agnal) + if [[ -f "${PAYLOAD}/raveswitch/config.ron" && ! -f "${home}/.config/raveswitch/config.ron" ]]; then + install -Dm644 "${PAYLOAD}/raveswitch/config.ron" "${home}/.config/raveswitch/config.ron" + fi + # Icon és GTK téma beállítása (dconf/gsettings) # A settings.ini nem elég — a GTK daemonok a dconf-ot olvassák # Chroot-ban (Calamares) dbus-launch lehet hogy nincs — ezért set +e diff --git a/raveos-hyprland-theme/theme-data/raveswitch/config.ron b/raveos-hyprland-theme/theme-data/raveswitch/config.ron new file mode 100644 index 0000000..272265e --- /dev/null +++ b/raveos-hyprland-theme/theme-data/raveswitch/config.ron @@ -0,0 +1,10 @@ +// Edit with `raveswitch config edit` +( + version: 4, + windows: ( + switch: Some(modifier: "Super", key: "Tab", filter_by: [current_monitor], switch_workspaces: false, exclude_workspaces: "", kill_key: 'q'), + ), + behavior: ( + close_on_mod_release: true, + ), +) diff --git a/raveswitch/PKGBUILD b/raveswitch/PKGBUILD index 729f245..b703b33 100644 --- a/raveswitch/PKGBUILD +++ b/raveswitch/PKGBUILD @@ -1,5 +1,5 @@ pkgname=raveswitch -pkgver=0.3.1 +pkgver=0.4.1 pkgrel=1 pkgdesc="A modern GTK4-based window switcher and application launcher for Hyprland" arch=('x86_64' 'aarch64') diff --git a/raveswitch/raveswitch-hibajelentes.md b/raveswitch/raveswitch-hibajelentes.md new file mode 100644 index 0000000..e8980b8 --- /dev/null +++ b/raveswitch/raveswitch-hibajelentes.md @@ -0,0 +1,127 @@ +# raveswitch hibajelentés — SUPER+TAB nem működik friss telepítésen + +## Környezet +- raveswitch verzió: 0.3.1 (`hyprland_raveswitch` git HEAD, commit körül: `c14bc28` "bugfix") +- Hyprland: 0.56.1 +- Teszt: friss RaveOS telepítés (Calamares), Hyprland desktop flavour, teljesen új felhasználó (`asd`), semmilyen korábbi raveswitch-konfiguráció nincs a rendszeren +- RaveOS oldali keybind: `SUPER + TAB` → `raveswitch socat '{"OpenSwitch":{"reverse":false}}'` + +## Tünet +Friss telepítés után a `SUPER+TAB` billentyűkombináció nem csinál semmit — nem jelenik meg semmilyen ablakváltó felület. + +## 1. hiba: `get_default_config_file()` rossz útvonalra esik vissza friss rendszeren + +**Fájl:** `crates/core-lib/src/path.rs`, `get_default_config_file()` függvény + +Ha SEHOL nem található meglévő config fájl (sem a felhasználói `$XDG_CONFIG_HOME/raveswitch/config.{ron,toml,json,json5}`, sem a rendszerszintű `/etc/raveswitch/config.{toml,ron}` útvonalakon — ami egy teljesen friss telepítésen mindig igaz), a függvény a **legutoljára ellenőrzött rendszerszintű útvonalat** (`/etc/raveswitch/config.toml`) adja vissza "alapértelmezett" gyanánt, ahelyett hogy a felhasználói útvonalra (`~/.config/raveswitch/config.ron`) esne vissza egy ÚJ fájl létrehozásához. + +**Következmény:** +- `raveswitch config generate` (paraméter nélkül) megpróbálja létrehozni a configot `/etc/raveswitch/`-ban → `Permission denied` (a normál felhasználónak nincs írási joga oda), a parancs lefagy/hibázik. +- Maga a `raveswitch run` daemon is ugyanezt az útvonal-feloldást használja induláskor. Mivel nem talál configot, és a fájlt nem tudja figyelni ("watch for file changes"), **egy végtelen, mikroszekundumonkénti hibaciklusba kerül**: + ``` + ERROR Failed to block config: unable to watch for file changes as the file doesnt exist, exiting + WARN Failed wait for config change: unable to watch for file changes as the file doesnt exist, exiting + INFO Trying to reload config after config change + WARN Failed to load config: Config file does not exist, create it using `raveswitch config generate`, retrying on change + ``` + Ez a ciklus percenként több tízezerszer fut le, és leköti a daemon fő event loop-ját — a socket IPC handler ugyan külön szálon/taskon fut és nyugtázza a beérkező parancsokat ("OK"), de a switcher-ablakot megjelenítő logika sosem kap esélyt lefutni. + +**Workaround, amivel reprodukáltam és igazoltam:** kézzel, explicit `-c` kapcsolóval generálva a configot (`raveswitch -c ~/.config/raveswitch/config.ron config generate`) a busy-loop megszűnik. + +## 2. hiba: a generált alapértelmezett config `switch: None`-t ad + +**Fájl:** a `config generate` (GUI-alapú) által írt alapértelmezett `config.ron` + +Az így legenerált config tartalma: +```ron +windows: ( + scale: 8.5, + items_per_row: 5, + overview: None, + switch: None, + switch_2: None, +), +``` + +Vagyis **az ablakváltó (switch) funkció alapból nincs bekapcsolva/konfigurálva** — a felhasználónak kézzel, a GUI-s beállításokon keresztül kellene bekapcsolnia, mielőtt bármilyen `OpenSwitch` IPC parancs ténylegesen csinálna bármit. Egy friss RaveOS telepítésen, ahol a `SUPER+TAB` keybind eleve be van drótozva és "csak működnie kellene", ez azt jelenti hogy a funkció **sosincs bekapcsolva**, amíg a felhasználó nem nyitja meg kézzel a raveswitch beállításait. + +**Workaround, amivel reprodukáltam és igazoltam:** kézzel kitöltve egy érvényes `switch: Some(modifier: "Alt", key: "Tab", filter_by: [current_monitor], switch_workspaces: false, exclude_workspaces: "", kill_key: 'q')` blokkot, a daemon újraindítása után a switcher-ablak ténylegesen létrejön a compositorban (helyes `raveswitch_switch` namespace, helyes pozíció/méret a `hyprctl layers` szerint). + +## 3. (bizonytalan, esetleg csak a teszt-VM-re jellemző): a létrejött ablak `a: 0` (láthatatlan) + +A fenti két workaround után a switcher réteg TÉNYLEGESEN létrejön a Hyprlandben (`hyprctl layers` mutatja, helyes namespace/geometria), **de nulla átlátszósággal (`a: 0`)**, tehát vizuálisan semmi nem látszik belőle — screenshottal is megerősítve. + +A raveswitch daemon logjában ezzel egyidőben GPU-inicializálási hibák látszanak: +``` +MESA: error: vdrm_device_connect failed +radv/amdgpu: failed to initialize device. +Gdk-WARNING: Vulkan: ...failed to initialize winsys (VK_ERROR_INITIALIZATION_FAILED) +libEGL warning: egl: failed to create dri2 screen +``` + +Ez a tesztkörnyezet (libvirt/QEMU VM, GPU-passthrough nélkül) hiánya lehet, NEM feltétlenül raveswitch-hiba — valódi hardveren vagy GPU-passthrough-os VM-en érdemes külön leellenőrizni, hogy ugyanez jelentkezik-e. + +## Javasolt javítás(ok) + +1. `get_default_config_file()`: ha SEHOL nem található meglévő config, essen vissza a **felhasználói** útvonalra (`~/.config/raveswitch/config.ron`) egy új fájl generálásához, ne a rendszerszintű `/etc/raveswitch/`-ra. +2. A daemon kezelje le kecsesen (ne végtelen hibaciklussal) azt az esetet, amikor a config fájl nem létezik és nem hozható létre — pl. hozza létre automatikusan alapértékekkel, vagy fusson tovább in-memory defaultokkal ahelyett hogy a fő loopot leköti. +3. Fontolja meg, hogy a `config generate` / friss telepítés alapból bekapcsolt `switch` (és esetleg `switch_2`) profillal induljon, mivel a raveswitch fő funkciója pont ez — jelenleg "silently disabled by default" az élmény. + +*(RaveOS oldalról alternatív/kiegészítő megoldás: a `raveos-hyprland-theme` csomag telepíthetne egy kész, működő alapértelmezett `config.ron`-t az első bejelentkezéskor, hogy ne kelljen megvárni az upstream javítást.)* + + + +build fájl. + + + +pkgname=raveswitch +pkgver=0.3.1 +pkgrel=1 +pkgdesc="A modern GTK4-based window switcher and application launcher for Hyprland" +arch=('x86_64' 'aarch64') +conflicts=('hyprshell') +provides=('hyprshell') +url="https://git.rp1.hu/gabeszm/hyprland_raveswitch" +license=("MIT") +makedepends=('cargo' 'git') +optdepends=('org.freedesktop.secrets: Store clipboard encryption in the keyring') +depends=('hyprland' 'gtk4-layer-shell' 'gtk4' 'libadwaita' 'zstd') +source=("hyprland_raveswitch::git+ssh://git@git.rp1.hu/gabeszm/hyprland_raveswitch.git") +sha256sums=('SKIP') + +prepare() { + export RUSTUP_TOOLCHAIN=stable + cd hyprland_raveswitch + # dep-crates/hyprland-rs is vendored without a README.md, but its own + # src/lib.rs does include_str!("../README.md") -- create a stub so the + # build doesn't fail on a missing doc-comment source file. + [ -f dep-crates/hyprland-rs/README.md ] || echo "# hyprland-rs (vendored)" > dep-crates/hyprland-rs/README.md + # crates/config-edit-lib embeds assets/logo.png via include_bytes!, but + # the repo only ships assets/raveicon.png -- reuse it as the logo. + [ -f assets/logo.png ] || cp assets/raveicon.png assets/logo.png + cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" +} +build() { + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cd hyprland_raveswitch + cargo build --frozen --release +} +package() { + install -Dm755 "hyprland_raveswitch/target/release/raveswitch" "$pkgdir/usr/bin/raveswitch" + install -Dm644 "hyprland_raveswitch/README.md" "$pkgdir/usr/share/doc/raveswitch/README.md" + install -Dm644 "hyprland_raveswitch/packaging/raveswitch.service" "$pkgdir/usr/lib/systemd/user/raveswitch.service" + install -Dm644 "hyprland_raveswitch/assets/raveswitch-settings.png" "$pkgdir/usr/share/pixmaps/raveswitch-settings.png" + for size in 16 24 32 48 64 128 256; do + install -Dm644 "hyprland_raveswitch/assets/raveswitch-settings.png" "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/raveswitch-settings.png" + done + install -Dm644 "hyprland_raveswitch/packaging/hu.rp1.raveswitch.settings.desktop" "$pkgdir/usr/share/applications/hu.rp1.raveswitch.settings.desktop" + mkdir "$pkgdir/usr/share/raveswitch" + tar -xf "hyprland_raveswitch/packaging/usr-share.tar" -C "$pkgdir/usr/share/raveswitch" + install -Dm644 "hyprland_raveswitch/assets/raveicon.png" "$pkgdir/usr/share/raveswitch/assets/raveicon.png" + "$pkgdir/usr/bin/raveswitch" completions bash -p "$pkgdir/usr/share/bash-completion/completions" + "$pkgdir/usr/bin/raveswitch" completions fish -p "$pkgdir/usr/share/fish/vendor_completions.d" + "$pkgdir/usr/bin/raveswitch" completions zsh -p "$pkgdir/usr/share/zsh/site-functions" +} + -- cgit v1.3