1

So I am currently looking into operating systems at the moment out of interest and have read quite a few articles and guides on making your own, I found Linux and how its possible to create your own from scratch this doesn't appeal to me. So I found that you can get pre-made Linux os's when you can customise your self, however after looking into it further it turns out not what I am looking for.

I'm looking to be able to customise the part of the os which the user interacts with (the application?), for instance the task bar (on windows), start button, desktop etc. as I have no interest in changing how to load files and process applications, but where do I start looking?

  • also I'm not looking to create a theme which just has some different pretty coloured button i wish to learn the basics and potentially recreate the way it is displayed.

a point in the right direction would be nice, and any things that I might need to learn on the way.

(I have no existing knowledge in os's but I do in several higher coding languages)

closed as too broad by terdon, derobert, Anthon, jasonwryan, slm Oct 1 '13 at 21:47

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • There is a huge software stack involved in the GUI, starting from the kernel DRM layer, to X or Wayland through your desktop environment (KDE, GNOME, XFCE, etc.)... – derobert Oct 1 '13 at 19:47
2

There are several different graphical user environments available for Linux, such as the GNOME, KDE or Xfce desktop environments. Such desktop environments include a panel application, such as GNOME Panel or KDE Kicker. These applications provide a task bar and an application launcher (the equivalent of the Windows start button). The desktop environments also include a window manager, a piece of software which controls the placement and appearance of application windows. The appearance of all of these can be customized with different kinds of themes.

If you want to customize the behaviour of your graphical user environment, you might also take a look at some different window managers, which come in all sorts of shapes and sizes.

Most Linux distributions ship with one of the desktop environments mentioned above, but typically provide other graphical user environments to install via their package management systems. Even if you don't happen to like the default environment the distribution ships with, you still might want use a distribution as opposed to setting up the graphical user environment of your choice from scratch, which typically is no small feat at all.

Underneath the desktop environment, most desktop Linux systems have an implementation of the X Window System, which is the system-level infrastructure for the graphical user interface. The canonical implementation of X is the X.org display server, which is used by most desktop Linux distributions these days.

Wayland is an up-and-coming display server protocol which is intended to replace the X Window System. The reference implementation of a compositing window manager for Wayland is called Weston. Both the GNOME and KDE projects have announced that they will implement support for Wayland, but currently it is not a viable alternative on the desktop, although it is used by some Linux-based In-Vehicle Infotainment (IVI) systems.

2

I'm looking to be able to customise the part of the os which the user interacts with (the application?), for instance the task bar (on windows), start button, desktop etc. as I have no interest in changing how to load files and process applications, but where do I start looking?

I'm very particular about my desktop too. GNU/Linux has the potential to be much more flexible this way than either Windows or OSX due to the modular design, but to get the most out of it you need to understand how it fits together.

Beyond the kernel, there are three layers involved in a normal linux GUI:

  1. The Xorg server; this is universal -- AFAIK, there isn't any alternative to it (Wayland not-with-standing, see Thomas Nyman's answer). It's called a server because it is; GUI applications are clients of the server. Xorg (formerly X11, and aka. the "X Windowing System") dates back to about the same time as the first MS and Apple GUIs.1 While you can use it all on its own, what it provides is very rudimentary from a user perspective. However, it is important to know about and understand that it is a distinct entity, kind of like the engine in a car. All on its own, an engine is not much use to most people, but of course, neither is a car without an engine.

  2. The window manager, abbreviated WM. While X provides the basic facilities for making windows, the WM adds things like titlebars, frames, and free standing menus. Some window managers are designed exclusively for integration with #3 below, however, many of them can also be used alone. Since the WM is responsible for window behavior and appearance, a good standalone WM can provide you with everything you need -- keeping in mind that things like taskbars are actually special forms of "window", and some WM's can configure and instantiate them. Also, taskbars and docks are often independent applications that can be run in a WM without needing #3. I totally recommend trying this at some point, but I think it may be a little confusing for new users.

  3. The desktop environment, abbreviated DE. DE's are built on top of WM's and often allow you to choose which WM to use, although initially you should stick with the default. In many ways, a DE is actually a GUI front-end to a WM; WM's generally are configured with text files, and the DE provides a point and click interface. They usually also include an integrated application suite, the centerpiece of which is a file browser. However, those applications often don't need the DE (e.g., my fav terminal app is XFCE's Terminal, but I don't use XFCE). Taskbars, as already mentioned, can be an example of this too. So there is a lot of potential for mixing and matching here.

I'm not an authority on the state of the major DE's, so I can't say exactly how flexible they all are WRT configuration. Traditionally, flexibility is more a characteristic of the WM -- the DE ends up limiting this to fit its particular vision. However (you were warned!) a truly dynamic standalone WM usually involves a lot of work with text files about on par with the complexity of HTML/CSS -- it's not hard to do something basic, but getting exactly what you want easily takes some experience.

If you aren't adverse to burning some CD's, I'd cut a few live CD's that use different DE's -- Gnome, KDE, XFCE, etc. -- then see if you can figure out how to make them look the way you want them to look in a short period of time. That may not happen, but it should give you an idea of which one you prefer to work with. Ignore the themes and colors at that point and focus on function.

Currently I use KDE as my primary environment. As mentioned, I am very particular and it is very configurable. I have not looked at GNOME in a long time and don't know how it compares, configurability wise, but I would think those would be the two big candidates for flexibility in the DE category.

The final thing that should be mentioned is the widget set, which is sort of a layer like 1,2,3 above (but not really).2 The widget set is what determines the appearance of generic stuff inside the window frame (buttons, scrollbars, etc.), which is why there are TWO distinct, independent forms of "theme" in play with the GUI appearance: the theme of the widget set (inside the frame), and the theme of the WM (the frame, the titlebar). The most common widget set in linux is GTK, which was developed in conjunction with GNOME but is used by other DE's as well. A significant exception to this is KDE, which uses Qt, a cross-platform toolkit.

1 Yes, that's older than linux. X is used all across the "unix-like" world.

2 "Widget set" is a bit of a loose term since Qt and GTK (+glib) do significantly more than just provide widgets, but that's good enough for now.

Not the answer you're looking for? Browse other questions tagged or ask your own question.