Xmonad – pár kezdeti gondolat

Xmonad
Xmonad

Xmonad. Kipróbáltam, és megtetszett az Xmonad csempézős ablakkezelő. Az okokat, és a tulajdonságait akár az Xmonad oldalán, akár ebben a videóban megtudhatod: sokat tud, konfigurálható, de a beállításai nem egyszerűek, mert nem az I3wm, vagy a bspwm mintájára, hanem egy programozási nyelven kell konfigurálni. Ami nem egy kezdő szintű, de tanulható, legalábbis annyi, ami nekünk kell megtanulható.

Az Xmonad konfigurálása a saját könyvtáradban található ./xmonad/xmonad.hs szerkesztésével történik, majd újra kell fordítani, és újraindítani az Xmonad-ot. Ami nem olyan szörnyű, mint ahogy hangzik! A terminálban xmonad - -recompile, majd aha hiba nélkül lefutott, akkor a xmonad - -restart paranccsal tehető meg. Igen! én a terminálos megoldást kedvelem. Bár a legtöbb konfigurációban ott van egy gyorsbillentyű kombináció, de nekem jobban bejött a terminálos megoldás.
Akkor ír ki hibát, ha valami gond van. Ilyenkor sincs nagy gond, mert kiírja, hogy mi a gond és a sort, amiiben az megtalálható.
Annak, hogy egy darab fájlban konfigurálhatjuk a rendszert van egy nagy előnye: a fájl simán lecserélhető, és egy újrafordítás után már az új konfiguráció él. Így egyrészt, ha már teljesen tönkretetted a konfiguráció, egy mentettre visszatérhetsz, másrészt az interneten található sok-sok konfigurációt viszonylag egyszerűen kipróbálhatod.

Xmonad teszt konfiguráció

Én a Magyarch alapkonfigurációval kezdtem, de most a minta nem ez lesz. Ez egy teszt, próbálgatásra és a lehetőségek felderítésére összerakott konfiguráció. Amit mindenképp tudni kell, hogy én nem használom a xmobar-t, így annak a beállítása nem lesz feltétlen jó.
A legegyszerűbben úgy tesztelheted a konfigurációt, hogy feltelepíted a Magyarch xmonad verzióját (jelenleg a teszt ágban van), vagy simán egy xmonad wm-et a már meglévő ablakkezelőd mellé. Majd egy másik felhasználót létrehozol és azon teszteled a dolgokat. Így mindig lesz egy felhasználód, az eredeti, amihez vissza tudsz tárni és az mindenképp működik a régi ablakkezelőddel.
Majd a meglévő xmonad.hs-t felülírod a tesztelésre szánt konfigurációval, újrafordít, és…

A fájl itt letölthető: xmonad.hs.tar

Ami elengedhetetlen

Az xmonad oldalát nézd át, ott elég jó leírások vannak a modulokról. Bár lehetne több példa is a modulok leírásában, de nem szabad elfeledni: ez programozóknak készült. A google sokat tud segíteni.

Példa konfigurációk keresése nézegetése, kipróbálása.

A kettőből együtt jön össze a Te saját konfigurációd. Én jellemzően egy-egy konfigurációból ollóztam össze a saját tesztemet. Ami járható út, ha mellette a leírásokat is értelmesen olvassa az ember.

Az Xmonad konfiguráció komoly precizitást kíván, mert nagyon kényes a pontos szintaktikára, vesszők, space-k és egyéb látszólag kis dolgok miatt hibát ad. Az első pár ilyen hibakeresés után már belerázódik az ember.

Mindig legyen mentésed. Én ezt a módszert használom, így minden megnyitás után egy mentés készül.

A kommentek itt nem a # jellel, hanem két – jellel kezdődnek. Az egyik leghasznosabb eszköz! Ha kísérletezem, akkor egy sor átírása előtt azt kikommentelem, majd lemásolom a következő sorba, és azt szerkesztem. Ha nagyon elrontom, csak kiveszem a kommentet az eredeti elől, és a rossz sort törlöm. Így mindig visszaállítható a szerkesztett sor.

Amit tudnod kell: alap használatot ismerned kell. Mert itt nem arról beszélünk, hogy XYZ gombra mi történik, elvárás, hogy ne okozzon gondot az Xmonad alap használata. Fontos, hogy valóban csak felvillantok egy-egy lehetőséget, minimális bemutatási céllal.

Illetve én a nem kellő, törlésre kijelölt részeket, gyorsbillentyűket stb. is kikommentelem egy ideig, mert hátha mégis vissza akarom állítani. Majd ha valóban nem kell, akkor egyben kitörlöm őket, és átláthatóbb lesz a fájl.

Modulok

Az új lehetőségekhez be kell importálni a megfelelő modult. A konfigurációs fájl első részben találod meg ezt a részt. Mindig a leírásnak megfelelően, pontosan kell megadni a nevét. A legjobb, ha azzal kezded, hogy a modul leírását átfutod, és ott az elején megtalálod a pontos nevét és azt másolod be.
Ha idegen konfigurációból másolsz egy-egy részt erre figyelj. Modulok hiányát azonnal észleli a fordítás és szól, ha valamit nem talál.

Pár érdekesebb lehetőségre hívnám fel a figyelmet, ami nem feltétlen van benne az alapkonfigurációban.

Rések, azaz az Xmonad.Layout.Gaps modul

Ez nem azt szabályozza, mint az I3gaps, azaz nem az ablakok közti pár pixelnyi távot, hogy az jobban nézzen ki. Ez a monitor keretétől való távot szabályozza. Bár nem feltétlen kell, de nekem a tint2-es panel helyét érdemes volt megadni a felső éltől, mert az Xmonad folyamatosan elfedte a panelomat az ablakokkal. Bár biztosan lehet más megoldást is találni, de nekem ez jelenleg megfelel. Ha megnézed a konfigurációmat élesben is ez a felső 30 pixelnyi sáv. A beállítása egyszerű:
a myLayout szakaszba kerül: gaps [(U,30), (R,3), (L,3)] $ megadásával. A leírása egyszerű, nem is lehet lerontani.

Én szeretem, ha vannak fülek, úgy mint az I3wm konfigurációban. Erre is, és még nagyon sok elrendezésre is van lehetőség.

Fülek, azaz az Xmonad.Layout.Tabbed modul

A modul sokféle fül elrendezést ad, érdemes kipróbálni többet is. Én ezzel szeretném szemléltetni a konfigurációs lehetőséget. Ha megnézed a konfigurációs fájlomat, akkor a myLayout részben találod az ablakelrendezést. A felépítése egyszerű, felsoroljuk az elrendezéseket, ahogy azt az adott modul leírásában van. Több tiling ablakkelezővel ellentétben itt ugyanolyan elrendezéshez többféle beállítást is használhatsz, itt kétféle füles megoldást is felvettem a sorba: alul, illetve felül füles megjelenítést is.

noBorders (tabbed shrinkText myTabConfig)
||| noBorders (tabbedBottom shrinkText myTabConfig1)

A másik nagyszerű Xmonad koncepció, hogy majdnem mindenhez adhatsz saját beállítást. A példa a kétféle tabbed ablaktípushoz kétféle (myTabConfig1 és myTabConfig) szín-összeállítást rendel.
Bár a konfiguráció nagyon egyszerű, de kifejezetten figyelj, hogy azonos nevű konfigurációs blokk nem lehet és ha hivatkozol egy beállításnál pld. a myTabConfig2-re, akkor az valóban el is készüljön.

Az elején érdemes minél többféle ablaktípust, kinézetet kipróbálni, azokat testre szabni, de éles munkában nem feltétlen kell ennyi…

Fontos: a myLayout stb. megadása elvárhatja, hogy a main részben megadd az Xmonad-nak, hogy azt használja, azaz tudjon róla, hogy abba írod a saját dolgaidat. Így lehet, hogy ehhez hasonló
, layoutHook = myLayout megoldásokat kell alkalmazni.

Lebegő ablakokat az Xmonad nagyon jól kezeli. Kiemelkedően kényelmes, és szerintem jól használható pld. a Magyarch alapkonfigurációjában beállított megoldás.
Ami a lebegő ablakoknál időnként zavar, hogy minid felül lebegnek, és jó lenne visszatenni a normál helyre őket.

Lebegő ablak visszaminősítése: Xmonad.Actions.SinkAll

Bár van ennél összetettebb hasonló modul, de én ezt találtam meg elsőnek, így ezt használom. A használata egyszerű, meg kell egy gyorsbillentyűt: , ((modm, xK_u), sinkAll) és egy újrafordítás után…

— Push window back into tiling
, ((modm, xK_t ), withFocused $ windows . W.sink)

kombóval megteheted ugyanezt, egy másik modul  (XMonad.Actions.WithAll) segítségével. Ha az már importált, akkor az többet tud, és nem kell az előbb leírt modul. Köszönet a kiegészítésért XeonCpu-nak.

A Magyarch konfigurációban a

Bár a gyorsbillentyűk megadása nem egy agysebészet, de a formája kicsit eltér a megszokottól. Alapesetben nem jelent gondot, de lelkes emberek készítettek egy modult erre is.

Emberibb gyorsbillentyű megadás: Xmonad.Util.EZConfig

Ez is egy nagyon összetett eszköz, aminek egy funkcióját használom. A konfigurációs fájl végén látható egy rész a main részben:

`additionalKeysP`
[
("M1-", spawn "rofi -combi-modi window,run,drun -show combi -modi combi")
, ("C-M1-", spawn "rofi -show run")
, ("M-q", kill)
, ("M-a", spawn "audacity")
, ("M-v", namedScratchpadAction scratchpads "pavucontrol")
, ("M-S-q", io (exitWith ExitSuccess))
]

Gondolom egyértelműen egyszerűbb a megadás… Szuper.

A scratchpad egy nagyon hasznos eszköz. Az I3wm is használja, annál van egy kis programocska, amit bemutattam. Azzal igen jól és gyorsan lehet ezt a funkciót használni, beállítani.

A scratchpad: Xmonad.Util.NamedScratchpad modul

Itt valóban igaz, hogy a felszínt, vagy még azt sem érintem. Csak egy alap megoldást mutatok be, amiről itt olvastam.

Mivel a fenti cikket mindenki el tudja olvasni csak az alap lépéseket írom le.
A modul importja után a main részbe hozzáadtam a manageHook sorhoz azt, amit a leírás is említ. Ezt általánosságban is érdemes megjegyezni, hogy ha van ilyen elvárás a leírásban azonnal tedd meg.

Majd elkezdtem (a teszt konfigban egy van) összeszedni a programokat, amiket így akarok használni. Ehhez a fenti cikk sablonját használtam, ami alap beállítású és egyszerű.
scratchpads :: [NamedScratchpad]
scratchpads = [
NS "pavucontrol" "pavucontrol" (className =? "Pavucontrol")
(customFloating $ W.RationalRect (1/4) (1/4) (2/4) (2/4))
]

A nevét, azaz a className a xprop | grep WM_CLASS parancs terminálba való kiadása, és a megjelenő kereszt kurzor a kérdéses ablak fölé mozgatása után derül ki. Bár a legtöbb esetben sejthető lesz, hogy a név mi, de érdemes mindig lekérdezni.

A W.RationalRect (1/4) (1/4) (2/4) (2/4) adja meg, hogy hol jelenjen meg, milyen méretben. Ha ezt a megadási módot szeretnéd kell az XMonad.StackSet as W modul is. Nagyon hasznos tud lenni, ha képernyő arányaihoz akarod igazítani az ablak dimenzióját. Az első két érték az x és y tengelyen a kezdő pontot adja meg – a képernyő arányában. A másik kettő pedig a méretet, ami annyit tesz a jelen értékeknél, hogy az 1280×720-as monitoron ennek a fele 640×360 pixel lesz az ablak. Ez a felbontás szerint változó, de maga az elhelyezkedés mindig középre kerül. Ezt, ha pixelben adjuk meg a koordinátákat nem lenne ennyire egyszerű. Szuper megoldás.

Már csak egy sima gyorsbillentyű kell:
("M-v", namedScratchpadAction scratchpads "pavucontrol")

és a Windows + v lenyomása után előugrik középen az alkalmazás, a második lenyomására pedig háttérbe kerül. Ahogy az kell.
Érdemes az olyan alkalmazásokat így megoldani, amiket gyorsan elő szeretnél hívni, majd háttérbe dobni, ha már nem kell. Nem kell mozgatni, rendezni az ablakokat (ez sem más, mint egy sima lebegő ablak), hanem a billentyűről irányíthatod az el és visszadobást. Igencsak gyors, nem szól bele a meglévő ablakok elrendezésébe.

Mára ennyi.