Dwm

Из Википедије, слободне енциклопедије
dwm menadžer prozora

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.

Spoljašnje veze[уреди]