Új Wayland-es ablakkezelő: Niri

Megjelent egy új Wayland-es ablakkezelő, Niri. Engem és másokat is azonnal megvett.

Egyik nap megnéztem a videókat róla, másnap kipróbáltam, ma már azon dolgozom :wink:
Scrolling-tiling alapú.

  • Minden ablak megtartja a méretét,
  • az újat jobbra veszi fel,
  • tetszőleges sok ablak lehet,
  • az ablak szélessége változtatható,
  • az ablakok oszlopokba szervezhetők,
  • az ablakok tab-okba is szervezhetők,
  • bármelyik lehet akár fullscreen is, a fullscreen-t megtartja ablakváltáskor is,
  • scrollozni lehet köztük,
  • az ablak lehet lebegő is,
  • tetszőleges sok munkaasztal lehet, azokat lefelé veszi fel,
  • van overview nézet, ahol átláthatjuk az összes munkaasztalt, az összes ablakával,
  • overview nézetben is működnek az ablakok,
  • külön működés monitoronként,
  • jó dokumentáció,
  • könnyű beállítás,
  • sok beállítás azonnal életbe lép mentés hatására,
  • nagyon kicsi memória használat, a nagyon takarékos SwayWM-re is ráver jó sokat

Érdemes vetni rá egy pillantást!

Hozzászólások

Szerkesztve: 2025. 10. 17., p – 16:31

Végre van egy Memory Safety DE. Akkor ez garantáltan mentes lesz minden problémától. 5,3 Mb az src könyvtár egész biztos vagyok benne hogy csak Rust -al lehetett biztonságosra megírni.
src/pw_utils.rs:

unsafe {
    let spa_buffer = (*buffer).buffer;

    let fd = (*(*spa_buffer).datas).fd;
    let dmabuf = self.inner.borrow().dmabufs[&fd].clone();

    match render_to_dmabuf(
        renderer,
        dmabuf,
        size,
        scale,
        Transform::Normal,
        elements.iter().rev(),
    ) {
        Ok(sync_point) => {
            mark_buffer_as_good(pw_buffer, &mut self.sequence_counter);
            trace!("queueing buffer with seq={}", self.sequence_counter);
            self.queue_after_sync(pw_buffer, sync_point);
            true
        }
        Err(err) => {
            warn!("error rendering to dmabuf: {err:?}");
            return_unused_buffer(&self.stream, pw_buffer);
            false
        }
    }
}

Nem értek a Rust-hoz, de nagyon kíváncsi lennék mi történik ha nincs 'self.inner.borrow().dmabufs[&fd]'  vagy a legelső sorban (*buffer).buffer 

Nem tudom hol láttad, hogy én ablakkezelőt írtam, nem írtam és nem is áll szándékomban, de ha esetleg mégis rávinne a lélek téged értesítelek először.
Egyébként ha nem ment át akkor leírom egyértelműen, nyíltan Rust ellenes vagyok mióta csak Rust-tal lehet biztonságos kódot írni valamint azért mert mindent is Rustban kell mostanában megírni. Amíg tudom kerülöm a Rust projektek használatát.
Mielőtt megkérdezed nem tartom magam C vagy C++ fejlesztőnek viszont becsülöm és tisztelem őket.

/off ha mindenki csak ahhoz szolna hozza aminek van relevans tapasztalata, akkor itt nem lenne semmi.

ugyanakkor en sem tudok tojast tojni, abban nincs relevans tapasztalatom. de egy tojasrol kivaloan meg tudom mondani ha jo vagy szar :)

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Én azt sem értem, ha valamit hype-olnak, de azt sem, ha valaki azért nem használ valamit, mert hype-olva van.

Én fogok használni Rust programokat, mert kicsik, gyorsak és nincs sok hibájuk. Ugyanígy teszek a Go és a Zig programokkal. Ha néha akad C vagy C++, akkor azokkal is. ;-)

Én magam próbáltam a Rust-ot is, Go-t is, Zig-et is, régen a C és C++-t is. Egyikkel sincs semmi bajom, de azért nem használnám szívesen némelyiket, akár hype-olva van, akár nincs.

Szerkesztve: 2025. 10. 18., szo – 07:40

Az ablakok közötti mozgatás alapbeállításai nekem nem tetszenek.

Túl sok egyedi gombnyomás, külön a monitor, az oszlop, az ablak és a munkaterület mozgatásai. Én jobban szeretem, ha egy gombnyomásra a logikusan következőt csinálná, pl. ha vége a munkaterületnek, akkor menjen át a következő monitorra.

Illetve azt szoktuk meg, hogy Shift-re mozgat, a defaultban pedig Ctrl-lal.

Így, helyettük én ezeket javaslom:

    Mod+Left  { focus-column-or-monitor-left; }
    Mod+Down  { focus-window-or-workspace-down; }
    Mod+Up    { focus-window-or-workspace-up; }
    Mod+Right { focus-column-or-monitor-right; }
    Mod+H     { focus-column-or-monitor-left; }
    Mod+J     { focus-window-or-workspace-down; }
    Mod+K     { focus-window-or-workspace-up; }
    Mod+L     { focus-column-or-monitor-right; }
    Mod+Shift+Left  { move-column-left-or-to-monitor-left; }
    Mod+Shift+Down  { move-window-down-or-to-workspace-down; }
    Mod+Shift+Up    { move-window-up-or-to-workspace-up; }
    Mod+Shift+Right { move-column-right-or-to-monitor-right; }
    Mod+Shift+H     { move-column-left-or-to-monitor-left; }
    Mod+Shift+J     { move-window-down-or-to-workspace-down; }
    Mod+Shift+K     { move-window-up-or-to-workspace-up; }
    Mod+Shift+L     { move-column-right-or-to-monitor-right; }
    Mod+Ctrl+Left  { focus-monitor-left; }
    Mod+Ctrl+Down  { focus-workspace-down; }
    Mod+Ctrl+Up    { focus-workspace-up; }
    Mod+Ctrl+Right { focus-monitor-right; }
    Mod+Ctrl+H     { focus-monitor-left; }
    Mod+Ctrl+J     { focus-workspace-down; }
    Mod+Ctrl+K     { focus-workspace-up; }
    Mod+Ctrl+L     { focus-monitor-right; }