The search for a new desktop still continues

Back in my last post I described how I attempted to customise the Unity desktop environment to better suit my needs within my admittedly commercial setting. The results weren’t too bad, but exposed a series of issues, some of which were purely personal and subjective, and some I felt to be genuine bugs, which I raised against the Unity interface.

This post is all about the same attempt, but this time with the Gnome 3 Shell.

So, having freshly installed Ubuntu 11.10, we need to install Gnome Shell. It’s in the repositories, so it’s a simple matter of opening a terminal and issuing the command:
sudo apt-get install gnome-shell

The steps I then followed were:

  1. Getting to a shell prompt with Alt + F2 has been disabled by default in Gnome Shell under Ubuntu 11.10. This is annoying, as it means you can’t (trivially) restart or debug the desktop environment without it. To fix it, open “System Settings” and under the Keyboard settings, go to Shortcuts, then System, and then click the “Disabled” next to “Show the run command prompt” and press Alt + F2 to re-enable the command prompt.
  2. Next I added some Gnome Shell customisations from http://extensions.gnome.org, which make Gnome Shell look a lot more like Gnome 2. Heretical? Perhaps. So shoot me.
    1. Frippery Applications Menu – puts an old-school applications menu on the left side of the top menu
    2. Frippery Bottom Panel – adds a taskbar to the bottom of every workspace
    3. Frippery Move Clock – moves the clock back to where it used to be in Gnome 2.xx
    4. Frippery Panel Favorite – adds a copy of the launcher into the top panel
  3. Next, I wanted to remove the accessibility icon from the top panel. Last time I looked, I didn’t need any of those settings, so I certainly don’t need the icon there all the time. To get rid of it, I downloaded an extension from the website of the author of all the previous extensions:
    http://www.fpmurphy.com/gnome-shell-extensions/noa11y-2.0.tar.gz

    This needs to be unpacked into ~/.local/share/gnome-shell/extensions/ by cd’ing to that directory and running something like:
    tar xvf ~/Downloads/noa11y-2.0.tar.gz.

    You then need to install Gnome Tweak to be able to enable the extension:
    sudo apt-get install gnome-tweak-tool
    and then run it with gnome-tweak-tool and choose to enable or disable whatever extensions you have loaded.

  4. As with Unity, I wanted to disable the overlay scrollbars:
    sudo su
    echo "export LIBOVERLAY_SCROLLBAR=0" > /etc/X11/Xsession.d/80overlayscrollbars

    Sadly the scrollbars still don’t have scroll buttons on them – which reinforces my thought that this is simply an issue with themes, and hence can probably be resolved once I’ve learned how themes work.

  5. Next, move my preferred set of three window buttons back to the top right of each window titlebar by running the command:

    gconftool-2 --set --type str /desktop/gnome/shell/windows/button_layout ":minimize,maximize,close"

  6. Around now it’s probably worthwhile to logout and back in again, or even reboot.

  7. Next I configured the general settings:

    1. Screen:
      Turn off at “30 minutes”
      Set screen lock “on” after “screen turns off”
    2. Power:
      Do nothing when lid closed (battery or AC)
      Don’t suspend when inactive (battery or AC)
      Shutdown if power critical on battery
    3. Time and Date:
      Panel clock to show 12hour format
    4. Removable Media:
      Tick “Never prompt or start programs on media insertion”
  8. Next I added the date to the clock:
    gsettings set org.gnome.shell.clock show-date true

  9. As with Unity, I configured the terminal by opening terminal preferences, and set the font to “Monospace 9”, the default terminal size to 100×40, and the scrollback to 10000 lines.

  10. As with Unity, I changed the default fonts throughout:

    gsettings set org.gnome.desktop.interface document-font-name 'Sans 10'
    gsettings set org.gnome.desktop.interface font-name 'Ubuntu 9'
    gsettings set org.gnome.desktop.interface monospace-font-name 'Ubuntu Mono 10'
    gsettings set org.gnome.nautilus.desktop font 'Ubuntu 10'
    gconftool --set /apps/metacity/general/titlebar_font 'Ubuntu Bold 9' --type STRING

  11. I also removed the guest account:

    sudo gedit /etc/lightdm/lightdm.conf

    Make it read:

    [SeatDefaults]
    greeter-session=unity-greeter
    user-session=ubuntu
    allow-guest=false

  12. At this point I found I had a desktop that had almost all the features of my current Gnome 2 setup, plus access to the new metaphor of the Gnome Shell when I wanted it. The only problem is that when mousing to the newly added Applications menu, it’s far too easy to hit the “hot spot”, triggering the Overview Mode.

    There are extensions to move that hotspot elsewhere, but I’d prefer to change the way it works, so it takes a more conscious effort to engage it. Unfortunately there is no configuration for this, so for this exercise I took a quick hack at the base code, which is a real cludge. I’m hopeful that it may be possible to do something cleaner with Monkey patching, but for now my change proves the concept, and makes it necessary to click on the hotspot to engage it, or use the super key (as now). To do this, edit:
    /usr/share/gnome-shell/js/ui/layout.js, and change the _onCornerEntered method so it reads:


    _onCornerEntered : function() {
    // if (!this._entered) {
    // Patched this to prevent the hot corner from engaging on cursor entering zone.
    if (this._entered) {
    this._entered = true;
    if (!Main.overview.animationInProgress) {
    this._activationTime = Date.now() / 1000;

    this.rippleAnimation();
    Main.overview.toggle();
    }
    }
    return false;
    },

    Now just entering the hotspot will not trigger the Overview Mode – but you can still click on the hotspot (which is the top left pixel), or just use the Super key.

  13. Since I was messing around in the source code I also decided to get rid of the “currently running application name” in the top panel, which again cannot be configured away. Quite why I’d need to be reminded of the name of the application I’m using is beyond me, and it takes up precious menubar space. This time, edit:

    /usr/share/gnome-shell/js/ui/panel.js, and find the AppMenuButton function prototype. Then scroll down to the “_sync” method, and make the first few lines read:

    _sync: function() {
    let tracker = Shell.WindowTracker.get_default();
    let lastStartedApp = null;
    let workspace = global.screen.get_active_workspace();
    // Add the following line to never show the button (application name)
    return;
    for (let i = 0; i < this._startingApps.length; i++)
    if (this._startingApps[i].is_on_workspace(workspace))
    lastStartedApp = this._startingApps[i];

    This works perfectly, but like the previous code change, the problem is that whenever Gnome Shell gets updated, I would need to re-hack these changes manually. Which is not good. But as I mentioned before, I’m hopeful that Monkey Patching will come to the rescue and allow me to create a proper extension for this.

And the conclusion? Well, since it’s all written in Javascript and CSS, Gnome Shell is much easier to customise, and its extension system allows (in theory) for a robust and user-friendly mechanism to change anything that one wishes. I now have a DE that has all the features I like from an “old” Gnome 2 desktop, as well as access to all the new features of Gnome Shell. See below:

There are still rough edges, some of which are probably bugs too, but overall I can get closer to what I want (which may not be what you, or the Gnome Shell developers want) with Gnome Shell than Unity.

So when I upgrade my work “production” laptop over Christmas, it will be to a Gnome Shell based desktop.

Advertisements

2 thoughts on “The search for a new desktop still continues

  1. Hi – I wouldn’t be too quick to ditch Unity… I was following your instructions but ended up with something messy and inconsistent. Now I have Unity Rotate which puts the launcher at the bottom of the screen, and I have my main applets running in the top task bar (which is shared with the app title bar). It means that apps effectively run in full screen but I can still see my battery / wireless / clock icons etc. The launcher is excellent and with the addition of a few keyboard shortcuts it’s starting to feel like a good system.
    All of the config changes / hacks are available at the click of a button in the OCDC Tweak tool, very very handy. Mike.

    • Mike, you mean you didn’t get a working system (bad!), or you didn’t like what I’d done (acceptable) ?

      I’ve not seen Unity Rotate (I’ll give it a try) but I’m not sure it’s going to work for me – I don’t like the design or operation of the Unity launcher, so just moving it isn’t a big help for me, and I really don’t want to run everything full screen, as I’m often connected to a full-HD monitor.

      In an ideal world I’d just like to stay with a traditional desktop metaphor, but that seems to be a real issue at the moment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s