Let’s try dwm — dynamic window manager

If you like efficiency and minimalism, and are looking for a new window manager for your Linux desktop, you should try dwm — dynamic window manager. Written in under 2000 standard lines of code, dwm is extremely fast yet powerful and highly customizable window manager.

You can dynamically choose between tiling, monocle and floating layouts, organize your windows into multiple workspaces using tags, and quickly navigate through using keyboard shortcuts. This article helps you get started using dwm.

Installation

To install dwm on Fedora, run:

$ sudo dnf install dwm dwm-user

The dwm package installs the window manager itself, and the dwm-user package significantly simplifies configuration which will be explained later in this article.

Additionally, to be able to lock the screen when needed, we’ll also install slock — a simple X display locker.

$ sudo dnf install slock

However, you can use a different one based on your personal preference.

Quick start

To start dwm, choose the dwm-user option on the login screen.

After you log in, you’ll see a very simple desktop. In fact, the only thing there will be a bar at the top listing our nine tags that represent workspaces and a []= symbol that represents the layout of your windows.

Launching applications

Before looking into the layouts, first launch some applications so you can play with the layouts as you go. Apps can be started by pressing Alt+p and typing the name of the app followed by Enter. There’s also a shortcut Alt+Shift+Enter for opening a terminal.

Now that some apps are running, have a look at the layouts.

Layouts

There are three layouts available by default: the tiling layout, the monocle layout, and the floating layout.

The tiling layout, represented by []= on the bar, organizes windows into two main areas: master on the left, and stack on the right. You can activate the tiling layout by pressing Alt+t.

The idea behind the tiling layout is that you have your primary window in the master area while still seeing the other ones in the stack. You can quickly switch between them as needed.

To swap windows between the two areas, hover your mouse over one in the stack area and press Alt+Enter to swap it with the one in the master area.

The monocle layout, represented by [N] on the top bar, makes your primary window take the whole screen. You can switch to it by pressing Alt+m.

Finally, the floating layout lets you move and resize your windows freely. The shortcut for it is Alt+f and the symbol on the top bar is ><>.

Workspaces and tags

Each window is assigned to a tag (1-9) listed at the top bar. To view a specific tag, either click on its number using your mouse or press Alt+1..9. You can even view multiple tags at once by clicking on their number using the secondary mouse button.

Windows can be moved between different tags by highlighting them using your mouse, and pressing Alt+Shift+1..9. 

Configuration

To make dwm as minimalistic as possible, it doesn’t use typical configuration files. Instead, you modify a C header file representing the configuration, and recompile it. But don’t worry, in Fedora it’s as simple as just editing one file in your home directory and everything else happens in the background thanks to the dwm-user package provided by the maintainer in Fedora.

First, you need to copy the file into your home directory using a command similar to the following:

$ mkdir ~/.dwm
$ cp /usr/src/dwm-VERSION-RELEASE/config.def.h ~/.dwm/config.h

You can get the exact path by running man dwm-start.

Second, just edit the ~/.dwm/config.h file. As an example, let’s configure a new shortcut to lock the screen by pressing Alt+Shift+L.

Considering we’ve installed the slock package mentioned earlier in this post, we need to add the following two lines into the file to make it work:

Under the /* commands */ comment, add:

static const char *slockcmd[] = { "slock", NULL };

And the following line into static Key keys[]:

{ MODKEY|ShiftMask, XK_l, spawn, {.v = slockcmd } },

In the end, it should look like as follows: (added lines are highlighted)

...
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "st", NULL };
static const char *slockcmd[] = { "slock", NULL };

static Key keys[] = {
/* modifier                     key        function        argument */
{ MODKEY|ShiftMask,             XK_l,      spawn,          {.v = slockcmd } },
{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
...

Save the file.

Finally, just log out by pressing Alt+Shift+q and log in again. The scripts provided by the dwm-user package will recognize that you have changed the config.h file in your home directory and recompile dwm on login. And becuse dwm is so tiny, it’s fast enough you won’t even notice it.

You can try locking your screen now by pressing Alt+Shift+L, and then logging back in again by typing your password and pressing enter.

Conclusion

If you like minimalism and want a very fast yet powerful window manager, dwm might be just what you’ve been looking for. However, it probably isn’t for beginners. There might be a lot of additional configuration you’ll need to do in order to make it just as you like it.

To learn more about dwm, see the project’s homepage at https://dwm.suckless.org/.

Fedora Project community Using Software

17 Comments

  1. Kerel

    Any people favoring dwm over i3wm?

    • I think it depends on what you want. i3 is probably easier to configure and customize, there are more resources for it also. dwm on the other hand is really tiny and lets you build a much lighter setup. I used both and I liked both for different reasons.

  2. Kostas

    Looks like an nice window manager. If i want to try it out on a headless system, like Fedora Server, the only other requirement is to install X.org ?

    • If you’re not going to compile it yourself, yes. If you compile it yourself, you’ll need additional libraries for compilation. I’ve been using fedora minimal install with suckless tools for a few months and I am loving it. If you’re interested in making your own suckless setup from scratch take a look at my configuration (https://github.com/saleone/configs). There is an Ansible playbook that you can run right after the base system is installed to set up everything (but you should adjust it based on your computer and needs).

      • Nice! Did you try the dwm-user package? It recompiles dwm automatically on login when you change the config.h in your home. It’s really cool.

        • I haven’t tried it. I’ve made my own changes to dwm source and applied a few patches from their website which do not only affect config.h file (autostart, layouts per tag, …). It’s much easier for me to copy my repo than to apply series of patches even if I could change the dwm source with dwm-user package. Doing manual compilation is just one more step, and that is just calling

          sudo make install

          , so its not a big deal, you still have to log out.

    • Not sure if I remember exactly, but when I was building a custom desktop from Fedora minimal I installed X, input and video drivers, xinit, and dwm. My laptop had an integrated intel graphics. I think these were the packages:

      xorg-x11-server-Xorg
      xorg-x11-drv-evdev
      xorg-x11-drv-intel
      xinit
      dwm
      dwm-user

      And then I created ~/.xinitrc and added “dwm-user” to it.

      Sorry I don’t have that sytem around anymore, would have looked otherwise. Good luck!

  3. Ilia

    Oh, it is my favorite tiling vm.

  4. Really impressed by this window manager. If all goes fine I am going to make a shift from XFCE4 to dwm.

  5. Gustavo Murillo

    I don’t know if this is added by default, but if it’s not you The next line should be added to the dwm session:
    dbus-update-activation-environment –systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY &
    If it’s not set some applications don’t launch or take time to launch. Like gnome-terminal and nautilus.
    I add it in .xinitrc and launch with xinit, the maintainer should make a patch with this if it’s not already set.

    • I think it’s meant to be really minimalistic with as little dependencies as possible, an also flexible — like potentially running without dbus. That’s probably why there’s as little default settings as possible. As I understand it, it’s targeted at advanced users anyway and it might be expected that you need to do things in .xinitrc to make it run the way you like it. But I’m sure the maintainer will give you a better answer than me. 🙂

  6. Pierre Stassen

    Hi, nice to see an article on dwm!

    I use it and I love it, but on Fedora it feels like a little step backwards because it’s a window manager for X. On the other hand Sway, the i3-based alternative for Wayland, is not working flawless.

  7. Lena Kelly

    Manger?

Comments are Closed

The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. Fedora Magazine aspires to publish all content under a Creative Commons license but may not be able to do so in all cases. You are responsible for ensuring that you have the necessary permission to reuse any work on this site. The Fedora logo is a trademark of Red Hat, Inc. Terms and Conditions