How can I remove the Skype panel icon?

As I use the Docky Skype indicator, and the green Skype icon doesn't look good next to all the grey ones -- it would be nice to remove the icon from the system tray.

Is this possible? How can I do it in Ubuntu 12.04 -- or other earlier versions?


Removing the Skype panel icon in 12.04 without removing sni-qt

  • If you don't care about sni-qt, removing the icon is as simple as doing apt-get remove sni-qt sni-qt:i386
  • Installing the Skype-provided deb is not a solution; all the Ubuntu version does is bundle the same Skype deb but make sni-qt a dependency to enable the icon.

A simple conf-file tweak or installing/removing a package isn't going to do it, we need to get down and dirty here.

  • sni-qt is provided by these shared libraries:

    /usr/lib/i386-linux-gnu/qt4/plugins/systemtrayicon/libsni-qt.so
    /usr/lib/x86_64-linux-gnu/qt4/plugins/systemtrayicon/libsni-qt.so
    
  • A guaranteed way to remove the Skype icon while leaving sni-qt available for other apps to use is to prevent Skype from loading these shared libraries.

  • That can be done in one of two ways: a civilized way and a brute-force bash-hacker way.


1. Highly recommended: Use apparmor to prevent Skype from loading sni-qt

  • AppArmor is a security framework built into the Linux kernel which sets permissions for what a program can and cannot access. It's enabled by default in Ubuntu.

  • An example profile for Skype is included in the app-armor profiles; I have modified that ONLY to achieve our goal of disabling the panel icon - other security features have been removed.

  • You can view the profile pasted here. Lines 24-25 are the bits that matter to us.

WARNING: This profile DOES NOT provide any other kind of security -- Skype will run normally. Please see here for a more complete Skype AppArmor profile that you can use if you want to secure Skype further.

How to install

  • To install, exit Skype if it is running and then open a terminal with Ctrl-Alt-T, and type/paste the below to install the pasted profile into your apparmor profiles directory. (You can also manually paste it to /etc/apparmor.d/usr.bin.skype if you wish)

    sudo wget -O/etc/apparmor.d/usr.bin.skype http://pastebin.com/raw.php?i=2EYME5eF

  • Then type sudo /etc/init.d/apparmor reload to reload all profiles, including the skype one we just added. Wait for a few seconds...

  • To check that the profile was enabled, type sudo apparmor_status | egrep "mode|skype"

    • The result should show something like the below: Skype should be after "enforce mode" but before any of the other modes:
      21 profiles are in enforce mode.
      /usr/bin/skype
      22 profiles are in complain mode.
      
  • Start Skype, and the panel icon should hopefully be gone!

How can I add this behavior to my own Skype AppArmor profile?

  • Just add these lines near the beginning of the profile, right after the includes (they simply prevent Skype from reading/loading the sni-qt libraries)

    deny /usr/lib/i386-linux-gnu/qt4/plugins/systemtrayicon/libsni-qt.so r,
    deny /usr/lib/x86_64-linux-gnu/qt4/plugins/systemtrayicon/libsni-qt.so r,
    

2. Not recommended: an ugly bash hack

  • I will only give pseudocode to prevent the new from falling into traps, but a simple bash script which does the following is enough to disable the panel icon too:
    1. Remove read permissions from the appropriate libsni-qt.so for the uid (user) skype is running as.
    2. Start Skype, wait a little bit so it's loaded.
    3. (The icon is gone because Skype couldn't load sni-qt.)
    4. Restore permissions to libsni-qt.so.

For Ubuntu 11.04 Natty only:

  1. Via command-line-interface (fast) -- the OMGubuntu community came up with this answer:

    in a terminal, type

     gsettings get com.canonical.Unity.Panel systray-whitelist
    

    This will output something similar to:

     ['JavaEmbeddedFrame', 'Mumble', 'Wine', 'Skype', 'hp-systray', 'scp-dbus-service']
    

    We want to remove Skype from this whitelist, so copy/paste this output in a new command and remove the 'Skype' entry, like so:

     gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Mumble', 'Wine', 'hp-systray', 'scp-dbus-service']"
    
  2. Via graphical user interface (more accessible), as proposed by con-f-use in answering this question. Simply do the opposite of what s/he proposes.

Now upon next login the Skype icon will be gone.


Note that installing the pidgin-skype Install pidgin-skype package will enable you to add your Skype account to empathy -- enabling you to control your Skype status with the elegant me menu.


There is no icon in /usr/share/icon/skype.png on my system. The tray icon is not for starting, but for reporting the status. It shows your online status (online, away, dnd, …) and also reports if new messages are incoming. As such, it’s dynamic.

It seems to be embedded in the Skype binary with no way to change it. I would very much like to be corrected on this, as I despise that green blob as well.


Remove the sni-qt package from your system, and it should go away, I think.