Ubuntu – How to remove the Skype panel icon

indicatorpanelskype

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?

Best Answer

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.
Related Question