[GNOME3] Good old applet-like notifcation area status icon at top bar.

As previously said, I've installed GNOME 3 on my Gentoo Linux notebook. It works well and I do really love new user experience of GNOME 3.

But unfortunately, seems the GNOME guys don't like the good old applet-like notification area status icon. They believe that status icons are evil and should not be used.

I don't believe that argument, and I've a bunch of application that does not design for GNOME only but also aim at cross desktop environment which use notification area status icon (for example, my Chinese input method gcin, music player deadbeef,...etc). If I could not have them in GNOME3, there is no meaning to switch GNOME 3 at all for me.

Luckily enough, after some trail and error with GNOME Shell Extension, I could at least make some my daily-use application with their notification status icon show on the top bar of GNOME 3.

Just in case someone like me need this, here is the extension and instruction to use it.

  1. Download the extension EveilStatusIconForever.tar.gz.
  2. Extract it under ~/.local/share/gnome-shell/extensions
  3. Now you should have a directory called EvilStatusIconForever@NBGentoo
  4. Open EvilStatusIconForever@NBGentoo/extension.js using your favorite text editor.

Now you should see the following code:

const StatusIconDispatcher = imports.ui.statusIconDispatcher;
const Panel = imports.ui.panel;

function main() {

    // Put those those notification you want display at top bar here.
    // The key is the text show when you hover your mouse to the notification
    // bar icon at the bottom in the lower case letter.

    //StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['gcin'] = 'gcin';
    StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['deadbeef'] = 'deadbeef';

    // Disable bulit-in icon that you don't need.
    Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['a11y'] = '';   // Accessiability icon
    // Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['volume'] = ''; // Sound Volume icon
    // Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['battery'] = '';
    // Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['keyboard'] = ''; 
    // Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = '';
    // Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['network'] = '';

}

Now note the line 10, it means that if the notification icon has a label named deadbeef, then it should appears on the top bar instead of message tray.

You could get the deadbeef part by hover your application's notification icon in the message tray just like the following screen shot. Remember you should convert it to all lower-case letter.

Now add the program you want them show the notification status icon on the top bar to this file and save it.

After saved the file, press Alt+F2, and enter r then hit Enter key. Now gnome-shell should reload, and your favorite program should have their status icon show on the top bar now just like the following screen shot.

But there is limitation for this extension -- your application notification status icon could not shows both on top bar and message tray. You need make your choice.

Finally, since GNOME people think notification status icon should be killed, I don't know if this workaround will work in the future but at least it works now!

回響