How to delay startup applications on GNOME
Back in 2017, support for status icons, pictured below, was removed from GNOME Shell (v3.26).
This has been a controversial topic (as anything in the GNU/Linux community, really) and probably will always be, but in my opinion there's no point on discussing about it.
One way to use status icons on later versions of GNOME Shell is to install the (K)StatusNotifierItem/AppIndicator Support extension by Marco Trevisan. As you can see in the picture below, the menu is rendered natively by GNOME Shell instead of Qt/GTK+, so at the end of the day the desktop integration is much more seamless that the old implementation.
The only issue with this is that not all startup applications, those that are automatically started when you log in, that use status icons will show up in the bar. The reason for this, if I'm not mistaken, is that the applications are started before GNOME Shell/the extension is rendered.
How fix this
After Googling for a couple of minutes, the typical fix for this you'll find on any GNU/Linux forum is that you should add a sleep
command before executing the application itself on the .desktop
file (located in ~/.config/autostart/
), like so:
[Desktop Entry]
Type=Application
Name=Nice App
Exec=bash -c "sleep 10 /opt/niceapp/niceapp -minimize"
Icon=niceapp
Comment=Just a nice application
This will effectively delay the startup process of the application for 10 seconds, giving GNOME Shell enough time to initialise before the application, resulting in its status icon showing in the top bar. This solution feels very hacky, though.
A few months ago I discovered that the "proper" way to do this is, however, to use the X-GNOME-Autostart
parameters in your .desktop
file instead:
[Desktop Entry]
Type=Application
Name=Nice app
Exec=/opt/niceapp/niceapp -minimize
Icon=niceapp
Comment=Just a nice app
X-GNOME-Autostart-Delay=10
X-GNOME-Autostart-enabled=true
From a UX point of view the result is essentially the same, but this solution is much cleaner in my opinion.