Az sxhkd (Simple X Hotkey Daemon) egy rendkívül hasznos és könnyűsúlyú billentyűparancs-kezelő program Linux rendszerekhez, amelyet kifejezetten az X Window System (X11) környezetben való használatra fejlesztettek ki. A programot Bastien Dejean (a bspwm ablakkezelő fejlesztője) alkotta meg, és célja, hogy egyszerű, de rugalmas módon lehessen billentyűkombinációkat (hotkey-eket) definiálni és ezekhez parancsokat társítani. Az sxhkd különösen népszerű a minimalista és testreszabható ablakkezelőket (például bspwm, i3, vagy dwm) használók körében, mivel lehetővé teszi a billentyűzet-alapú munkafolyamatok hatékony kezelését.
Kiemelném, hogy a bspwm fejlesztője készítette, ami garantálja, hogy jól összerakott programot kapunk, hiszen ha nem működne valamiért az a bspwm-re is rossz fényt vetne. Nyolc éve használom valami szinten a hotkey kezelőt, de soha nem volt vele gondom.
Az sxhkd bemutatása
Az sxhkd egy háttérfolyamat (daemon), amely figyeli a billentyűzet (és opcionálisan az egér) eseményeit, majd az előre meghatározott konfiguráció alapján végrehajtja a hozzájuk rendelt parancsokat. A program konfigurációs fájlja egyszerű szöveges formátumú, általában ~/.config/sxhkd/sxhkdrc néven található, és lehetővé teszi a felhasználók számára, hogy saját igényeik szerint állítsák be a billentyűparancsokat. Az sxhkd erőssége a modularitásában és a több lépéses billentyűkombinációk támogatásában rejlik, ami különösen nagyfokú testreszabhatóságot biztosít.
A program nem függ egyetlen ablakkezelőtől/környezettől sem, így bármely X11-alapú környezetben használható, legyen szó tiling (csempéző) vagy hagyományos ablakkezelőkről. Az sxhkd parancsokat a rendszerhéjon (shell) keresztül futtatja, ami azt jelenti, hogy gyakorlatilag bármilyen shell-parancsot vagy szkriptet társíthatunk egy billentyűkombinációhoz. Ez a tulajdonság előnyt jelent, ha valaki komolyabban paraméterezett, összetett pancsokat akar futtatni. Ezekkel több asztali környezet gyári billentyűkezelője elbukik.
Főbb jellemzők
- Egyszerű szintaxis: A konfigurációs fájl könnyen olvasható és szerkeszthető.
- Kombinált láncok támogatása: Több billentyűkombinációt lehet egymás után láncolni egy parancs futtatásához.
- Módosítók és kulcsok: Támogatja a módosító billentyűket (pl. Super, Alt, Ctrl) és az X11 által felismert kulcsokat (keysym-eket).
- Egérbillentyűk: Az egérgombok is használhatók hotkey-ként.
- Újratölthető konfiguráció: A SIGUSR1 jelzés küldésével menet közben újratölthető a konfiguráció anélkül, hogy a programot újra kellene indítani.
- Környezeti változók: A parancsokban használhatók a shell környezeti változói.
- Prioritások: Az első illeszkedő szabály fut le!
Telepítés
Az sxhkd telepítése egyszerű, és a legtöbb Linux disztribúció csomagkezelőjével elérhető. Például:
- Arch Linux: sudo pacman -S sxhkd
- Ubuntu/Debian: sudo apt install sxhkd
- Fedora: sudo dnf install sxhkd
Telepítés után érdemes létrehozni a konfigurációs fájlt, ha az még nem létezik:
mkdir -p ~/.config/sxhkd touch ~/.config/sxhkd/sxhkdrc
Konfigurációs fájl szerkezete
Az sxhkdrc fájlban minden sor vagy egy billentyűkombinációt (hotkey) vagy egy parancsot definiál. A szintaxis a következő:
- Ha a sor #-tal kezdődik, az komment.
- Ha a sor egy vagy több szóközzel kezdődik, az egy parancs.
- Egyébként a sor egy billentyűkombináció definíciója.
A billentyűkombinációk alap formátuma:
MODIFIER + KEYSYM PARANCS
- MODIFIER: Módosító billentyűk, pl. super, alt, ctrl, shift.
- KEYSYM: A billentyű neve, amelyet az xev paranccsal lehet meghatározni (pl. Return, a, F1).
- PARANCS: A futtatandó shell-parancs.
Példák az sxhkd alap használatára
Az alábbiakban néhány gyakorlati példát mutatok az sxhkdrc fájlban használható beállításokra.
Terminál indítása
Nyissuk meg a terminált a Super + Enter kombinációval:
super + Return alacritty || kitty
Ebben az esetben az alacritty terminál indul el, de helyettesíthető bármely más terminállal, pl. kitty, ha éppen nincs telepítve. Sok bosszankodástól megóvja az embert ez az alternatív lehetőség.
Alkalmazások indítása
Indítsuk el a Firefox böngészőt a Super + Shift + f kombinációval:
super + shift + f firefox
Látható, hogy több módosítót is használhatsz!
Hangerőszabályzás
A hangerő növelése, csökkentése és némítása a pamixer segédprogrammal:
super + Up pamixer -i 5 super + Down pamixer -d 5 super + m pamixer -t
- pamixer -i 5: Növeli a hangerőt 5%-kal.
- pamixer -d 5: Csökkenti a hangerőt 5%-kal.
- pamixer -t: Váltás a némítás és a hang között.
Ahogy látni, nem okoz neki gondot, ha nincsenek külön sorban a parancsok.
Több parancs egy billentyűhöz
Használjunk egy billentyűkombinációt több parancs párhuzamos futtatására:
super + s scrot -s /tmp/screenshot.png && notify-send "Képernyőkép kész!"
Ez a kombináció egy képernyőképet készít a kiválasztott területről, majd egy értesítést küld. A parancsok összefűzésére használható megoldásokról itt olvashatsz. Figyeld meg: nem kell alapesetben az egész parancsot egyes vagy kettes zárójelbe tenni, hanem simán beírni, mint a terminálba.
Egy hasznos megoldás!
Terminál indítása (ha az Alacritty nincs telepítve, akkor xterm)
super + Return alacritty || xterm
Konfiguráció újratöltése
Az sxhkd konfigurációjának menet közbeni újratöltése:
super + Escape pkill -USR1 -x sxhkd
Logikusan egy szerkesztés után újra kell tölteni a programot, hogy érvényre jussanak a módosítások.
Ha csak ennyit tudsz az sxhkd használatáról, már nagyon jól működő rendszert is össze tud rakni. De nem merül ki a lehetőségek tárháza ennyiben!
Tipp:
A bemutatott példák szintaktikailag teljesen jók, egy alap konfigurációban így is lehet használni. Ha komolyabb parancsot akarunk összerakni, akkor már kommentelni kell. Mindenképp!
#Firefox indítása: super + shift + f firefox
Egér használata, példákkal
Az sxhkd nemcsak billentyűkombinációkat, hanem egérgombokat is képes kezelni hotkey-ként, ami különösen hasznos lehet, ha az egérrel szeretnénk gyors műveleteket indítani vagy a billentyűzet és egér kombinációját használni. Az egérgombokat az X11 rendszerben button1, button2, button3, stb. néven azonosítják, ahol:
- button1: Bal egérgomb.
- button2: Középső egérgomb (görgő lenyomása).
- button3: Jobb egérgomb.
- button4 és button5: Görgő fel/le (ha támogatott).
Az sxhkd konfigurációs fájljában (sxhkdrc) az egérgombokat ugyanúgy definiálhatjuk, mint a billentyűket, önmagukban vagy módosító billentyűkkel kombinálva. Az alábbiakban bemutatok néhány példát az egérgombok használatára az sxhkd-ban.
Logikusan csak olyan egér kattintás kombinációt használjunk, ami máshol nem használatos.
Egyszerű egérgomb-parancs
A bal egérgomb lenyomására indítsunk egy terminált:
button1 alacritty
Működés: Amikor a bal egérgombot lenyomjuk (bárhol az X11 környezetben), az alacritty terminál elindul. Ez önmagában ritkán praktikus, mert minden kattintás elindítaná, ezért általában módosítóval kombináljuk.
Egérgomb módosítóval
A Super billentyű lenyomása mellett a bal egérgomb futtasson egy parancsot:
super + button1 notify-send "Bal kattintás Super-rel"
Működés: Ha a Super billentyűt lenyomva tartjuk, és közben a bal egérgombot megnyomjuk, egy értesítés jelenik meg. Tesztelésre ideális, mert így biztosan nem indul el semmi, csak értesítést küld a rendszer.
super + button1 kitty
Ha a Super billentyűt lenyomva tartjuk, és közben a bal egérgombot megnyomjuk, elindul a kitty. Ez az egyszerű módosító + egér parancs összetétel a legegyszerűbb és legáltalánosabb megoldás. Nagyon hasznos, hiszen a legtöbb asztali környezeteben a módosítók és az egérkattintás kombináció nem gyakori, így ütközések sem lesznek.
A fenti nagyon faék egyszerűségű kombinációk célja nem volt más, csak ennyi: bemutatni, hogy egy módosító és egérkattintás kombó semmiben nem összetettebb, mint egy sima módosító és egy betű. De kiterjeszti a lehetőségeket, kényelmesebbé teszi a munkát.
Kivágás, beillesztés egérrel
Rendeljünk különböző parancsokat az egérgombokhoz a Ctrl módosítóval:
`ctrl + button1 xdotool click 1
ctrl + button2 xdotool key ctrl+c
ctrl + button3 xdotool key ctrl+v
Működés:
- Ctrl + bal gomb: Szimulál egy bal kattintást (pl. kijelöléshez).
- Ctrl + középső gomb: Másolás (Ctrl+C).
- Ctrl + jobb gomb: Beillesztés (Ctrl+V).
Ez, illetve ennek a variációi nagy segítség lehet olyanoknak, akik nem tudják használni, vagy nem kedvelik, kényelmetlennek tartják a megszokott Ctrl+C/Ctrl+V párost.
Fontos megjegyzések egérnél
- Kontextus: Az egérgombok működése az X11 környezetben globális, tehát az aktuális fókusz vagy ablak nem befolyásolja őket, hacsak nem használunk szkripteket a kontextus ellenőrzésére. Kerüljük az olyan műveleteket, amik egy adott könyvtárra vonatkoznának.
- Ütközések: Ha az egérgombokat módosító nélkül definiáljuk, az ütközhet az ablakkezelő vagy más alkalmazások alapértelmezett működésével (pl. kattintásokkal). Ezért érdemes mindig módosítót (pl. Super, Alt) használni.
- Tesztelés: Az xev paranccsal ellenőrizheted, hogy az egérgombok helyesen lettek felismerve (pl. ButtonPress event-nél látható a gomb száma).
Kombináció láncok
A chord chain (vagy billentyűsorozatok) az sxhkd egyik legerősebb és legérdekesebb funkciója, amely lehetővé teszi, hogy egy kezdeti billentyűkombinációt további billentyűlenyomások kövessenek, így hierarchikus vagy kontextusfüggő parancsokat hozhatunk létre. Ez különösen hasznos, ha sok parancsot szeretnénk egy közös "prefix" alá rendezni, vagy ha egy billentyűkombinációval többféle műveletet szeretnénk elérni attól függően, hogy mit nyomunk meg utána. Az alábbiakban részletes példákat mutatok az alkalmazására. Itt is faék egyszerűségű megoldásokat mutatok, hiszen a te dolgod, hogy mit indítasz. Az elv a fontos, és a lehetőség.
A chord chain működése sxhkd alatt
A chord chain lényege, hogy az sxhkd egy adott billentyűkombináció lenyomása után "várakozik" egy további billentyűre, és csak akkor hajtja végre a parancsot, ha a teljes sorozat befejeződött. Ha a sorozat nem teljesül (pl. nem nyomunk meg további billentyűt), az sxhkd egy időzítés után visszaáll alapállapotba (timeout általában 1 másodperc, de ez konfigurálható).
A szintaxis egyszerű:
KEZDŐ_KOMBINÁCIÓ KÖVETKEZŐ_KOMBINÁCIÓ PARANCS
vagy rövidebb formában:
KEZDŐ_KOMBINÁCIÓ + KÖVETKEZŐ_BILLENTYŰ PARANCS
Itt már kiemelten fontos a kommentek, megjegyzések használata. Az ilyen láncok formátuma nagyon szabad, azt válaszd, amit át is látsz!
Alkalmazások indítása egy prefix alatt
Tegyük fel, hogy a Szuper + a kombinációval egy "alkalmazás menüt" szeretnénk indítani, ahol további billentyűkkel választhatunk programot:
super + a super + t alacritty super + f firefox super + e gedit
Működés:
- Ha megnyomjuk a Super + a-t, az sxhkd várakozik.
- Ha ezután megnyomjuk a t-t, az alacritty terminál indul.
- Ha az f-et nyomjuk, a Firefox indul.
- Ha az e-t nyomjuk, a Gedit szövegszerkesztő indul.
Átlátható, strukturált szerkezet.
Alternatív, rövidebb forma:
super + a + t alacritty super + a + f firefox super + a + e gedit
Nagy előnye, hogy a konfigurációs állomány sima szöveg, így ABC sorrendbe rendezhető az ilyen megoldás, amivel átlátható lesz, illetve az ismételt kötéseket észrevehetjük.
Hangerőszabályzás láncolva
Használjuk a Super + v kombinációt hangerőszabályzásra:
super + v u pamixer -i 5 d pamixer -d 5 m pamixer -t
Működés:
- Super + v után:
- u (up): Növeli a hangerőt 5%-kal.
- d (down): Csökkenti a hangerőt 5%-kal.
- m (mute): Némít vagy visszakapcsolja a hangot.
Már látni, hogy az sxhkd nem kényes a szintaktikára, az elfogadható formátum sokféle.
Több szintű lánc
Az sxhkd támogatja a többszintű láncokat is. Például egy "rendszer" menü:
super + r p poweroff r reboot s super + s + l slock super + s + h systemctl hibernate
Működés:
- Super + r után:
- p: Kikapcsolja a gépet.
- r: Újraindítja a gépet.
- s: Egy almenüt nyit, ahol:
- l: Zárolja a képernyőt (slock).
- h: Hibernálja a rendszert.
Az ilyen több mélységű láncnak hátránya, hogy nem látjuk a "menüt" meg kell jegyezni mindent. Ha komolyabb menürendszert akarsz összerakni nem feltétlen az sxhkd a legszebb megoldás.
Egér és billentyűzet kombinációja
super + e button1 kitty button3 nemo
Működés:
- Super + e után:
- Bal egérgomb (button1): Kitty indul.
- Jobb egérgomb (button3): Nemo indul.
Tippek a láncokhoz
- Időzítés: Az sxhkd alapértelmezett timeout-ja 1 másodperc. Ha lassabban gépelsz, ezt növelheted a -t opcióval az sxhkd indításakor (pl. sxhkd -t 2 2 másodpercre állítja).
- Ütközések elkerülése: Ügyelj arra, hogy a láncok ne ütközzenek más billentyűkombinációkkal az sxhkdrc-ben.
- Tesztelés: Az sxhkd -c sxhkdrc paranccsal tesztelheted a konfigurációt, a hibák pedig a terminálban vagy a logfájlban jelennek meg.
A chord-láncok az sxhkd-ban lehetővé teszik, hogy egyetlen billentyűkombinációval komplex, hierarchikus parancsstruktúrát építsünk fel. Ez különösen hasznos olyan esetekben, amikor sok parancsot szeretnénk logikusan csoportosítani, vagy ha egy minimalista, billentyűzet-centrikus munkafolyamatot alakítunk ki. A fenti példák jól mutatják, hogy mennyire sokoldalúan alkalmazható ez a funkció és milyen nagy szabad kezet kapsz a formátumban. De - és itt fontos a de - nagy káoszt is teremthetsz, ah nem rendszerezetten készíted el a kombinációkat!
Pár kiegészítő
Ha scriptet szeretnél futtatni, vagy olyan programot, programokat amik nem a rendszer szerves része, akkor érdemes a teljes elérési utat megadni. Bár egy scriptet gond nélkül be tudsz tenni egy olyan saját könyvtárába, amit megadsz a PATH-ba (itt olvashatsz róla) és elvileg azt a rendszer is látja, de jobb a békesség!
super + shift + f /home/laci/bin/teszt.sh
Ez természetesen igaz az appimage állományokra is, így biztosan megtalálja és az a verzió indul el, amit akarsz.
Ez felhasználható arra is, hogy ugyanazon program eltérő verziói is futtathasd:
super + w f firefox r home/laci/Letöltések/firefox/firefox m flatpak run org.mozilla.firefox
- Super + w után:
- f: a tárolóból telepített
- r: letöltött és kicsomagolt bináris
- m: a flathub-os verziójú firefox indul.
Érdemes az sxhkd-t használni?
Mellette
Az sxhkd használata a Cinnamon saját billentyűkombináció-kezelője helyett több okból is előnyös lehet, attól függően, hogy milyen igényeid vannak a billentyűparancsok testreszabása és kezelése terén. Nézzük meg a főbb érveket:
-
Rugalmasság és testreszabhatóság:
Az sxhkd egy rendkívül egyszerű, de hatékony eszköz, amely lehetővé teszi a billentyűparancsok teljes körű testreszabását egy könnyen olvasható és szerkeszthető konfigurációs fájlban (sxhkdrc). Ezzel szemben a Cinnamon beépített billentyűkombináció-kezelője grafikus felületen keresztül működik, ami kényelmes, de kevésbé rugalmas, ha komplexebb parancsokat vagy szkripteket szeretnél hozzárendelni egy-egy billentyűhöz. -
Függetlenség a környezettől:
Az sxhkd egy X11-alapú hotkey daemon, amely nem kötött egyetlen asztali környezethez sem, így Cinnamonon kívül más rendszerekben (pl. tiling ablakkezelők, mint a bspwm) is használható. Ha gyakran váltasz különböző környezetek között, az sxhkd konzisztens élményt nyújthat. -
Gyorsaság és alacsony erőforrásigény:
Az sxhkd egy könnyű, minimális erőforrást igénylő daemon, amely gyorsan reagál a billentyűleütésekre. A Cinnamon saját kezelője, mivel az asztali környezet részeként fut, több erőforrást használhat, és néha lassabban reagálhat, különösen, ha a rendszer terhelt. Tapasztalat... -
Komplex parancsok támogatása:
Az sxhkd lehetővé teszi, hogy egyetlen billentyűkombinációhoz több parancsot, szkriptet vagy akár feltételes logikát rendelj. Például egy billentyűvel elindíthatsz egy alkalmazást, majd futtathatsz egy értesítést is. A Cinnamon kezelője ilyen szintű funkcionalitást nem kínál natívan tudtommal. -
Hibaelkerülés és hibakeresés:
Bizonyos esetekben a Cinnamon billentyűkezelője hibásan működhet, például nem reagál, ha egy adott alkalmazás fókuszban van. Az sxhkd függetlenül fut az asztali környezettől, így ilyen problémák elkerülhetők vele. -
**Chordok és speciális kötések:
Az sxhkd támogatja az úgynevezett chord chain-t, vagyis több lépéses billentyűkombinációkat, ami különösen hasznos lehet, ha sok parancsot szeretnél egy prefix alá szervezni. A Cinnamon kezelője ilyen kifinomult lehetőségeket nem biztosít.
Ellene
- Ha csak egyszerűbb parancsokat (pl. alkalmazásindítás, ablakkezelés) használsz, és nem akarsz konfigurációs fájlokkal bíbelődni.
- Ha előnyben részesíted a grafikus felületet a szöveg alapú szerkesztés helyett.
- Ha teljes mértékben a Cinnamon ökoszisztémáján belül akarsz maradni.