Niri - wayland ablakkezelő

Segítséget kaptál? Szívesen töltöd itt az idődet? Visszajársz hozzánk? Támogasd a munkákat: Ko-fi és Paypal!

Összeraktam a Niri ablakkazelőről egy videót, ítt pedig írásban mutatom be. Jó Linuxozást! Niri egy modern, Wayland-alapú kompozitor és ablakkezelő, amely az ablakokat egy végtelen szélességű vízszintes munkaasztalra (workspace) rendezi. Az ablakok egymás mellett, oszlopokban helyezkednek el, és balra-jobbra görgetve érhető el a teljes felület. Új ablak nyitásakor nem zsugorítja a többi ablakot, így minden ablak a korábbi méretében marad. Ez a megközelítés eltér a hagyományos csempézett ablakkezelőktől (pl. Sway, Hyprland), és inkább a GNOME PaperWM vagy a KDE Karousel görgethető elrendezéséhez hasonlít. Niri tehát a “scrollozható csempézés” koncepciójával kínál alternatívát: ahelyett, hogy egy rácsba kényszerítené az összes ablakot, egy végtelen vízszintes sávban rendezve helyezi el őket.

Előnyök és jellemzők

Niri több szempontból is előnyös a hagyományos ablakkezelőkhöz képest:

  • Wayland-kompatibilis, modern alapok – Rust nyelven íródott, így kihasználja a Wayland előnyeit (pl. jobb energiahatékonyság, integritás). A Wayland-protokollban az ablakkezelő és a kijelzőszerver egyetlen folyamatként fut, ami egyszerűbbé és gyorsabbá teszi a rendszerműködést.

  • Scrollozható csempézés – mivel minden monitoron egy vízszintes “ablakcsík” húzódik végig, új ablakok megnyitásakor nem zsugorodnak automatikusan a többi ablak, így nagyítható vagy szabadon áthelyezhető a nézet. A munkaterületek dinamikusak, a GNOME-féle dynamic workspace koncepciót követik, mindig van egy üres workspace a sor végén.

  • Rugalmas elrendezés – konfigurálhatók a margók, keretek, gaps-ok, az ablakok méretei és arányai. Van beépített áttekintő nézet (overview), amely kicsinyített formában mutatja az összes workspace-et és ablakot. Animációk és gradiensek támogatottak, testre szabhatóak. Ez csak az újabb verziókban van, és a bal felő sarokba tolt egérrel aktválható.

  • Bemeneti eszközök kezelése – támogatja a többmonitoros környezetet (minden monitoron külön ablakcsíkkal), az eltérő DPI-értékű kijelzőket és az arányos (fractional) skálázást a pixelpontos UI-megjelenítés mellett. Működik NVIDIA videokártyákkal is, ha engedélyezett a kernel módváltás(modesetting). Támogatottak az érintőképernyők, touchpad-gesztusok, tabletek – utóbbiakat akár monitorhoz is rendelhetjük.

  • Teljesítmény – a fejlesztő tudatosan ügyel a hatékonyságra: Niri még régebbi netbook gépeken is futtatható. Az induló képernyő (lock/splash) és képernyővédők (swaylock, swayidle) integrációja, valamint alacsony memóriahasználat jellemzi.

  • Extra szolgáltatások – beépített képernyőkép-készítő felület (fokusszal akár terület vagy ablak kiválasztására) és támogatott a képernyő-megosztás (xdg-desktop-portal-on keresztül blokkolhatóak érzékeny ablakok). Lehetőség van ablakokat csoportba (fülbe) rendezni (tab-csoportok). A konfiguráció élőben újratölthető hiba nélkül: ha a mentett beállítás nem érvényes, Niri megtartja az előző működő állapotot és hibaüzenetet küld.

Telepítés különböző disztribúciókon

  • Arch Linux: A niri csomag elérhető az extra repóban. Egyszerű sudo pacman -S niri paranccsal telepíthető. Javasolt mellé telepíteni a szokásos segédprogramokat (például Alacritty terminált, fuzzel alkalmazásindítót, waybar alsó sávot, swaybg háttérképes háttérkezelőt, stb.).

  • Fedora: A fejlesztő által karbantartott COPR tárolóban található Niri. Például sudo dnf copr enable yalter/niri után sudo dnf install niri parancs futtatásával telepíthető. EPEL 10 disztribúcióra is van csomag, illetve a Fedora hivatalos repóiban a legújabb kiadás elérhető (lásd a COPR oldal “Active Releases” listáját).

  • NixOS/Nix: A Niri hivatalos dokumentációja említ egy community által karbantartott flake-et, mellyel könnyen beépíthető a Nix környezetbe.

  • Ubuntu/Debian és egyéb Linux: Nincs hivatalos csomag; a legegyszerűbb megoldás a forrásból építés. Szükséges a Rust eszközkészlet (rustup-on át beszerezhető), valamint fejlesztői könyvtárak – például Ubuntu 24.04 alatt a gcc clang libudev-dev libgbm-dev libxkbcommon-dev libegl1-mesa-dev libwayland-dev libinput-dev libdbus-1-dev libsystemd-dev libseat-dev libpipewire-0.3-dev libpango1.0-dev libdisplay-info-dev csomagokat kell telepíteni. Ezután a cargo build --release parancs elkészíti a futtatható binárist. (Fontos: NE használjuk a --all-features kapcsolót építéskor, mert egyes fejlesztői funkciók memóriaszivárgást okozhatnak). A felépített niri binárist és a szükséges .desktop fájlt, szolgáltatásokat telepítsük a rendszer megfelelő könyvtáraiba (pl. /usr/local/bin, /usr/local/share/wayland-sessions/ stb. – lásd a dokumentáció Manual Installation részét).

Alapvető konfiguráció

Niri konfigurációs fájlja a ~/.config/niri/config.kdl helyen található KDL formátumban. A program első indításakor létrejön egy alapértelmezett, kommentárokkal ellátott config.kdl, amely bemutatja a tipikus beállításokat. A konfiguráció fájl szekciókra van bontva (pl. input.keyboard, output, bindings, spawn-at-startup, environment stb.). A fájl mentése után a Niri automatikusan újratölti a beállításokat; érvénytelen konfiguráció esetén megőrzi az utolsó működőképes állapotot, és hibaüzenetet jelenít meg. Külső ellenőrzéshez futtatható a niri validate parancs.

  • Billentyűzetkiosztás (input.keyboard.xkb): Itt adhatjuk meg az elérhető billentyűzetkiosztást. Például ha az alapértelmezett US kiosztást akarjuk AltGr-es változattal, CapsLock helyett Ctrl-ként használva:

    input {
        keyboard {
            xkb {
                layout "us"
                variant "altgr-intl"
                options "ctrl:nocaps"
            }
        }
    }
  • Kijelzők (output szekciók): Először érdemes a niri msg outputs paranccsal megnézni a csatlakoztatott monitorok nevét. Utána minden monitorra külön szakaszt írhatunk. Például egy HDMI-A-1 nevű monitort 2560×1440 felbontással 60 Hz-en, 1.2-es skálával, míg a beépített laptopképernyőt kikapcsolva:

    output "HDMI-A-1" {
        mode "2560x1440@60.000"
        scale 1.2
    }
    output "eDP-1" {
        off
    }
  • Gyorsbillentyűk és kötés (bindings): A binds szekcióban adhatjuk meg a Niri által használt billentyűkombinációkat. Fontos, hogy Niri nem tölt be beépített alapértelmezett kötéseket; ha valamit nem definiálunk a configban, az nem lesz aktív. Például a futtatók (spawn) beállításai:

    binds {
        Mod+T { spawn "alacritty"; }       // Terminál indítása
        Mod+D { spawn "fuzzel"; }         // Alkalmazásindító
        Mod+Q { close; }                 // Fókuszált ablak bezárása
    }

    Itt a Mod általában a Super (Win) billentyűt jelöli (ha Niri önállóan fut), vagy Alt-ot, ha más kompozitorban “ablakként” fut. Minden spawn parancsnál a program és annak argumentumai idézőjelbe kerülnek.

    Van lehetőség alternatív navigációra is (például „WASD” jellegű). Például így:

    binds {
        Mod+A { focus-column-left; }
        Mod+S { focus-window-or-workspace-down; }
        Mod+W { focus-window-or-workspace-up; }
        Mod+D { focus-column-right; }
        // ... további kötés átírások szükség szerint
    }
  • Automatikus indítás (spawn-at-startup): Itt adhatunk meg programokat, amiket a Niri indulásakor futtat. Tipikusan ide kerülhet az alsó sáv (például waybar), értesítési démon (mako), képernyővédő stb.:

    spawn-at-startup "mako"
    spawn-at-startup "waybar"
    spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"

    (A fenti példa egy komplex swayidle parancsot mutat be időzítéssel. Az indított folyamatok alapértelmezetten a Niri életciklusához kötődnek: amikor kilépünk Niriből, ezek leállnak. Ha valamit háttérfeladatként akarunk futtatni, adjuk hozzá a & paramétert.)

  • XWayland: A Niri önmagában nem indít el X11-t futtató alkalmazásokat; ehhez az xwayland-satellite csomagot ajánlják. Telepítés után a DISPLAY környezeti változót be kell állítani (például :0), és el kell indítani az xwayland-satellite-et. Konfigurációban például:

    environment {
        DISPLAY ":0"
    }
    spawn-at-startup "xwayland-satellite"

    A saját dokumentáció javaslata szerint a DISPLAY beállítással és az xwayland-satellite használatával a Steam/Proton játékok, JetBrains IDE-k, Discord és más X11-alapú alkalmazások is jól működnek Niri alatt.

Használati példák és billentyűparancsok

  • Alapvető parancsok: A Niri-ban alapértelmezetten nincs gyorslista, de a létrejött konfigurációban megtalálhatók a példa kötések. A dokumentáció szerint a legfontosabbak: Mod+T Alacritty terminált indít, Mod+D fuzzel alkalmazásindító futtatása, Mod+Q a fókuszált ablak bezárása. A Mod+Shift+E (vagy a megszokott Ctrl+Alt+Delete) Niri-ból való kilépést végzi.

  • Ablakok és oszlopok között mozgatás:

    • Mod+H és Mod+L (vagy balra/jobbra nyílbillentyű) a balra vagy jobbra lévő oszlop fókuszát aktiválja.

    • Mod+J és Mod+K (vagy le/fel nyíl) a lentebbi vagy felette lévő ablakot fókuszálja az adott oszlopban.

    • Ha Ctrl-al együtt használjuk (Mod+Ctrl+H/L stb.), akkor mozgatjuk az oszlopot vagy ablakot az adott irányba.

  • Workspace-ek (munkaterületek): Mod+U/Mod+I vagy oldalsó PageUp/PageDown vált a fenti vagy lenti munkaterületre, Ctrl-lal együtt pedig mozgatja a fókuszált oszlopot másik workspace-be.

  • Átméretezés és elrendezés: A Mod+R vált az oszlopok előre definiált szélessége között, Mod+Shift+R a magasságok között. A Mod+- és Mod+= (illetve Mod+Shift+- és Mod+Shift+=) felelnek az oszlop szélességének, illetve az ablak magasságának kisebb-nagyobb lépésekben történő módosításáért. A Mod+F full-screen módra kapcsolja a fókuszált ablakot (rányitja a teljes monitorra), és Mod+Shift+F ki is lép ebből.

  • Lebegő elrendezés: Beépített lebegő (floating) mód is van: Mod+V átkapcsolja a fókuszált ablakot lebegő/tiling között, Mod+Shift+V pedig váltó kapcsolóként a fókuszpontot váltja a lebegő és csempézett réteg között.

  • Képernyőkép-készítés: A PrtSc gomb megnyomásával kiválasztható területet fényképezhetünk le (egérrel jelöljük ki, majd Space-szel mentjük), Alt+PrtSc a fókuszált ablakot (vágólapra és a ~/Pictures/Screenshots/ könyvtárba), Ctrl+PrtSc pedig a teljes monitort rögzíti hasonlóan.

Kompatibilitás és támogatott funkciók

  • X11 alkalmazások: Ahogy korábban említettük, a Niri nem tartalmaz beépített XWayland-implementációt; helyette az xwayland-satellite eszközt javasolják. Ezzel a módszerrel a régi X11-es alkalmazások, játékok és egyéb eszközök (Steam/Proton, JetBrains IDE-k, Ghidra, Discord, Electron alapú appok stb.) is jól működnek. A DISPLAY környezeti változó beállításával (például DISPLAY=":0") és az xwayland-satellite futtatásával teljes X/TOP csatlakoztatást kapnak.

  • Wayland protokollok és portálok: Niri támogatja a fontosabb Wayland protokollokat – például layer-shell (alsó sávok, menük), gamma-control, screencopy (képernyőrögzítés) és másokat. Támogatott az xdg-desktop-portal, így például a képernyőmegosztás és a szeletelés (screencasting) is működik (GTK és GNOME portalok is telepíthetők).

  • Teljes funkcionalitás: A legtöbb natív Wayland alkalmazás hiba nélkül fut. A fejlesztők és felhasználók is igazolták, hogy modern grafikus könyvtárak (GTK, Qt Wayland backend) teljesen kompatibilisek. Mivel Niri aktívan fejlődik, folyamatosan bővül a protokollok és alkalmazások támogatottsága.

  • Bővítmények és eszköztárak: Mivel önmagában Niri csak a kompozitor/munkamenet (session) része, a teljes környezethez társíthatunk hozzá értesítési démonokat (pl. mako), menüindítókat (fuzzel), órát, hálózatkezelőt stb. (például waybar panel). Ezek a kiegészítő programok a spawn-at-startup szekción keresztül automatikusan elindulnak a Niri kezdésekor.

Fejlesztés és közösség

A Niri nyílt forráskódú projekt, GitHub-on érhető el (YaLTeR/niri). A fejlesztés aktív: az eszközt naprakész állapotban tartják, és stabilnak minősítik a napi használatra. Sok felhasználó futtatja mindennap, és támogatásra, kérdésekre a fejlesztők a Matrix chaten (IRC/Slack-szerű felületen) állnak rendelkezésre. A dokumentáció részletes: a GitHub Wiki-jén megtalálhatók a telepítési lépések, konfigurációs példaoldalak, és egy felépített konfigurációs kézikönyv (Configuration section) is. Sőt, az ArchWiki is összefoglalja a legfontosabb tudnivalókat magyar nyelven.

Mivel a Niri viszonylag új, a közösség mérete növekszik, de már ma is aktív fórumokon és közösségi médiában (reddit, YouTube-demók) találkozhatunk visszajelzésekkel és segédanyagokkal. A projekt folyamatosa kap új frissítéseket (például a 25.01 és 25.05 verziók újításairól bővebben a Phoronix cikkeiben olvashatunk), és tervek szerint tovább bővítik a funkciókat.

Gyakori fogalmak (szószedet)

  • Wayland – A grafikus kijelző rendszerek új generációja. A Wayland alatt az ablakkezelő és a kijelzőszerver egyetlen programként működik. A régebbi X11-hez képest egyszerűbb és modernebb megközelítést kínál.

  • Kompozitor (compositor) – Olyan program, amely a megjelenítést (ablakok kirajzolását) és az ablakok elrendezését végzi. A Wayland alatt a kompozitor maga kezeli az ablakok mozgatását és a képernyőre rajzolást (Niri például teljes egészében az).

  • Ablakkezelő (window manager) – Szoftver, ami az ablakok méretét és helyét kezeli. X11 alatt gyakran külön program volt az ablakok elhelyezésére; Wayland esetén a kompozitor azt is magába foglalja (ahogy Niri esetén is).

  • Csempézett ablakkezelő (tiling WM) – Olyan ablakkezelő, amely az ablakokat nem egymásra helyezi („lebegtetve”), hanem rácsba vagy oszlop-struktúrába rendezi, az ablakokat oszlopokba/falakba illesztve. Így egy időben mindig az ablakok közül több is látható, és a felhasználó billentyűparancsokkal vált közöttük.

  • Dinamikus munkaasztal (dynamic workspace) – A munkaasztalok (workspace-ek) száma változik aszerint, ahogy ablakokat használunk. Például mindig van egy „üres” workspaceünk, ahová új ablakot nyithatunk, és a nem használt munkaterületek felszabadulnak.

  • XWayland – Egy réteges megoldás, amely lehetővé teszi, hogy X11-es alkalmazások (pl. régi programok, játékok) Wayland környezetben fussanak. A Niri hivatalosan nem tartalmazza beépítve, de az xwayland-satellite segédprogrammal egyszerűen beállítható.

  • KDL – A konfigurációs fájl formátuma ( _K_eys_D_efinition _L_anguage) – Niri beállításai ilyen fájlban vannak, ember számára olvasható, szekciókkal és kulcs-érték párokkal szervezve.

Mindezek mellett a Niri dokumentációja és közössége segíti a kezdőket a beállításban és használatban. Az itt bemutatott példák és leírások alapján egy induló Linux-felhasználó is képes legyen Nirit telepíteni, konfigurálni és kipróbálni egy saját tesztkörnyezetben.

Források:

Github oldala: https://github.com/YaLTeR/niri

A beállításhoz: https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction

Arch wiki: https://wiki.archlinux.org/title/Niri

Spanyol tutorial videó: https://www.youtube.com/watch?v=f1ZB_4pQR2g

(fordítóval teljesen jó)

Saját bemutató videóm:
https://youtu.be/Pq5YjnjQLso