Dwm
Dwm je dinamični menadžer prozora, za GNU/Linux i sl. sisteme, koji je napravljen sa ciljem da bude:
- jednostavan
- brz
- pod totalnom kontrolom korisnika (zbog čega ga i koriste napredniji korisnici što, naravno, nije pravilo)
- sa izvornim kodom koji ne prelazi 2000 redova koda
- sa mogućnošću primene pečeva i dodataka za proširivanje mogućnosti samog menadžera
Program je zamišljen tako da ne koristi eksterne datoteke za konfiguraciju i da se sve nalazi u samom programu čime se izbegavaju ranjivosti unutar istog. Svaka izmena konfiguracije od vas zahteva da ponovo prevedete program iz izvornog koda. Svaki prozor dobija određene oznake (en. "tag") a prozore aranžira na "tiling način" tj. koristi kompletnu raspoloživu radnu površinu i slaže prozore u mrežu jedan do drugoga na načink koji može korisnik da definiše (standardna mreža, horizontalno slaganje, spirala...). Može se reći da dwm "popločava" vašu radnu površinu prozorima čime se može postići velika produktivnost korisnika i lakša preglednost budući da prozori nisu sakriveni na radnoj površini već su uvek vidljivi. Prozor koji je aktivan će biti označen okvirom posebne boje koju korisnik može sam da promeni.
Садржај |
Instalacija dwm-a [уреди]
Instalacija se može izvršiti na 2 načina:
- prevođenjem iz izvornog koda
- instaliranjem binarne verzije iz riznica
Budući da se dwm prevodi u binarni oblik zajedno sa konfiguracijom naglasićemo da je najbolja varijanta da se program prevodi iz izvornog koda u binarni. Detalje možete videti ispod.
Instaliranje binarne verzije iz riznica na Debian/Ubuntu sistemima [уреди]
Instaliranje binarne verzije iz riznica se vrši komandom:
sudo apt-get install dwm
ili
sudo aptitude install dwm
Instalacija prevođenjem izvornog u binarni kod + konfiguracija [уреди]
Za početak je potrebno da preuzmete izvorni kod sa sledeće adrese: http://dl.suckless.org/dwm/ (poslednji fajl je obično najnoviji dwm). Raspakujte arhivu na željenu lokaciju i prebacite se na istu u vašem terminalu (primer: cd ~/dwm-5.8.2).
Da bi podesili vaš dwm neophodno je da prekopirate config.def.h u config.h i da ga otvorite u uređivaču teksta koji koristite. Sadržaj te konfiguracije izgleda ovako:
/* See LICENSE file for copyright and license details. */
/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#cccccc";
static const char normbgcolor[] = "#cccccc";
static const char normfgcolor[] = "#000000";
static const char selbordercolor[] = "#0066ff";
static const char selbgcolor[] = "#0066ff";
static const char selfgcolor[] = "#ffffff";
static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const Bool showbar = True; /* False means no bar */
static const Bool topbar = True; /* False means bottom bar */
/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ "Gimp", NULL, NULL, 0, True, -1 },
{ "Firefox", NULL, NULL, 1 << 8, False, -1 },
};
/* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
};
/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[] = { "uxterm", NULL };
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
TAGKEYS( XK_4, 3)
TAGKEYS( XK_5, 4)
TAGKEYS( XK_6, 5)
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} },
};
/* button definitions */
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};
Konfiguracija je razumljiva ukoliko bacite pogled na istu. Objašnjenja se nalaze pored svake opcije i primeri već postoje. Naglasićemo par stvari:
- za boje se koriste isključivo HEX boje (sa svih 6 karaktera) poput #003366 ili #0000cc
- Tagovi (static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; deo) mogu da sadže imena i da ne budu brojevi!
- META taster zavisi od vaše konfiguracije sistema. Na nekim sistemimam je META taster "Win Key" odnosno taster za malim prozočićem dok je kod drugih levi ALT taster!
Da bi se dwm preveo u binarni kod neophodni su vam libx11-dev, libxinerama-dev, sharutils, libx11-dev, libxinerama-dev paketi koje možete instalirati sledećom komandom:
sudo apt-get install libx11-dev libxinerama-dev sharutils libx11-dev libxinerama-dev
ili
sudo aptitude install libx11-dev libxinerama-dev sharutils libx11-dev libxinerama-dev
Prevođenje izvornog koda dwm-a u binarni se vrši na sledeći način:
./make clean install
Pokretanje dwm-a [уреди]
Da bi se dwm pokrenuo neophodno je da pokrenete X server. Pokretanje može da se izvrši automatski ukoliko imate program za prijavljivanje na sistem (login manager) ili ručno iz terminala.
Pokretanje dwm-a preko programa za prijavljivanje na sistem (login manager) [уреди]
Da bi pokrenuli dwm preko programa za prijavljivanje na sistem (Gdm, Kdm, Slim...) neophodno je da napravite dwm pokretač koji će biti prepoznat od strane ovih programa. Da bi to uradili neophodno je da napravite dwm.desktop (ime je proizvoljno ali ekstenzija "desktop" mora da postoji) u /usr/share/xsessions sledećeg sadržaja:
[Desktop Entry] Encoding=UTF-8 Name=Dwm Comment=Dynamic window manager Exec=xinit Icon=dwm.png Type=XSession
Obratite pažnju na to da ovakav pokretač dwm-a se oslanja potpuno na vaš ~/.xinitrc fajl.
Pokretači za dwm unutar ~/.xinitrc datoteke [уреди]
Da bi uspešno pokrenuli dwm preko xinit fajla možete, na kraju tog fajla, da dodate sledeće:
dwm &
Ukoliko želite da se dwm pokrene čak i kada ga ugasite, možete da koristite sledeću komandu:
while true do dwm done
Dwm može da loguje i greške prilkom rada sa sledećom komandom:
while true do dwm 2> ~/.dwm.log done
Ova komanda će da upisuje logove u ~/.dwm.log
Na kraju, dwm može da na svom panelu prikazuje izlazne infomarcije koje ostavlja conky-cli program. Komanda za to je:
conky | while read -r; do xsetroot -name "$REPLY"; done & dwm &
Prvi red mora da ide neposredno pre pokretanja dwm-a!
Pokretanje dwm-a iz konzole [уреди]
Nakon prijavljivanja u konzolu, možete lako da pokrenete dwm kucanjem sledeće komande
startx
Važno: Da bi se uspešno pokrenuo dwm, neophodno je da podesite vaš ~/.xinitrc fajl (pogledati članak iznad)!
Pokretanje programa nakon pokretanja dwm-a (autostart) [уреди]
Programi koje želite da pokrenete idu u ~/.xinitrc fajl. Naglašavamo da je neophodno da se sve aplikacije pokrenu pre dwm-a i da isti mora da bude pokrenut poslednji kako bi sve bilo kako treba. Primer podešenog ~/.xinitrc fajla:
#Set wallpaper
exec feh --bg-scale `cat ~/.desktop-background.txt` &
#start Xdefaults manager
exec xrdb -all ~/.Xdefaults &
#keyboard set
exec setxkbmap hr &
setxkbmap hr &
#delay set
exec xset r rate 310 31 &
xset r rate 315 32 &
#i kill X server :> (+keyboard)
exec setxkbmap -option terminate:ctrl_alt_bksp &
setxkbmap -option terminate:ctrl_alt_bksp &
setxkbmap -layout rs,rs -variant latin, -option compose:rwin,lv3:ralt_switch,grp:alt_ctrl_toggle &
#app kill
killall mpd &
killall mpdscribble &
#apps start
conky &
mpd &
mpdscribble &
#stalonetray &
firefox &
#Other
export OOO_FORCE_DESKTOP=gnome &
#exec desktop
while true
do
conky | while read -r; do xsetroot -name "$REPLY"; done &
# Log stderror to a file
dwm 2> ~/.dwm.log
# No error logging
#dwm >/dev/null 2>&1
done
#dwm
Podešavanje tapeta [уреди]
Podešavanje tapeta se može vršiti sledećim komandama:
hsetroot putanja_do_vašeg_tapeta &
display -size 1024x768 putanja_do_vašeg_tapeta &
Gde je "1024x768" rezolucija ekrana koju koristite. Za ovo vam treba ImageMagick program.
feh --bg-scale putanja_do_vašeg_tapeta &
Gde "bg-scale" može biti "bg-center" (centrira tapet). Za ovo vam treba Feh pregledač slika.
Primenjivanje dodataka i pečeva za dwm [уреди]
Da bi se proširile mogućnosti dwm-a, postoji pregršt dodataka i pečeva za isti. Na strani sa pečevima možete videti listu istih kao i kako da ih primenite na vaš dwm.