Many 3rd party applications like Java, NodeWebkit, and Gtk2 applications don't seem to be able to display a system tray icon. Why is that? Is there a workaround?
elementary OS does not support GtkStatusIcon (commonly referred to as system tray), and will drop support for the Ayatana Indicator API in the next release.
GtkStatusIcon (the old API for apps to place icons in the panel) has been deprecated since 2014 and is not implemented in elementary OS. Please file a report with application developers that are still using this API requesting that they make their app function without it.
I'm a developer and I want to implement this feature.
Currently (in 0.3 Freya), only the Ayatana Indicator API is respected. However, as of 0.4 Loki, the panel will no longer implement the Ayatana API either. It is recommended in the elementary HIG that apps not explicitly use the indicator area at all.
If you're developing a music app, your app will automatically show in the sound indicator as long as it can be controlled through MPRIS.
If your app sends notifications, missed notifications will automatically be preserved in the notifications indicator (as of 0.4 Loki).
If you want to present easily accessible actions while your app is closed or not running, follow the freedesktop.org actions specification.
How can I work around this?
sni-qt. This works for some apps:
sudo apt-get install sni-qt
Another option is to install a panel that supports this old API like
To get Slack and other apps to show a system tray-like icon in Wingpanel you have to update the apps
.desktop file and add
env XDG_CURRENT_DESKTOP=Unity to the start of the Exec key. Using Slack as an example (this works with every app I tried it on that has a system tray icon) we would do the following:
sudo nano /usr/share/applications/slack.desktop
Exec key from:
Exec=/usr/bin/slack --disable-gpu %U
Exec=env XDG_CURRENT_DESKTOP=Unity /usr/bin/slack --disable-gpu %U