
Dwm (dynamic window manager) – instalacja i konfiguracja w Enterprise Linux 8

dwm (dynamic window manager) to, jak sama nazwa wskazuje, dynamiczny menedżer okien. Od wielu lat jest on wyborem geeków Linuksa. W tym artykule pokażemy, jak zainstalować i skonfigurować program dwm w systemie operacyjnym EuroLinux 8.
Dwm (dynamic window manager) to, jak sama nazwa wskazuje, dynamiczny menedżer okien. Od wielu lat jest on wyborem geeków Linuksa. W tym artykule pokażemy, jak zainstalować i skonfigurować program dwm w Enterprise Linux 8.
Dynamic window manager to program służący do dynamicznego zarządzania oknami – ich otwierania i organizacji. Jest tworzony przez społeczność programistów wolnego oprogramowania suckless.org. Fundamenty filozofii suckless.org to m.in. prostota, przejrzystość, oszczędność, użyteczność, minimalizm i rozszerzalność. Właśnie taki jest dwm.
Najistotniejsze cechy dwm:
- okna mogą być prezentowane w jednym z 3 layoutów:
- tiled (master and stack layout)
- floated
- monocle
- każdemu z okien można przypisać wiele tagów (odpowiednik workspace)
- monitor może wyświetlać jednocześnie okna przypisane do kilku tagów
- każdy monitor ma oddzielny zestaw tagów. Nie można wyświetlać tego samego okna na wielu monitorach jednocześnie
- każdy monitor zawiera minimalny status bar. Zawiera on tagi, layout symbol, tytuł aktywnego okna i tekst odczytany z root window name property
- założeniem projektu jest kod źródłowy nieprzekraczający 2000 SLOC
- dwm to pojedynczy plik binarny
- konfiguracja odbywa się przez edycję kodu źródłowego
config.h
. Wymaga kompilacji i ponownego uruchomienia dwm. Kompilacja jest bardzo szybka.
Kiedy warto skorzystać z dwm?
To narzędzie jest szczególnie warte polecenia gdy:
- mamy ograniczone zasoby pamięci lub CPU. dwm nie wykonuje żadnych „zbędnych” zadań poza zarządzaniem oknami. Oszczędnie dysponuje więc zasobami komputera
- chcemy poznać narzędzia CLI do zarządzania systemem operacyjnym. Brak łatwo dostępnych narzędzi GUI w środowiskach graficznych tj. GNOME lub KDE niejako zmusza do poznania narzędzi CLI i oswajania się z terminalem.
Zagłębiając się w dwm lub w inne programy od suckless.org należy porzucić niektóre oczekiwania utrwalone latami używania MS Windows, KDE, GNOME lub innego złożonego środowiska graficznego. Osoby oczekujące, że kilkoma kliknięciami myszki można uruchomić przeglądarkę internetową, arkusz kalkulacyjny lub zmienić ustawienia systemu, prawdopodobnie się zawiodą. Z drugiej strony, minimalistyczny i przewidywalny dwm może być świetnym narzędziem umożliwiającym pełną kontrolę nad oknami za pomocą klawiatury. Niezaprzeczalnie mysz również jest bardzo użyteczna :)
Instalacja
UWAGA
Instalacja oprogramowania ze źródeł jest potencjalnie niebezpieczna. Warto przetestować ją w środowisku testowym lub samodzielnie przeanalizować kod.
Niniejszy artykuł dotyczy dwm na dystrybucji EuroLinux 8 po minimalnej instalacji. Polecenia dnf
są specyficzne dla systemów z rodziny Enterprise Linux (Rocky Linux, Oracle, Linux, RHEL, AlmaLinux…). W przypadku korzystania z innej dystrybucji, instalacja wymaganych pakietów może się nieco różnić. Wówczas należy użyć odpowiedniego dla siebie package managera (np. apt
lub pacman
). Nazwy pakietów również mogą się różnić w zależności od dystrybucji. Większość informacji dotycząca instalacji i konfiguracji dwm będzie użyteczna niezależnie od wybranej dystrybucji.
Kod źródłowy
Jeżeli nie mamy zainstalowanego gita, należy to zrobić:
sudo dnf install git
Następnie możemy pobrać kod źródłowy dwm za pomocą gita:
git clone git://git.suckless.org/dwm
Wchodzimy do katalogu z kodem źródłowym, który możemy przejrzeć:
cd dwm
cat README *.h *.c *.mk Makefile
Kompilacja
Instalujemy pakiety niezbędne do kompilacji dwm:
sudo dnf install make gcc libX11-devel libXft-devel libXinerama-devel
Aby sprawdzić, czy kompilacja przebiega pomyślnie, należy użyć polecenia:
make all clean


Minimalna instalacja X server
Instalujemy pakiety niezbędne do uruchomienia dwm:
sudo dnf install xorg-x11-server-Xorg xorg-x11-xinit
Możemy potrzebować dodatkowych sterowników np. xorg-x11-drv-intel
lub xorg-x11-drivers
. Jeżeli tak – należy je zainstalować.
Instalacja
Aby zainstalować dwm globalnie, należy użyć:
sudo make clean install
W ten sposób zainstalujemy dwm w /usr/local/bin/
i dodamy man page
do /usr/local/share/man
. Możemy to zmienić w pliku config.mk
w sekcji # paths
. Przykładowo ustawmy zmienną PREFIX=$HOME/.local
. Teraz możliwa jest instalacja jako zwykły user (bez sudo
).
make clean install
Katalog $HOME/.local/bin
domyślnie powinien być dodany do zmiennej środowiskowej $PATH
. Możemy to sprawdzić, wywołując echo $PATH
. Jeżeli nie jest – należy go dodać.
Następnie tworzymy plik .xinitrc
w katalogu domowym. Uwaga. Poniższe polecenie nadpisze plik .xinitrc
, jeśli ten już istnieje.
echo dwm > $HOME/.xinitrc
Pierwsze uruchomienie dwm
Poniższym poleceniem uruchomimy server X, który uruchomi dwm:
startx
W obecnym stanie najprawdopodobniej możliwe jest tylko ruszanie kursorem po ekranie lub przełączanie tagów. Możemy to robić za pomocą skrótów klawiaturowych:
• [Atl]+[4]
• [Alt]+[7]
• [Ctrl]+[Alt]+[2]
• [Ctrl]+[Alt]+[5]
• [Ctrl]+[Alt]+[2]
• [Alt]+[0]
• [Ctrl]+[Alt]+[3]
• [Alt]+[1]
.
Tagi można przełączać również myszką.
[Alt]+[Shift]+[q]
zamyka dwm i wraca do tty
.
Podstawowe skróty klawiaturowe
Skróty klawiaturowe można zawsze podejrzeć w manualu man dwm
. Mod1
domyślnie oznacza Alt
. Poniżej pokażemy, jak zmienić Alt
na Super
lub Windows key
. Kod definiujący skróty klawiaturowe znajduje się w pliku config.h
.
Podstawy
[Shift]+[Mod]+[Enter] - launch terminal
[Mod]+[b] - show/hide bar
[Mod]+[p] - dmenu for running programs like the x-www-browser
[Mod]+[Enter] - push acive window from stack to master, or pulls last used window from stack onto master.
[Mod] + [j / k] - focus on next/previous window in current tag
[Mod] + [h / l] - increases / decreases master size
Nawigacja
[Mod]+[2] - moves your focus to tag 2
[Shift]+[Mod]+[2] - move active window to the 2 tag
[Mod] + [i / d] - increases / decreases number of windows on master
[Mod] + [, / .] - move focus between screens (multi monitor setup)
[Shift]+[Mod]+[, / .] - move active window to different screen
[Mod]+[0] - view all windows on screen
[Shift]+[Mod]+[0] - make focused window appear on all tags
[Shift]+[Mod]+[c] - kill active window
[Shift]+[Mod]+[q] - quit dwm cleanly
Layout
[Mod]+[t] - tiled mode. []=
[Mod]+[f] - floating mode. ><>
[Mod]+[m] - monocle mode. [M] single window fullscreen
Floating
[Mod]+[R M B] - to resize the floating window
[Mod]+[L M B] - to move the floating window around
[Mod]+[Space] - toggles to the previous layout mode
[Mod]+[Shift]+[Space] - to make an individual window float
[Mod]+[M M B] - to make an individual window un-float
Podstawowa konfiguracja
Konfiguracja dwm polega na edycji pliku config.h
i ponownej kompilacji make clean install
(z sudo
lub bez).
Mod: zmiana alt na super/windows
Należy zmienić zmienną MODKEY:
#define MODKEY Mod4Mask
Terminal
Domyślnym terminalem dwm jest st. Można go zainstalować w sposób analogiczny do dwm. Oczywiście nic nie stoi na przeszkodzie, żeby zintegrować inny terminal np. emulator terminator.
Aby zainstalować terminator, należy użyć:
sudo dnf install terminator
Zintegrujmy teraz terminator z dwm. Zamieńmy linię w pliku config.h
w sekcji /* commands */
:
static const char *termcmd[] = { "terminator", NULL };
Następnie należy skompilować i zainstalować dwm ponownie make clean install
. Po ponownym uruchomieniu (startx
) możemy otworzyć kilka okien terminala (Mod+Shift+Enter
). Warto poeksperymentować z nawigowaniem między oknami.
Application Launcher
Domyślnym launcherem aplikacji jest dmenu. Konfiguracja dmenu jest zdefiniowana w pliku config.h
w liniach:
static const char dmenufont[] = "monospace:size=10";
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
W naszym przypadku program dmenu nie jest zainstalowany oraz nie ma go w repozytoriach EuroLinux. Dlatego skrót Mod+p
go nie wywołuje. Alternatywą może być wywoływanie aplikacji z terminala. Instalacja dmenu znajduje się poniżej.
Firefox domyślnie otwiera się w tagu nr 9 (definicja w config.h
).
Instalacja dmenu
Instalacja dmenu przebiega analogicznie do dwm:
cd # powrót do katalogu użtkownika
git clone git://git.suckless.org/dmenu
cd dmenu
sudo make clean install
Mod+p
otwiera dmenu.
Multi-monitor
Aby skonfigurować multi-monitor, należy użyć zewnętrznego narzędzia, np. xrandr
. Oto przykład konfiguracji trzech monitorów.
Przegląd dostępnych monitorów:
xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 173mm
1920x1080 60.00*+ 59.97 59.96 59.93 48.00
1680x1050 59.95 59.88
1400x1050 59.98
1600x900 59.99 59.94 59.95 59.82
1280x1024 60.02
1400x900 59.96 59.88
1280x960 60.00
1440x810 60.00 59.97
1368x768 59.88 59.85
1280x800 59.99 59.97 59.81 59.91
1280x720 60.00 59.99 59.86 59.74
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
1024x576 59.95 59.96 59.90 59.82
960x600 59.93 60.00
960x540 59.96 59.99 59.63 59.82
800x600 60.00 60.32 56.25
840x525 60.01 59.88
864x486 59.92 59.57
700x525 59.98
800x450 59.95 59.82
640x512 60.02
700x450 59.96 59.88
640x480 60.00 59.94
720x405 59.51 58.99
684x384 59.88 59.85
640x400 59.88 59.98
640x360 59.86 59.83 59.84 59.32
512x384 60.00
512x288 60.00 59.92
480x270 59.63 59.82
400x300 60.32 56.34
432x243 59.92 59.57
320x240 60.05
360x202 59.51 59.13
320x180 59.84 59.32
DP-1 connected (normal left inverted right x axis y axis)
1920x1080 60.00 + 59.94
1680x1050 59.95
1280x1024 60.02
1440x900 59.89
1280x960 60.00
1280x720 60.00 59.94
1024x768 60.00
800x600 60.32
640x480 60.00 59.94
720x400 70.08
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 connected (normal left inverted right x axis y axis)
1920x1080 60.00 +
1600x900 60.00
1280x1024 75.02 60.02
1152x864 75.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
720x400 70.08
Jak widać, trzy monitory są podłączone do portów eDP-1, DP-1 i HDMI-2. Preferowany layout prezentuje się następująco:
Możemy go ustawić go poleceniem:
xrandr --output DP-1 --auto --rotate left --left-of eDP-1 --output HDMI-2 --auto --left-of DP-1
Status tekst i .xinitrc
Tekst znajdujący się w prawym górnym rogu można zastąpić dowolnym innym tekstem za pomocą polecenia:
setxkbmap pl # użyć, w przypadku, gdy layout klawiatury nie jest polski
xsetroot -name "Jesteś świetny!!"
Zmienna -name
może przyjąć dowolny tekst. Wypróbujmy przykładowy skrypt pokazujący datę i godzinę.
#!/bin/bash
while true
do
xsetroot -name "$(date)"
sleep 1
done
Należy zapisać taki skrypt w pliku za pomocą edytora tekstu, np. vi ~/.local/bin/status.sh
i nadać mu prawa do wykonywania chmod 755 ~./local/bin/status.sh
. Następnie należy dodać linię status.sh &
do pliku ~/.xinitrc
przed dwm
.
cat ~/.xinitrc
status.sh &
dwm
Warto zwrócić uwagę na znak &
. startx
wykonuje polecenia z xinitrc
sekwencyjnie. status.sh
zawiera nieskończoną pętlę. Bez & dwm
nigdy by się nie wykonał. Jeżeli chcemy ustawić domyślny layout klawiatury na polski, możemy dodać na początku pliku .xinitrc
polecenie setxkbmap pl
.
cat ~/.xinitrc
setxkbmap pl
status.sh &
dwm
Uruchamiamy ponownie dwm: [Mod]+[Shift]+[q]
i startx
.
Skrypt status.sh
może być rozszerzany o dowolne komendy dające output tekstowy. Przykłady:
• cat /sys/class/power_supply/BAT0/capacity
– stan naładowania baterii
• cat /sys/class/power_supply/BAT0/status
– status ładowania.
Podsumowanie
Wierzymy, że po wykonaniu poleceń z tego artykułu każdy będzie w stanie zbudować użyteczny window manager. Możliwości rozszerzania funkcjonalności wydają się nieograniczone. Zbiór patchy dostępny jest na stronie suckless. Zachęcamy do poznania wartości promowanych przez społeczność suckless.org. Niektórzy wierzą, że tak powinien być rozwijany software. Pozostali mają inne priorytety :)