The components of a Linux Desktop Environment

Home About GitHub

This is a continuation of another article I wrote on how to improve your Linux skills, in the section titled Learn what a Desktop Environment (DE) is. There I talk about what I consider to be the top-4 DEs in Linux, but I also list 5th option: Nothing, i.e. make up your own from stock parts. In this article, I go over what those stock parts are.

NOTE that this is not essential knowledge, you can use Linux fine without knowing any of this at all. It is good enough to know that there are different desktop environments, and that you can install as many of them as you want, and switch between them freely without rebooting. It is also good to know that there are various components of the desktop environment and that you have a choice in the various odds and ends that you use.

In brief:

So if you really want to go down the rabbit hole of customizing every single last aspect of the graphical user interface of your computer, this article will hopefully give you an idea of what is involved. Of course, on Linux, you can find various choices for each one of these parts listed, and you can mix and match between your favorites. Linux people tend to be the most fussy over the window manager, the launcher, and the icon pack, since these parts have the biggest impact on the look and feel of your computer, and how using each of these things can help you get things done more quickly and easily, which is good because you will be spending a lot of time customizing your Linux GUI. The terminal emulator tends to also be fussy, since Linux people often do their work in a terminal emulator.

You may notice that many of these components are satisfied by a single piece of software, this is because often times one piece of software combines all of the functionality into a single program, so you will see some software listed many times under many components.

Important Components

Other Components

Also, I must give a shout-out to the Unix Porn sub-Reddit, people who obsess over GUI customization (ricing, as they call it) like to hang out there and show off their work, and you can learn a lot from the comments section, so if you are on Reddit, spend time learning from the people there, and reading their wiki.

Window Managers (WMs)

This controls how windows are arranged on screen and how to manipulate those windows. It has rules for deciding where to place a window when an app launches, how to let user hide windows without closing them, and show hidden windows when needed. It captures keyboard and mouse events to trigger these actions. It also has rules for deciding how big windows should be.

There are 2 main categories of WMs:

Tiling WMs tend to work better with multiple display monitors, since each display can have it's own set of tiles, and there is no need for special rules dealing with windows that are partly on one display and partly on another.

That said, most tiling window managers do allow you to place a window in floating mode, and most floating window managers have special commands you can run to tile your windows as if you were using a tiling window manager. The big difference between tiling and floating WMs is what their default mode of operation is, floating or tiling.

Personally, I use a floating WM, but I run all of my apps in full-screen mode, so essentially the apps I use are displayed in a kind of tiling mode with just one single tile on screen.


This much like the Windows Start Menu or Mac OS X Spotlight feature, lets you search for apps to open, search for project files to work on, search for open app windows, search Google, search documentation (like manual pages), some even have a built-in calculator -- anything you could possibly search for is in one place. Since it tends to be used so often, it is usually programmed to be activated by pressing the Windows or Super button on your keyboard ("bound to the super key," we like to say).

Icon Packs and Fonts

Designing a good set of icons is an extremely labor-intensive process, as is designing a good typeface or font, and graphic artists can make an entire career out of just designing icons and/or fonts. So it is rare to find individual people, or purely volunteer-driven projects that produce icon sets or fonts that are freely available for anyone to use. What you can find are graphic artists who's salary are being paid by a corporation like Google, IBM, or Facebook, which invest heavily in Linux technologies, though I do not mean to say that purely community-driven graphic design projects are nonexistent.

Terminal Emulator

A terminal emulator is the software that lets you communicate with command line capable programs like the Bash shell, CLI text editors, and so on. I like to think of it as a kind of very old-school web browser (we're talking 1970s era old-school).

Teletype terminals use the ANSI protocol instead of HTML. The ANSI protocol is an extension of the ASCII character set, with control codes for moving a printer head around a piece of paper, selecting colors from a color ink ribbon, and stamping characters onto the paper. Rather than communicating over the Internet to a web server like a web browser would, a program running on a mainframe computer that can produce these ANSI control codes to control your teletype printer can communicate over a computer network to an end user (you) at the end point (terminal point) of the network who would be sitting at your printer and keyboard-equipped computer console which is vaguely reminiscent of the console of a pipe organ. Likewise, the console keyboard (which is more like a typewriter than an organ keyboard) can send input characters back to the computer over the same network.

A terminal emulator, as the name implies, emulates the computer network terminal (e.g. your Teletype printer console) in software!, saving untold amounts of money that would otherwise be wasted on ink, paper, and printer maintenance costs, while taking up none of the space of a Teletype console in your office. So I highly recommend you use a terminal emulator rather than a physical terminal, rather than even a video terminal as sleek as those may be.

The job of a terminal emulator is 3-fold:


This controls the little buttons close, maximize, and minimize buttons that you see around windows, and is often built-in to the window manager, but not necessarily. Decorators are not necessary, people who do without them rely entirely on keyboard controls to manipulate the windows on screen.

To use a decorator, you need what is called a reparenting window manager, that is, it allows the decorator to become the parent window of any window that appears so that it can draw it's child child window (the window produced by the app), and then draw decorations around it. Some tiling window managers cannot do this.


This controls window transparency, and can also drop shadows below a floating window to make it look like it is just above the desktop or windows below it. Compositors are often built-in to the window manager, but not necessarily.


This the strip at the bottom of the screen (usually) where you have your clock, system notifications, start menu, tabs to select windows, and various other components that are nice to have around at all times.


This like in Mac OS X, a place to put icons for launching apps, and tells you which apps are already open.

File Manager

This lets you move files and folders around, and lets you open files by double-clicking on them, also lets you preview files like photos and videos before you open them.

Control Center

This lets you setup WiFi and networking, BlueTooth, USB peripherals, sound volume, desktop wallpaper, change color themes, setup foreign languages, and so on. A control center also can be installed piece wise, with a different app for each system control, or you can have all control in a single app.

Widget Themes and Color Themes

Widget themes and color themes control how GUI components are drawn on screen. There are 2 main competing widget toolkits used by Linux app programmers:

Unless you are careful about which applications you install (personally, I am careful to only use Gtk-based apps), you will probably end up installing a mix of both Gtk and Qt-based applications on your computer over time. Unfortunately, each toolkit has a completely different mechanism for controlling the look and feel, so if you want your apps to all have a consistent look and feel, you need to install similar themes for both toolkits.

However, there are apps for both toolkits that allow you to manage themes, and there are people who have created identical themes using both toolkits, so it is just a matter of finding a good theme that works well for both toolkits.


As you can see, there are a large number of components involved in customizing the look and feel of your Linux computer. On other operating systems, these components are chosen for you, and indeed, many Linux distros will choose for you a good set of default components that work well together. But in Linux, you always have a choice, and people with a strong opinions about aesthetics, especially UI/UX designers, tend to enjoy spending countless hours customizing the look and feel of their Linux computer.

What is nice about it is that often times you can install any or all of the above components onto your computer at the same time, and you can even switch components live, without rebooting your computer. The most you usually have to do is logout and login again (entering your password) to trigger the change to the desktop environment. This makes it really easy to try out various components, and mix and match the various parts until you get exactly the look and feel you think is best.