A tökéletes I3Wm beállítása

i3wm
I3 ablakkezelő

A mostani sorozatban egy tökéletes I3Wm rendszer építésébe kezdünk. Itt is igaz: a tökéletes az, ami neked megfelel, így amit leírok az pontosan az én igényeimnek felel meg, ha Te másképp oldod meg, az legyen a Te igényeidnek megfelelő. Soha ne másolj egy rendszert, alakíts ki ami nálad a lehető legjobb. Igen, megismételtem az előző részben leírtakat. Fontosnak tartom a saját, „custom” rendszer építést és nem a másolgatást. Bár nagyon sok jó előre beállított rendszert találni I3Wm alatt, de ezen túl kell lépni, mert az lesz a tökéletes, egyéni az amit saját magunknak állítunk be.

A „tökéletes” I3Wm rendszer nem egyszerűen készül el

Már nagyot haladtunk, mert ismerjük a két legfontosabb dokumentumforrást, az I3Wm és a gaps oldalát. Illetve már a gyorsbillentyűket is megismertük. A következőkben beállítjuk az I3Wm alap működését, a kinézetét és pár olyan feladatot is elvégzünk, ami nem kötelező, de azért jó ha megtesszük.

Nulladik lépés

Bármely szövegszerkesztő jó lesz, én a NeoVim mellett döntöttem. Ami elvárás a fullextrás kiemelés. azaz a szintaxis kiemelése. Így a saját szövegszerkesztődbe – ha kell – állítsd be a formátumot, vagy ha kell akkor telepítsd a megfelelő kiegészítőt. Én sokat használok nvim-et ezért már automatikusan beírom a konfig végére a # vim: filetype=i3config sort, így a beállításaim szerint fel is fogja ismerni. Sokkal kényelmesebb így használni a szerkesztőket!

Az első lépés

Ez csak az én saját „dilim”. Ha van egy ilyen nagyságú konfigurációs fájl, azt szeretem valami szinten rendben tartani, Így nem kell sokat keresgélni benne. Azaz a felesleges kommenteket az elejéről kiveszem, mert azok nem szükségesek. Illetve egy kis magyarázattal látom el:

#i3 config file (v4)
#Saját I3 config, MX alatt

Majd megkapja a „szakasz címet”

####################################
#I3 működését szabályzó beállítások
####################################

Ha már az elején ott van a mod gomb definíció, akkor azzal indulunk:

#bindsym $mod beállítása
set $mod Mod4
set $alt Mod1

A második sor az ALT gomb definíciója. Így amikor a $alttal hivatkozom az ALT billentyűre, akkor azt is megérti, ha esetleg a későbbiekben változtatni akarok a módosító gomb kiosztáson, akkor azt itt egyszerűen megtehetem. Ezt nem kötelező beírni, de nem árt.
A következő bejegyzéseket is tisztítani fogom, mert egy betűtípust használok, semmi ikont, így marad a

#Font beállítás
font pango:monospace 8

Ha ikonokra és egyéb olyan dologra van szükséged, ami túlmutat a sima karakteres megjelenítésen, akkor érdemes pár haladóbb előre beállított I3Wm konfigurációkat megnézni, ehhez például nagyon jó a Magyarch konfigja, ott tanulmányozhatod a tökéletes rendszer beállítást ezekhez. Nekem a célom a minimalista beállítás volt, így ezt a vonalat nem is nagyon nézegettem.
Értelemszerűen az alapkonfigurációból ki is vettem azokat a kikommentelt sorokat, melyek erre adnak utalást.
Itt eljutottunk egy olyan sorhoz, ami exec-el kezdőik és valamit szabályoz. Én úgy gondolom, hogy az összes ilyennek egy helyen van a helye, így itt meg is szakítom a folyamatos átírást és egy másik blokkal folytatom.

A I3wm gaps beállítása

Az elejére kerülnek a közvetlen, az I3Wm működését szabályzó beállítások, így ide raktam be a gaps pár sorát. Itt is a kellő minimumra törekedtem, így pár felsorolt beállítást, amit a github oldala ismeretet nem használtam fel.

gaps outer 3
gaps inner 6
gaps bottom 3
gaps top 3

A rések beállítása. Ezen lehetne finomítani még, mert pár beállítási lehetősége van az I3Wm gaps-nak, de eddig ez bevált, a felbontásnak megfelelő.
Ha már az ablak kinézetet állítjuk, akkor a keretek pixel méretét is globalizálhatjuk itt:

Keretek alap beállítása

for_window [class="^.*"] border pixel 4

Azaz megmondjuk, hogy minden ablak kerete legyen 4 pixelnyi. Itt is igaz, hogy pár állogatást érdeme megtenni, hiszen felbontás, ízlés és elvárás eltérhet. Érdemes tudni, hogy a későbbiekben akár az összes programhoz egyesévek is megadhatjuk ezeket az értékeket. Kérdés, hogy mennyire van értelme az ilyen szintű konfigurálásnak. Egy esetben tartom jónak: ha valamire fel akarjuk hívni a figyelmünket, kiemelni az adott ablakot (vagy ablak tulajdonsággal rendelkező ablakot).
Egy gyors ellenőrzés, hogy minden jól sikerült, majd folytathatjuk tovább.

Kitérő

Minden átállított, vagy újonnan beírt sor után egy konfiguráció újratöltést érdemes megtenni: bindsym $mod+Shift+c reloadsorra gondoljunk! Így bármi kicsike kis eltérés van az ideálisnak gondolt „tökéletes” I3Wm rendszer működése és az éppen beállított érték közt azonnal javítani tudjuk.
Pontosan ezért érdemes I3Wm alatt elvégezni a konfigurációs fájlok átírását, és nem  XFCE alatt megnyitva a konfigot és ott írogatni.

Ha már ablakok, akkor asztalok

Alap esetben tíz asztalt, munkaterületet állíthatunk be. Ezt érdemes ki is használni, azaz ennyit beállítani és jól bekonfigurálni. Több beállítási lehetőségünk van, én azt javaslom, ha nincs valami eltérő és fontos érved, nem kell ezeket átállítani. Keresd meg azokat a blokkokat, amik ezt szabályozzák, jellemzően tíz sor, picit tovább olvasva már felismered őket. Én ide előre másoltam, mert az az elképzelésem, hogy az elején a fix, valószínűleg soha nem változó sorokat teszem, a végére a saját beállításokat és a változó sorokat.
Sorba menjünk.

#Asztal neve
set $ws1 "1"

A macskakörömbe kerülhet bármi név, ikon is, ha kedved van. Itt is igaz, ha ikon stb. kell akkor a Magyarch beállításait vizsgáld meg, ott szépen be van állítva.
Jogos kérés:miért nem használok hosszabb nevet, vagy akár szép ikonokat is?

  • Mert az egy hiba lehetőség, ha később másik rendszerre akarom vinni a konfigot.
  • Mert a panelon szépen néz ki, de helyet foglal. Én nem 4k vagy FullHD monitoron használom, hanem HD felbontásban, így kevesebb a hely.
#Asztal váltás
bindsym $mod+1 workspace number $ws1

Itt adhatod meg az asztalváltó kombinációkat, szerintem a logikus, legegyszerűbb megoldást választották. WIN és az asztal száma. Átírható, ha van értelme.

#Asztalra küldés
bindsym $mod+Shift+1 move container to workspace number $ws1

A kombinációval az aktív konténert a megadott asztalra küldöd. Itt is jól memorizálható, mert a Shift nagyon jól köthető az tolás, emelés, átemelés szóhoz… Én ehhez sem nyúltam.
Ha egy monitort használsz már készen is vagy. Illetve nem, mert ki is kell próbálni minden kombinációt. de itt nagy hiba nem lehet, csak átmozgattunk egy blokkot.

Több monitor beállítása

Alapvetően ezt nem is kell megtenni, mert az I3Wm – ha ez nincs beállítva – mindegyik monitoron is tudja használni az asztalokat. Azaz az „1” elnevezésű asztal lesz mindegyik monitoron, ha az egyes asztalra váltasz. Logikus, nincs is általában ezzel semmi gond.
Akkor minek variálni?
Ha azt szeretném, hogy egy program a jobboldali monitoron nyíljon meg, akkor a legegyszerűbb módja, ha a monitorhoz rendelek egy, vagy több asztalt, hogy csak azon nyíljon meg. Majd a programnál megadom azt, hogy az adott számú asztalon legyen szíves indulni.
Illetve így a két monitor közt mozgatni is könnyebb a programokat, hiszen ha az 5-s asztal a jobboldali monitoron van, és kizárólag ott, akkor simán átküldöm az ötösre a programot.

#Munkaasztal és a monitor hozzárendelése: xrandr --listmonitors

workspace "1" output DVI-D-0
workspace "2" output DVI-D-0
workspace "3" output DVI-D-0
workspace "4" output DVI-D-0
workspace "5" output HDMI-A-0
workspace "6" output DVI-D-0
workspace "7" output DVI-D-0
workspace "8" output DVI-D-0
workspace "9" output DVI-D-0
workspace "10" output HDMI-A-0

Látható, hogy a hozzárendelés egyszerűen megoldható, ha ismered a monitor nevét. Arra mindenképp figyelj, hogy a nevek eltérhetnek, ha másik videomeghajtót teszel fel, vagy másik Linux rendszerre viszed át a konfigurációt. Próbaképp az egyes asztalon nyitok egy terminált, majd átküldöm az ötösre. Át is ment a másik monitorra! Szuper.
Itt is jól látni az I3Wm tökéletes és jól átgondolt rendszer felépítését, mert máshol nem feltétlen ilyen egyszerű a dolog. Az I3Wm alapelve az egyszerűség, semmit nem raknak bele ami nem lételem, de azt nagyon jól megoldják.

Eddig nagyjából jól átlátható blokkokkal dolgoztunk, így komolyabb rendszerezésre nem volt szükség. Illetve nem sok állítási tesztre szabási beállítást kellett megtenni.

Alap kombinációk beállítása

A billentyűkombinációkon múlik a használati kényelem. Hiába van egy nagy teljesítményű, nagyon jó I3Wm rendszer tökéletes beállítással, szép kinézettel a kezed alá téve, ha a kombinációkkal nem vagy tisztában, nem ismered esetleg kényelmetlennek tartod őket.
A kombinációkat én több csoportba osztom, így nem kell majd keresgélni, illetve itt is van olyan, amit egyszer beállítok és azután soha nem nyúlok hozzá.
Az alap kombinációkat érdemes egy helyre rakni.

#reload the configuration file
bindsym $mod+Shift+Escape reload

#restart i3 inplace
bindsym $mod+Shift+q restart

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

#kill focused window
bindsym $mod+q kill

A megfelelő kombinációkat érdemes átírni azokra a gyorsbillentyűkre, amiket megszoktunk. Már itt felírtam, hogy kell egy menü vezérelt kiléptetési szkript, ami a kiléptetésnél nem csak kijelentkezik, hanem lehetőséget ad az azonnali leállításhoz is.
Ezt követi (legalábbis nálam) az ablak nyitási, rendezési, váltási beállítás. Ami alapból benne van, rendezett, így csak átmásoltam ebbe a blokkba. Az angol leírások, kommentek jók, a használata nem okozhat gondot.
Mentés, próba az összeset egyesével kipróbálja az ember, bár nem sok módosítás volt, de azért…

Tipp

Ha szeretnéd, hogy kiírja hogy milyen műveletet végzett el, akkor az alábbi megoldás jó lehet neked:

bindsym $mod+h split h;exec notify-send 'Oldalra rakja!'

A notify-send-et telepíteni kell, ha nincs fenn. Elvileg bármilyen értesítési eszközt használhatsz, az egyik legegyszerűbb ez, így én ezt választottam. Itt is próba kövesse a kiegészítéseket!

Amit át kell gondolni, és eldönteni az ablakok közti váltás alap billentyűit. Ez négy blokkban van:

#change focus
#alternatively, you can use the cursor keys:
#move focused window
#alternatively, you can use the cursor keys:

A kérdés adott: a hjkl (vi) vagy a nyilak vezéreljék a fenti funkciókat? Vagy mindkettő? Én nagyon nem szeretem a hjkl megoldást, plusz le is foglal négy WIN plusz betű kombinációt, amit másra is lehetne használni… Így marad a nyilas megoldás. A másik két blokkot ki is töröltem. Mentés, próba….

Egér funkciók beállítása

Igen, az I3wm alatt tökéletes működést adhat egy jól átgondolt egér rendszer. Az oldalukon teljes leírást találni erről is, mindenképp át kell azt is olvasni.

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

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

#Egér kill beállítása
bindsym --whole-window $mod+button2 kill bindsym button2 kill

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

A kommentek egyértelműek, így sok magyarázat nem kell ehhez. Nagy valószínűséggel használsz egeret, így ezekre is figyelj. Bár sokan ellenzik az egér használatát, vagy legalábbis az I3Wm vezérlésére, de sok esetben kényelmesebb ha ezek is be vannak állítva. Mentés, újratöltés, próba…
Szuper, legalább azt érezhetjük, hogy nem csak másolgatunk, hanem valamit csinálunk is.

Hangerő, lejátszás azaz multimédia gombok

A legtöbb billentyűzeten vannak plusz multimédiás gombok, amiket kár lenne parlagon hagyni. Ezek beállításáról már volt szó, így nem nagyon ismétlem magamat. Itt olvashatsz róla.

#multimédia beállításai:

bindsym XF86AudioLowerVolume exec "pactl set-sink-volume @DEFAULT_SINK@ -5%"
bindsym XF86AudioRaiseVolume exec "pactl set-sink-volume @DEFAULT_SINK@ +5%"
bindsym XF86AudioStop exec playerctl stop
bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle

Ahogy látni nagyon személyre szabott, hiszen egy programhoz rendeltem a legtöbbet. Ez is mutatja, hogy a másét rabszolgamód másolni nem érdemes. A playerctl programocskát telepíteni kell!

Tipp:

Mindenképp sorba menj, és ami nem kell, vagy saját beállítást teszel, de az alapban is ott van azt töröld mert egy újraindításkor jelzi a rendszer, ha valamelyik kombinációhoz duplán adtál meg valamit, vagy – a legtöbb esetben – ha hibás valami.

Lassan kész is van az I3Wm rendszer

Nagyrészt el is fogytak a másolgatni való beállítások gyorsbillentyűzés terén. Így én két komment blokkot hoztam létre, hogy a későbbiekben feltöltsem őket.

Az egyik neve Saját programok ahova azok az I3Wm alól indítandó programok kerülnek, amiket ebből a konfigból akarok indítani. Miért emelem ki ezt? Mert az általános billentyűparancsok az indításokhoz az sxhkd rendszer alá kerülnek. Így a gyorsbillentyűket egységesíteni tudom, hiszen az sxhkd tökéletesen működik XFCE alatt is, de ha felkerülne egy harmadik ablakkezelő is, akkor ott is menni fog. Egy beállítás több haszon!
A másik neve Egyéb beállítások ahova majd rendezetten felkerülnek azok a nem alapbeállítások, amiket én használok, amikhez egyéb program indítása is kell.

Az elsőbe bekerül egy bejegyzés azonnal:

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

Miért? Mert a legtöbb programot az sxhkd fogja kezelni. De ha nem indul el? Akkor terminál nélkül hogyan javítom a rendszert? Ez egy vész terv erre. Nem árt megjegyezni, hogy a mod+Shift+Return kombinációt az sxhkd-ban nem használhatom!

Mára még két lépést terveztem az I3Wm rendszer kapcsán

Bár lehetne még nagyon sok dolgot állogatni, de nem érdemes mindent egy lépésben megtenni! Az ember fárad, illetve lankad a figyelme, így hibázhat is. Vagy „csak” nem gondolja át a feladatot, és később ezekhez a már elvégzett beállításokhoz hozzá kell nyúlni. Nem ez a cél!

Nekem a bar nem kell!

Mivel nekem nem kell az erre utaló sorokat törölni kell! Nem túl nagy meló, a bar kezdetű blokkot ki kell szedni. Mentés, újraindítás.
Aki az i3Wm rendszer saját bárját szeretné használni, nem kell ezt törölnie. Én egy általam megszokott, szeretett és nagyon tökéletes panelt használok, a tint2-est.

A kinézet beállítása

Ez logikailag és praktikusság szerint is a legeslegutolsó lépés lenne. De én most mutatom be, mert eddig elvégzett munka jellemzően technikai, azaz vizuálisan nulla látszata van. Így az eddig elvégzett munka után megjutalmazhatjuk magunkat egy szórakoztatóbb, dekoratívabb művelettel.
Az alap szín beállítás, a keretek stb. kinézete jó. De lehet, hogy nekem nem tetszik.
Az alap változtatás nagyon egyszerű, hiszen valami ilyen blokk mindegyikbe van (ha nincs tedd bele…) és máris olyan a kinézet, amilyent szeretnél. A beállítása egyszerű a színkódokat, és lehet kis programot is használni. Te döntesz.

client.background       #2b3339
#class                 border  backgr. text    indicator child_border
client.focused          #81A1C1 #81A1C1 #D8DEE9 #a7c080   #81A1C1
client.focused_inactive #61AFEF #61AFEF #2E3440 #a7c080   #61AFEF
client.unfocused        #3B4252 #3B4252 #D8DEE9 #a7c080   #3B4252
client.urgent           #BF616A #BF616A #D8DEE9 #a7c080   #BF616A
client.placeholder      #2E3440 #2E3440 #D8DEE9 #a7c080   #2E3440

Ha megtetszett valamelyik (Magyarch, Axyl stb.) színösszeállítás akkor a blokkot bemásolod és semmi egyéb teendőd nincs.

Használhatsz olyan megoldást is, mint az EOS, ahol változókkal adják meg a színkódokat

######################################
#color settings for bar and windows #
######################################

#Define colors variables:
set $darkbluetrans  #08052be6
set $darkblue       #08052b
set $lightblue      #5294e2
set $urgentred      #e53935
set $white      #ffffff
set $black      #000000
set $purple     #e345ff
set $darkgrey       #383c4a
set $grey       #b0b5bd
set $mediumgrey     #8b8b8b
set $yellowbrown    #e1b700

#define colors for windows:
#class                  border      bground     text        indicator   child_border
client.focused          $lightblue  $darkblue   $white      $purple     $mediumgrey
client.unfocused        $darkblue   $darkblue   $grey       $purple     $darkgrey
client.focused_inactive $darkblue   $darkblue   $grey       $purple     $black
client.urgent           $urgentred  $urgentred  $white      $purple     $yellowbrown

Érdemes kicsit állogatni, vagy pár színt kipróbálni.

Oké, mára ennyi jutott. Folytatjuk, mert most csak a legfontosabb és alap beállításokat tettük meg. Addig gondolatban fussunk végig a beállásokon, és ha kell változtassunk. Amin érdemes elgondolkodni, hogy szeretnél olyan megoldásokat, amikről a Multimédiás gombok beállításánál említett cikk első felében olvashattál. Ha igen, akkor azt érdemes tanulmányozni, illetve a legvégén a konfigurációs fájlunknak van hasonló blokk, amiben az ablakméretet állítgatja.