A mai versenyzőnk a Spectrwm egy könnyűsúlyú pálcikawm, amely minimalizmust, hatékonyságot és testreszabhatóságot kínál. Alapvetően billentyűzet-centrikus, így tökéletes azoknak, akik szeretik a tiszta, rendes munkafelületet anélkül, hogy felesleges GUI elemekkel küzdenének. ;)

Autotiling rendszer, tehát az ablakokat automatikusan helyezi el a beállított elrendezés szerint, természetesen kezeli a lebegő ablakokat is. Saját panellel rendelkezik, ezt külön szkriptben konfiguráljuk (baraction.sh), ill. az automatikusan induló programokat is külön hívjuk meg (autostart.sh).
Maga a Spectrwm is egyszerű szöveges konfigurációs állományból vezérelhető, nézzük is az enyémet (~/.config/spectrwm/spectrwm.conf):
# # Spectrwm Berus Konfigurációs Fájl # # --- Alapvető Ablakkezelő Beállítások --- workspace_limit = 5 # Az elérhető virtuális asztalok száma (1-9) focus_mode = default # Alapértelmezett fókuszálási mód (követi az egeret) focus_close = previous # Ha bezársz egy ablakot, a fókusz az előzőleg használtra ugrik focus_close_wrap = 1 # Ha nincs előző ablak, a lista végére ugrik focus_default = first # Az új ablakok az első helyre kerülnek a struktúrában spawn_position = next # Az új ablakok az aktuális mellé/mögé nyílnak meg warp_focus = 1 # Ha ablakot váltasz billentyűvel, a fókusz azonnal oda ugrik warp_pointer = 1 # Az egérmutatót is az aktív ablak közepére ugrik # A látható asztalok bevétele a váltásba a ws next/prev (következő/előző asztal) parancsoknál. cycle_visible = 1 # Az elrendezések (layouts) körforgásának sorrendje a MOD+Space megnyomásakor. layout_order = vertical,horizontal,max,floating # --- Ablakdekoráció és Kinézet --- border_width = 2 # Az ablakok keretének vastagsága pixelben color_focus = rgb:cb/a6/f7 # mauve (aktív ablak kerete) color_focus_maximized = rgb:fa/b3/87 # peach (maximalizált aktív ablak) color_unfocus = rgb:45/47/5a # surface0 (inaktív ablak kerete) color_urgent = rgb:f3/8b/a8 # red (sürgős ablak kerete) # Gaps (Ablakok közötti távolságok) region_padding = 8 # Távolság a képernyő széle és az ablakok között tile_gap = 8 # Távolság az ablakok között # Ablakkeret automatikus eltávolítása, ha az állapotsáv ki van kapcsolva és csak 1 ablak van fent disable_border = 1 # --- Állapotsáv (Bar) Beállításai --- bar_enabled = 1 # 1 = Bekapcsolva, 0 = Kikapcsolva bar_border_width = 1 # Az állapotsáv keretvastagsága bar_border[1] = rgb:1e/1e/2e # Az állapotsáv keretszíne bar_color[1] = rgb:1e/1e/2e # Az állapotsáv háttérszíne bar_font_color[1] = rgb:cd/d6/f4, rgb:f5/e0/dc, rgb:8a/2b/e2 # Színpaletta a sáv szövegeinek bar_font = Inconsolata:size=12:antialias=true # Betűtípus (ikon támogatással) # Külső script integrálása az órának és egyéb infóknak bar_action = ~/.config/spectrwm/baraction.sh bar_action_expand = 0 # Engedélyezi a script kimenetének dinamikus formázását bar_justify = left # Balra igazított szövegek # Állapotsáv formázása: +L = Asztalok listája, +S = Elrendezés ikonja, +A = Külső script, +W aktív ablak bar_format = +S +<+L +|C+W +|R+A workspace_indicator = listcurrent,listactive,markcurrent,printnames # Asztalok jelölései az állapotsávon workspace_mark_current = '*' # Az aktuális asztal jelölése workspace_mark_active = '^' # Azon asztalok jelölése, ahol van megnyitott ablak workspace_mark_empty = '-' # Az üres asztalok jelölése bar_at_bottom = 0 # 0 = Képernyő tetején legyen a sáv, 1 = Képernyő alján # --- Elrendezések Jelölései (Stack Marks) --- stack_mark_horizontal = '[-]' # Horizontális elrendezés ikonja stack_mark_vertical = '[|]' # Vertikális elrendezés ikonja stack_mark_max = '[X]' # Teljes képernyős (Max) mód ikonja stack_mark_floating = '[~]' # Lebegő ablakos mód ikonja # --- Virtuális Asztalok Nevei Indításkor --- # name = ws[1]:TERM # 1-es asztal: Termináloknak # name = ws[2]:WEB # 2-es asztal: Böngészőnek # name = ws[3]:CODE # 3-as asztal: Programozásnak # name = ws[4]:CHAT # 4-es asztal: Kommunikációnak # name = ws[5]:MEDIA # 5-ös asztal: Zene/Videó # --- FŐ MÓDOSÍTÓ GOMB (Mod Key) --- # Mod1 = Alt billentyű, Mod4 = Windows (Super) billentyű. modkey = Mod4 # --- PROGRAMOK DEFINIÁLÁSA --- program[term] = kitty # Alapértelmezett terminál program[menu] = rofi -show drun # Indító # --- BILLENTYŰKOMBINÁCIÓK --- bind[term] = MOD+Return # Terminál megnyitása bind[menu] = MOD+d # Alkalmazáskereső/indító menü bind[quit] = MOD+Shift+e # Kilépés a spectrwm-ből bind[restart] = MOD+Shift+r # Konfiguráció azonnali újratöltése frissítéskor # Ablakkezelés, navigáció és fókusz váltás bind[wind_kill] = MOD+q # Aktív ablak bezárása bind[focus_next] = MOD+j # Fókusz a következő ablakra (Lefelé / Jobbra) bind[focus_prev] = MOD+k # Fókusz az előző ablakra (Felfelé / Balra) bind[swap_next] = MOD+Shift+j # Ablak felcserélése a következővel bind[swap_prev] = MOD+Shift+k # Ablak felcserélése az előzővel # Elrendezések (Layouts) és ablakméretek módosítása bind[cycle_layout] = MOD+space # Váltás a vertikális/horizontális/max elrendezések között bind[master_grow] = MOD+l # Fő (Master) ablak méretének növelése bind[master_shrink] = MOD+h # Fő ablak méretének csökkentése bind[float_toggle] = MOD+t # Ablak lebegővé (floating) tétele vagy rácsba kényszerítése # Navigáció az asztalok között bind[ws_1] = MOD+1 bind[ws_2] = MOD+2 bind[ws_3] = MOD+3 bind[ws_4] = MOD+4 bind[ws_5] = MOD+5 # Ablak áthelyezése másik asztalra bind[mvws_1] = MOD+Shift+1 bind[mvws_2] = MOD+Shift+2 bind[mvws_3] = MOD+Shift+3 bind[mvws_4] = MOD+Shift+4 bind[mvws_5] = MOD+Shift+5 # Hangerőszabályzás (Pulseadio) #program[volup] = pactl set-sink-volume @DEFAULT_SINK@ +5% #program[voldown] = pactl set-sink-volume @DEFAULT_SINK@ -5% #program[mute] = pactl set-sink-mute @DEFAULT_SINK@ toggle # Hangerőszabályzás (PipeWire / WirePlumber) program[volup] = wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ program[voldown] = wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- program[mute] = wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bind[volup] = MOD+KP_Add # Számbillentyűzet + - * használata bind[voldown] = MOD+KP_Subtract bind[mute] = MOD+KP_Multiply # --- ABLAKSZABÁLYOK --- # Itt adhatod meg, mely programok NE igazodjanak a rácsba, hanem pl. lebegjenek (FLOAT) quirk[.*:.*:.*:splash,dialog] = FLOAT # Minden felugró ablak és üdvözlőképernyő lebegjen quirk[.*:.*:.*:notification] = FLOAT + ANYWHERE + MINIMALBORDER + NOFOCUSONMAP # Konkrét alkalmazások szabályai (Az osztályneveket az 'xprop' paranccsal ellenőrizheted) # quirk[Vlc:vlc] = FLOAT # A VLC médialeátszó mindig lebegjen # quirk[Gimp:gimp] = FLOAT + ANYWHERE # A Gimp képszerkesztő ablakai szabadon mozoghassanak # quirk[KeePassXC:keepassxc] = FLOAT # A jelszókezelő mindig lebegő ablak legyen # Automatikus indítás autorun = ws[1]:/home/berus/.config/spectrwm/autostart.sh
Szokásomhoz híven, magyarázatokkal elláttam, csak néhány megjegyzés...
focus_mode - Lehetőségek: default (követi az egeret), follow ("szigorúan" követi az egeret), sloppy (fókusz az egérrel érintett ablakra ugrik).
focus_close - Lehetőségek: previous (előző ablak), next (következő ablak).
spawn_position - Lehetőségek: next (az aktuális ablak mellé), master (fő ablak), last (utolsó hely).
Ablakszabályok (quirk):
- FLOAT: Lebegő ablak.
- ANYWHERE: Az ablak bármely pozícióban lehet.
- MINIMALBORDER: Minimális keret.
- NOFOCUSONMAP: Az ablak nem kap fókuszt automatikusan megnyitáskor.
- 1-9: Az ablak melyik asztalon nyíljon meg.
Én nem használom, de neked lehet hogy érdekes lesz:
workspace[1] = "1:2:3" --> Az 1-es asztalon a 1:2:3 arányú elrendezés lesz az ablakok között.
bind[ws_next] = MOD+Button4
bind[ws_prev] = MOD+Button5 --> Egérgörgővel való váltás a következő/előző asztalra.
Akkor most nézzük a panel konfigurációját (~/.config/spectrwm/baraction.sh):
#!/bin/bash
# ==============================================================================
# Berus Spectrwm Állapotsáv (baraction.sh)
# ==============================================================================
SLEEP_TIME=2
# Színkódok (Ha a spectrwm.conf-ban be vannak állítva a bar_font_color színei)
COLOR_RESET=""
COLOR_LABEL="" # A feliratok színe (pl. CPU, RAM, VOL)
COLOR_ALERT="" # Figyelmeztetések színe
# --- CPU ---
get_cpu() {
local cpu_util=$(vmstat 1 2 | tail -n 1 | awk '{print 100 - $15}')
echo -e "${COLOR_LABEL}CPU:${COLOR_RESET} ${cpu_util}%"
}
# --- RAM ---
get_mem() {
local mem_info=$(free -m | awk '/Mem:/ {printf "%.1fG/%.1fG", $3/1024, $2/1024}')
echo -e "${COLOR_LABEL}RAM:${COLOR_RESET} ${mem_info}"
}
# ------------------------------------------------------------------------------
# Hangerő lekérdezése (PulseAudio)
# ------------------------------------------------------------------------------
get_vol() {
if command -v pactl >/dev/null 2>&1; then
if pactl get-sink-mute @DEFAULT_SINK@ | grep -q "yes"; then
echo "VOL MUTE"
else
pactl get-sink-volume @DEFAULT_SINK@ \
| awk '/Volume:/ {print "VOL " $5; exit}'
fi
elif command -v amixer >/dev/null 2>&1; then
amixer sget Master 2>/dev/null |
awk -F'[][]' '
/Left:/ {
print "VOL " $2
exit
}'
fi
}
# --- Dátum és Idő ---
get_date() {
local datetime=$(date "+%Y-%m-%d %H:%M")
echo -e "${datetime}"
}
# ==============================================================================
# FŐ CIKLUS
# ==============================================================================
while true; do
# Adatok lekérése (csak ha a függvények léteznek a scriptben)
CPU=$(get_cpu)
MEM=$(get_mem)
VOL=$(get_vol)
DATE=$(get_date)
# Összefűzés
OUTPUT="| $CPU | $MEM | $VOL | $DATE |"
# Sima echo helyett printf-et használunk újsor karakterrel (\n),
# így a spectrwm nem tudja hozzácsapni a futó folyamatneveket.
printf "%s\n" "$OUTPUT"
# A sleep-et elküldjük a háttérbe, hogy ne zavarja a státuszbárt
sleep "$SLEEP_TIME" & wait $!
doneSzerintem elég egyértelmű, tehát jöhetnek az automatikusan induló programok (~/.config/spectrwm/autostart.sh):
#!/bin/sh numlockx on ~/.fehbg & gammastep & picom -b setxkbmap hu
Ugye a numlockx és a setxkbmap egyszerű beállítások, nem kell a háttérbe küldeni őket (ezt sokan tévesztik)...
Meg is volnánk, a Spectrwm képében ismét egy jópofa, tényleg minimális erőforrást fogyasztó, rendkívül hatékony pálcikawm-et ismerhettünk meg!
Bár a sima szöveges konfiguráció miatt szokás úgy hirdetni, hogy egyszerűen használható, ezt azért én nem mondanám, aki csak kísérletezni akar, hogy milyen érzés a pácikawm világ, az inkább mondjuk az i3-felől közelítsen, de az elszántabbak, vagy ténylegesen gyengébb vasra valami használhatót varázsolni akarók bátran ugorjanak neki!
Ja, és barátunk a man!
Berus
