KDE Plasma vs. Awesome WM

In the first years that I have used Linux, I switched back between GNOME 2, Ubuntu Unity, and KDE 3/4. Eventually I have settled with KDE 4. A couple years later, I used `KDE with Awesome WM before and since KDE Plasma 5 came out, I just use Awesome WM since they are not that easy to use together since KDE 5.

Still, both environments have their strong points. I'll list them here since both have their appeal to me.

Points for KDE Plasma

Screen Locking

As trivial as screen locking sounds, it is incredible hard and painful on Linux. This is because there is no concept of a locked screen on the X server. All you can do is to start a program that will go full screen and grab all mouse and keyboard input. That program will let you enter your password and then quit if it is correct.

It is really brittle, because the screen locker might crash. In that case, the screen is unlocked again. This can happen through a bug in the screen locker, by getting the kernel to kill it when not enough RAM is left. Also you could try to trick the underlying window manager to minimize the screen locker in case it does not properly grab all the input devices. A thing that worked with an older version of slock was just to put my laptop on the docking station. The thinkpad-scripts would then call XRandR and enable a second screen. Awesome WM would move all the windows to it. The screen locker has started with just 1366×768 pixels and got moved to a 1920×1080 pixel screen. You could see all the other windows, albeit you could not interact with them. I have switched to i3lock after noticing that the version shipped with my Fedora release had this bug.

Even worse than killing the screen locker: When you have a laptop and want it to automatically lock the screen on resume, you need to have a program running that listens to the suspend event and starts the screen locker. This program could be xss-lock. If that for some reason stops running (crashed, not properly started), then the screen of your laptop will not get locked automatically. I do not have the feeling that I could really rely on it and therefore lock my screen by hand if I want to be absolutely sure that the screen is locked.

There is also the possibility to use the systemd suspend.target. The dependencies of a system-wide target need to be installed system-wide as well. This means that one has one global screen locking target and one has to supply DISPLAY=:0 in order to actually get it to lock the screen. This is not very nice.

With KDE, the screen locking is done within the compositor KWin itself. See Martin Gräßlin's blog post. This means that trying to kill the screen locker will be killing the session and that takes down any open programs. Trying to kill the screen locker will always log out the user. Also there is no need to have some auxiliary program running that listens on the suspend event. If you see windows, you know that KWin is running and that it will lock the screen.

With KDE, one just does not have to think about the screen locking (just like almost everybody else). It is very comforting to know that screen locking just works.

Network Interface Management

Awesome WM is not a full desktop environment, therefore it does not come with a bunch of handy widgets that take care of everything. You need to start your own network control applet. This might be the case because a lot of people who use Awesome WM do not use Network Manager or perhaps have a wired connection only. Either way, I will have to start nm-applet at the beginning of my session such that I can configure the wireless connection.

Sometimes this applet crashes or the indicator is not visible any more. Then I have to execute killall nm-applet and nm-applet &. This is annoying. Also the classic GTK style applet does not look that good.

KDE Plasma just has a network widget, it just works. Wonderful.

Keyboard Layout Setup

Keyboard setup on Linux is also incredible strange. This is also because of the X server. At the time the protocol was designed, it was assumed that people had exactly one keyboard and there was hot hot-plug of input devices. The one keyboard that was attached at boot would stay there the whole time. With my laptop, I have the internal keyboard and the external keyboard that I attach by setting the laptop into the docking station.

Whenever a new keyboard is attached, its layout will be the default layout. Any changed made with setxkbmap will be lost once the keyboard is removed again. This means that I need a little shell script calling setxkbmap … every time a new keyboard is attached. This happens after actually plugging in a keyboard, but waking up from suspend also means that the keyboards get recognized by the software.

With Awesome WM, I have xss-lock start a shell script that then calls the screen locker, i3lock. This is called such that it stays in the foreground and the shell script remains active. After I have unlocked (which is after waking up the computer), the script will call the script with setxkbmap.

On KDE, you just set a tick at "Capslock as Control" and you never ever have to think about it again. You are never greeted with a non-mapped capslock. It just works every time.

Battery Warning

KDE has a built-in widget for the battery. It is only shown in case there actually is a battery. And if the battery is running low, you will get a warning. Normal stuff.

Awesome WM, being just a window manager, has nothing to do with that. You have to enable your own battery widget, if you want one. Then you also have to write a script that detects if the battery is running low. In case that script does not run any more, you will not get any warning. So perhaps run it with cron every minute?

KDE could even shut down your machine at some critical level, if you would like that. With Awesome WM you would have to write that yourself, although a call to systemctl poweroff is not that hard.

Powering the System Down

KDE has a graphical menu and a keyboard shortcut to shut the system down. With Awesome MW I would have to write my own keyboard shortcut that would call systemctl poweroff. But that only works on systemd distributions (which are virtually all now), not without systemd. KDE has this abstracted for me, it just works.

KDE Programs Work a Bit Better

For some reason, a couple KDE programs will not start well on Awesome WM. For kmix I try to get around that by using the following:

env XDG_CURRENT_DESKTOP= kmix

Another issue are the icons, it was suggested to use the following for klipper:

env QT_QPA_PLATFORMTHEME=generic klipper

Points for Awesome WM

Windows Management

To no surprise, the window management in Awesome WM is better suited for my needs. All windows get tiled automatically in various layouts. One can move the windows around with the keyboard.

On KDE, you usually move the windows around with the mouse. Bumping a window to the top maximizes it, to the side halves it, into the corner makes it take quarter of the screen. That is nice, but not as slick as Awesome WM.

The order of the windows in the window switcher, usually Alt Tab, is by the last activation. On Awesome WM, you go move forward and backwards in the tiled windows. It is trivial to know where you will go. Selecting a certain window can be done without looking at some pop-up window.

Independent Work Spaces on Displays

In KDE, you have multiple work spaces. They include all the screens. Switching the work space will switch it on all displays at the same time. This means you cannot simply have a browser open on one screen and go through the spaces on a different screen. A remedy it to make a window sticky such that it persists on all work spaces on that display.

Awesome WM has distinct work spaces per display. This is really cool as you can then mix and match the work spaces on the left and right displays.

This probably is a personal preference. If you like the way it works on KDE better, you could change the rc.lua in Awesome WM and get the same behavior. I'd yet have to find the option in KDE to give me separate work spaces per display.

Startup Time

KDE needs a couple ten seconds to start up. This loads a lot of Qt and KDE libraries, so your programs start faster later on. And you only do that a few times per day, so that is not really a big issue.

Awesome WM is just started within a second. But then you need to have a script to load network manager, screen lock event listener, and set your keyboard layout.

Usage of Screen Estate

With KDE, all the windows usually have a decoration. You need that in order to move them around with the mouse. You can disable that though and just manipulate the windows using a special key on the keyboard and the mouse.

Awesome WM by default shows a one pixel wide border around the windows to mark them active or inactive. The status bar (at the top by default) is just very thin, you get the most out of your screen.

KDE is so customizable that you can pretty much the same experience in this regard.

Configuration File is a Program

The options in KDE are all graphical buttons you can click on in the system settings. It is discoverable, you can just browse through the options. In case you want something that is not in the options, you are stuck.

Awesome WM uses a configuration file in Lua. With that you can do pretty much whatever you can imagine. It takes a while to skim through the documentation of Lua and also the Awesome WM libraries. Then you can do interesting things like quickly programming your own widgets (in KDE programming widgets is probably not that hard either), set up the work space depending on things like display count, or network hostname.

The downside is that you must tinker if you even want a battery widget, there is none by default.