The components of a Linux Desktop Environment
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:
Floating, which is what most Windows and Mac users are familiar with: you can move the window anywhere you want to on screen as if it
floats
freely around your screen.Tiling: the screen is split into rectangular regions that all fit neatly together like tiles on a plane, and every window fills the entire area of one of these tiles. No two windows ever overlap, which is what many people like, as it uses all of the space on the screen for displaying content. It also saves you the trouble of ever using your mouse to carefully position windows on screen.
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.
Launcher
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:
Take keyboard and mouse events, translate them to an ANSI character stream, and dump these characters into a CLI program via a special socket called a
TTY
.Take the stream of ANSI characters produced by a terminal-capable program over the TTY and translate these characters into instructions for moving the text cursor around the screen, and painting colored (or plain) characters to those positions on screen.
Let users control the how text stream is displayed -- what color themes are used, how much of the character stream is kept in memory so you can scroll up and see it, and maybe provide fancy features like copy/paste, or multiple tabs.
Decorator
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.
Compositor
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.
Panel
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.
Dock
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:
Gtk, programmed in C and an object-oriented language called Vala.
Qt, programmed in C++ and a JavaScript-like language called QML
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.
Conclusion
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.