Pages

Saturday, July 9, 2011

Gnome-Shell Musings and Abusings in Fedora 15 (Lovelock)

Gnome-Shell (gnome3)

PART ONE:  A glancing blow & basics ... from my trying to understand the new interface.  Realize I am not a programmer, I am a systems engineer, so I am venturing into territory I wish not to tread too long as I find this stuff extremely esoteric and boring, but it is sort of required to get around with any proficiency as a power-user or someone wanting to customize the desktop before it becomes more user-friendly with GUIs and front-ends (at least nice ones).  I also do not claim to have discovered or identified this information on my own, by perusing lines of code, nor to I claim it to be accurate, simply "as how I currently understand things" ... this is the internet after all, and a blog on top of that, and one that maybe 3-4 people will ever see, but it helps me also remember things to write them and post them for future use.

While it took me some time to adjust, I am starting to customize and use functionally gnome-shell, aka Gnome3, as my Desktop Manager in Fedora 15.  I have been a long-time Gnome user, and even jumped ship when KDE4 first came out to try out the "future of the desktop" but alas came back to my comfort-zone in Gnome.  Now, that Gnome has had it's first major rewrite in, well, ever, I didn't know what to do.  I even (shhh) jumped back to the latest iteration of the KDE desktop but remember quickly why I hate KDE.  So here I am, about 4 days into gnome-shell, two jumps over to KDE, and a jump back over toe Gnome Classic with Compiz, and I am forcing myself to adjust.  It's rough, especially since I use my laptop for work and don't need the user environment to "get in the way" of productivity, but it is starting to, dare I say, make some semblance of sense.

Some of my issues with gnome-shell, some of which may be cutomizable, I list here ... note that the ability to easily customize just isn't there yet and requires either command line launching of "hidden" configuration editors or not widely advertised conf editors.  I will try to talk about these as well.


  1. The resizing of windows is very sensitive and only a small area on the window border is active to show the resize cursor.  For those of us without surgically precise hand movements, it makes like a game of Operation, constantly having to carefully maneuver to avoid losing the resizing cursor.
  2. The lack of a minimize button on windows, only close and maximize.  While this is part of the philosophy behind gnome-shell (not needing to keep minimizing windows, simply move them to a new workspace) it is a very hard habit to break.
  3. Due to #2's philosophy of using multiple workspaces, it makes cut & paste cumbersome.  While before it was as simple as highlight and double-mouse-button click, now you have to highlight, move over to the Activities tab, move over to the workspace switcher, find the application you wish to paste into, right-click once to choose the workspace, right-click again to move into the workspace, then double-mouse-button click to paste.  You go from two steps and no workspace changes to seven total steps.
  4. Lack of easily customizing the desktop, while I fully expect this to improve with time, there isn't a built-in easy well-advertised and documented way to customize the desktop.  I will talk more about this now.
The basics of Gnome desktop management remain unchanged, albeit renamed and reworked.  For example, Metacity, the long-lived windows manager is now named Mutter however it incorporates a branch of Metacity.  Mutter is built on Clutter - everyone has to be cute - which is a "scene graph" (basically a library) built on openGL (or openGLes for mobile or embedded devices - ahh the unification of platforms is afoot).  Think of openGL as the beams of a floor in your house, Clutter would be the subfloor built on top of the beams, and Mutter is the hardwood or tile or carpet put down on that which you see, walk-on (use).

  • openGL/openGLes -- a set of rules or specifications that software programs can follow to communicate with each other to produce 2D and 3D graphics, or more technically a "cross-platform, cross-language API for 2D and 2D rendering."

    If gnome-shell were a language, openGL would be the alphabet.
  • Clutter & Mutter -- similar to openGL but it is built on openGL, and further extrapolates to now define and produce the graphical user interface.  Mutter is the desktop manager, and it is built off a branch of Metacity, the legacy desktop manager of Gnome.

    Mutter is sort of the vocabulary or vernacular of a language, that define a set of standards and guidance for spoken and written word.  Without openGL (the alphabet) you can't actually create spoken or written word but without a vocabulary or vernacular you cannot express ideas with others, or interface
    .
  • Shell Toolkit:  is implemented on top of Clutter, and it provides further base shapes, actions, items such as scrollbars, windows, etc.  Think of the toolkit as a "lexical category" or more commonly known as a "part of speech," e.g. noun, pronoun, adjective.  It builds out further from the vocabulary a more detailed set of standards most commonly used.  The shell toolkit also supports CSS (Cascading Style Sheets) which is even further customization of the look and feel of the desktop and is a widely used standard in webpages but can also be applied (as it is here) to XML.
  • GObject:  not going to go too deep into this, but think of it as sort of a C++ or Objective-C library or alternative.  It provides object oriented programming that doesn't introduce a new compiler, so it is portable and cross-platform, platform independent, not introducing a new compiler or syntax like C++ does.  This would sort of be like those words from other languages incorporated into another, like Hors d'œuvre.
  • JavaScript Engine:  basically what it says, it provides a way to execute and interpret JS code ... the package is named GJS (Gnome JavaScript) in keeping with the KJS engine introduced back when KDE4 was released.  I guess, trying to keep with my analogy, this would be your brain.
  • Extensions:  provides a way to allow customization of the desktop without having to patch or submit the code to the project for incorporation upstream.  It simply loads and executes JS or CSS code.  This is a new way of thinking for Gnome, and for users.  Everything utilizes these extensions to manipulate the GJS, something as simple as removing an icon from the "system tray" requires an extension.  Perhaps this would be akin to local dialect or slang that becomes so widely used it is a part of the base lexicon ... like yo, tweet, or "buddy me".

    Gnome provides some nice, albeit sparse, documentation here, from where I grabbed the picture of the architecture shown above this section: http://live.gnome.org/GnomeShell/Technology

    I guess next I will talk some about the ways to configure the desktop with extensions, config editors, looking-glass (the GJS debugger).

No comments: