The term graphics shell
can be both a graphical shell or a command line shell running under it. Meaning, the user graphical interface (GUI) or the command line that controls the GUI functions.
First, let's begin with the shell, what "shell" means: the definition of the word "shell" means a program, or even a group of programs working together, it controls the operating system, and the hardware, so the shell is really the software gives you direct control over the computer.
A graphical shell is a shell that presents output as 2D or 3D graphics, as opposed to plain text. In other words, it is the graphical user interface (GUI) that include windows, menus ...etc that the provide more flexible interaction between the user and the system instead of the plain dull-text offered by terminal interface.
However, given that the core of the GUI is built as a shell, then all its functions can be controlled by the command line. For example, the command gnome-shell is the graphical shell for the GNOME desktop, this command provides core user interface functions for the GNOME desktop that can be adjusted by a command line. Another example, is nautilus which is the main GUI interface of files explorer in Gnome, this interface is available as a command line called nautilus. This command line has the following functions:
$ nautilus --help
Usage:
nautilus [OPTION...] [URI...]
Help Options:
-h, --help Show help options
--help-all Show all help options
--help-gapplication Show GApplication options
--help-gtk Show GTK+ Options
Application Options:
-c, --check Perform a quick set of self-check tests.
--version Show the version of the program.
-w, --new-window Always open a new window for browsing specified URIs
-n, --no-default-window Only create windows for explicitly specified URIs.
-q, --quit Quit Nautilus.
-s, --select Select specified URI in parent folder.
--display=DISPLAY X display to use
Meaning, you can control the GUI functions through the command line.
In Linux, a graphical shell is usually made of a couple of layers of software. The operating system should provide graphics drivers, and keyboard and mouse drivers. Then on top of the drivers, you have a windowing system like X11 or Wayland. It
creates higher-level wrappers around input (like providing keyboard layouts), to manage the memory that store the 2D images that are transmitted to the display driver, and to provide apps with capabilities to paint to these 2D images in memory.
Above the windowing system you have a window manager, and this is how an application translates keyboard and mouse events into system calls that manipulate the windows that the apps are painting to. This includes tasks such as launching, pausing, hiding, showing, and closing apps, detecting when an app has failed and cleaning up after it.
There are dozens of popular window managers, including Unity, Gnome Shell, Xfwm, OpenBox, i3, Xmonad and many others.
Apps can draw graphics as they see fit, however app developers usually prefer to make use of a common set of drawing tools, so their app looks consistent with all other apps running on the system. These are software libraries that you import into your app. You then call their functions to draw menus, buttons, text input, and display images like PNG and JPG images.
These common drawing tools are called "widget toolkits." The two most popular widget toolkits on Linux are Gtk+ and Qt. You can use both Gtk+ and Qt at the same time, and this is often why different apps on Linux can sometimes have inconsistencies in their look and feel.
These layers are pretty specific to the Linux software ecosystem. Mac OS, Windows, and Android all do things differently, but they all tend to integrate each of these layers into a single monolithic graphical shell software. It simplifies things, but also prevents a lot of customization.
The reason Linux complicates things is because people prefer to have choices, and they enjoy to customize their shells. If you are managing your own Linux distribution, it is a good idea to put some effort into choosing your default set of apps so that they all use the same widget toolkits, and provide a consistent look and feel.
On top of the graphical shell, you can build graphical apps, such as file system browsers, app launchers, notification and system status apps, and system configuration ("control panel") apps. These apps taken collectively make up what we call the "desktop environment."