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:
- A konfigurációban tartsunk rendet, egy témához tartozó beállításokat egy helyre rakjuk. Átláthatóság fontos!
- Amit kell kommenteljük, lássuk el magyarázattal. Itt a komment a # jel. Csak a sor elején használjuk, sorközben nem!
- Zárójeles szerkezeteknél figyelemmel járjunk el a zárójelek párosításánál.
- Nem használt funkciókat kommenteljük ki, így kisebb az esély a billentyű kombinációk ütközésre.
- Mindig legyünk következetesek. Sok paraméter több helyen is megadható, de mi egy helyen, egységesen adjunk meg paramétert.
- 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:
- A konfigurációban tartsunk rendet, egy témához tartozó beállításokat egy helyre rakjuk. Átláthatóság fontos!
- Amit kell kommenteljük, lássuk el magyarázattal. Itt a komment a # jel. Csak a sor elején használjuk, sorközben nem!
- Zárójeles szerkezeteknél figyelemmel járjunk el a zárójelek párosításánál.
- Nem használt funkciókat kommenteljük ki, így kisebb az esély a billentyű kombinációk ütközésre.
- Mindig legyünk következetesek. Sok paraméter több helyen is megadható, de mi egy helyen, egységesen adjunk meg paramétert.
- 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:
- Font beállítás
- Border beállítások
- Színkonfiguráció
- Smart beállítások
- 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...?!
Beküldte berus -
Értékelés:
Hát elveszed a kenyerem...?!
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!