I3 konfigurálása magyarul

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!

Mire számíthatsz?

A leírásban az alapoktól kezdve mutatom be az i3 használatát. Minden általam megtett lépést a telepítéstől a konfiguráláson keresztül a hatékony használatra való felkészítésig bemutatok. A konkrét telepítés nálam egy Linux Mint-en van, így a csomagnevek ehhez igazodnak, de bármelyik Linux disztribúcióban hasonló a folyamat, így mindenhol hasznát veszed a leírásnak.

Igyekszek minden fogalmat rövid magyarázattal ellátni, ha valami nem egyértelmű, akkor annak nézz utána!

A beállításnál használt segédprogramokat is bemutatom, ezeket érdemes használni.

Amire nem térek ki: én az i3 saját paneljét, az i3bar-t nem használom, így annak a beállítása nem kerül elő.

Hogyan tanuld meg?

A bemutatás sorrendje megegyezik az én saját lépéseimmel, azzal, ahogy én a telepítéstől kezdve konfigurálom a rendszert. Kövesd a leírást, mert az első beállításoknál sokszor kimaradhat pár fontos lépés, ami kellemetlen.

Minden leírást olvass el, még akkor is, akkor és ott feleslegesnek tartod. Ismerni kell a lehetőségeket!

Nincs túl nagy értelme csak olvasni, hanem kövesd is a lépeseket, próbálj ki mindent és gondold át az alternatívákat.
A leírás mellé a hivatalos i3 kézikönyvet is meg kell ismerni. Én csak azokat tudom bemutatni, amiket használok. A lehetőségek ennél sokkal nagyobbak!

Fontos

Ez nagy anyag, nem bontottam egy-egy blogbejegyzésnyi részre. Így az oldalsó panelon láthatod a fejezeteket, azzal tudsz navigálni (a honlapomon).

Folyamatosan írom a leírást, sok esetben egy-egy témát ki is egészítek. Így lehetnek stílusbeli eltérések, ismétlések, vagy hiánynézeted, hogy valami nincs kifejtve. Ez van, az anyag nagy és összetett. Ha valamit hiányolsz, akkor azt jelezd nekem, de csak akkor ha az egészet elolvastad!## Az i3 ablakkezelő bemutatása

Az i3 egy dinamikus tiling ablakkezelő Linuxra és más Unix-szerű rendszerekre. A grafikus felhasználói felületet (GUI) nem egy hagyományos asztali környezet, hanem egy egyszerű és gyors ablakkezelő biztosítja, amely a billentyűzet-központú működésre és a testreszabhatóságra helyezi a hangsúlyt. Az i3-t gyakran választják haladó felhasználók, fejlesztők és azok, akik nagy hatékonyságra törekednek a munkakörnyezetükben.

Mi az az i3wm?

Az i3 egy window manager, vagyis ablakkezelő, amely nem biztosít teljes értékű asztali környezetet (mint a GNOME vagy a KDE), hanem csak az ablakok elrendezéséért, mozgatásáért és kezeléséért felelős. Az i3 tiling, vagyis "csempéző" ablakkezelő, ami azt jelenti, hogy az ablakokat automatikusan egymás mellé rendezi úgy, hogy azok nem fedik egymást, hanem a teljes képernyőterületet hatékonyan kihasználják.

Az i3 előnyei

1. Gyors és erőforrás-takarékos
Az i3 rendkívül kicsi memóriaigényű és gyors, mivel nem futnak fölösleges háttérfolyamatok. Kifejezetten jól használható régi gépeken, vagy ha fontos az alacsony erőforrás-felhasználás.

2. Billentyűzet-központú vezérlés
Az i3 minden művelethez billentyűparancsokat használ: ablaknyitás, váltás, mozgatás, új workspace (munkaterület) indítása, stb. Ez gyorsabb, mint az egérrel való navigálás, ha a felhasználó megszokta.

3. Magas szintű testreszabhatóság
A konfiguráció egy egyszerű szövegfájlban történik (~/.config/i3/config), ami könnyen szerkeszthető. A felhasználó maga határozhatja meg a billentyűparancsokat, megjelenést, alapértelmezett programokat.

4. Tiling rendszer – hatékony munkavégzés
Az ablakokat a rendszer automatikusan úgy rendezi, hogy ne legyenek egymás fölött. Ez különösen hasznos fejlesztéshez, rendszergazdai munkához, vagy ha egyszerre több terminál/alkalmazás fut. Itt kell egy kis kiegészítést tenni: bár jellemzően tár terminált szoktak megnyitni az i3 bemutatásakor, de - természetesen - minden grafikus program használható.

5. Munkaterületek (workspaces) használata
Az i3 támogatja a logikusan elválasztott munkaterületeket, így külön workspace-re lehet helyezni például a böngészőt, szerkesztőt, terminált – mindezt gyors váltási lehetőséggel.

6. Jövőbiztos megoldás

Fontos tudni, hogy az i3 Xorg, X11 alatt működik, és a wayland alatt nem. Ha wayland van a gépeden, és nem akarsz Xorg-ot telepíteni, akkor a sway tiling ablakkezelőt érdemes választani. A kettő konfigurálása megegyezik, az i3 konfigurációs állománya teljesen átvihető sway alá. Így ha váltasz, vagy kénytelenek leszünk váltani az új wayland rendszerre, akkor sem kell újrakonfigurálni a rendszert.

Mire érdemes figyelni? – Hátrányok és lehetséges nehézségek

1. Meredek tanulási görbe
Az i3 nem „plug and play” rendszer. Az első használat során szokatlan lehet, főként azoknak, akik megszokták a hagyományos asztali környezeteket (pl. Windows, GNOME, KDE). A kezdeti konfiguráció, billentyűkombinációk megtanulása időigényes lehet.

2. Nincs beépített eszköztár vagy rendszerbeállító felület
Az i3 szándékosan minimalista. Ha például fényerőt vagy hangot akarunk szabályozni, külön alkalmazásokat vagy szkripteket kell használni, esetleg saját billentyűparancsokat létrehozni ezek vezérléséhez.

3. Grafikus eszközök hiánya
Nincsenek beépített GUI eszközök fájlkezeléshez, hálózatkezeléshez vagy Bluetooth-hoz – ezekhez külön programokat (pl. Thunar, nm-applet, blueman stb.) kell telepíteni és elindítani.

Kinek ajánlott az i3?

Az i3 ideális választás azoknak:

  • akik gyors és hatékony munkakörnyezetet szeretnének,
  • akik főként billentyűzetről dolgoznak,
  • akik szeretnek rendszert konfigurálni és testreszabni,
  • fejlesztőknek, rendszergazdáknak, power usereknek.

Miért szeretem?

Megosztanék pár olyan gondolatot, ami a fenti szakszerű leíráson túlmutat. Én nagyon rég használom az I3-at. Eddig soha komolyabb problémám nem volt a működésével.

Személyes elvárásom, hogy az ablakok ott és olyan méretben jelenjenek meg, ahogy azt én meghatároztam. Legyen az a monitor egy területe, de akár a monitorok közül az, amihez hozzárendeltem, de akár lehet egy munkaasztal (workspace) amire irányítom. Ennek a beállítás hosszabb idő, és át kell gondolni, hogy mit teszünk, de egyszer kell beállítani.

Számomra fontos a gyors ablak váltás, akár programok közt, akár a monitorok/workspace-k közti mozgatásnál. Ezeket gyorsan egérrel illetve gyorsbillentyűkkel meg tudjam tenni.

Nagyon kényelmes az i3 lebegő ablakok megoldása, ami a hagyományos asztali környezetekben megszokott ablakkezelést tesz lehetővé.

Az összes teendőt elérjem billentyűről, a gyorsbillentyűket szabadon és egyszerűen tudjam konfigurálni. Bár sok ablakkezelő nagyon mostohán bánik az egér használatával, az i3 alatt az egész a megszokott mód használható.

A leírás legyen egyértelmű, kellően bő és mindenhez mutasson mintát is. Illetve legyen naprakész. Ezeket az i3 leírása teljes mértékben kielégíti.

A konfiguráció legyen egyszerű, szöveges állományt szerkesztve tudjak mindent beállítani. Ez a konfiguráció az i3 alatt alapesetben egy fájl. nagyon kellemes megoldás az i3 alatt, hogy nem automatikusan olvassa be a megváltozott konfigurációs, hanem nekem kell azt egy paranccsal frissíteni. A hibás konfigurációt kijelzi és nem lépteti életbe.

Tipp: Bár kicsi az esélye, hogy szétbarmolod a rendszert, de mindig legyen az előző (még biztosan működő) konfigurációról mentésed.
Nem is emelném ki, hogy odafigyelve, kis lépésenként szerkeszd a konfigurációdat...

Fontos, hogy stabil és üzembiztos működést kapjak. I3 alapelve, hogy csak az kerül bele, ami valóban kell, és csak akkor kap új verziót, ha az atomstabil. A konfigurációs állomány az új verzióknál is működik.

Legyen megfelelő, de ne túl sok elrendezési mód. Nekem a kétfelé osztott monitor és a "füles" tabbed mód elvárás.

A konfigurálási lehetőség legyen elegendő, de semmi olyan ne legyen benne, ami nem kell. A sokféle beállítási lehetőségeket adó (pld. hyprland) környezetek túl sok időt és energiát vesznek el. Ráadásul a legtöbb beállítást nem is használom ki ezeknél. Eddig pontosan egy olyan beállítási lehetőséget hiányoltam, ami nagyon jól jött volna: a niri-hez hasonló szalagszerű elhelyezést.

Összegzés

Az i3 egy rendkívül hatékony és jól testreszabható ablakkezelő, amely teljes kontrollt ad a felhasználónak az ablakok elrendezése és viselkedése felett. Bár nem való mindenkinek, és tanulást igényel, de ha egyszer megszokjuk, nehéz visszatérni a hagyományos ablakkezelőkhöz. Ha fontos számodra a produktivitás, az egyszerűség és a gyorsaság, az i3 érdemes lehet a figyelmedre.

Pár kifejezés magyarázata

Mi az az ablakkezelő?

Az ablakkezelő (angolul window manager) egy szoftverkomponens, amely a grafikus felhasználói felületen belül az ablakok megjelenítéséért, mozgatásáért, átméretezéséért és elrendezéséért felel. Ez határozza meg, hogyan néznek ki és hogyan viselkednek az ablakok: például van-e címsoruk, hogyan váltunk köztük, vagy hogyan osztják fel a képernyőt. Az ablakkezelő lehet része egy nagyobb asztali környezetnek (pl. GNOME, KDE), de működhet önállóan is – mint például az i3.

Mi az a tiling ablakkezelő?

A tiling (csempéző) ablakkezelő egy olyan típus, amely automatikusan úgy rendezi el az ablakokat, hogy azok ne fedjék egymást, hanem csempeszerűen kitöltsék a képernyőteret. Az új ablakokat nem szabadon lebegtetve helyezi el, hanem mindig elosztja a rendelkezésre álló területet a meglévők között.

Hagyományos (stacking) vs. tiling ablakkezelők:

  • A hagyományos ablakkezelők (pl. Xfwm, KWin, Mutter) lehetővé teszik, hogy az ablakokat szabadon mozgassuk, egymásra helyezzük, átméretezzük.
  • A tiling ablakkezelők (pl. i3, bspwm, Sway) automatikusan rendezi az ablakokat, így nincs szükség egérre vagy kézi elhelyezésre. Ez gyorsabb, hatékonyabb munkavégzést tesz lehetővé, különösen több alkalmazás párhuzamos használatakor.

Összefoglalva:

  • Az ablakkezelő feladata az ablakok megjelenítésének és elrendezésének irányítása.
  • A tiling ablakkezelők automatikusan egymás mellé/csúsztatva helyezik el az ablakokat, optimalizálva a munkateret.
  • Ez hatékonyabb lehet, különösen azok számára, akik elsősorban billentyűzettel dolgoznak és sok alkalmazást futtatnak egyszerre.

Xorg vs. wayland

Az X11 (vagy X.Org Server) a Unix-szerű rendszerek hagyományos grafikus megjelenítő rendszere, amely több évtizede szolgálja ki a felhasználói felületeket. Moduláris, hálózati alapú működése miatt rugalmas, de mára elavultnak számít: nehezen kezeli a modern grafikus igényeket, például a skálázást, érintőkijelzőt vagy több monitoros rendszereket.

Aki tart attól, hogy kivezetésre kerül ez a megoldás: semmi ok a pánikra! Nem egy-két év a kivezetése, sok szakember ezt tartja jónak. Ami biztosíthatja a hosszabb működést: nemrég jelent meg a hír, hogy XLibre néven egy forkja (elágazása) indul, így már kettő - első közelítéssel - egyenrangú lehetőség is lesz.

A Wayland egy modern alternatíva, amely célja az X11 leváltása. Egyszerűbb, biztonságosabb és hatékonyabb architektúrával rendelkezik: a kliensalkalmazások közvetlenül kommunikálnak a kompozitorral (pl. Mutter, KWin, Sway), ami javítja a teljesítményt és csökkenti a hibalehetőségeket. Bár még nem minden alkalmazás vagy driver támogatja teljes mértékben, egyre több disztribúció alapértelmezettként használja.

Ami előtérbe helyezi a wayland-ot: pár disztribúció bejelentette, hogy kivezetik az Xorg rendszer és első időkben a javasolt rendszer a wayland lesz, mellette még használható a hagyományos, de egy idő után már csak a wayland-ot támogatják. Több nagy és ismert asztali környezet is bejelentette, hogy átáll a kizárólagos wayland támogatásra. Így fontos a sima átállás lehetősége az i3 és a sway közt!

Összefoglalva:

  • Az X11 stabil, de elavult rendszer.
  • A Wayland modernebb, biztonságosabb és jobb grafikus élményt kínál, de még úton van a teljes elterjedés felé.

Alap konfigurációs lépések, alapok

Konfiguráció létrehozása

Amennyiben már futott az i3 (az előbb kipróbáltad), akkor nincs további lépésre szükség. Már van egy konfigurációs állományod. Ha nem futtattad még az i3-at, akkor létre kell hozni a konfigurációs állományt. Ennek három megoldása van:

Futtasd terminálban:

i3-config-wizard

Ez megteszi az összes lépést az alap konfiguráció létrehozásához.

További információk a man i3-config-wizard paranccsal... Semmi olyan nem tartalmaz, ami most fontos lenne.

Manuális másolás módszer. Ha minimálisan halad vagy ezt használd, de az eredmény ugyanaz lesz.

Konfigurációs fájl elérési útjai, amit mindenképp ismerni kell.

Az i3 konfigurációs fájlja rendszerint itt található:

/etc/i3/config (globális, csak olvasható)

Személyre szabott másolat:

~/.i3/config, vagy

~/.config/i3/config (ha az XDG szabványos könyvtárszerkezetet használod)

A saját beállításaidhoz másold át a globális beállítási állományt és azt szerkeszd. Én a második ( ~/.config/i3/config ) megoldást használom.

Tipp: Folyamatosan mentsd a konfigurációkat, így mindig vissza tudsz térni egy működőhöz. Bár nem túl összetett a konfigurációs állomány, de pár heti folyamatos finomítást elveszteni kár lenne.
Az i3 kijelzi, ha probléma van a konfigurációs állományban, így mindig tudod, hogy hol kell keresni a hibát.

Ha kész konfigurációt kapsz, akkor ide kell másolni, illetve - ha van egyén kiegészítő - akkor a készítő által megadott helyekre.

Én minden beállítási állományt (pld. panel, sxhkd) és szkriptet ebbe a könyvtárban tartok. Ígya mappa mentésével az egész i3 rendszerem mentésre kerül.

Alapismeretek a konfigurációs állományról

A helyét már ismerjük, most a kedvenc szövegszerkesztővel nyissuk meg. Bármelyik sima, egyszerű szöveg szerkesztésére alkalmas szerkesztő megfelel. Azt használd, amit ismersz. Érdemes olyant használni ami a szintaxist kiemeli. Így vizuálisabb a kép, könnyebb a szerkesztést követni.

Ami után megnyitottad az állományt láthatod: sima, egyszerű és jól olvasható a konfiguráció. Nincs különösebb szerkezet és a programnyelvekre jellemző elvárás zárójelek, behúzások és egyéb kötöttség. Ennek ellenére érdemes betartani pár alapvető dolgot:

  1. A konfigurációban tartsunk rendet, egy témához tartozó beállításokat egy helyre rakjuk. Átláthatóság fontos!
  2. Amit kell kommenteljük, lássuk el magyarázattal. Itt a komment a # jel. Csak a sor elején használjuk, sorközben nem!
  3. Zárójeles szerkezeteknél figyelemmel járjunk el a zárójelek párosításánál.
  4. Nem használt funkciókat kommenteljük ki, így kisebb az esély a billentyű kombinációk ütközésre.
  5. Mindig legyünk következetesek. Sok paraméter több helyen is megadható, de mi egy helyen, egységesen adjunk meg paramétert.
  6. Triplán figyeljünk a redundanciára, főleg a billentyű kombinációknál.

A sorrend a sorok közt nagyjából lényegtelen, ennek ellenére logikai, indulás, felhasználási sorrend szerint szervezzük a konfigurációt.

Include, azaz beillesztés

Az i3 konfig állomány elég hosszú, így a 4.2-es verzió óta egy-egy blokkot ki tudunk emelni egy különálló fájlba, majd arra hivatkozva az i3 kezelni tudja. Ha használjuk az include megoldást a témakörök szerint létrehozott fájlok már könnyebben kezelhetők lesznek. Csak az adott témakört érintő fájlt nyitom meg, írom bele a megfelelő kiegészítést.
A dolog nem idegen, hiszen a Vim, Nvim konfigurációt is felbontottam több fájlra, illetve a bash, zsh konfigurációból is kiszerveztük az alias-okat.

Az include alap használata

Első lépésként érdemes kiemelni a fő konfigurációs fájlból stabilan tartott, soha nem állogatott részeket. Ezek lehetnek az asztalok nyitására, illetve az asztalokra való ugrásra stb. irányuló billentyű parancsok:

# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+odiaeresis workspace number $ws10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+odiaeresis move container to workspace number $ws10

Ez általában stabilan marad, nem változtattam ezeken nagyon rég semmit. Még elég idegen lehet kezdőnek, de a magyarázatokra kitérek annak a beállításoknál. A példasorok az eredeti, gyári konfigurációól vannak, nézd meg!

A másik ilyen lehetséges kiemelendő lehet a gyorsbillentyűk megadása. Nekem viszonylag sok gyorsbillentyűm van, így ezeket is érdemes lehet kiemelni egy külön fájlba. Ilyenkor már csak ezt az egy fájlt kell megnyitni, ha a billentyűket át akarom írni.

Amit nem használok, de aki igen, ő átgondolhatja, hogy a panel beállításait is kiteszi egy külön állományba.

Az első lépés mindenképp a logikus átgondolás legyen, mert jobb egyszer átgondolva megcsinálni, mint többször átírni a dolgokat. Pont azt veszti el ezzel az ember, ami miatt ez nagyon jó, a gyors átláthatóságot.

Következő lépés a config fájlról egy biztonsági mentést készíteni.

Majd létrehozni a kívánt fájlokat. Praktikusság miatt érdemes a i3wm saját könyvtárában, és egy standardizált kiterjesztéssel. A gyorsbillentyűknek például a keys.conf név megfelelő lehet. Majd a megfelelő fájlokba kimásoljuk az oda szánt részeket, az eredeti config fájlba pedig kikommenteljük a már áthelyezett sorokat. Nem lehet redundáns bejegyzés!

include ~/.config/i3/keys.conf

A meglévő config fájlban meg kell adni melyik fájlokat kellene beolvasni induláskor.

Ezeknek a nevei legyenek beszélő nevek, ne kelljen keresgélni mi mibe került át. Gondolom a formátum egyértelmű, a példa magért beszél.

Gyakorlatilag nem teszünk mást csak a régi, elég hosszút feldaraboljuk a könnyebb kezelhetőség miatt, majd hivatkozunk rá. Majd amikor az indítás lefut, akkor az I3wm beolvassa a config fájl, amiben látja, hogy még a meghatározott fájlokat is be kell olvasnia.

Ha mindegyiknek a kiterjesztése conf, akkor nem kell minden egyes fájlra egyesével hivatkozni, jó lehet a

include ~/.config/i3/config.d/*.conf

sor is. A példa jól mutatja, hogy egy alkönyvtárat hoztunk létre, amibe rendezetten tudjuk elhelyezni az állományokat. A könyvtár az I3 alap mappájában van, így a mappa mentésével az összes fájl mentésre kerül.

De ennek van egy komoly hátulütője is. Az összes .conf fájlt megpróbálja beolvasni, így ha ebben a könyvtárban mentési fájl ezzel a kiterjesztéssel nem lehet! Ezt azért érdemes hangsúlyozni, mert sokan használjuk a megnyitást követő azonnali mentést egy ilyen formátumban: fájlnév_dátum.kiterjesztés. Itt gondot okoz.

Majd újra leellenőrzi az ember a munkáját, mindent ment és egy újraindítás után – jó esetben semmit nem veszünk észre – minden működik.

Gond lehet az is, amikor egy-egy fájl nem olvasható, vagy nincs is meg, mint ahogy én elírtam a nevét, az I3wm meg keresni próbálta… Ilyenkor (legalábbis a leírás szerint) a I3wm hibát ad, és tovább folytatja a fő config fájl feldolgozását. Ami jó, mert kisebb, nem létfontosságú beállítások nélkül el is indul a rendszer, nem fagy le csak azért mert valami fájl nevét rosszul írtál be.

Problémás lehet – bár ez az egy fájlban tárolt beállításnál is az – ha egy billentyűkombinációhoz két funkciót társítasz. Én minden ilyen billentyűkötést egy fájlba rakom, így hamar kiderül a hiba, ha rákeresek.

Ha ki szeretnéd listázni a beolvasott külső fájlokat:

i3 --moreversion

a megoldás.

Változók és az include direktíva korlátai

A változók megosztottak az összes betöltött konfigurációs fájl között, de van egy fontos korlátozás, amire figyelni kell:

  • Használható: Olyan változó, amit a fő konfigurációs fájlban definiáltál, és azt felhasználhatod bármelyik include fájlban.
  • Nem használható: Olyan változó, amit csak egy beillesztett fájlban definiáltál, és azt szeretnéd használni a szülő (vagy korábban feldolgozott) konfigurációs fájlban. Ez nem fog működni.

Ez technikai korlátozás: a változók kiterjesztése (azaz a $változónév behelyettesítése) még az include direktívák feldolgozása előtt történik.

Tipp: általában a set kezdetű sorokban adjuk meg a változókat. Ezeket a fő konfigurációs állományban hagyjuk, vagy oda írjuk be. Nem emeljük át másba. Ilyenkor nem lehet semmi probléma.
Azaz a fenti példában említett sorok simán kikerülhetnek egy külön állományba, hiszen azok "használják" a $ws kezdetű változókat. Az előtte lévő set $ws1 "1" stb. sorok meg maradnak a fő konfigban, mert ezek adják meg (definiálják) a változókat.

Beillesztett fájlok hatásai

Koncepcionálisan a beillesztett fájlok csak kiegészíthetik a konfigurációt, nem vonhatják vissza vagy módosíthatják a már feldolgozott beállításokat. Például:

  • Új billentyűparancsokat (bindsym) hozzáadhatsz,
  • De létező parancsokat felülírni vagy törölni nem lehet a beillesztett fájlokon keresztül

Amúgy is kerüljük az ilyen variálásokat, hogy egy már létező kötést, parancsot, bármit később átírassunk, töröljünk.

Fontos: ez lehetőség, nem kötelezettség! Ha nem tetszik, vagy káoszosnak véled, akkor használj egy konfig fájlt. Ez eredmény pont ugyanaz lesz.
Ha használod, kezdőként kövesd ezt: előbb a fő konfigurációs fájlban állíts be mindent, rendez összes témánként, használd pár napig és ha nincs gond, akkor emeld ki külön fájlba azokat, amiket oda szántál.

Saját, vagy másé?

Az interneten rengeteg i3 conf állomány van. Nagy a kísértés, hogy egyet kinézzen az ember és azt bemásolja a helyére. Ez rossz ötlet!

  • Rengeteg vacak conf állomány van, ami hibás. A hibakeresés nem egyszerű, ha azt sem tudod mi mit csinál és miért úgy állította be!
  • Semmit nem tanulsz a beállításról, ha másét használod. A valóban működőképes, testreszabott i3 elvárja a saját beállításokat tartalmazó konfigurációt. Sok funkcióról, beállítási lehetőségről nem is fog tudomást szerezni, ha nem olvasod el a leírásokat és nem magad állítod be azokat.
  • Az idegen konfigokat is át kell nézni, hogy melyik billentyű kombinációhoz mi van rendelve.
  • Sok angol, vagy más idegen nyelvű helyről jött konfigban olyan billentyű kötések is lehetnek, amiket a magyar kiosztásnál nehézkes elérni.

Akkor mire jó a másé: ötleteket adhat, hiszen olyan megoldásokat is használhatnak, ami nekem is hasznos lehet. De ne legyen nagy illúziód, az esetek 99,9%-a ugyanazt járja körbe, amit a hivatalos leírás is elmond. Itt nagy csoda megoldások, titkos kulcsok nincsenek. Az i3 jól dokumentált és teljes körű leírást ad!

Kezdeti lépések, ismerkedés

Én abból indulok ki, hogy mindenki az alap config állománnyal rendelkezik és nem valami testre szabottal. Ezen megyünk végig és igazgatjuk megfelelően. A koncepció jelenleg annyi, hogy egy-egy lépést konkrétan bemutatok (én így használom) és ahol van általános, az általam használttól eltérő, akkor azt is leírom. Ezek a leírások az i3 gyári doksiját nem helyettesítik, azt mindenképp sokszor el kell olvasni.

A megnyitott config fájl elején sok felesleges sor van, ami konfigurálás szempontjából felesleges kommentár sor. Ezeket törlöm

# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#

# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!

Én átírtam hasznosabbra:

#############################
# 
# i3 config file (v4)
# Saját I3 config, Linux Mint
# 
############################# 
#
# Ami kell:
# xev
# arandr
# kitty
# ...

Gondolom a koncepció érthető: kerüljön bele szép sorban az összes olyan program felsorolás, amit használok. Így egy újratelepítéskor nem lesz gond, nem kell keresgélni a hiányzó programokat. Ide csak az i3 működéséhez, a beállításhoz elvárt programok kerülnek.

Amit legelőbb meg kell tenni

Alap, kényelmi és rendszerhez mindenképp kellő dolgok beállítása, ellenőrzése és megismerése.

Ezeket az ellenőrzéseket jó ötletnek tűnik, ha a megszokott asztali környezettben teszed meg és nem az i3 alatt.

Nézd meg, hogy ezek be vannak-e állítva, illetve ha igen, akkor jegyezd a kombinációkat:

bindsym $mod+Shift+Escape reload

A Win+Shift+Escape együttes lenyomásával újratölti a konfigurációs állományt. Nagyon fontos, hogy a szerkesztés és mentés még nem lépteti életbe a változásokat. Csak ha beolvastatod újra a beállításokat! Azaz szerkesztés, mentés, újratöltés!

bindsym $mod+Shift+q restart

Menet közbeni i3 újraindítás. Hasonlóan újra beolvassa a konfigot és életbe lép a változtatás. Már biztosan felismerted, hogy a Win+Shift+q kombinációt használjuk.

bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"

Az egyik legfontosabb kombináció: a kiléptetés, azaz i3 bezárása.

bindsym $mod+q kill

Az aktív ablak bezárása.

Bár hagyhatod is alaphelyzetben, de én ezt átszerkesztem az elején:

# start a terminal
bindsym $mod+Return exec i3-sensible-terminal

Azaz Win+Enter nyisson egy terminált. Nekem elég megszokott a kitty használata így az i3 saját terminálja lesz cserélve:

# start a terminal
bindsym $mod+Return exec kitty

Ezek után már a megszokott terminálom indul.

Tipp: Nem árt, ha bármelyik kombináció hozzárendelés előtt ellenőrződ, hogy a program, amit indítanál az telepítve van és valóban az adott paranccsal indul. Egy flatpak, appimage parancs indításánál lehetnek eltérések a megszokott egyszavas beírásoktól!

Monitor beállítása

Ez a lépés egy monitor esetén (ha az megfelelő felbontással stb. működik i3 alatt) nem lesz érdekes. Akkor sem, ha több monitorod van vízszintesen egymás mellett és az i3 indítása után az egér simán áthúzható az egyikről a másikra. Azaz a monitorok dimenziói megfelelőek.

Ha több monitorod van, vagy az elhelyezkedésüket be kell állítani, akkor pár lépést meg kell tenni. Én a saját lépéseimet mutatom be, nekem ez eddig bevált és gyors is.

Fontos: csak az i3 alatti monitorbeállítás módját mutatom be, nem térek ki az xrandr összes lehetőségére, skálázás, nem alapból ismert felbontások, frissítési frekvenciák stb. beállítására. Az nem az i3, hanem a meghívott monitorkezelő (jelen esetben az xrandr) feladata.

Monitor adatok beszerzése: arandr

Két vagy több monitor beállításhoz három adat kell: felbontás, a dimenzió, hogy hol helyezkednek el egymáshoz képest és a monitorok neve. Minden adatot ki tudunk az arandr programmal nyerni. Telepítés után elindítjuk, és már látjuk is azt a panelt, amit szeretnénk: vizuálisan (mint a KDE, Cinnamon stb. alatt) mozgathatjuk a monitorok kis képeit. A menüben állíthatjuk a felbontást és egyéb technikai paramétert.

i3_kép_03

Amikor a beállítás megfelelő, ki is próbáltuk (a zöld pipára bökve életbe lép a beállítás, és ha kell finomíthatunk rajta) nincs más dolgunk csak lementeni egy szkriptbe az adatokat. Az elrendezés/mentés másként menüpontban megadhatjuk, hogy milyen néven és hova mentse a szkriptet. A hely és a név mindegy, mert nem fogjuk ezt használni, csak az adatokat szedjük ki.

Nekem ilyen a tartalma:

#!/bin/sh
xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output DisplayPort-1 --off --output DisplayPort-2 --off --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Picit káosznak tűnik, de nem az. Ha kiemelek egy monitor adathalmazt, akkor már mindenki felismeri:

--output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal

A monitor pontos neve, a felbontása (amit érzékel) a pozíciója (dimenziója) és az elforgatás mértéke. A legtöbb esetben minden adat jó lesz, ha nem, akkor az xrandr parancs leírását kell nézegetni, annak a kapcsolóit.

Monitor beállítása

Ezeket az adatokat kell megadni az i3 konfigurációban, ami gyakorlatilag nem más mód történik, mint egy felparaméterezett parancs induláskori futtatásával. Az induláskori (autostart) megoldással majd később foglalkozunk, jelenleg elfogadjuk, hgy ezt így érdemes megoldani.

exec_always --no-startup-id xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output DisplayPort-1 --off --output DisplayPort-2 --off --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Ahogy látni az exec_always --no-startup-id után bemásoltam az egész tartalmat, ami az xrand és a paraméterei, amit kaptunk. Ennyivel meg is elégedhetnénk, de legyünk kicsit maximalisták. Sok olyan csatlakozónév van, amire nincs monitor kötve. Ezek státusza: off. Felesleges megmondani az i3-nak, hogy valami nincs, azzal amúgy sem tud kezdeni semmit. Így kigyomláljuk a felesleget.

exec_always --no-startup-id xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Nem lett sokkal rövidebb. Elméletileg nálam a --rotate normal sem kell, hiszen alapérték, hogy nincs elforgatva a monitor, de az benne fog maradni.

Érdemes ezután egy újraindítást elvégezni és kipróbálni, hogy mindent jól csináltunk.

Alternatív megoldások és fejlesztési gondolat

Az i3 nem csak egy felparaméterezett parancsot tud futtatni, hanem szkriptet is. Akinek nincs kedve ezt így megoldani, neki van lehetősége az arandr által elkészített szkriptet is megadni:

exec_always --no-startup-id /home/laci/.screenlayout/teszt.sh

Nálam a legenerált szkript ezen az útvonal és ezen a néven van.

Harmadik megoldásnak jó lehet, ha az összes automatikusan indítandó programot egy szkriptbe írjuk bele, majd azt a szkriptet indítjuk el a fentiekhez hasonlóan. Majd az autostart témánál ezt is megismerjük.

Fejlesztési tipp: A monitorok beállítása egy sima, felparaméterezett xrandr parancs. Így ha többféle monitorbeállítást is használunk, akkor el kell készíteni a paramétereket. A beállítások közt pedig billentyű kombinációkkal válthatunk, futtatva a különféle xrandr beállításokat.

Például:

bindsym $mod+d exec xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal
bindsym $mod+a exec xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate left

A Win+d beállítja a monitort elforgatás nélküli módba, a Win+a pedig left irányba forgatja.

Ennél összetettebb megoldások is lehetségesek, de azok már haladó megoldások. Nekem pár alap megoldáson kívül nem kell más.

Egy strukturáltabb megoldás mintának:

set $mode_display "Ext Screen (v) VGA ON, (h) HDMI ON, (x) VGA OFF, (y) HDMI OFF"
mode $mode_display {
    bindsym v exec --no-startup-id xrandr --output VGA1 --auto --right-of LVDS1, mode "default"
    bindsym h exec --no-startup-id xrandr --output HDMI1 --auto --right-of LVDS1, mode "default"
    bindsym x exec --no-startup-id xrandr --output VGA1 --off, mode "default"
    bindsym y exec --no-startup-id xrandr --output HDMI1 --off, mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+x mode $mode_display

A Win+x után le kell nyomni a felsorolt négy gomb egyikét, és akkor az hajtódik végre. Erre, illetve ehhez hasonló megoldásokra kitérek, a billenytű kombinációk témája ez, itt csak felvillantottam egy ötletet.

Bár az ilyen változtatás bármilyen, a monitor illetve az xrandr program által ismert paramétert meg tud változtatni, de esetleg a programok nem feltétlen tudják követni a felbontás, tájolás és egyéb változásokat. Sok esetben a háttérképet adó program sem, ami elég csúnya látványt adnak.

Tipp: Mindig gondolkodj szabadon, engedd el a fantáziádat. Az i3 alatt sokféle megoldás is lehetséges egy adott eszközzel, és egy adott feladat többféle megoldással is leküzdhető. Ha ismered az i3 lehetőségeit, akkor nagyon kényelmes életed lesz vele.

Általam nem ismert és nem használt megoldás, jellemzően a laptoposoknak, akik sokféle külső monitorral dolgoznak: i3-workscreen

Alap módosító billentyű megadása

A billentyű kombinációknál használatos "módosító" gombok beállítása. Ez egy olyan téma, amit át is lehet ugorni, mert az alap módosítót az első induláskor beállítottuk. Általában a Win gomb kapta meg ezt a szerepet.

Alap megoldás

A beállítás egyszerű:

set $mod Mod1

A lehetséges módosítók:

Lehetséges opciók:

Mod1 → Alt (bal oldali Alt)

Mod4 → Super (Windows billentyű)

Control → Ctrl

Shift → Shift

Azt érdemes használni, ami a legkevésbé megszokott a programoknál, így nem lesz ütközés.

Fontos: a set kezdetű sorok a fő konfigurációs állományban legyenek, az elején tárgyalt "Változók és az include direktíva korlátai" téma miatt!

Ha megváltoztatod így:

set $mod Mod1

Ezzel az összes $mod-dal kezdődő billentyűparancsot az Alt fogja aktiválni a Super helyett. Gyorsan tudsz váltani, anélkül, hogy az összeset egyesével át kellene írni.

Használhatsz több különböző „mod” változót az egyes parancsokhoz:

set $mod Mod4
set $alt Mod1

bindsym $mod+Enter exec alacritty
bindsym $alt+Enter exec firefox

Pár tipp

Caps Lock átalakítása Mod billentyűvé

Ha szeretnéd a Caps Lock billentyűt átalakítani Mod4-é (mivel kényelmesen elérhető), használhatsz setxkbmap vagy xmodmap parancsot:

setxkbmap -option caps:super

Ez a parancs a Caps Lock gombot Super (Mod4) billentyűvé alakítja. Állandóvá teheted, ha hozzáadod az .xprofile vagy .xinitrc fájlhoz ezt a sort.

Gyorsan váltható Mod billentyűk dinamikus szkripttel

Készíthetsz egy szkriptet, amivel váltogathatod a Mod billentyűket például Super ↔ Alt között.

#!/bin/bash
CONFIG=~/.config/i3/config
if grep -q "set \$mod Mod4" "$CONFIG"; then
    sed -i 's/set \$mod Mod4/set \$mod Mod1/' "$CONFIG"
else
    sed -i 's/set \$mod Mod1/set \$mod Mod4/' "$CONFIG"
fi
i3-msg reload
notify-send "i3 Mod key toggled"

Ezt a szkriptet hozzárendelve egy tetszőleges kombinációhoz a váltás gyorsan megtörténik. Alapvetően jobbnak tartom, ha nem váltogatjuk a módosítókat, mert kavarodás lehet. A billentyű kombináció lényege az izommemória, hogy gondolkodás nélkül nyomjuk le a kombinációt.

Egyéni módosító kulcs hozzáadása csak egy-egy ablakhoz

Bizonyos alkalmazásokhoz vagy munkaterületekhez egyedi Mod beállításokat is definiálhatsz a for_window szabállyal és bindsym kombinációkkal.

Egy példa konfiguráció az i3-hoz, amely megmutatja, hogyan használhatsz egyéni módosító billentyűket bizonyos ablakokra vagy helyzetekre – például úgy, hogy egyes ablakokhoz más billentyűkombinációval kapcsolódjanak parancsok, mint az általános esetben.

Cél: Egyedi módosító billentyű (például Alt vagy Ctrl) egy adott ablakhoz:

Tegyük fel, hogy a Firefox böngészőn belül nem akarod a globális $mod+q parancsot használni az ablak bezárására, hanem külön billentyűt rendelnél hozzá – mondjuk Ctrl+Shift+q-t. Ez hasznos lehet, ha például véletlenül nyomnád le a $mod+q-t más alkalmazásokban. Bár nagyon ritka az ilyen igény, érdemes ismerni, mert egyes nem túl felhasználóbarát programozók a programjukban elég "érdekes", esetleg a konvenciókat figyelembe nem vevő kombinációkat tudnak alkalmazni.

# Általános módosító
set $mod Mod4
set $alt Mod1

# Alap ablakbezárás (mindenre)
bindsym $mod+q kill

# Firefox-specifikus: csak akkor működik, ha a fókuszált ablak a Firefox
for_window [class="^Firefox$"] exec --no-startup-id i3-msg 'unmark; mark firefox_window'

# Firefox-specifikus ablakbezárás más kombinációval
bindsym Control+Shift+q [con_mark="firefox_window"] kill

Magyarázat:

  • for_window [class="^Firefox$"] exec ... mark firefox_window: amikor új Firefox ablak nyílik meg, megjelöljük (mark) azt egyedi névvel, pl. firefox_window.
  • bindsym Control+Shift+q [con_mark="firefox_window"] kill: csak akkor hajtódik végre a kill, ha a fókuszált ablak meg van jelölve ezzel a névvel – tehát ez csak Firefoxra vonatkozik.

Másik példa: csak egy ablakcím alapján

Ha egy adott ablak például egy dokumentum-szerkesztő (pl. Gedit) és a címe tartalmazza a "jegyzet" szót:

for_window [class="Gedit" title=".*jegyzet.*"] mark jegyzet_ablak
bindsym $alt+d [con_mark="jegyzet_ablak"] move container to workspace 9

Ez azt csinálja, hogy Alt+d lenyomásakor a „jegyzet” szót tartalmazó Gedit ablak átkerül a 9-es munkaterületre.

Az ablakok, programok azonosításáról és egyéni paraméterek (méret, elhelyezkedés, lebegés) hozzárendeléséről később lesz szó! De már itt is megtudtuk: igen jól szervezhetjük a dolgokat, ha ismerjük az i3 használatát, logikáját.

Fontok, betű készletek beállítása

Az i3 ablakkezelő szövegalapú felületének (status bar, ablakcímsorok, üzenetek) kinézete erősen függ a beállított betűtípustól. Haladó felhasználóként pontosan testreszabhatod az i3 és a hozzá társított programok (pl. i3bar, i3status, polybar) betűtípusát – akár egyéni méret, karakterkészlet vagy fallback font is használható.

A font megadásának formátuma:

font pango: 

Példa:

font pango:DejaVu Sans Mono 10

A pango: előtag azt jelzi, hogy a betűtípus-kezelés a Pango könyvtáron keresztül történik – ez támogatja a komplex betűkódolást, méretet, dőlt stílust, emoji-t stb.

Alapesetben a font pango:monospace 8 lett megadva, ez mindenhol telepített és egyszerű fontkészlet. Így ha valami más fonttal nem fog működni, akkor ehhez térj vissza.

Kedvenc fejlesztői betűtípus beállítása

font pango:Fira Code 11

Ha nincs telepítve, akkor telepítsd! Szebb, jobb a kinézete.

Ami picit más, mint a többi beállításnál. Itt nem lehet több sor, így figyelj arra, hogy az eredetileg megadott sort deaktiváld!

Több betűtípus fallback használata (pl. emoji miatt)

font pango:Noto Sans Mono, Symbola, EmojiOne 11

Ha az első font nem tartalmazza az adott karaktert (pl. ❄️ vagy ), a következő fontból próbálja meg kirajzolni.

Ezzel elkerülheted, hogy egy saját font megadása után egy másik rendszerben, vagy újratelepítés után a hiányzó fontok miatt problémád legyen. Ha követted azt a gondolatot, hogy a konfig elején felsorolod az elvárt programokat, akkor nem lesz gond!

Félkövér vagy dőlt betűtípus

font pango:Source Code Pro Bold 10
font pango:Ubuntu Mono Italic 11

Font-stílusok kombinálása is lehetséges, de a teljes fontnevet meg kell adni, különben figyelmen kívül maradhat.

Unicode karakterek megjelenítéséhez szükséges font (pl. japán, kínai, arab)

font pango:Noto Sans CJK SC 10

Ha a i3bar vagy ablakcímek nem jelenítenek meg bizonyos nyelveket vagy karaktereket, próbálj ki többnyelvű fontokat: Noto Sans, Unifont, Droid Sans Fallback stb.

Ellenőrizd, hogy a font elérhető-e

Használhatod a fc-list parancsot, hogy megtudd, pontosan mi a betűtípus neve:

fc-list | grep "Fira"

Ne csak az i3 fontot állítsd – i3status vagy polybar stb. is fontos

Ha az i3 mellé i3status, py3status, waybar vagy polybar sávot használsz, azok is külön fontbeállítást igényelnek. Fontos tudni, hogy nem mindegyik örökli az i3 beállításait.

Használj „Nerd Fonts”-ot ikonokhoz

Az olyan statusbar-okhoz, amelyek Unicode ikonokat is mutatnak, érdemes telepíteni a Nerd Fonts valamelyikét, pl.:

font pango:JetBrainsMono Nerd Font 11

Telepíthető a https://www.nerdfonts.com/ oldalról vagy csomagból (fonts-jetbrains-mono, fonts-hack-ttf, stb.)

Ikonokat az I3 is használhat, pld az asztalok nevében is használhatsz.

Nincs hatása a font beállításnak?

  • Ellenőrizd, hogy nincs-e több font sor a configban.
  • Győződj meg róla, hogy az i3 újratöltése megtörtént (Mod+Shift+r vagy i3-msg reload).
  • A pango: előtagot mindig használd, különben a régi (elavult) X-font kezelőre esik vissza.

Szaggatott vagy torz betűk?

  • Próbáld meg kikapcsolni az Xrender-t, vagy használj másik betűtípust.
  • Wayland + Sway esetén külön config szükséges (ld. Waybar, GTK font beállítások). Bár nem i3, de egy i3/sway átállásnál nem árt tudni ezt!

Az i3 betűtípusának testreszabása nem csak esztétikai kérdés – segít a jobb olvashatóságban, unicode és ikonok használatában is. A pango: szintaxis és a fallback lehetőségek révén az i3 könnyedén testre szabható modern, jól kinéző és funkcionális felület kialakítására.

Tipp: a font felállítása után érdemes a font szakaszban a felesleges kommenteket kiszedni. Egyszer beállítjuk, nincs szükség az ottani leírásra. Rövidebb lesz a konfigunk.

Alap konfigurációs lépések, alapok

Konfiguráció létrehozása

Amennyiben már futott az i3 (az előbb kipróbáltad), akkor nincs további lépésre szükség. Már van egy konfigurációs állományod. Ha nem futtattad még az i3-at, akkor létre kell hozni a konfigurációs állományt. Ennek három megoldása van:

Futtasd terminálban:

i3-config-wizard

Ez megteszi az összes lépést az alap konfiguráció létrehozásához.

További információk a man i3-config-wizard paranccsal... Semmi olyan nem tartalmaz, ami most fontos lenne.

Manuális másolás módszer. Ha minimálisan halad vagy ezt használd, de az eredmény ugyanaz lesz.

Konfigurációs fájl elérési útjai, amit mindenképp ismerni kell.

Az i3 konfigurációs fájlja rendszerint itt található:

/etc/i3/config (globális, csak olvasható)

Személyre szabott másolat:

~/.i3/config, vagy

~/.config/i3/config (ha az XDG szabványos könyvtárszerkezetet használod)

A saját beállításaidhoz másold át a globális beállítási állományt és azt szerkeszd. Én a második ( ~/.config/i3/config ) megoldást használom.

Tipp: Folyamatosan mentsd a konfigurációkat, így mindig vissza tudsz térni egy működőhöz. Bár nem túl összetett a konfigurációs állomány, de pár heti folyamatos finomítást elveszteni kár lenne.
Az i3 kijelzi, ha probléma van a konfigurációs állományban, így mindig tudod, hogy hol kell keresni a hibát.

Ha kész konfigurációt kapsz, akkor ide kell másolni, illetve - ha van egyén kiegészítő - akkor a készítő által megadott helyekre.

Én minden beállítási állományt (pld. panel, sxhkd) és szkriptet ebbe a könyvtárban tartok. Ígya mappa mentésével az egész i3 rendszerem mentésre kerül.

Alapismeretek a konfigurációs állományról

A helyét már ismerjük, most a kedvenc szövegszerkesztővel nyissuk meg. Bármelyik sima, egyszerű szöveg szerkesztésére alkalmas szerkesztő megfelel. Azt használd, amit ismersz. Érdemes olyant használni ami a szintaxist kiemeli. Így vizuálisabb a kép, könnyebb a szerkesztést követni.

Ami után megnyitottad az állományt láthatod: sima, egyszerű és jól olvasható a konfiguráció. Nincs különösebb szerkezet és a programnyelvekre jellemző elvárás zárójelek, behúzások és egyéb kötöttség. Ennek ellenére érdemes betartani pár alapvető dolgot:

  1. A konfigurációban tartsunk rendet, egy témához tartozó beállításokat egy helyre rakjuk. Átláthatóság fontos!
  2. Amit kell kommenteljük, lássuk el magyarázattal. Itt a komment a # jel. Csak a sor elején használjuk, sorközben nem!
  3. Zárójeles szerkezeteknél figyelemmel járjunk el a zárójelek párosításánál.
  4. Nem használt funkciókat kommenteljük ki, így kisebb az esély a billentyű kombinációk ütközésre.
  5. Mindig legyünk következetesek. Sok paraméter több helyen is megadható, de mi egy helyen, egységesen adjunk meg paramétert.
  6. Triplán figyeljünk a redundanciára, főleg a billentyű kombinációknál.

A sorrend a sorok közt nagyjából lényegtelen, ennek ellenére logikai, indulás, felhasználási sorrend szerint szervezzük a konfigurációt.

Include, azaz beillesztés

Az i3 konfig állomány elég hosszú, így a 4.2-es verzió óta egy-egy blokkot ki tudunk emelni egy különálló fájlba, majd arra hivatkozva az i3 kezelni tudja. Ha használjuk az include megoldást a témakörök szerint létrehozott fájlok már könnyebben kezelhetők lesznek. Csak az adott témakört érintő fájlt nyitom meg, írom bele a megfelelő kiegészítést.
A dolog nem idegen, hiszen a Vim, Nvim konfigurációt is felbontottam több fájlra, illetve a bash, zsh konfigurációból is kiszerveztük az alias-okat.

Az include alap használata

Első lépésként érdemes kiemelni a fő konfigurációs fájlból stabilan tartott, soha nem állogatott részeket. Ezek lehetnek az asztalok nyitására, illetve az asztalokra való ugrásra stb. irányuló billentyű parancsok:

# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+odiaeresis workspace number $ws10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+odiaeresis move container to workspace number $ws10

Ez általában stabilan marad, nem változtattam ezeken nagyon rég semmit. Még elég idegen lehet kezdőnek, de a magyarázatokra kitérek annak a beállításoknál. A példasorok az eredeti, gyári konfigurációól vannak, nézd meg!

A másik ilyen lehetséges kiemelendő lehet a gyorsbillentyűk megadása. Nekem viszonylag sok gyorsbillentyűm van, így ezeket is érdemes lehet kiemelni egy külön fájlba. Ilyenkor már csak ezt az egy fájlt kell megnyitni, ha a billentyűket át akarom írni.

Amit nem használok, de aki igen, ő átgondolhatja, hogy a panel beállításait is kiteszi egy külön állományba.

Az első lépés mindenképp a logikus átgondolás legyen, mert jobb egyszer átgondolva megcsinálni, mint többször átírni a dolgokat. Pont azt veszti el ezzel az ember, ami miatt ez nagyon jó, a gyors átláthatóságot.

Következő lépés a config fájlról egy biztonsági mentést készíteni.

Majd létrehozni a kívánt fájlokat. Praktikusság miatt érdemes a i3wm saját könyvtárában, és egy standardizált kiterjesztéssel. A gyorsbillentyűknek például a keys.conf név megfelelő lehet. Majd a megfelelő fájlokba kimásoljuk az oda szánt részeket, az eredeti config fájlba pedig kikommenteljük a már áthelyezett sorokat. Nem lehet redundáns bejegyzés!

include ~/.config/i3/keys.conf

A meglévő config fájlban meg kell adni melyik fájlokat kellene beolvasni induláskor.

Ezeknek a nevei legyenek beszélő nevek, ne kelljen keresgélni mi mibe került át. Gondolom a formátum egyértelmű, a példa magért beszél.

Gyakorlatilag nem teszünk mást csak a régi, elég hosszút feldaraboljuk a könnyebb kezelhetőség miatt, majd hivatkozunk rá. Majd amikor az indítás lefut, akkor az I3wm beolvassa a config fájl, amiben látja, hogy még a meghatározott fájlokat is be kell olvasnia.

Ha mindegyiknek a kiterjesztése conf, akkor nem kell minden egyes fájlra egyesével hivatkozni, jó lehet a

include ~/.config/i3/config.d/*.conf

sor is. A példa jól mutatja, hogy egy alkönyvtárat hoztunk létre, amibe rendezetten tudjuk elhelyezni az állományokat. A könyvtár az I3 alap mappájában van, így a mappa mentésével az összes fájl mentésre kerül.

De ennek van egy komoly hátulütője is. Az összes .conf fájlt megpróbálja beolvasni, így ha ebben a könyvtárban mentési fájl ezzel a kiterjesztéssel nem lehet! Ezt azért érdemes hangsúlyozni, mert sokan használjuk a megnyitást követő azonnali mentést egy ilyen formátumban: fájlnév_dátum.kiterjesztés. Itt gondot okoz.

Majd újra leellenőrzi az ember a munkáját, mindent ment és egy újraindítás után – jó esetben semmit nem veszünk észre – minden működik.

Gond lehet az is, amikor egy-egy fájl nem olvasható, vagy nincs is meg, mint ahogy én elírtam a nevét, az I3wm meg keresni próbálta… Ilyenkor (legalábbis a leírás szerint) a I3wm hibát ad, és tovább folytatja a fő config fájl feldolgozását. Ami jó, mert kisebb, nem létfontosságú beállítások nélkül el is indul a rendszer, nem fagy le csak azért mert valami fájl nevét rosszul írtál be.

Problémás lehet – bár ez az egy fájlban tárolt beállításnál is az – ha egy billentyűkombinációhoz két funkciót társítasz. Én minden ilyen billentyűkötést egy fájlba rakom, így hamar kiderül a hiba, ha rákeresek.

Ha ki szeretnéd listázni a beolvasott külső fájlokat:

i3 --moreversion

a megoldás.

Változók és az include direktíva korlátai

A változók megosztottak az összes betöltött konfigurációs fájl között, de van egy fontos korlátozás, amire figyelni kell:

  • Használható: Olyan változó, amit a fő konfigurációs fájlban definiáltál, és azt felhasználhatod bármelyik include fájlban.
  • Nem használható: Olyan változó, amit csak egy beillesztett fájlban definiáltál, és azt szeretnéd használni a szülő (vagy korábban feldolgozott) konfigurációs fájlban. Ez nem fog működni.

Ez technikai korlátozás: a változók kiterjesztése (azaz a $változónév behelyettesítése) még az include direktívák feldolgozása előtt történik.

Tipp: általában a set kezdetű sorokban adjuk meg a változókat. Ezeket a fő konfigurációs állományban hagyjuk, vagy oda írjuk be. Nem emeljük át másba. Ilyenkor nem lehet semmi probléma.
Azaz a fenti példában említett sorok simán kikerülhetnek egy külön állományba, hiszen azok "használják" a $ws kezdetű változókat. Az előtte lévő set $ws1 "1" stb. sorok meg maradnak a fő konfigban, mert ezek adják meg (definiálják) a változókat.

Beillesztett fájlok hatásai

Koncepcionálisan a beillesztett fájlok csak kiegészíthetik a konfigurációt, nem vonhatják vissza vagy módosíthatják a már feldolgozott beállításokat. Például:

  • Új billentyűparancsokat (bindsym) hozzáadhatsz,
  • De létező parancsokat felülírni vagy törölni nem lehet a beillesztett fájlokon keresztül

Amúgy is kerüljük az ilyen variálásokat, hogy egy már létező kötést, parancsot, bármit később átírassunk, töröljünk.

Fontos: ez lehetőség, nem kötelezettség! Ha nem tetszik, vagy káoszosnak véled, akkor használj egy konfig fájlt. Ez eredmény pont ugyanaz lesz.
Ha használod, kezdőként kövesd ezt: előbb a fő konfigurációs fájlban állíts be mindent, rendez összes témánként, használd pár napig és ha nincs gond, akkor emeld ki külön fájlba azokat, amiket oda szántál.

Saját, vagy másé?

Az interneten rengeteg i3 conf állomány van. Nagy a kísértés, hogy egyet kinézzen az ember és azt bemásolja a helyére. Ez rossz ötlet!

  • Rengeteg vacak conf állomány van, ami hibás. A hibakeresés nem egyszerű, ha azt sem tudod mi mit csinál és miért úgy állította be!
  • Semmit nem tanulsz a beállításról, ha másét használod. A valóban működőképes, testreszabott i3 elvárja a saját beállításokat tartalmazó konfigurációt. Sok funkcióról, beállítási lehetőségről nem is fog tudomást szerezni, ha nem olvasod el a leírásokat és nem magad állítod be azokat.
  • Az idegen konfigokat is át kell nézni, hogy melyik billentyű kombinációhoz mi van rendelve.
  • Sok angol, vagy más idegen nyelvű helyről jött konfigban olyan billentyű kötések is lehetnek, amiket a magyar kiosztásnál nehézkes elérni.

Akkor mire jó a másé: ötleteket adhat, hiszen olyan megoldásokat is használhatnak, ami nekem is hasznos lehet. De ne legyen nagy illúziód, az esetek 99,9%-a ugyanazt járja körbe, amit a hivatalos leírás is elmond. Itt nagy csoda megoldások, titkos kulcsok nincsenek. Az i3 jól dokumentált és teljes körű leírást ad!

Kezdeti lépések, ismerkedés

Én abból indulok ki, hogy mindenki az alap config állománnyal rendelkezik és nem valami testre szabottal. Ezen megyünk végig és igazgatjuk megfelelően. A koncepció jelenleg annyi, hogy egy-egy lépést konkrétan bemutatok (én így használom) és ahol van általános, az általam használttól eltérő, akkor azt is leírom. Ezek a leírások az i3 gyári doksiját nem helyettesítik, azt mindenképp sokszor el kell olvasni.

A megnyitott config fájl elején sok felesleges sor van, ami konfigurálás szempontjából felesleges kommentár sor. Ezeket törlöm

# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#

# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!

Én átírtam hasznosabbra:

#############################
# 
# i3 config file (v4)
# Saját I3 config, Linux Mint
# 
############################# 
#
# Ami kell:
# xev
# arandr
# kitty
# ...

Gondolom a koncepció érthető: kerüljön bele szép sorban az összes olyan program felsorolás, amit használok. Így egy újratelepítéskor nem lesz gond, nem kell keresgélni a hiányzó programokat. Ide csak az i3 működéséhez, a beállításhoz elvárt programok kerülnek.

Amit legelőbb meg kell tenni

Alap, kényelmi és rendszerhez mindenképp kellő dolgok beállítása, ellenőrzése és megismerése.

Ezeket az ellenőrzéseket jó ötletnek tűnik, ha a megszokott asztali környezettben teszed meg és nem az i3 alatt.

Nézd meg, hogy ezek be vannak-e állítva, illetve ha igen, akkor jegyezd a kombinációkat:

bindsym $mod+Shift+Escape reload

A Win+Shift+Escape együttes lenyomásával újratölti a konfigurációs állományt. Nagyon fontos, hogy a szerkesztés és mentés még nem lépteti életbe a változásokat. Csak ha beolvastatod újra a beállításokat! Azaz szerkesztés, mentés, újratöltés!

bindsym $mod+Shift+q restart

Menet közbeni i3 újraindítás. Hasonlóan újra beolvassa a konfigot és életbe lép a változtatás. Már biztosan felismerted, hogy a Win+Shift+q kombinációt használjuk.

bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"

Az egyik legfontosabb kombináció: a kiléptetés, azaz i3 bezárása.

bindsym $mod+q kill

Az aktív ablak bezárása.

Bár hagyhatod is alaphelyzetben, de én ezt átszerkesztem az elején:

# start a terminal
bindsym $mod+Return exec i3-sensible-terminal

Azaz Win+Enter nyisson egy terminált. Nekem elég megszokott a kitty használata így az i3 saját terminálja lesz cserélve:

# start a terminal
bindsym $mod+Return exec kitty

Ezek után már a megszokott terminálom indul.

Tipp: Nem árt, ha bármelyik kombináció hozzárendelés előtt ellenőrződ, hogy a program, amit indítanál az telepítve van és valóban az adott paranccsal indul. Egy flatpak, appimage parancs indításánál lehetnek eltérések a megszokott egyszavas beírásoktól!

Monitor beállítása

Ez a lépés egy monitor esetén (ha az megfelelő felbontással stb. működik i3 alatt) nem lesz érdekes. Akkor sem, ha több monitorod van vízszintesen egymás mellett és az i3 indítása után az egér simán áthúzható az egyikről a másikra. Azaz a monitorok dimenziói megfelelőek.

Ha több monitorod van, vagy az elhelyezkedésüket be kell állítani, akkor pár lépést meg kell tenni. Én a saját lépéseimet mutatom be, nekem ez eddig bevált és gyors is.

Fontos: csak az i3 alatti monitorbeállítás módját mutatom be, nem térek ki az xrandr összes lehetőségére, skálázás, nem alapból ismert felbontások, frissítési frekvenciák stb. beállítására. Az nem az i3, hanem a meghívott monitorkezelő (jelen esetben az xrandr) feladata.

Monitor adatok beszerzése: arandr

Két vagy több monitor beállításhoz három adat kell: felbontás, a dimenzió, hogy hol helyezkednek el egymáshoz képest és a monitorok neve. Minden adatot ki tudunk az arandr programmal nyerni. Telepítés után elindítjuk, és már látjuk is azt a panelt, amit szeretnénk: vizuálisan (mint a KDE, Cinnamon stb. alatt) mozgathatjuk a monitorok kis képeit. A menüben állíthatjuk a felbontást és egyéb technikai paramétert.

i3_kép_03

Amikor a beállítás megfelelő, ki is próbáltuk (a zöld pipára bökve életbe lép a beállítás, és ha kell finomíthatunk rajta) nincs más dolgunk csak lementeni egy szkriptbe az adatokat. Az elrendezés/mentés másként menüpontban megadhatjuk, hogy milyen néven és hova mentse a szkriptet. A hely és a név mindegy, mert nem fogjuk ezt használni, csak az adatokat szedjük ki.

Nekem ilyen a tartalma:

#!/bin/sh
xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output DisplayPort-1 --off --output DisplayPort-2 --off --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Picit káosznak tűnik, de nem az. Ha kiemelek egy monitor adathalmazt, akkor már mindenki felismeri:

--output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal

A monitor pontos neve, a felbontása (amit érzékel) a pozíciója (dimenziója) és az elforgatás mértéke. A legtöbb esetben minden adat jó lesz, ha nem, akkor az xrandr parancs leírását kell nézegetni, annak a kapcsolóit.

Monitor beállítása

Ezeket az adatokat kell megadni az i3 konfigurációban, ami gyakorlatilag nem más mód történik, mint egy felparaméterezett parancs induláskori futtatásával. Az induláskori (autostart) megoldással majd később foglalkozunk, jelenleg elfogadjuk, hgy ezt így érdemes megoldani.

exec_always --no-startup-id xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output DisplayPort-1 --off --output DisplayPort-2 --off --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Ahogy látni az exec_always --no-startup-id után bemásoltam az egész tartalmat, ami az xrand és a paraméterei, amit kaptunk. Ennyivel meg is elégedhetnénk, de legyünk kicsit maximalisták. Sok olyan csatlakozónév van, amire nincs monitor kötve. Ezek státusza: off. Felesleges megmondani az i3-nak, hogy valami nincs, azzal amúgy sem tud kezdeni semmit. Így kigyomláljuk a felesleget.

exec_always --no-startup-id xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal --output HDMI-A-0 --primary --mode 1920x1080 --pos 0x229 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x768 --rotate normal

Nem lett sokkal rövidebb. Elméletileg nálam a --rotate normal sem kell, hiszen alapérték, hogy nincs elforgatva a monitor, de az benne fog maradni.

Érdemes ezután egy újraindítást elvégezni és kipróbálni, hogy mindent jól csináltunk.

Alternatív megoldások és fejlesztési gondolat

Az i3 nem csak egy felparaméterezett parancsot tud futtatni, hanem szkriptet is. Akinek nincs kedve ezt így megoldani, neki van lehetősége az arandr által elkészített szkriptet is megadni:

exec_always --no-startup-id /home/laci/.screenlayout/teszt.sh

Nálam a legenerált szkript ezen az útvonal és ezen a néven van.

Harmadik megoldásnak jó lehet, ha az összes automatikusan indítandó programot egy szkriptbe írjuk bele, majd azt a szkriptet indítjuk el a fentiekhez hasonlóan. Majd az autostart témánál ezt is megismerjük.

Fejlesztési tipp: A monitorok beállítása egy sima, felparaméterezett xrandr parancs. Így ha többféle monitorbeállítást is használunk, akkor el kell készíteni a paramétereket. A beállítások közt pedig billentyű kombinációkkal válthatunk, futtatva a különféle xrandr beállításokat.

Például:

bindsym $mod+d exec xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate normal
bindsym $mod+a exec xrandr --output DisplayPort-0 --mode 1024x768 --pos 1920x0 --rotate left

A Win+d beállítja a monitort elforgatás nélküli módba, a Win+a pedig left irányba forgatja.

Ennél összetettebb megoldások is lehetségesek, de azok már haladó megoldások. Nekem pár alap megoldáson kívül nem kell más.

Egy strukturáltabb megoldás mintának:

set $mode_display "Ext Screen (v) VGA ON, (h) HDMI ON, (x) VGA OFF, (y) HDMI OFF"
mode $mode_display {
    bindsym v exec --no-startup-id xrandr --output VGA1 --auto --right-of LVDS1, mode "default"
    bindsym h exec --no-startup-id xrandr --output HDMI1 --auto --right-of LVDS1, mode "default"
    bindsym x exec --no-startup-id xrandr --output VGA1 --off, mode "default"
    bindsym y exec --no-startup-id xrandr --output HDMI1 --off, mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+x mode $mode_display

A Win+x után le kell nyomni a felsorolt négy gomb egyikét, és akkor az hajtódik végre. Erre, illetve ehhez hasonló megoldásokra kitérek, a billenytű kombinációk témája ez, itt csak felvillantottam egy ötletet.

Bár az ilyen változtatás bármilyen, a monitor illetve az xrandr program által ismert paramétert meg tud változtatni, de esetleg a programok nem feltétlen tudják követni a felbontás, tájolás és egyéb változásokat. Sok esetben a háttérképet adó program sem, ami elég csúnya látványt adnak.

Tipp: Mindig gondolkodj szabadon, engedd el a fantáziádat. Az i3 alatt sokféle megoldás is lehetséges egy adott eszközzel, és egy adott feladat többféle megoldással is leküzdhető. Ha ismered az i3 lehetőségeit, akkor nagyon kényelmes életed lesz vele.

Általam nem ismert és nem használt megoldás, jellemzően a laptoposoknak, akik sokféle külső monitorral dolgoznak: i3-workscreen

Alap módosító billentyű megadása

A billentyű kombinációknál használatos "módosító" gombok beállítása. Ez egy olyan téma, amit át is lehet ugorni, mert az alap módosítót az első induláskor beállítottuk. Általában a Win gomb kapta meg ezt a szerepet.

Alap megoldás

A beállítás egyszerű:

set $mod Mod1

A lehetséges módosítók:

Lehetséges opciók:

Mod1 → Alt (bal oldali Alt)

Mod4 → Super (Windows billentyű)

Control → Ctrl

Shift → Shift

Azt érdemes használni, ami a legkevésbé megszokott a programoknál, így nem lesz ütközés.

Fontos: a set kezdetű sorok a fő konfigurációs állományban legyenek, az elején tárgyalt "Változók és az include direktíva korlátai" téma miatt!

Ha megváltoztatod így:

set $mod Mod1

Ezzel az összes $mod-dal kezdődő billentyűparancsot az Alt fogja aktiválni a Super helyett. Gyorsan tudsz váltani, anélkül, hogy az összeset egyesével át kellene írni.

Használhatsz több különböző „mod” változót az egyes parancsokhoz:

set $mod Mod4
set $alt Mod1

bindsym $mod+Enter exec alacritty
bindsym $alt+Enter exec firefox

Pár tipp

Caps Lock átalakítása Mod billentyűvé

Ha szeretnéd a Caps Lock billentyűt átalakítani Mod4-é (mivel kényelmesen elérhető), használhatsz setxkbmap vagy xmodmap parancsot:

setxkbmap -option caps:super

Ez a parancs a Caps Lock gombot Super (Mod4) billentyűvé alakítja. Állandóvá teheted, ha hozzáadod az .xprofile vagy .xinitrc fájlhoz ezt a sort.

Gyorsan váltható Mod billentyűk dinamikus szkripttel

Készíthetsz egy szkriptet, amivel váltogathatod a Mod billentyűket például Super ↔ Alt között.

#!/bin/bash
CONFIG=~/.config/i3/config
if grep -q "set \$mod Mod4" "$CONFIG"; then
    sed -i 's/set \$mod Mod4/set \$mod Mod1/' "$CONFIG"
else
    sed -i 's/set \$mod Mod1/set \$mod Mod4/' "$CONFIG"
fi
i3-msg reload
notify-send "i3 Mod key toggled"

Ezt a szkriptet hozzárendelve egy tetszőleges kombinációhoz a váltás gyorsan megtörténik. Alapvetően jobbnak tartom, ha nem váltogatjuk a módosítókat, mert kavarodás lehet. A billentyű kombináció lényege az izommemória, hogy gondolkodás nélkül nyomjuk le a kombinációt.

Egyéni módosító kulcs hozzáadása csak egy-egy ablakhoz

Bizonyos alkalmazásokhoz vagy munkaterületekhez egyedi Mod beállításokat is definiálhatsz a for_window szabállyal és bindsym kombinációkkal.

Egy példa konfiguráció az i3-hoz, amely megmutatja, hogyan használhatsz egyéni módosító billentyűket bizonyos ablakokra vagy helyzetekre – például úgy, hogy egyes ablakokhoz más billentyűkombinációval kapcsolódjanak parancsok, mint az általános esetben.

Cél: Egyedi módosító billentyű (például Alt vagy Ctrl) egy adott ablakhoz:

Tegyük fel, hogy a Firefox böngészőn belül nem akarod a globális $mod+q parancsot használni az ablak bezárására, hanem külön billentyűt rendelnél hozzá – mondjuk Ctrl+Shift+q-t. Ez hasznos lehet, ha például véletlenül nyomnád le a $mod+q-t más alkalmazásokban. Bár nagyon ritka az ilyen igény, érdemes ismerni, mert egyes nem túl felhasználóbarát programozók a programjukban elég "érdekes", esetleg a konvenciókat figyelembe nem vevő kombinációkat tudnak alkalmazni.

# Általános módosító
set $mod Mod4
set $alt Mod1

# Alap ablakbezárás (mindenre)
bindsym $mod+q kill

# Firefox-specifikus: csak akkor működik, ha a fókuszált ablak a Firefox
for_window [class="^Firefox$"] exec --no-startup-id i3-msg 'unmark; mark firefox_window'

# Firefox-specifikus ablakbezárás más kombinációval
bindsym Control+Shift+q [con_mark="firefox_window"] kill

Magyarázat:

  • for_window [class="^Firefox$"] exec ... mark firefox_window: amikor új Firefox ablak nyílik meg, megjelöljük (mark) azt egyedi névvel, pl. firefox_window.
  • bindsym Control+Shift+q [con_mark="firefox_window"] kill: csak akkor hajtódik végre a kill, ha a fókuszált ablak meg van jelölve ezzel a névvel – tehát ez csak Firefoxra vonatkozik.

Másik példa: csak egy ablakcím alapján

Ha egy adott ablak például egy dokumentum-szerkesztő (pl. Gedit) és a címe tartalmazza a "jegyzet" szót:

for_window [class="Gedit" title=".*jegyzet.*"] mark jegyzet_ablak
bindsym $alt+d [con_mark="jegyzet_ablak"] move container to workspace 9

Ez azt csinálja, hogy Alt+d lenyomásakor a „jegyzet” szót tartalmazó Gedit ablak átkerül a 9-es munkaterületre.

Az ablakok, programok azonosításáról és egyéni paraméterek (méret, elhelyezkedés, lebegés) hozzárendeléséről később lesz szó! De már itt is megtudtuk: igen jól szervezhetjük a dolgokat, ha ismerjük az i3 használatát, logikáját.

Fontok, betű készletek beállítása

Az i3 ablakkezelő szövegalapú felületének (status bar, ablakcímsorok, üzenetek) kinézete erősen függ a beállított betűtípustól. Haladó felhasználóként pontosan testreszabhatod az i3 és a hozzá társított programok (pl. i3bar, i3status, polybar) betűtípusát – akár egyéni méret, karakterkészlet vagy fallback font is használható.

A font megadásának formátuma:

font pango: 

Példa:

font pango:DejaVu Sans Mono 10

A pango: előtag azt jelzi, hogy a betűtípus-kezelés a Pango könyvtáron keresztül történik – ez támogatja a komplex betűkódolást, méretet, dőlt stílust, emoji-t stb.

Alapesetben a font pango:monospace 8 lett megadva, ez mindenhol telepített és egyszerű fontkészlet. Így ha valami más fonttal nem fog működni, akkor ehhez térj vissza.

Kedvenc fejlesztői betűtípus beállítása

font pango:Fira Code 11

Ha nincs telepítve, akkor telepítsd! Szebb, jobb a kinézete.

Ami picit más, mint a többi beállításnál. Itt nem lehet több sor, így figyelj arra, hogy az eredetileg megadott sort deaktiváld!

Több betűtípus fallback használata (pl. emoji miatt)

font pango:Noto Sans Mono, Symbola, EmojiOne 11

Ha az első font nem tartalmazza az adott karaktert (pl. ❄️ vagy ), a következő fontból próbálja meg kirajzolni.

Ezzel elkerülheted, hogy egy saját font megadása után egy másik rendszerben, vagy újratelepítés után a hiányzó fontok miatt problémád legyen. Ha követted azt a gondolatot, hogy a konfig elején felsorolod az elvárt programokat, akkor nem lesz gond!

Félkövér vagy dőlt betűtípus

font pango:Source Code Pro Bold 10
font pango:Ubuntu Mono Italic 11

Font-stílusok kombinálása is lehetséges, de a teljes fontnevet meg kell adni, különben figyelmen kívül maradhat.

Unicode karakterek megjelenítéséhez szükséges font (pl. japán, kínai, arab)

font pango:Noto Sans CJK SC 10

Ha a i3bar vagy ablakcímek nem jelenítenek meg bizonyos nyelveket vagy karaktereket, próbálj ki többnyelvű fontokat: Noto Sans, Unifont, Droid Sans Fallback stb.

Ellenőrizd, hogy a font elérhető-e

Használhatod a fc-list parancsot, hogy megtudd, pontosan mi a betűtípus neve:

fc-list | grep "Fira"

Ne csak az i3 fontot állítsd – i3status vagy polybar stb. is fontos

Ha az i3 mellé i3status, py3status, waybar vagy polybar sávot használsz, azok is külön fontbeállítást igényelnek. Fontos tudni, hogy nem mindegyik örökli az i3 beállításait.

Használj „Nerd Fonts”-ot ikonokhoz

Az olyan statusbar-okhoz, amelyek Unicode ikonokat is mutatnak, érdemes telepíteni a Nerd Fonts valamelyikét, pl.:

font pango:JetBrainsMono Nerd Font 11

Telepíthető a https://www.nerdfonts.com/ oldalról vagy csomagból (fonts-jetbrains-mono, fonts-hack-ttf, stb.)

Ikonokat az I3 is használhat, pld az asztalok nevében is használhatsz.

Nincs hatása a font beállításnak?

  • Ellenőrizd, hogy nincs-e több font sor a configban.
  • Győződj meg róla, hogy az i3 újratöltése megtörtént (Mod+Shift+r vagy i3-msg reload).
  • A pango: előtagot mindig használd, különben a régi (elavult) X-font kezelőre esik vissza.

Szaggatott vagy torz betűk?

  • Próbáld meg kikapcsolni az Xrender-t, vagy használj másik betűtípust.
  • Wayland + Sway esetén külön config szükséges (ld. Waybar, GTK font beállítások). Bár nem i3, de egy i3/sway átállásnál nem árt tudni ezt!

Az i3 betűtípusának testreszabása nem csak esztétikai kérdés – segít a jobb olvashatóságban, unicode és ikonok használatában is. A pango: szintaxis és a fallback lehetőségek révén az i3 könnyedén testre szabható modern, jól kinéző és funkcionális felület kialakítására.

Tipp: a font felállítása után érdemes a font szakaszban a felesleges kommenteket kiszedni. Egyszer beállítjuk, nincs szükség az ottani leírásra. Rövidebb lesz a konfigunk.

Layout-ok, gap-ek, border-ek

Az i3 window manager az egyik legnépszerűbb tiling window manager Linux rendszereken. A layout és gap kezelés tervezése és konfigurálása haladó szinten lehetővé teszi a munkafolyamatok optimalizálását és az esztétikus, funkcionális asztali környezet kialakítását. Az i3 alap koncepciója minimalista, elégséges, de azt jól használható eszközkészletet ad.

i3 Layout rendszer

Az i3 egy fa struktúrát használ az ablakok szervezésére. A gyökércsomópont az X11 gyökér ablak, amelyet a kimenetek követnek, majd a munkaterületek, végül maga az ablakok. Ez a hierarchikus struktúra lehetővé teszi a komplex layout-ok egyszerű kezelését. A koncepcióról többet olvashatsz az i3 gyári doksijában. Alapnak elég annyit tudni, hogy egy konténer több ablakot tartalmazhat, amik egy meghatározott elv szerint lesznek megjelenítve. Három ilyen megjelenítési sablon "layout" van. Az ablakok (programok) szabadon mozgathatóak, akár a konténeren belül, akár pedig két konténer közt. Van egy plusz ablak típus, ami nincs konténerhez kötve, ami a floating, azaz a lebegő.

Az i3 három fő layout típust támogat

Split Layout (splith/splitv)

  • Horizontális megosztás: $mod+h
  • Vertikális megosztás: $mod+v
  • Az ablakok egyenlő területet kapnak a containerben

Ez a hagyományos csempe megoldás, ahol az elsőnek megnyitott ablak az egész területet elfoglalja, a következő kétfelé osztja a teret, így a monitor egyik felén az első, a másik felén az új ablak lesz. Majd ha újabb programot nyitunk meg, akkor az aktív ablak területe hasonló mód feleződik. Így egyre kisebb és kisebb területre kerül az új ablak.

Stacked Layout

  • Aktiválás: $mod+s
  • Csak a fókuszban lévő ablak látszik
  • Ablaklista a container tetején

A programok egymás mögött vannak, a monitor felső részén egy-egy fület kapnak, amire kattintva az a program lesz aktív és látható. Hátránya, hogy sok fül esetén relatíve sok helyet foglalnak el.

Tabbed Layout

  • Aktiválás: $mod+w
  • Hasonló a stackedhez, de egyetlen sorban
  • Tab-ok formájában jelennek meg az ablakok

A böngészőkben megszokott megoldás, felső élen kis regiszterszerű fület kapnak. Személyes kedvenc, én még a stacked módot élőben soha nem használtam...

Ezen kívül minden layout típusnál használhatjuk a fullscreen, azaz a teljes monitor kitöltő módot egy ablakra. Ennek jellemzően a $mod+f a kombinációja.

A fenti parancsok a következő megnyitott ablak osztási helyzetére ad utasítást, de mi van, ha a már kinyitott ablak elrendezést szeretnénk megváltoztatni?

Layout váltás

bindsym $mod+s layout stacking
bindsym $mod+t layout tabbed
bindsym $mod+e layout toggle split

Ahogy látni, az első kettő konkrétan megadott layout elrendezésre utal, a harmadik - egyszerűsítve a kezelést - "toggle" azaz váltást ír elő. Ezzel váltogathatod a vízszintes, függőleges elrendezést, ha pedig nem "split" azaz csempézett volt, akkor előbb csempézős módra vált, és újabb lenyomás után pedig a másik csempe elosztásra.

Nyiss meg három ablakot és próbáld ki mindegyik kombinációt. Rögvest egyértelmű lesz... Kicsit gyakorolni kell, azután már villámgyors lehetőséget ad. Ez az egyik olyan pont, ami sokkal hatékonyabbá teszi a csempézős ablakkezelést, de az egyik olyan pont aminél elmehet az ember kedve, mert nem látja át mikor milyenre fog váltani és miképp lesz a nyitott ablakok rendezése. Személyes tapasztalat: ne add fel!

Gyorsíthatja a munkát, ha egy asztal létrehozásakor minden alapértéket felülíratva megadjuk az aktuálisan elvárt elrendezést:

# Gyors layout váltás makrók 
bindsym $mod+1 exec i3-msg 'workspace 1; layout tabbed' 
bindsym $mod+2 exec i3-msg 'workspace 2; layout default' 
bindsym $mod+3 exec i3-msg 'workspace 3; layout stacking'`

Tipp: Nem csak az elrendezést adhatod meg így, hanem majdnem minden olyan jellemzőt, amit egy munkaasztalhoz tudsz rendelni.

Alapértelmezett layout

Érdemes megadni a kedvenc elrendezésünket

# Alapértelmezett layout beállítása az összes munkaterületre
workspace_layout tabbed

Programokhoz/asztalhoz kötött elrendezések

Nem mindig akarom kézzel megadni az elrendezést, szeretném, ha egyes programok már induláskor az elvárt formációt vegyék fel.

# Speciális osztási szabályok
for_window [class="Firefox"] tabbed
for_window [title="kitty"] splitv
  • splitv (függőleges osztás)
  • splith (vízszintes osztás)
  • stacked (egymásra rendezés)
  • tabbed (lapozható elrendezés)

Egy program class értékét megtudhatjuk a

xprop | grep WM_CLASS

paranccsal. A fenti parancsot terminálban futtatjuk, a kurzort egy plusz jel lesz, a kurzort a lekérdezendő ablak fölé visszük, majd bal klikk.

Egyéb jellemzőket is használhatunk, azokról majd a program tulajdonságok beállításakor beszélünk.

Egy asztalhoz (workspace) is rendelhetünk alapértelmezett elrendezés:

# Konkrét munkaterület layout beállítása 
for_window [workspace="7"] layout tabbed

Itt is - mint majdnem mindenhol - elérhető szkriptből is a beállítás, azaz automatizálhatjuk egy feladatsor, amiben megnyitunk egy pár programot egy adott asztalon, egy adott elrendezésben.

Az egyszerű nyiss meg egy asztalt az adott felosztásban:

# workspace-7-tabbed.sh 
i3-msg 'workspace 7; layout tabbed

A komolyabb megoldásokban igencsak jól használható:

Az alábbi Bash szkript megnyitja az i3-ban a 3-as (vagy tetszőleges) munkaterületet, átnevezi "teszt"-re, majd a megadott ablakokat elrendezi tabbed layoutban, a kitty terminált pedig alulra helyezi:

#!/bin/bash

# Munkaterület szám és új név
WORKSPACE=3
NEW_NAME="teszt"

# Munkaterület kiválasztása és átnevezése
i3-msg workspace number $WORKSPACE
i3-msg rename workspace to "$WORKSPACE: $NEW_NAME"

# Firefox megnyitása
i3-msg exec firefox
sleep 2  # várjunk, hogy az ablak betöltődjön

# Split jobbra és Geany megnyitása
i3-msg split horizontal
i3-msg exec geany
sleep 1

# Split jobbra és Kate megnyitása
i3-msg split horizontal
i3-msg exec kate
sleep 1

# Tabbed layout beállítása a Firefox, Geany, Kate ablakokra
i3-msg layout tabbed

# Split le és Kitty terminál megnyitása
i3-msg split vertical
i3-msg exec kitty

Magyarázat és tippek

  • A sleep parancsok azért kellenek, hogy az i3-nak legyen ideje megnyitni az ablakokat és létrehozni a container struktúrát.
  • A split horizontal parancs jobbra osztja el az aktuális container-t, így a Firefox mellett jobbra jön a Geany, majd a Kate.
  • A layout tabbed parancs a jelenlegi containerben (Firefox, Geany, Kate) tabbed elrendezést állít be.
  • Ezután a split vertical lefelé osztja a container-t, és alul megnyitja a kitty terminált.
  • A workspace átnevezése megtartja a számot az átnevezés elején, így a numerikus gyorsváltás megmarad (pl. $mod+3 továbbra is működik)

Ha a szkriptet futtathatóvá teszed (chmod +x script.sh), i3 configból így hívhatod meg:

bindsym $mod+Shift+t exec --no-startup-id /path/to/script.sh

Ez a megoldás egyszerű, de hatékony módja a kívánt layout és ablakok előkészítésének i3 alatt. Ha szeretnéd, tovább fejleszthető, például ablakok megvárásával (i3-msg -t get_tree lekérdezéssel) vagy komplexebb layout kezeléssel. Vagy akár több asztal gyors elkészítésének, a megfelelő elrendezéssel.

Ami nekem nagyon tetszik - bár nem vagyok egy i3-msg mágus - hogy a struktúra nagyon egyszerű. Szép sorba leírjuk mit csináljon, semmi összetett és idegen struktúra, csak elmondjuk amit akarunk...

Lebegő ablak

A lebegő ablakok az i3 tiling ablakkezelési elvétől eltérően szabadon mozgathatók, átméretezhetők, és egymásra helyezhetők, ami hasznos például párbeszédablakoknál, médialejátszóknál, jegyzetelő eszközöknél.

  • Lebegő mód: Az ablak nem illeszkedik a mozaikos (tiling) elrendezésbe.
  • Manuálisan mozgatható, átméretezhető.
  • Hasznos ideiglenes vagy nem-természetes méretű ablakokhoz.
  • A lebegő ablakok mindig a csempézett ablakok felett vannak.

Lebegő ablakot kétféleképp készíthetünk. A billentyűzetről:

# Átváltás lebegő módra
bindsym $mod+Shift+space floating toggle

Ez váltómódban van, így az aktív ablakból lebegőt készít, a lebegőt pedig visszateszi a csempézős megoldásba.

Az egérkattintásos módszer is kényelmes:

# Az egérgombbal kattintva lebegő ablakot csinál
bindsym --whole-window $mod+Shift button1 floating toggle  move position center

Itt plusz megoldásnak hozzáadtam a "mozgasd középre" parancsot is. A lebegő ablak pozíciója, mérete is szabályozható.

# Lebegő ablak mozgatása egérrel
floating_modifier $mod

Mozgatáshoz meg kell adni a lenyomandó gombot, hogy meg tudd fogni az egérrel

# Lebegő ablak mozgatása egérrel
floating_modifier $mod

Nem okoz nagy meglepetést, hogy egy programot lebegőként indíthatunk

# Automatikusan lebegő GIMP és VLC
for_window [class="Gimp"] floating enable
for_window [class="Vlc"] floating enable

Két fontos tulajdonságot érdemes megadni. A lebegő ablak akármekkora lehet, ami nem szokott gondot okozni. Kivéve, ha az ablakban lévő program valami oknál fogva önfejűen azt hiszi, hogy a méretet neki kell állítani. Ilyenkor lehet 1x1pixel is, vagy akkora, hogy az lelóg a monitorról. Jobb az ilyen önfejűsködést az elején letörni.

floating_minimum_size 100 x 75    # Minimum méret beállítása 
floating_maximum_size 1920 x 1080 # Maximum méret beállítása

Így nem lesz nagyon kicsi, és nem lóg le a monitorról, mert a maximális méret a monitor felbontása. Az értékeket szabd a saját igényeidhez!

Egy különleges méretmegadásra is lehetőségünk van. Az összes monitor méretét fedje le a full módban:

fullscreen toggle global  # Globális teljes képernyős (minden kimenetet lefed)

Mivel a lebegés egy jól definiálható jellemző, így a lebegő ablakokat könnyen felismeri a rendszer, és adhatunk elhelyezési parancsot

# Ablak középre pozicionálása (lebegtetett módban)
bindsym Mod+Shift+c [floating] move position center

### Méretet is megadjuk
bindsym Mod+Shift+s [floating] resize set width 800 px height 600 px, move position center

Hasznos, ha a lebegő ablakot azonnal középre akarjuk tenni, és egy adott méretet várunk el. Sok program kommunikál lebegő ablakkal, kér be adatot, megerősítést...

Teljes képernyő - full screen

Ismert megoldás, hogy egy ablakot teljes monitorra kinagyítunk, nem is kell ezt a módot nagyon bemutatni.

# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

Szintén "toggle" azaz váltó módban adtam meg. Akár hagyományos csempézős szerkezetben van, akár lebegőben az ablak ez működik.

A full képernyős megoldásoknál mindig kérdéses a panel eltűnés, vagy helyben maradása. Erre nincs általános megoldás. Ha nem tűnik el, és el akarod tüntetni a panelod leírásában keress rá módot.

Egy különleges méretmegadásra is lehetőségünk van. Az összes monitor méretét fedje le a full módban:

fullscreen toggle global  # Globális teljes képernyős (minden kimenetet lefed)

Gaps, azaz rések

Esztétikailag nem árt, ha két ablak közt egy pici távolság van. Így jól elkülönül és nem folyik egybe a két ablak. A réseket nem kötelező használni, ellenérv, hagy a rés helyet foglal és kisebb a hasznos monitor terület.

Fontos: Már a 4.22 verzió óta a hivatalos i3 is kezeli a réseket. Így nem kell az i3-gaps-ot telepíteni. Szuper!

Az eddigiek után már nem fog senkinek meglepetést okozni, hogy a gap-ek beállítása is egyszerű, megadható globálisan és program, vagy asztal szinten is. Azaz simán ismétlések lesznek.

Inner Gaps: Szomszédos containerek között[
Outer Gaps: A képernyő szélei és containerek között

Az alap beállítás, globálisan, mindenhol érvényes:

gaps inner 8
gaps outer 2
gaps bottom 3
gaps top 3
smart_gaps on

Az első kettő egyértelmű. a harmadik beállítással engedélyeztük, hogy a az i3 ne alkalmazza a outer gaps-et, ha egy ablak van a monitoron. Kicsit nagyobb lesz a hasznos terület.

Menet közbeni változtatás

# Gaps dinamikus változtatása
bindsym $mod+Shift+g gaps inner current set 15
bindsym $mod+Ctrl+g gaps inner current set 5

Ha nullára vesszük az értéket, akkor eltünteti a réseket.

Relatív is megadhatjuk a növekedést, csökkentés is, a példa 5 pixelt ad hozzá/vesz el az eredeti réshez

# Aktív ablak kiemelése nagyobb gappel
bindsym $mod+a gaps inner current plus 5
bindsym $mod+z gaps inner current minus 5

Gaps mentesítés egyes alkalmazásokhoz

for_window [class="^Firefox$"] gaps inner current set 0
for_window [class="^Gimp$"] gaps outer current set 0

Egy program class értékét megtudhatjuk a

xprop | grep WM_CLASS

paranccsal. A fenti parancsot terminálban futtatjuk, a kurzort egy plusz jel lesz, a kurzort a lekérdezendő ablak fölé visszük, majd bal klikk.

Egyéb jellemzőket is használhatunk, azokról majd a program tulajdonságok beállításakor beszélünk.

Munkaterület-specifikus gap beállítások

workspace 1 gaps inner 20
workspace 2 gaps outer 10
workspace "3:mail" gaps inner 5

Akár a programok, akár a munkaasztaloknál igaz: nem csak egy jellemzőt adhatsz meg, hanem egymás után többet is.

Keretek, színek beállítása

Az i3 WM erősen testreszabható ablakkereteket (borders) kínál, amelyek jelentősen befolyásolják a munkaterület kényelmét és esztétikáját. Az alábbi útmutató részletesen tárgyalja a border kezelés minden aspektusát, gyakorlati tippekkel és konfigurációs példákkal. A kérdés sokaknak túlzottan előtérben van és a szépészeti beállításokra teszi a hangsúlyt. Az i3 erősen korlátozott - de elégséges - lehetőséget ad, ami a hatékony munkára teszi a hangsúlyt. A keret vastagsága és színe az a két paraméter amit állíthatunk. Az i3 window manager border kezelése rendkívül sokoldalú és testreszabható rendszert nyújt. A pixel, normal és none border típusok kombinálása az intelligens border funkciókkal (smart borders, hide edge borders), alkalmazás-specifikus szabályokkal és dinamikus színkonfigurációval lehetővé teszi egy teljesen személyre szabott és funkcionális munkafolyamat kialakítását.

A border kezelés optimalizálása nem csak esztétikai, hanem praktikus előnyöket is biztosít. A megfelelő border konfiguráció javítja a munkaterület áttekinthetőségét, megkönnyíti a fókuszált ablak azonosítását, és növeli a munkavégzés hatékonyságát. A haladó konfigurációs lehetőségek, mint a binding modes, dinamikus szkriptek, és a layout-specifikus szabályok együttesen biztosítják a precíz vizuális vezérlést minden használati esetben.

Alapbeállítások

Border stílusok és alapkoncepciók

Az i3 négy fő border stílust támogat:

  • normal: Klasszikus keret (alapértelmezett), címsorral (titlebar). A normal border teljes dekorációt biztosít címsorral és kerettel.
  • pixel: Vékony keret (1-5 pixel), cím nélkül. Ez a leggyakrabban használt konfiguráció, különösen gap-ekkel kombinálva. Gyakorlatig csak egy csík.
  • none: Teljesen láthatatlan keret. A none border teljesen eltávolítja mind a keretet, mind a címsort. Ez a legtisztább megjelenést biztosítja, különösen egyablakos munkaterületeken.
  • pixel [N]: Explicit vastagság megadása (pl. pixel 3).
# Alapértelmezett stílus beállítása:
default_border normal
default_floating_border normal 2

# Csak keret megjelenítése
default_border pixel 2
default_floating_border pixel 3

Az első a normál ablakok keret stílusát határozza meg, a második a lebegőét.

new_window pixel 1 azaz az új ablak keretének megadása elavult, használd a fentiek egyikét! Régebbi konfigokban előfordulhat, ha van ilyen cseréld le.

Színek megadása

Az i3 lehetővé teszi az aktív, inaktív és lebegő ablakok border színeinek meghatározását:

# színséma: background border text indicator child_border
client.focused          #4c7899 #285577 #ffffff #2e9ef4 #285577
client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a
client.unfocused        #333333 #222222 #888888 #292d2e #222222
client.urgent           #2f343a #900000 #ffffff #900000 #900000
client.placeholder      #000000 #0c0c0c #ffffff #000000 #0c0c0c

Ha nem tudod, mit jelent ez a sok szám: mindegyik 6 karakteres hex színkód (#RRGGBB). Az első oszlop az ablakok állapotát jelenti, a többi a vizuális elemek színe.

Ami fontos: nem kötelező megadni minden sort.

Öt színparamétert tartalmaz négy témában:

  • Border: A címsor körüli keret színe
  • Background: A címsor háttérszíne
  • Text: A címsor szövegének színe
  • Indicator: A split indicator színe
  • Child Border: Az ablak tartalmi területének keret színe
  • Focused Window: Aktív ablak
  • Unfocused Window: Inaktív ablak
  • Focused Inactive Window: Fókuszált inaktív ablak
  • Urgent Window: Sürgős ablak

Tipp: Használj olyan színeket, amik vizuálisan jól elkülöníthetők – különösen az aktív és nem aktív ablakoknál.

A fenti "hagyományos" színezési mód mellett használatos a változós szín megadás, ahol a változók megadásával adjuk meg az értékeket.

# Színváltozók definiálása
set $bg-color            #2f343f
set $inactive-bg-color   #2f343f
set $text-color          #f3f4f5
set $inactive-text-color #676E7D
set $urgent-bg-color     #E53935

# Színek alkalmazása
client.focused          $bg-color           $bg-color          $text-color          #00ff00 $bg-color
client.unfocused        $inactive-bg-color  $inactive-bg-color $inactive-text-color #00ff00 $inactive-bg-color
client.focused_inactive $inactive-bg-color  $inactive-bg-color $inactive-text-color #00ff00 $inactive-bg-color
client.urgent           $urgent-bg-color    $urgent-bg-color   $text-color          #00ff00 $urgent-bg-color

Ezt akkor érdemes használni, ha a színeket máshol is akarod használni, ami itt jellemzően a bár, a panel beállítása lenne. Mivel én nem az i3 "gyári" paneljét használom, így az első megoldást szeretem. A változós megoldás mellett szól, hogy elvileg memória hatékonyabb. Nem tudom, ehhez (sem) értek.

Itt set változó megadás történik, aminél fontos, hogy a változó definiálása a fő konfigban történjen meg!

Egy érdekes megoldás a beállításokhoz: https://thomashunter.name/i3-configurator/

Pár érdekesebb kapcsoló

# Alapvető smart borders 
smart_borders on 

# Smart borders csak gap-ek nélkül 
smart_borders no_gaps 

# Smart borders kikapcsolása 
smart_borders off

A smart itt is azt jelenti, ha egyedüli az ablak, akkor megjelenjen, vagy ne a keret. A smart borders automatikusan kezeli a border megjelenítését különböző helyzetekben.

# Nincs elrejtés
hide_edge_borders none

# Vertikális border-ek elrejtése
hide_edge_borders vertical

# Horizontális border-ek elrejtése
hide_edge_borders horizontal

# Minden szélső border elrejtése
hide_edge_borders both

# Intelligens szélső border kezelés
hide_edge_borders smart

A hide_edge_borders direktíva lehetővé teszi a képernyő szélén lévő border-ek automatikus elrejtését.

Asztal és program specifikus beállítások

A megszokott mód az asztalokhoz is rendelhetünk egyedi szabályokat

# Tabbed layout speciális border
for_window [workspace="1"] output HDMI-1, layout tabbed, border normal 1

# Stacked layout border
for_window [workspace="2"] output HDMI-2, layout stacking, border pixel 2

Itt már halmoztuk a szabályokat, megadtunk károm jellemzőt egymás után: monitorhoz rendelés, layout típus, border.

Kitérő: megadhatod külön is az egyedi jellemzőket, egyesével az adott munkaasztalhoz. Ez sokkal több sor lesz a konfigurációban, de talán átláthatóbb. Ha pedig már van egy kiforrott elképzelésed, akkor így is, felsorolásszerűen.
Fontos tudni, hogy nem kötelező minden asztalhoz különféle jellemzőt rendelni, amihez nem írod be pld. a border szabályokat ott a globális border beállítás lesz. Ne bonyolítsd túl!

A megszokott módon a programokhoz rendelhető borderek

# Firefox számára speciális border
for_window [class="Firefox"] border pixel 2

# Címsor alapján
for_window [title="Preferences"] border normal

# Chrome/Chromium speciális kezelése 
for_window [class="Chromium"] border pixel 1 
for_window [class="Google-chrome"] border pixel 1

Érdemes tudni, hogy egyes programok (például Alacritty, Chrome) felül tudják írni az általánosan megadott keret vastagságot. Jó esetben egy ilyen külön szabály rákényszerítheti őket a fegyelemre! Ezt az általánosan is érdemes megadni, így pár renitens programról nem derül ki, hogy túl önfejű.

# Alkalmazás-specifikus felülírás 
for_window [class=".*"] border pixel 2

Lebegő vagy csempézős ablakok közt is tehetsz különbséget

# Különböző border a floating és tiling ablakokhoz
for_window [tiling] border pixel 1
for_window [floating] border normal 2

# Dinamikus border változás floating toggle esetén
for_window [tiling_from] border pixel 1
for_window [floating_from] border normal 2

A keretek változtatása menet kozben

A már ismert mód a keretek értékét, típusát is változtatni tudjuk menet közben.

# Aktuális ablak border váltása
bindsym $mod+b border toggle

# Specifikus border beállítás
bindsym $mod+Shift+b border pixel 3

# Border nélküli mód
bindsym $mod+n border none

# Teljes border cycle
bindsym $mod+u border normal
bindsym $mod+y border pixel 1
bindsym $mod+i border none

Kiemelném az első megoldást, ami toggle azaz a border tipusokat váltogatja körbe, ameddig nyomkodod a kombinációt. Ez a parancs váltogatja a kerettípusokat: normal, none, pixel között

Általánosan elmondható, hogy ami fixen megadható érték, azt megfelelő paranccsal át is írhatjuk menet közben.

Pár gondolatébresztő komplex összeállítást a gyorsbillentyűknél megadok, valóban csak ötletelés szintjén. Sok billentyű kombináció felszabadul egy komplex megoldással!

Címsorok beállítása

A bordernél van lehetőség a címsorok megjelenítésre is, ami informatívabbá teszi a munkaterületet. Pár alap beállítást elvégezhetünk, amivel szebbé tehetjük ezeket. Az i3 konfigurációjában ez egy fontos vizuális elem, mert megjeleníti az aktuális ablak adatait és a munkaterület információkat.

A címsor egyik fontos eleme a fontkészlet, azaz a betű kinézet. Ezt globálisan beállíthatod, a már ismert mód - mindenhol, ahol fontot használ ezt látod majd

# Alapvető font beállítás 
font pango:DejaVu Sans Mono 10

Két fontos egyedi beállítást adhatunk hozzá

# Egyedi címsor formátum
for_window [class=".*"] title_format "%title"

# Színezett címsor
for_window [class="Firefox"] title_format "%title"

Az elsővel globálisan megváltoztathatjuk a címsor fontkészletét, a másiknál pedig a címsor hátterét egy adott programbál. Itt is lehet a paramétereket egymás után megadni, így valóban egyedivé tehető a kijelzés.

# Címsor teljes elrejtése
for_window [class=".*"] title_format ""

A címsort el is rejthetjük globálisan, itt is van lehetőség egyes programoknál elrejteni.

Igény esetén transparens tehetjük a címsort

# Transparens címsor 
for_window [class=".*"] title_format "%title"

Hibakeresés

A konfigurációs fájlban fontos a helyes sorrend:

  1. Font beállítás
  2. Border beállítások
  3. Színkonfiguráció
  4. Smart beállítások
  5. Alkalmazás-specifikus szabályok

Ha eltér a sorrend, gondot okozhat, amit nehézkes lesz megtalálni.

Munka ablakokkal

Az i3 window manager hatékony eszközt kínál az ablakkezeléshez, ahol minden műveletet billentyűparancsokkal lehet végrehajtani. A fenti útmutató az alapvető műveletektől a haladó technikákig segít elsajátítani az i3 használatát. A teljes testreszabhatóság lehetővé teszi, hogy a munkafolyamataidhoz igazítsd az ablakkezelést, ami jelentősen növelheti a termelékenységedet.

Emlékezz, hogy az i3 konfigurációs fájlja (~/.config/i3/config) mindig szerkeszthető, és a változtatások azonnal alkalmazhatók a Mod + Shift + C billentyűkombinációval.

A gyors és hatékony munka feltétele az izommemóriáig gyakorolt navigáció. Akár egérrel, akár pedig a billentyűzetről.

Kis visszatekintés: Alapvető koncepciók

  • Munkaterületek (Workspaces): Logikailag elválasztott asztalok, amelyekre ablakokat csoportosíthatsz
  • Elrendezések: Csempés (tiling), lebegtetett (floating) és teljes képernyős (fullscreen) mód
  • Fa szerkezet: Az i3 hierarchikusan (fának megfelelően) kezeli az ablakokat

Az első kettőt már ismerjük, a navigálás asztalok közt illetve az alap elrendezések is már ismerős témák. Most a munkánkhoz szükséges legfontosabb megoldásokat vizsgáljuk: hogyan kell a programok közt navigálni.

Munka ablakokkal

A fókusz váltása

Fókusz: az az ablak kijelölése, amivel éppen dolgozni akarunk.

A fókusz váltás, az aktív ablak kijelölése egyszerű, de szokni kell. Az alapbeállítást érdemes meghagyni, azt (vagy mindkettőt) meghagyva ami kényelmes.

# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+eacute focus right

# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

Az első a hagyományos Vi, Vim, NVim szövegszerkesztőkben megszokott kötés. Ez nekem idegen, így törlésre került, a mod és a nyilak mozgatás maradt.

A gyakorláshoz pár ablakot nyissunk meg és mozgassuk a fókuszt.

Ha van lebegő ablak, akkor értelemszerűen a jobbra, balra, fel és le irányt nem tudjuk értelmezni, így erre külön kötést kell alkalmazni:

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

A fókuszváltás gyors módja az egérrel való kijelölés.

Itt egy komoly döntést kell meghozni. A fókusz kövesse az egeret vagy ne. Ha követi, akkor mindig az az ablak lesz aktív, ami felett az egérmutató áll. Ha nem akkor rá kell kattintani az ablakra. Jó megoldás az, ami neked kézre áll.

# Ne kövesse a fókusz az egérmozgást
focus_follows_mouse no

Itt nem fogja követni.

A szülő/gyerek konténerek közti fókuszmozgatást hasonlóan tudjuk megtenni

# focus the parent container
bindsym $mod+a focus parent

# focus the child container
bindsym $mod+d focus child

Én ezeket nem használom, így felszabadul két kötés.

Ablak méretezés

A lebegő ablakokat méretezheted egérrel is. Talán ez a legkényelmesebb

# Egérrel való mozgatás/méretezés módosítója
floating_modifier $mod
tiling_drag modifier titlebar

Azaz megadod a módosítót (jelen esetben a win és már mozgathatod is a bal gombbal az ablakot a címsoruknál fogva, és a szélét megfogva a jobb gombbal méretet változtatsz. Egyszerű.

A gyorsbillentyűvel való méretezést érdemes az alapértelmezett megoldással használni, mert a négy oldalvonal mozgatása sok kombinációt lekötne.

# resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode

        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 10 px or 10 ppt
        bindsym k resize grow height 10 px or 10 ppt
        bindsym l resize shrink height 10 px or 10 ppt
        bindsym eacute resize grow width 10 px or 10 ppt

        # same bindings, but for the arrow keys
        bindsym Left resize shrink width 10 px or 10 ppt
        bindsym Down resize grow height 10 px or 10 ppt
        bindsym Up resize shrink height 10 px or 10 ppt
        bindsym Right resize grow width 10 px or 10 ppt

        # back to normal: Enter or Escape or $mod+r
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"

A felépítéséről a gyorsbillentyűknél beszélünk itt csak a használatáról. Én a nyilakkal való mozgatás használom.

A $mod+r lenyomásával belépünk a méretező (resize) módba. Ilyenkor csak a megadott, felsorolt billentyű használható, a többi nem. Ezt jó tudni, mert ha véletlenül nyomjuk meg valamelyik ilyen szerkezetet meghívó kombinációt és azután nem működik a billentyű kissé ijesztő tud lenni... Majd a nyilakkal beállítjuk a kívánt méretet. Kilépünk a méretező (resize) módból a felsorolt három lehetőséggel: vagy enter, vagy ESC, vagy újra a $mod+r segítségével.

Tipp: ha több ilyen szerkezetet is készítünk ez a kilépési hármas megoldást használjuk mindenhol, így nem kell gondolkodni, hogy miképp lépjünk vissza a normál módba.

Az i3 csempézős módokban képes az egérrel is méretezni az ablakot. Bal egérgombbal megfogjuk a keretet és mozgatjuk. Szuper, hiszen egy olyan lehetőséget kapunk, ami régebben nem volt benne és sokaknak kényelmes. Bár első olvasatban ez feleslegessé teszi a billentyűzetről való mozgatást, de ne essünk abba a hibába, hogy a - feleslegesnek gondolt - ehhez rendelt kombinációkat kikukázzuk! Sok esetben nem használok egeret, és egy plusz mozdulat lenne az egeret megfogni, bepozicionálni és mozgat, majd vissza billentyűre. Az aktív ablakban dolgozunk, így annak a méretezése egér nélkül igencsak gyors, ha megszokjuk.0

Ablak mozgatása

Az ablakok mozgatása a fókuszhoz hasonló megoldás. így nagy újdonságot nem hoz

# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+eacute move right

# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

Szintén igaz, hogy a kijelölt, aktív, fókuszban lévő ablak mozgatható. Én itt is kukáztam a vi-s kötéseket, és a nyilakat használom.

Sticky (ragadós) ablakok

Speciális ablak típus, sok asztali környezetben ismert. Minden asztalon látható lesz az ilyen tulajdonsággal rendelkező ablak

sticky enable   # Ablak ragadóssá tétele (minden munkaterületen látható) 
sticky disable  # Ragadós mód kikapcsolása 
sticky toggle   # Ragadós mód váltása

A három lehetőség közül praktikusan az "toggle" azaz váltó megoldáshoz érdemes kombinációt rendelni.

Megjelölt ablak

Van lehetőség egy ablak különlegessé tételére. Ha megjelölünk egy ablakot, akkor arra egy kombinációval ugorhatunk. Én ezt a lehetőséget nem használom, így a példában nincs is kombináció hozzárendelve.

mark identifier       # Ablak megjelölése 
[con_mark="identifier"] focus  # Jelölt ablakra ugrás

Ablakozás külső programmal

Sok esetben kényelmesebb lehet ablakot váltani, programok közt keresgélni egy grafikus programmal.

Rofi

Az ablakvárlást megoldhatjuk külső programmal is, az egyik ilyen a rofi. A rofi egy rendkívül gyors és testreszabható alkalmazásindító (application launcher) Linuxhoz, amelyet gyakran használnak minimalista ablakkezelők (pl. i3, bspwm, Openbox) mellett. A rofi eredetileg a dmenu továbbfejlesztett alternatívájaként indult, de mára sokkal több funkcióval rendelkezik:

  • Alkalmazásindító (mint dmenu, csak szebb és erősebb)
  • Ablakváltó (meglévő ablakok közötti keresés)
  • SSH indító (mentett SSH kapcsolatok gyors eérése)
  • Rendszer menü (pl. leállítás, újraindítás opciók)

Jellemzők

  • Téma és stílus testreszabás: saját rofi témák, színek, betűtípusok, átlátszóság
  • Billentyűzet-vezérelt: tökéletes egér nélküli használatra
  • Gyors és reszponzív: hatalmas listákkal is gyorsan dolgozik
rofi -show run       # parancssori futtatás, egyzserű, hatékony startmenü
rofi -show window    # ablakváltás
rofi -show ssh       # ssh menü

Rofi témák fájlban tárolhatók (pl. ~/.config/rofi/config.rasi) és teljes mértékben testre szabhatók CSS-szerű szintaxissal.

Példa egy egyszerű konfigurációra:

configuration {
    font: "Fira Code 12";
    theme: "gruvbox-dark";
}

Gyorsbillentyűk használata

Az i3 ablakkezelő egyik legfontosabb erőssége a teljes mértékben testreszabható billentyűkombinációk rendszere. Én két blokkra bontom a bemutatott megoldásokat. Az egyik a programok indítása a másik a rendszerhez tartozó kötések. Hasonlóak, de érdemes külön blokkban kezelni őket, mert átláthatóbbá teszi a konfigurációt.

A használható módosítók:

Módosító billentyűk (Modifiers)

Az i3 számos módosító billentyűt támogat

  • Mod1-Mod5: Standard módosítók (Alt, Windows kulcs, stb.)
  • Shift, Control: Hagyományos módosítók
  • Group1-Group4: Többnyelvű billentyűzetkiosztások támogatása

Mod billentyűk

Az i3 leírások általában a Win és Alt gondokat emelik ki, de érdemes a témát pár szóban körbejárni.

Az i3 window manager-ben a Mod1–Mod5 billentyűk a modifer billentyűket jelölik (módosító billentyűk), amelyeket általában különféle kombinációkban használsz más billentyűkkel együtt az ablakkezelő vezérlésére. Ezek nem i3-specifikusak, hanem az X11 alatt elérhető billentyűmódosítókra (modifiers) utalnak.

Mod1–Mod5 jelentése

Ezek a módosítók az X server által beállított módosító maszkok, és attól függően, hogy az adott rendszerben melyik billentyűhöz van rendelve, eltérőek lehetnek. Általános megfeleltetések a legtöbb rendszeren:

i3 Mod név Alapértelmezett billentyű (legtöbb rendszerben)
Mod1 Alt (bal oldali Alt billentyű)
Mod2 Num Lock (numerikus billentyűzet kapcsolója)
Mod3 nincs gyakori hozzárendelés
Mod4 Super vagy Windows billentyű (gyakori i3 választás)
Mod5 AltGr vagy ISO_Level3_Shift (jobb Alt)

Megjegyzés: Ezek eltérhetnek disztribúciótól, desktop environmenttől, billentyűzetkiosztástól és személyes beállításoktól függően.

Hogyan nézheted meg a saját rendszereden?

Használhatod az xmodmap parancsot:

xmodmap -pm

A kimenet:

xmodmap:  up to 5 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_L (0x85),  Super_R (0x86)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Ez alapján például:

  • Mod1 = Alt_L → bal oldali Alt
  • Mod4 = Super_L, Super_R → Windows billentyűk

Keysym vs Keycode használata

Keysym (kulcs szimbólum):

 #Keysym alapú binding - a kulcs szimbolikus neve alapján 
 bindsym $mod+f fullscreen toggle 
 bindsym $mod+Return exec alacritty

Keycode (kulcs kód):

# Keycode alapú binding - a fizikai kulcs pozíciója alapján 

bindcode 214 exec --no-startup-id /home/user/toggle_beamer.sh

Ajánlás: Ha gyakran váltasz billentyűzetkiosztások között, de meg akarod tartani a kötéseket ugyanazon fizikai pozícióban, használj keycode-okat. Ha nem váltogatsz kiosztásokat, és tiszta konfigurációs fájlt szeretnél, használj keysym-eket.

Feltehetően az első, a sima "betűs" megoldás lesz az általános, én ezt használom. Azt is látni, hogy az egyik a bindsym a másik a bindcode parancsra köti össze a kulcsokat a parancsokkal. Használatban nincs eltérés.

Hogyan tudjuk meg a kulcsokat?

Alapvetően a betűs megoldásoknál nincs probléma, kivéve az ékezeteseknél, itt simán beírjuk a betűt, amihez kötni akarunk. Ha ékezetes betű, vagy írásjel a kötés, akkor már nem ilyen egyszerű, illetve a kulcs kódoknál sem. A pontos értéket, nevet a xev paranccsal kérdezhetjük le. Terminálból indítjuk a xev parancsot, maj amikor az ablaka megjelenik, akkor lenyomjuk a billentyűt, amire kíváncsiak vagyunk. Kiírja a nevét, a kódot stb.

Az alap kulcskötés formátuma

Az eddigiekben láttuk, nem túl összetett a szintaktika

bindsym Control+Alt+t exec gnome-terminal
bindsym $mod+Shift+r restart

Az általános formátum szerint

bindsym  

Ahogy látni az első tag a szerkezetben a MODIFIER azaz a módosító gomb. Így csak olyan kombinációk lesznek validak, amiknél ilyennek indul a kötés. Az Alt+a nem fog működni, de ha a set $alt Mod1 beállításban definiálod a változót, akkor a $alt+a már jó lesz az alt és az a lenyomására...

Program, szkript indítása

A példák már megadták a kellő alapot, nem okozhat senkinek sem problémát. Így csak azokra a dolgokra térek ki, ami valami miatt érdekes lehet.

bindsym $mod+d exec kitty

Itt is használható a megismert --no-startup-id kapcsoló, így megakadályozzuk a felesleges várakozást.

Tipp: Több példával is találkoztam, ami valami ilyen megoldásokkal variál: bindsym $mod+d exec kitty floating enable, border pixel 1 azaz egyszerre adja meg az indítandó program paramétereit. Ezt kerüld el! A kitty pld. ilyenkor saját paraméterének tekinti a felsorolt plusz paramétereket és sirámokat ír ki! Plusz lehet, hogy az i3 is jelzi, hogy a konfig rossz. Van értelmes megoldása annak, hogy egy programot elhelyezd valahova és engedélyezd a lebegést stb! Ez nem az.

Sok esetben, főleg régebbi programok indításakor előfordul, hogy az i3 indulásakor nem kapod meg rögvest a megszokott nyíl alakú kurzort, hanem egy kör forog, vagy homokóra stb. Ami egy természetes "tölt a program" visszajelzés. Csak bosszantó. Egyes programok nem adnak visszajelzést az i3-nak, hogy elindultak, és erre a jelzésre vár az I3. Azaz a program nem támogatja a startup notification-t.

Ki lehet kerülni ezt a várakozást

# Terminál indítása 
bindsym $mod+d exec --no-startup-id urxvt

A --no-startup-id jelzi a rendszernek, hogy ne várjon a visszajelzésre. Jó gondolatnak tűnik (én ezt követem), hogy teszteléskor nem adom meg ezt a kapcsolót az első próbánál. Majd amikor kiderül, hogy minden elindul rendesen csak pörgeti a kurzort, akkor megkapja ezt a kiegészítést, így nem lesz a várakozási visszajelzés. Ha úgy döntesz, hogy minden kötéshez beírod, azzal nem követsz el semmi hibát.

Változók használata

Ha szeretnél egy-egy program nevet változóként definiálni és úgy hivatkozik rá, akkor azt is megteheted.

# A változó definiálása:

set $term alacritty 
set $browser firefox

# A változó használata:
bindsym $mod+Return exec $term 
bindsym $mod+b exec $browser

Változók és az include direktíva korlátai

A változók megosztottak az összes betöltött konfigurációs fájl között, de van egy fontos korlátozás, amire figyelni kell:

  • Használható: Olyan változó, amit a fő konfigurációs fájlban definiáltál, és azt felhasználhatod bármelyik include fájlban.
  • Nem használható: Olyan változó, amit csak egy beillesztett fájlban definiáltál, és azt szeretnéd használni a szülő (vagy korábban feldolgozott) konfigurációs fájlban. Ez nem fog működni.

Ez technikai korlátozás: a változók kiterjesztése (azaz a $változónév behelyettesítése) még az include direktívák feldolgozása előtt történik.

Tipp: általában a set kezdetű sorokban adjuk meg a változókat. Ezeket a fő konfigurációs állományban hagyjuk, vagy oda írjuk be. Nem emeljük át másba. Ilyenkor nem lehet semmi probléma.

Parancs láncok, feltételes parancsok

Az i3 támogatja a parancsok láncolását pontosvesszővel

# Többszörös parancs egyetlen billentyűkombinációra 

bindsym $mod+e exec $term; exec $browser; workspace $ws3 

# Feltételes parancsok 

bindsym $mod+Shift+x exec --no-startup-id "if pgrep firefox; then pkill firefox; else firefox; fi"`

# Üzenetküldésre is alkalmas:

bindsym $mod+Shift+t exec --no-startup-id notify-send "Tiling mode on" && i3-msg layout default

Dupla futtatás megakadályozása

Ha nem szeretnéd, hogy egy program több példányban fusson, akkor tedd az indítandó parancsot egy ilyen szkriptbe, és a szkriptet indítsd el:

# Script amely ellenőrzi, hogy fut-e már az alkalmazás 
#!/bin/bash 
if [[ ! $(pgrep -u $UID -x nextcloud) ]]; then     
nextcloud &
fi

Hasonló eredményt ad ez a megoldás is

bindsym $mod+Shift+x exec --no-startup-id sh -c '[ -z "$(pgrep firefox)" ] && firefox'

De ez is jó lehet

bindsym $mod+Shift+x exec --no-startup-id "pgrep -x flameshot || flameshot"

Késleltetett indítás

Ez az autostartnál már előkerült, de itt is használható

bindsym $mod+e exec $term; sleep 2 && exec $browser; workspace $ws3 

Háttérben futó programok

Ez nem az i3 sajátja, de érdemes ismerni. Ha azt szeretnéd, hogy háttérben fusson egy program, akkor a parancs végére a & jelet tedd.

bindsym $mod+e exec --no-startup-id picom &

Program futtatása, ha elengedem a billentyűket

bindsym Print exec --no-startup-id grimblast save area ~/Pictures/Screenshots/

Ebben az esetben akkor fut le a parancs, amikor lenyomom a kombinációt, azaz a Print gombot. De van lehetőség akkor futtatni a parancsot, ha felengedem a gombot

bindsym --release Print exec --no-startup-id grimblast save area ~/Pictures/Screenshots/

Terminálos programok indítása

Általában terminálos programokat úgy indítunk, hogy a terminálhoz rendelt kombinációval elindítjuk a terminált (kitty), majd abba beírjuk a parancsot (btop). Ezt fel lehet turbózni, hogy azonnal induljon a terminálban a program

bindsym $mod+Control+t exec --no-startup-id kitty -e btop

Így a $mod+Control+t hatására a btop indul terminálban. A kitty-nél az -e kapcsoló adja meg az indítandó parancsot, de más terminálban ez lehet más is. A megoldás hátránya, hogy ilyenkor nem olvassa be feltétlen a bash.rc-t stb. ami problémás lehet.

Binding Mode-ok (Kötési módok)

Az i3 egyik legerősebb funkciója a különböző kötési módok létrehozása. Ez lehetővé teszi kontextusfüggő billentyűkombinációk definiálását. Bár viszonylagos sokféle módosító billentyű lehetséges, azok párosítása, plusz elvileg bármennyi betű együttes használta, de a logikusan használható kombinációk száma azért véges. Nem túl kényelmes megjegyezni egy $Mod + Shift + Alt + Cltl + a + b + c kombinálást...

Ezt a problémát úgy tudjuk orvosolni, ha egy rövidebb kombinációt kell megjegyezni, majd azt lenyomva egy-egy betűt, lehetőleg logikusan párosítva programhoz.

set $mode_launcher Launch: [f]irefox [t]thunderbird [c]hrome
bindsym $mod+o mode "$mode_launcher"

mode "$mode_launcher" {
    bindsym f exec firefox; mode "default"
    bindsym t exec thunderbird; mode "default"
    bindsym c exec google-chrome; mode "default"

    bindsym Escape mode "default"
    bindsym Return mode "default"
}

Azaz $mod+o lenyomása után beléptet a "kötési mód"-ba, ahol az f lenyomására a firefox, a t-re a levelező stb. indul el. Ha ki akarunk lépni, akkor az Esc vagy az Enter-t nyomjuk le.

A változó neve nem tartalmazhat szóközt, a jelen esetben mode_launcher ami utána van, az első szóköz után az már nem a név része, csak ennyit kell megadni a mode után!

A set sor, a billentyű kombináció és maga a leíró szerkezet elválasztható egymástól, így nem feltétlen kell így egymás után írni. A bindsym sort én a billentyű kombinációkat tartalmazó blokkba teszem.

Így gyakorlatilag egy lefoglalt kombinációval három lehetséges programindítást végezhetünk el.

Mi ezzel a probléma?

Meg kell jegyezni minden kötést, itt csak egy plusz hármat. Ami kényelmetlenné teszi egy komolyabb szerkezet használatát. Jó lenne, ha ki is írná a lehetőségeket üzenetben. Erre van lehetőség, az üzenetet küldése, kiíratás alap lehetőség.

Az átszerkesztet megoldás:

set $mode_launcher Launch: [f]irefox [t]thunderbird [c]hrome

bindsym $mod+o exec --no-startup-id notify-send "$mode_launcher" && mode "$mode_launcher"

mode "$mode_launcher" {
    bindsym f exec firefox; mode "default"
    bindsym t exec thunderbird; mode "default"
    bindsym c exec google-chrome; mode "default"

    bindsym Escape mode "default"
    bindsym Return mode "default"
}

Azaz beláncoltunk két parancsot, az első az üzenetküldés, ami most a notify-send old meg és kiírja a "$mode_launcher" változóban található szöveget, végig. Az exec --no-startup-id notify-send ... && mode ... trükkösen először elküldi az értesítést, majd belép a módba. Az notify-send üzenet rövid ideig a képernyőn marad (pl. dunst, xfce4-notifyd vagy más értesítési démonon keresztül).

Hátránya, hogy az üzenet nem a kiválasztásig, vagy a kilépésig a módból lesz látható, hanem addig, amíg az értesítésért felelős programban be lett állítva. Ha ez zavaró, akkor használj más választási megoldást.

A "Pár példa a strukturáltabb, összetettebb szerkezetre" részbe bemásoltam pár példát, amit tanulmányozva elkészítheted a sajátodat. Ha a példákban szereplő rendezettséget fenntartod, akkor gyorsan átírhatsz egy sablont majdnem bármire. A "kötési mód" neve egyedi legyen, a szerkezetre figyelj, a betű-program összerendelés legyen logikus - ha ezeket betartod, akkor egy nagyon kezes eszközt kapsz.

Program-specifikus billentyűkombináció

# Alt+F csak Firefoxban teljes képernyősítés
bindsym --whole-window $mod+f [class="Firefox"] fullscreen toggle

A szerkezet eléggé egyértelmű, így megadhatsz olyan egyedi parancsokat, amik csak egy adott programra vonatkoznak.

Sxhkd

Az sxhkd egy független gyorsbillentyűkezelő programocska. Nagyon szépen együttműködik az i3-mal. Én nem használom már, de itt olvashatsz róla többet.

Miért nem használom? Mert az i3 hasonló funkciói nekem teljesen megfelelőek, semmi olyant nem ad, amivel jobb lenne. Ha több ablakkezelőt használsz, és mindegyik együttműködik az sxhkd programmal, akkor van értelme ebbe kiszervezni a programindítási parancsokat.

Hasznos lehet

Általános szkriptek

PID Ellenőrzéssel ellátott szkript

#!/bin/bash

# Ellenőrzi, hogy az alkalmazás már fut-e
if [[ ! $(pgrep -u $UID -x firefox) ]]; then
    firefox &
fi

A duplikált indítások elkerülésére PID ellenőrzést építhetünk be, nem a firefox-ot indítjuk a billentyűkombinációval, hanem ezt a szkriptet. Kicsit macera több programhoz megírni egyesével, de ha kényszeresen indítjuk a böngészőt, ha böngészni akarunk, nem megnézzük, hogy már fut-e, akkor már hasznos lehet...

Hasonló eredményt ad ez a megoldás is

bindsym $mod+Shift+x exec --no-startup-id sh -c '[ -z "$(pgrep firefox)" ] && firefox'

De ez is jó lehet

bindsym $mod+Shift+x exec --no-startup-id "pgrep -x flameshot || flameshot"

Pár példa a strukturáltabb, összetettebb szerkezetre

Ezek nem konkrét ajánlatok, hanem csak gondolatébresztő példák. Így is lehet, ezt is érdemes összevonni, talán hasznos lesz stb. gondolat mentén.

Egyik sem világmegváltó, de hasznos lehet.

Border mód

# Border mód definiálása
mode "border" {
    bindsym n border none, mode "default"
    bindsym p border pixel 2, mode "default"
    bindsym o border normal, mode "default"
    bindsym 1 border pixel 1, mode "default"
    bindsym 2 border pixel 2, mode "default"
    bindsym 3 border pixel 3, mode "default"
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

# Border mód aktiválása
bindsym $mod+Shift+b mode "border"

Border haladóbb mód

set $mode_border Border: (n)one, (p)ixel, (o)rmal, (1-5) pixel size
bindsym $mod+ctrl+b mode "$mode_border"

mode "$mode_border" {
    bindsym n border none, mode "default"
    bindsym p border pixel 2, mode "default"
    bindsym o border normal, mode "default"

    # Pixel méretek
    bindsym 1 border pixel 1, mode "default"
    bindsym 2 border pixel 2, mode "default"
    bindsym 3 border pixel 3, mode "default"
    bindsym 4 border pixel 4, mode "default"
    bindsym 5 border pixel 5, mode "default"

    # Gyors váltás
    bindsym t border toggle, mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"
}

Rendszerkezelő mód példa

set $mode_system System: (l)ock, (e)logout, (s)suspend, (r)eboot, (Shift+s)hutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id i3lock, mode "default"
    bindsym e exec --no-startup-id i3-msg exit, mode "default"
    bindsym s exec --no-startup-id systemctl suspend, mode "default"
    bindsym r exec --no-startup-id systemctl reboot, mode "default"
    bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+Pause mode "$mode_system"

Egér használata i3 alatt

Az i3 window manager (i3wm) alapvetően billentyűzet-központú, de számos fejlett lehetőséget kínál az egér használatára is. Az i3 értelmes szinten kezeli az egeret, pont azokat a funkciókat adja, amikre nekem szükségem van. A választás lehetősége - egérrel, vagy egér nélkül - adott, nem sok hátrányt tapasztaltam eddig a megszokott asztali környezettekkel szemben.

Alap használat

Alapértelmezés szerint az i3 követi az egérmutatót, azaz ahová az egér kerül, oda kerül a fókusz is.ez ki és bekapcsolható.

focus_follows_mouse no

Alapértelmezés szerint, ha egy másik monitorra váltasz, az egér a fókuszált ablak közepére ugrik. Hogy ezt ne tegye:

mouse_warping output  # vagy none
  • output: csak monitorváltáskor ugrik az egér.
  • none: soha nem ugrik

Ez megadható csak az adott konténeren belül is:

mouse_warping container

Érdemes megadni az egérhez rendelt módosítót

`# Lebegő ablak mozgatása mod gombbal 
floating_modifier $mod

Tartsd lenyomva a floating_modifier-t, majd húzd az ablakot az egérrel.

Tiling ablakok egérrel való átrendezése: Az i3 4.21-től kezdve már egérrel is átrendezhetők a csempézett ablakok, ha a címsort húzod, vagy a floating_modifier-t tartod lenyomva.

Lebegő ablaknál jobb gombbal a címsorra kattintva és húzva is átméretezhetsz.

Általánosságban is igaz, hogy az egér gombja, görgetője pontosan úgy működik, mint a billentyűzet, így bármit hozzárendelhetsz.

# Egér görgővel workspace váltás
bindsym button4 workspace prev
bindsym button5 workspace next

# Csak az aktuális kijelzőn vált

bindsym button4 workspace prev_on_output
bindsym button5 workspace next_on_output

Gyors kattintásos lebegőmód:

# Floating ablak mozgatása egérrel (bal gomb + modifier)
bindsym $mod+button1 floating toggle; resize shrink width 10 px or 10 ppt

Gyors mozgatás:

Tartsd lenyomva a $mod-ot (pl. Win) és húzd az ablakot a címsávján.

Extra: Ha a floating_modifier beállításnál a $mod helyett none-t használsz, akkor modifier nélkül is húzhatod az ablakokat. Ez zavartó lehet, mert sok funkciót rendelhetünk a $mpd + egérgombok együtteshez.

Hol kattinthatunk?

Alapértelmezés szerint a hozzárendelés csak akkor aktiválódik, ha az egérkattintás az ablak címsorára történik. Ha megadjuk a --release kapcsolót, a parancs az egérgomb felengedésekor fog lefutni, nem pedig lenyomáskor.

A --whole-window opció megadásával a hozzárendelés az ablak bármely részén végrehajtódik, kivéve a keretet. Ha azt szeretnénk, hogy a hozzárendelés az ablakkeret kattintására is működjön, a --border kapcsolót kell használni.

A --exclude-titlebar opció kizárja a címsort a hozzárendelés által figyelt területek közül, tehát az ott történő kattintás nem aktiválja a parancsot.

Példák:

# A középső egérgombbal a címsorra kattintva bezárjuk az ablakot
bindsym --release button2 kill

# A középső gomb és egy módosító bármely ablakrészre kattintva bezárja az ablakot
bindsym --whole-window $mod+button2 kill

# A jobb egérgomb átvált lebegő módra
bindsym button3 floating toggle
bindsym $mod+button3 floating toggle

Kinézet, sebesség stb.

Az egérmutató témáját és sebességét nem az i3, hanem az X11 vagy a DE (pl. LXAppearance, xfce4-mouse-settings) kezeli. Ezeket külön alkalmazásokkal vagy Xresources-ban lehet konfigurálni. Használd a két ajánlott programot, és nem lesz problémád. Alapvetésnek jó, hogy ha valami kell és arra nem találsz i3 natív megoldást, akkor az Xfce megfelelő programját nézd meg.

Ablak tulajdonságok beállítása

A for_window parancs az i3 ablakkezelő egyik leghatékonyabb konfigurációs direktívája, amely lehetővé teszi, hogy meghatározott ablakokra automatikusan végrehajtson különböző parancsokat azok megjelenésekor. Ez a funkció különösen hasznos a munkafolyamatok automatizálásában és a személyre szabott ablakkezelési szabályok létrehozásában.

Ezeket a programokhoz kötött szabályokat megadhatjuk egy külön blokkban, vagy a program indításakor.

Szintaxis és alapvető struktúra

Alap szintaxis

for_window  

A parancs két fő komponensből áll:

  • Kritériumok: Meghatározzák, hogy mely ablakokra vonatkozzon a szabály
  • Parancs: Az i3 parancs, amely végrehajtódik, ha az ablak megfelel a kritériumoknak

Kritériumok meghatározása

A kritériumok szögletes zárójelben [] kerülnek megadásra, és lehetővé teszik az ablak tulajdonságai alapján történő szűrést. A rendelkezésre álló kritériumok a következők:

Alapvető Kritériumok

  • class: Az ablak osztálya (WM_CLASS második része)
  • instance: Az ablak példánya (WM_CLASS első része)
  • title: Az ablak címe
  • window_role: Az ablak szerepe (WM_WINDOW_ROLE)
  • window_type: Az ablak típusa (_NET_WM_WINDOW_TYPE)
  • machine: A gép neve, ahol az ablak fut
  • id: Az X11 ablak azonosítója
  • workspace: A munkaterület neve, ahol az ablak található
  • urgent: Az ablak sürgősségi állapota
  • con_mark: A konténerhez rendelt jelölések
  • con_id: Az i3 belső konténer azonosítója

Speciális kritériumok

  • floating: Csak lebegő ablakokra vonatkozik
  • tiling: Csak csempézett ablakokra vonatkozik
  • floating_from: Lebegő ablakok az alapján, hogy "auto" vagy "user" által lettek lebegővé téve
  • tiling_from: Csempézett ablakok az alapján, hogy "auto" vagy "user" által lettek csempézve

Reguláris kifejezések használata

Az i3 PCRE (Perl Compatible Regular Expressions) támogatást nyújt a következő kritériumokhoz

  • class
  • instance
  • title
  • window_role
  • workspace
  • machine
  • con_mark

A felsorolásból is láthatjuk, hogy gyakorlatilag minden meghatározható, kiolvasható ablak tulajdonságot megadhatjuk az azonosításhoz. Ezt a jellemzőt keresi majd az i3 a futó, induló ablakoknál és ha egyezést talál, akkor a megadott parancs-ot lefuttatja.

Egy egyszerű példa:

for_window [class="^minta$"] border pixel 1

Azaz ha indul egy olyan ablak, aminél a class jellemző minta akkor a border-t, a keretet egy pixelesre állítsa. A "^minta$" elején a kis kalap jel azt jelzi, hogy az class kiolvasott értékének az elején van a minta, a végén a dollárjel pedig, hogy a végén van a minta, azaz se előtte, se utána nincs semmi más, az egyezés pontos. Érdemes kissé tanulmányozni a reg.expressz kifejezéseket. Nagyon jól megoldható a keresés helye, az egyezés helye az adott jellemzőben.

# Pontos egyezés
for_window [class="^URxvt$"] border pixel 1

# Tartalmazza a szöveget
for_window [title=".*Firefox.*"] floating enable

# Végződik az adott szöveggel
for_window [title=".*- Thunderbird$"] move container to workspace 3

Xprop használata

A legtöbb ablak tulajdonság, amit használunk lehívható az xprop paranccsal. A parancsot terminálban indítjuk, majd a megváltozott kurzorral a lekérdezendő ablakra kattintunk. Alapesetben kiír nagyon sokféle dolgot, ha ezt szűrni szeretnénk egy jellemzőre, akkor használjuk a grep parancsot:

`# Csak a WM_CLASS kiírása 
xprop | grep WM_CLASS`

Valami ilyent kapsz:

WM_CLASS(STRING) = "firefox", "Firefox"

Ahol az első érték az instance, a második a class. Kicsit furcsa a megoldás a WM_CLASS(STRING) = "fsearch", "Fsearch" részbél, mert az első az "instance" értéke, és csak a második tag a class. Az lenne a logikus, ha már WM_CLASS(STRING) =, akkor a class legyen elől...

Ha szeretnél egy kis szkriptet a lekérdezéshez, ezt próbáld ki, elég szép és jól értelmezhető ad:

#!/bin/bash
# i3-get-window-criteria
# Kattints egy ablakra, hogy megkapd a kritériumokat
xprop | awk '
    /^WM_CLASS/{sub(/.* =/, "instance:"); sub(/,/, "\nclass:"); print}
    /^WM_NAME/{sub(/.* =/, "title:"); print}
    /^WM_WINDOW_ROLE/{sub(/.* =/, "window_role:"); print}
'

Szabályozható parancsok

Gyakorlatilag majdnem minden, az általam megtett felsorolás biztosan nem teljes. Az eddigiekben tárgyalt, ablak, asztal és egyéb tulajdonságok, mozgatás, átnevezés és sok egyéb működik. Kis kísérletezőkedv kell, plusz fantázia, hogy mit is akarunk elérni.

Parancs Funkció
floating enable/disable/auto/toggle Lebegő mód beállítása
border pixel/normal/none Ablakkeret típusa
move to workspace <name> Áthelyezés adott workspace-re
assign [workspace] Minden ilyen típusú ablak automatikusan egy adott workspace-re kerül
resize set <width> <height> Ablak fix méretezése
focus Fókusz automatikus adása
title_format Ablakcím átírása
mark Jelölés adása az ablaknak, hogy később is hivatkozhassunk rá
move position Ablak pozicionálása
layout Az alap layoutok közül választhatsz
fullscreen enable/disable Teljes képernyőn indul, vagy nem
move [to] output <kimenet> Áthelyezés adott monitorra
sticky enable/disable Ragadós mód
inhibit_idle fullscreen/visible/focus/none/ Energiatakarékos üzemmód gátlása (pl. videolejátszáshoz)
kill Azonnali bezárás (ritkán használt, de lehetséges)

Példák, tippek, tapasztalatok

A példákkal próbálok rámutatni, hogy mennyire jól szabályozható az i3. Amit tudni kell: a túl sok, és túlzásba vitt beállítás lassíthatja a működést. Nem kell mindent szabályozni az esetek 99%-ban az alap jó.

A parancsokat megadhatjuk külön is, ha úgy átláthatóbb:

assign [class="Gimp"] → workspace 5
for_window [class="Gimp"] floating enable

A Gimp ablakai automatikusan az 5-ös workspace-re kerülnek, és lebegőként viselkednek.

De megadhatjuk sorban is:

for_window [class="Pavucontrol"] floating enable, resize set 800 600, move position center

A Pavucontrol ablak lebegőként nyílik, 800x600 px méretű lesz, és középre igazítva jelenik meg. Én jellemzően első lépésben a class értékre támaszkodom, ami általánosságban jó szokott lenne. Ha nem akkor lehet mást is használni, ilyen lehet a title az ablak címe.

for_window [title="Volume Control"] floating enable

Használjunk kombinált szabályokat, több programhoz is megadhatjuk ugyanazt a szabályt, egyben:

# Kombinált szabályok
for_window [class="^(firefox|chromium|brave)$"] move container to workspace "web"

# Egyedi szabályok helyett
for_window [class="firefox"] move container to workspace "web"
for_window [class="chromium"] move container to workspace "web"
for_window [class="brave"] move container to workspace "web"

GTK ablakok lebegtetése a window_role alapján. Sok GTK alkalmazás (pl. Gedit) használja ezt a window_role-t különféle lebegő ablakoknál, amit egy komplett asztali környezet értelmezni tud, de az i3 esetén nekünk kell szabályozni, hogy a azok lebegjenek és ne külön ablakban jelenjenek meg.

for_window [window_role="pop-up"] floating enable, resize set 800 500, move position 90ppt 5ppt

Hasonlóan érdemes a dialog párbeszéd, értesítési ablakokra is kiadni egy általános parancsot:

# Minden párbeszédablak úszó és középen
for_window [window_type="dialog"] floating enable, move position center
for_window [window_type="notification"] floating enable, focus, move position center

Ezzel szabályozhatjuk, hogy egy programban előugró ablak, aminek külön neve van, hogyan viselkedjen

for_window [class="Firefox" title="Save File?"] floating enable, move position center

Csak a Firefox mentésablakára érvényes. A többi Save File ablakra nem.

Igen, az ilyen előugró, lebegő ablakokat egy komplett asztali környezet értelmesen kezeli, az i3 alatt be kell állítani egyesével. Jó gondolat: ha használat alatt előkerül ilyen partizán ablak, ami nem ott és úgy viselkedik, ahogy azt szeretnéd, azt azonnal meg kell adni szabályban. Egyszer kell beállítani...

Kedvenc példám a Cinnelera, vagy a Gimp.... A GIMP eszközpalettái úszóvá tétele és jobb oldalra rendezése:

for_window [class="Gimp" window_role="gimp-toolbox"] floating enable, move position 95ppt 5ppt
for_window [class="Gimp" window_role="gimp-dock"] floating enable, move position 95ppt 35ppt

Megjelölt ablakok

Már a billentyű kombinációknál volt szó arról, hogy megjelölhetünk egy ablakot és a jelülésre hivatkozhatunk. Most ezt induláskor tesszük meg.

for_window [class="Spotify"] mark kiskutya

Majd az így megjelölt ablakokra alkothatunk szabályt:

[con_mark="kiskutya"] move to workspace music

Én ezt nem használom, mert direkt is megadhatom a parancsot hozzá.

Automatikus munkaterület-átnevezés alkalmazás alapján:

for_window [class="firefox"] rename workspace to "böngészés"

Ha megnyitom a Firefoxot az asztal neve megváltozik. Nekem nem túl hasznos, de jól néz ki.

Autostart megoldások

Az i3 window manager rendkívül rugalmas autostart rendszert kínál, amely lehetővé teszi alkalmazások automatikus indítását a munkamenet kezdetekor. Ez a viszonylag részletes útmutató átfogó képet nyújt az összes elérhető lehetőségről, konfigurációs opciókról, példákkal.

dex megoldás

Az alapkonfigurációban egy érdekes megoldást adnak az autostarthoz, ez a dex program meghívása.

exec --no-startup-id dex --autostart --environment i3

Ez az XDG szabvány szerinti autostart könyvtárban lévő .desktop fájlokat indítja el, pontosan úgy mint más asztali környezet. Alapesetben ez jó, ha valamelyik más környezettel együtt használod az abban definiált autostartra kijelölt programok elindulnak. Részletesebben itt olvashatsz róla.

Ez nekem nem felel meg. Egyrészt nem feltétlen akarom mindkét környezetben pontosan ugyanazt indítani, másrészt az i3 saját megoldása számomra jobban kézre áll. Így ez a rész törlésre kerül.

I3 saját megoldása

Az alap megoldás két indítási lehetőséget kinál.

exec parancs: Csak az i3 első indításakor futtatja le a megadott parancsot. Nem fut le az i3 újraindításakor ($mod+Shift+r)
exec_always parancs: Minden alkalommal lefut, amikor az i3 elindul vagy újraindul. Ez magában foglalja mind az első indítást, mind az i3 újraindítását.

A különbség egyértelmű, nagyon jó példa a panel indítása. Egyszer kell indulni, majd egy esetleges reload parancsra nem, hiszen akkor két panel lenne egymás tetején.

# Firefox indítása 
exec firefox

# Polybar panel indítása
exec polybar

Alapvető gondolat, hogy akkor használd az exec_always megoldást, ha egy reload után nem indul el, az, amit szeretnél. Így kiszűrheted azokat a programokat, amiknél kell, és nem lesz kettős indítás.

Sok esetben, főleg régebbi programok indításakor előfordul, hogy az i3 indulásakor nem kapod meg rögvest a megszokott nyíl alakú kurzort, hanem egy kör forog, vagy homokóra stb. Ami egy természetes "tölt a program" visszajelzés. Csak bosszantó. Egyes programok nem adnak visszajelzést az i3-nak, hogy elindultak, és erre a jelzésre vár az I3. Azaz a program nem támogatja a startup notification-t.

Ki lehet kerülni ezt a várakozást

# Terminál indítása 
exec --no-startup-id urxvt

A --no-startup-id jelzi a rendszernek, hogy ne várjon a visszajelzésre. Jó gondolatnak tűnik (én ezt követem), hogy teszteléskor nem adom meg ezt a kapcsolót az első pár induláskor. Majd amikor kiderül, hogy minden elindul rendesen, akkor megkapja ezt a kiegészítést, így nem lesz a várakozási visszajelzés.

Kényelmi megoldás, ha egy program már ott indul, ahol kell és úgy, ahogy kell. Az alkalmazások adott munkaterületeken való indítása az i3-msg paranccsal lehetséges.

# Firefox indítása az 1. munkaterületen
exec --no-startup-id i3-msg 'workspace 1; exec firefox'

# Terminál indítása a 2. munkaterületen, majd visszaváltás az 1.-re
exec --no-startup-id i3-msg 'workspace 2; exec urxvt; workspace 1'

# Több alkalmazás indítása különböző munkaterületeken
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec code; workspace 3; exec thunderbird; workspace 1'

Az autostartban indított program sem más, mint bármely program indítás, így az általánosan megadott program jellemzők itt is életbe lépnek.

Az assign direktíva használatával alkalmazások automatikusan egy adott munkaterületre kerülnek

# Firefox mindig az 1. munkaterületre
assign [class="Firefox"] 1

# Terminálok a 2. munkaterületre
assign [class="URxvt"] 2

ismerős.

Bizonyos alkalmazások (például Spotify) esetében, amelyek nem állítják be megfelelően a class tulajdonságokat, a for_window direktívát kell használni

# Spotify áthelyezése az 5. munkaterületre
for_window [class="Spotify"] move to workspace 5

# Lebegő ablakként való megjelenítés
for_window [class="XTerm"] floating enable

# Szegély stílus beállítása
for_window [class="urxvt"] border pixel 1

Szintén ismerős megoldás.

Jó gondolatnak tűnik, hogy azoknál a programoknál. ami csak autostartban van, azok ott kapják meg a paramétereket, a többinek egy külön blokkban vannak a tulajdonságai. Ami fontos: ne legyen két helyen ugyanaz és ne legyen ellentmondásos utasítás.

Sleep parancs használata

Ha sok programot indít a rendszer, erőforrás igényeseket, akkor leterheli a gépet. Így hasznos lehet ilyen esetben késleltetve indítani, egymás után.

# Alkalmazások
exec --no-startup-id "sleep 1 && firefox"
exec --no-startup-id "sleep 2 && kitty"

# vagy kicsit összetettebben:

exec --no-startup-id "i3-msg 'workspace 1; exec firefox && sleep 2'" 
exec --no-startup-id "i3-msg 'workspace 2; exec kitty && sleep 5'"`

Szkriptek indítása

Pont úgy indul, mint egy program, csak érdemes az elérési útvonalat is megadni, vagy a PATH változóban megadott könyvtárban tárolni a saját szkripteket.

# Egyedi szkript
exec_always ~/.config/i3/set_keyboard_layout.sh

Amire figyelj! A flatpak, appimage, egyedileg fordított programok nem feltétlen egy paranccsal indulnak, hanem lehetséges, hogy összetettebb az indítása, vagy elérési utat is meg kell adni. Előbb próbáld indítani terminálban és ha ott indul, akkor úgy add meg itt is.

Indító szkript írása

Mivel már ismerjük a szkript indításának a módját, az összes indítandó programot egy szkriptben is megadhatjuk. Majd ezt a szkriptet indítjuk el.

# Autostart
exec_always ~/.config/i3/autostart.sh

Egy példa szkript részlet

#!/bin/sh

### monitor beállítása
xrandr --output DisplayPort-0 --off --output DisplayPort-1 --off --output DisplayPort-2 --off --output HDMI-A-0 --mode 1280x720 --pos 1280x0 --rotate normal --output DVI-D-0 --primary --mode 1280x720 --pos 0x0 --rotate normal &

## Bill. letiltások
setxkbmap -option ctrl:nocaps &

## Conky
conky -c ~/.config/i3/script/alap.conky &

## Sxhkd
sxhkd -c ~/.config/i3/script/sxhkd &

## Tint2 panel
tint2 &

Akkor hasznos, ha több ablakkezelőt is használsz és csak egyszer akarod elkészíteni az autostart dolgokat.

Alternatív módszer: .xprofile vagy .xinitrc

Ha a bejelentkezés nem i3-n belül, hanem pl. startx vagy lightdm-mel történik, akkor lehetséges .xprofile vagy .xinitrc fájlba tenni a parancsokat. Ez csak akkor lesz jó, ha csak i3 van a gépen.

.xprofile példa:

# ~/.xprofile

feh --bg-scale ~/Képek/hatter.jpg &
nm-applet &
setxkbmap hu &
xrandr --output HDMI-1 --primary --right-of eDP-1 &

Fontos: ez a fájl a display manager által kerül lefuttatásra, azaz az i3 előtt.

Pár fontos dolog, ami induljon

Vagy legalábbis én hasznosnak tartok. Itt nem felhasználói programra gondolok, hanem rendszerünkhöz kellő dolgok.

A már ismert monitor beállító xrandr parancs.

Valamelyik panel kezelő: tint2, polybar stb. ha a gyárit kicsit egyszerűnek tartod.

Conky, egy nagyon jól konfigurálható rendszer kijelző alkalmazás

Polkit: ha grafikus program jelszót kér, ez kezeli. Bármelyik megoldás jó, nálam így néz ki:

exec --no-startup-id /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1

Ha értesítő rendszert használsz, akkor az. Ilyen lehet a dunst is.

nm-applet nem árt ha fut...

Javasolt az alttab, ami az Alt és a Tab nyomkodásával váltogatja a programokat.

Hibakeresés

Alkalmazások nem jelennek meg a megfelelő munkaterületen

  • Használj assign direktívát for_window helyett
  • Ellenőrizd az alkalmazás osztályát xprop-pal
  • Győződjön meg róla, hogy az alkalmazás támogatja a startup notificationt

Duplikált alkalmazások

  • Használj exec helyett exec_always-t, ha nem szükséges az újraindításkor is futtatni
  • Implementálj PID ellenőrzést a script-ekben

Alkalmazások nem indulnak el

  • Ellenőrizd a végrehajtási jogosultságokat
  • Győződj meg róla, hogy az alkalmazás elérhető a PATH-ban
  • Tesztel a parancsot terminálból

Hátterek

Az I3 ablakot kezel, az összes monitorterületet lehető legnagyobb arányát lefedi az ablakokkal. Így a háttérképeknek kisebb szerepe van. Ennek ellenére sokan szeretik a háttérképeket, így ezt a támát is körbejárjuk.

hsetroot

Talán ez a legegyszerűbb megoldás, ami egy adott színnel tölti ki a monitort.

exec_always --no-startup-id hsetroot -solid "#2F2B26"

Gradiens hátteret is tud, színátmenetekhez kiváló lesz.

exec_always --no-startup-id hsetroot -add "#ffb301" -add "#0000ff" -gradient 0

Ez egyes helyeken nem működik rendesen.

Egyszerű képmegjelenítésre is alkalmas, az adott képet megjeleníti háttérként:

exec_always --no-startup-id hsetroot -fill /út/a/képhez.jpg

A főbb kapcsolói:

  • -center: középre helyezi
  • -tile: ismétli
  • -stretch: torzítva teljes képernyőre húzza

A program elég sokféle megoldást kínál, és csak az egyszínű háttérhez használom. A kiválasztott képhez adhatunk effekteket is, bár ez már messze túlmutat az egyszerű háttér témán.

A terminálos nagyágyú: feh

Talán az egyik leggyakrabban használt parancssori megoldás.

Egyetlen kép beállítása:

feh --bg-scale /elérés/utvonal/kép.jpg

Képarány megtartása (--bg-max):

feh --bg-max ~/Képek/hatter.png

Véletlenszerű háttér beállítása egy mappából:

feh --randomize --bg-fill ~/Képek/Hatterek/*

Főbb kapcsoló:

  • --bg-fill: megtartja az arányokat, de megtölti a képernyőt
  • --bg-center: középre helyezés
  • --bg-max: méretarányosan, de teljes képernyőre
  • --bg-tile: ismétli a képet

Egy egyszerű képváltó szkript feh felhasználásával:

#!/bin/bash
WALLPAPER_DIR="$HOME/Képek/Hatterek"
INTERVAL=300  # Másodperc (5 perc)

while true; do
  FILE=$(find "$WALLPAPER_DIR" -type f | shuf -n1)
  feh --bg-fill "$FILE"
  sleep $INTERVAL
done

Indítás i3-mal (~/.config/i3/config):

exec --no-startup-id ~/bin/wallpaper-switcher.sh

Nagy előnye, hogy a feh tetszés szerint felparaméterezhető, így nem lesz meglepetés a lejátszás alatt.

Tipp: Bár a legtöbb háttérkép beállító program tudja a képeket maximalizálni, vagy illeszteni a monitor felbontáshoz a simább, egyszerűbb működéshez érdemes a méretaránynak és a felbontásnak megfelelően beállítani a képet.

Grafikus megoldás: nitrogen

A Nitrogen egy könnyű és gyors háttérkép-kezelő alkalmazás Linux alatt, elsősorban tiling ablakkezelőkhöz, mint az i3 vagy Openbox. Kifejezetten X11-re készült, és nem függ nagyobb asztali környezetektől, így ideális választás minimalista rendszerekhez.

Fő jellemzői:

  • Egyszerű grafikus felület a háttérképek kiválasztásához.
  • Támogatja több monitor kezelését.
  • Megőrzi a kiválasztott háttérképet újraindítás után is.
  • Képes háttérképet beállítani indításkor automatikusan.

Használat: Indíts el a programot és már minden egyértelmű lesz. Az elérési út megadása után beállíthatod a monitorokhoz rendelt képet, a megjelenítés módját és a hasonló alap dolgokat.

Beállítás indításhoz:

exec --no-startup-id nitrogen --restore

Általánosan előforduló probléma lehet, hogy a monitor felbontása, pozíciója stb. megváltozásakor a háttérkép akár méretben, akár elhelyezkedésben nem stimmel, ilyenkor a háttérképet működtető parancs újrafuttatása megoldja a legtöbb problémát.

Hozzászólások

Hát elveszed a kenyerem...?! 

Értékelés: 

0
Még nincs értékelve

Hát elveszed a kenyerem...?! laugh

Amúgy köszi, alapos, legalább ha valaki nincs tisztában a pálcikawm szcéna alapfogalmaival, akkor egyszerűen ide irányítom! wink