Desktop Environment is not a must for Linux, e.g. Ubuntu Server edition ships without a desktop. Desktop is just another software running in Linux, and it can be swapped
The most popular Linux desktop environments: GNOME and KDE.
- KDE: Based on the QT GUI widget toolkit. QT was not GPL compatible until version 3.0
- GNOME: Based on GTK+ (Gimp ToolKit) GUI widget toolkit. GTK+ (GUI toolkit) was created to build GIMP in 1997. GNOME was founded partly because QT was not GPL compatible.
- XFCE is lightweight, good for remote desk.
E.g. Ubuntu uses GNOME by default, but has several other flavors with different desktop environments: Kubuntu uses KDE, Xubuntu uses XFCE, etc.
- X11, a.k.a. X Window System, provides a basic framework for GUI. X protocol had been version 11 since 1987, thus X11.
- X.org is a popular open source implementation of X11.
- XDG stands for X Development Group, the old name of FreeDesktop.org.
- FreeDesktop.org is part of X.org Foundation.
- Wayland is intended as a simpler replacement for X.
- GNOME and KDE are expected to be ported to it.
dbus is a message bus that allows different processes and applications to communicate with each other
dbus-x11is an older implementation of dbus that creates a new
dbus-daemonfor each graphical display that is opened (ie: when a user logs in). This
dbus-daemon(and any of its services) dies whenever that graphical session ends.
dbus-user-sessioninstead has a
systemduser service, where the
dbus-daemonis shared among all of a user's sessions (graphical, ssh, tty, etc). This
dbus-daemondies when the last of a user’s login sessions has ended.
dbus-user-sessionhas a hard dependency on
systemdwhich only supports running one graphical session per user at a time.
A fullscreen shell based on Wayland, used in kiosk, IoT and digital signage solutions, including smart mirrors, health kiosks, industrial panels and more.
Ubuntu Frame supports a range of applications built with GTK3/4, Qt5/6, Flutter, Electron and SDL2, and it also has a solution for applications based on HTML5, Java.