Xmonad server mód beállítása. Bár nem tér el sokban egy egyszerű modul beüzemelésétől, de érdemes pár dologra odafigyelni. Mi is az a server mód? Nagyon egyszerűen fogalmazva, ha ez működik, akkor terminálból, vagy egyéb külső programból vezérelni lehet a Xmonad-ot. Így a legelterjedtebb felhasználást említve: a sxhkd billentyűkombinációkban.
Mielőtt az Xmonad server módot felrakod, gondold át, hogy kell-e ez neked. Ha sem szkriptben, sem pedig egyéb programból nem akarod elérni így az Xmonad rendszerét, akkor felesleges a server mód.
Alapismeretek kellenek!
Igen, az Xmonad konfigurálása összetett folyamat. Egyrészt ismerni kell azt, amit éppen installálsz. másrészt pedig a precíz, pontos munka elvárt. Illetve ismerni kell a saját ~/.xmonad/xmonad.hs állományod felépítését, mert eltérő lehet. A moduláris felépítés miatt egyes elemeket, kötéseket, funkciókat más-más formában helyezi el a konfigurációs állomány készítője, vagy akár te, és így nem minden esetben olyan könnyű követni a leírást.
Ha nem akarsz, nem tudsz ezzel foglalkozni, de kell egy Xmonad a server mód modullal, akkor használd a MagyArch konfigurációs fájljait, vagy ami még jobb, telepítsd és akkor nem kell semmit állogatni.
Az első lépés:
Lementjük biztos helyre a régi ~/.xmonad/xmonad.hs fájlt. Ez az alap beállítási fájl, amit ha visszateszel, és újra fordítod az Xmonad-ot, akkor visszaáll az eddigi állapot.
Xmonad server mód alap fájl elkészítése
Kell egy plusz fájlt készíteni, aminek két útja van. Az egyik a gyorsabb, és egyszerűbb. Felmész a MagyArch(xmonad) github oldalára és leszeded a kész fájlt. A neve xmonadctl.hs, és a ~/.xmonad könyvtárba kerül és futtathatóvá tesszük.
A másik sem bonyolult. A Xmonad server mód modul oldalán lévő lépéseket követed:
Készítesz egy üres fájlt. A neve xmonadctl.hs, és a ~/.xmonad könyvtárba kerül és futtathatóvá tesszük. Majd a fenti linken a modul leírásának elején lévő hosszabb kódrészletet belemásolod, és lemented.
Modul import:
import XMonad.Hooks.ServerMode
A ~/.xmonad/xmonad.hs elején a többi import közé kerül. Ahogy bármelyik egyéb modul is. Ha most látod először a ~/.xmonad/xmonad.hs fájlt, akkor is megtalálod.
Kell három olyan bejegyzés, aminek a helye már nem ennyire egyértelmű.
Keress egy olyan bejegyzést a ~/.xmonad/xmonad.hs állományban, hogy
main =
{
, handleEventHook =
}
Ha megtaláltad, akkor lehet, hogy ott lesz egy, vagy több név az egyenlőség mögött. Azokat ments le magadnak mert kellenek még.
Majd változtasd meg ilyenre:
main =
{
, handleEventHook = myEventHook
}
A többi sort, ami a {} közt van még, ne bántsd! Nekünk csak ez az egy sor a lényeg.
Majd a main blokk elé valahova beillesszük:
myEventHook = serverModeEventHook <+> serverModeEventHookCmd <+> serverModeEventHookF "XMONAD_PRINT" (io . putStrLn)
és a végére a kimentett bejegyzéseket is odaillesszük. Például nekem:
myEventHook = serverModeEventHook <+> serverModeEventHookCmd <+> serverModeEventHookF „XMONAD_PRINT” (io . putStrLn) <+> docksEventHook
Mit tettünk? A main, a fő bejegyzésben tárolunk sok olyan funkciót, azok módját, ami kell a Xmonad-nak. Ha egy funkciót, modult berakunk, akkor azt egyrészt importálni kell. Amit meg is tettünk. Majd meg kell mondani az Xmonad-nak, hogy az alap beállítást egy (vagy több) lehetőséggel bővítenénk.
A , handleEventHook = handleEventHook def <+> docksEventHook lefordítva emberi nyelvre nem más, mint megmondjuk a rendszernek, hogy kezelje az eseményeket az alap módon, és tegye hozzá a docksEventHook-ban meghatározott szabályokat is. Maga a felépítés nem is olyan bonyolult, ha ezt így értelmezed.
Ezt megtehetjük a main részben is, ahol a megfelelő sort bővítjük, azaz mögé írjuk az új bejegyzéseket.
Ez addig kényelmes, jó amíg pár van az adott kategóriában.
A másik út, ha megmondjuk az Xmonad-nak, hogy handleEventHook = myEventHook, azaz az eseményeket kezelő horgok, kötéseket a myEventHook-ban keresse. Majd a myEventHook-ban felsoroljuk azokat. Olyan, mint egy változó: definiálunk egy hosszú dolgot, majd arra egyszerű karakterlánccal hivatkozunk. Sokkal átláthatóbb a main rész, ha a hosszabb egységeket kiemeljük és azt egy külön sorban adjuk meg, mint egy saját változót. Illetve így kevesebb a hiablehetőség. A handleEventHook egyszerű felsorolás a jelen esetben, de a , keys = myKeys bejegyzést már feltétlen meg kell tenni, hiszen a myKeys-ben több, kevesebb – én közel hatvan – sort használunk. Aminél a behúzások fontosak, és ha több sublist-et is használ az ember, akkor ott lehet hiba.
A Xmonad server mód modul oldalán lévő lépéseket mi egyszerre tettük meg. A
main = xmonad def { handleEventHook = serverModeEventHook }
main = xmonad def { handleEventHook = serverModeEventHookCmd }
main = xmonad def { handleEventHook = serverModeEventHookF „XMONAD_PRINT” (io . PutStrLn) }
három sor kezdetben kicsit megtévesztő, de most már tudjuk, hogy nem csak simán bemásoljuk, hanem értelmezzük is a leírtakat. Ami lefordítva annyi: add hozzá az handleEventHook-ot kezelő sorhoz az adott karaktersorozatot. Ott, és úgy, ahogy az nálad kell. A leírások abból indulnak ki, hogy értesz hozzá, és az alap, változatlan konfigurációból indulnak ki, az ahhoz kellő változtatásokat írják le.
Ha mindent precízen megtettünk, már csak pár lépés van a Xmonad server mód aktiválásához.
A ~/.xmonad könyvtárba belépünk. Majd lefuttatjuk ezt:
ghc -dynamic ./xmonadctl.hs
Igen, ez más mint amit a modul oldalán látsz. Ez a helyes.
Lefut, vélhetően hiba nélkül. Ezután már a szokott módszerrel:
xmonad --recompile
xmonad --restart
Ha mindent jól tettünk, akkor ez is hiba nélkül lefut.
Ha eddig nem tetted volna meg a ~/.xmonad könyvtárat tedd bele a PATH-ba! Ez azért fontos, mert egyébként az xmonadctl parancsokhoz a teljes elérési utat meg kellene adni, ami nem túl kényelmes.
Majd futtass egy tesztet:
xmonadctl 0
és a ~/.xsession-errors fájlba nézz bele. ahol a parancslistát megkapod:
1 – view”1″
2 – shift”1″
3 – view”2″
..…
Ha ezt a részt kimásolod magadnak, akkor nem kell a xmonadctl-hoz a kapcsolókat szövegesen megadni, elég ha a számukat beírod. Azaz xmonadctl view”1″ helyett xmonadctl 1 beírásával éred el ugyanazt.
A terminálban újabb teszt:
xmonadctl kill
Ha a terminál bezárul, már működik is.
Jó Xmonad server mód használatot.
Érdemes – mielőtt nekiállsz – ezt a videót is megnézni!