Customize your system tray with YAD
Bespoke System Tray
YAD lets you customize your system tray with one-line Bash tray scripts.
My goal was to find a simple way to group together my favorite apps and web pages into a system tray item. There are a number of different approaches to this, but for my requirements I found that the YAD (Yet Another Dialog) tool [1] gave me everything that I needed, and I could do it all with just one line of Bash script.
In this article, I will introduce Bash tray scripts with three examples. The first example will show how to create tray scripts that put Linux diagnostic data into both custom dialogs and terminal windows. In the second example, I will add pop-up browser windows to a right-click submenu. The final example will look at how to toggle the tray icon, command, and tooltip with simulated weather conditions.
Getting Started
There are a number of different tools for creating system tray applications, such as AllTray and KDocker. For my projects, I prefer YAD because it lets you create custom dialogs and it supports dynamic changes to the tray features. YAD is a command-line dialog tool very similar to Zenity [2], but with some added features such as system tray support and a more complete dialog functionality.
For Debian/Raspian/Ubuntu systems, you can install YAD with:
sudo apt install yad
Creating a Tray Script
Listing 1 is a one-line Bash script that calls YAD to create a system tray item (Figure 1). Because Bash and YAD statements can be quite long, you can make the code more readable by using backslash (\
) characters to extend a statement across multiple lines, as shown in Listing 1.
Listing 1
Creating a System Tray Item
yad --notification --image="gtk-execute" \ --command="yad --text=\"$(lsusb)\" \ --title=\"USB Info\" --fixed --button=ok" \ --text="My Fav Utility"
The yad
statement in Listing 1 uses the --notification
and --image
options to put a user-defined icon in the system tray. The --command
option calls an application or script when you click on the tray item. The --text option defines tooltips.
In Figure 1, the command-line lsusb
utility lists the USB-connected devices. The output from lsusb
is shown in a YAD text dialog.
To terminate a YAD tray script, use a center mouse click. You can also terminate from a right-click menu, which I'll discuss later.
YAD includes a handy yad-icon-browser
tool, which lets you review available icons (Figure 2). To make coding a little easier, YAD only needs the image name; a full path to the image is not required.
Many applications, such as the top
system performance tool, are best viewed in a terminal window. The YAD tray script in Listing 2 calls top
within a terminal window (Figure 3).
Listing 2
Calling top in a Terminal Window
yad --notification --image="media-memory" \ --command="xterm -hold -fa Monospace -fs 12 \ -T 'System Performance' -e 'top' " \ --text="Show System Performance"
Listing 2 calls xterm
to launch a terminal window. The -e
option executes the top
utility. The -hold
option keeps the terminal open after the command is complete. Font types and sizes can be defined with the -fa
and -fs
options. The terminal window caption is set using the -T
parameter.
Right-Click Menus
YAD also supports right-click menu command items in addition to left-click commands. The syntax for menu items is:
--menu="menu_title1 ! menu_command1 | menu_title2 ! menu_command2 ... "
Listing 3 shows the main command and then four right-click menu options (Figure 4). The main command calls iostat
(the CPU and I/O reporting utility). The first three right-click options are vmstat
(memory stats), lm-sensor
(print sensor info), and lsusb
(list USB devices). The fourth option kills the script.
Listing 3
Adding Four Right-Click Menu Options
#!/bin/bash # # tray2yad.sh - create tray item with some Bash utilities # - add a function to change YAD text options # nice_dialog() { # Use Pango markup language for custom text presentations echo "yad --text='<tt>$($1)</tt>' \ --title=$2 --button=OK \ --fixed " } # Create a system tray item with 4 right click items yad --notification --image="applications-utilities" \ --command="$(nice_dialog 'iostat -c' 'IOSTAT')" \ --menu="Memory! $(nice_dialog 'vmstat' 'VMSTAT') \ | Sensors! $(nice_dialog 'sensors' 'SENSORS') \ | USB ! $(nice_dialog 'lsusb' 'USB') \ | Quit ! killall yad" \ --text="My Fav Utilities"
Instead of using one extremely large Bash statement, the nice_dialog
function is created to make the output a little more presentable. This function adjusts font type and font size for text within the YAD dialog. For more information on how to configure YAD color and font options, see the Pango markup language [3] documentation.
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Budgie 10.10 Scheduled for Q1 2025 with a Surprising Desktop Update
If Budgie is your desktop environment of choice, 2025 is going to be a great year for you.
-
Firefox 134 Offers Improvements for Linux Version
Fans of Linux and Firefox rejoice, as there's a new version available that includes some handy updates.
-
Serpent OS Arrives with a New Alpha Release
After months of silence, Ikey Doherty has released a new alpha for his Serpent OS.
-
HashiCorp Cofounder Unveils Ghostty, a Linux Terminal App
Ghostty is a new Linux terminal app that's fast, feature-rich, and offers a platform-native GUI while remaining cross-platform.
-
Fedora Asahi Remix 41 Available for Apple Silicon
If you have an Apple Silicon Mac and you're hoping to install Fedora, you're in luck because the latest release supports the M1 and M2 chips.
-
Systemd Fixes Bug While Facing New Challenger in GNU Shepherd
The systemd developers have fixed a really nasty bug amid the release of the new GNU Shepherd init system.
-
AlmaLinux 10.0 Beta Released
The AlmaLinux OS Foundation has announced the availability of AlmaLinux 10.0 Beta ("Purple Lion") for all supported devices with significant changes.
-
Gnome 47.2 Now Available
Gnome 47.2 is now available for general use but don't expect much in the way of newness, as this is all about improvements and bug fixes.
-
Latest Cinnamon Desktop Releases with a Bold New Look
Just in time for the holidays, the developer of the Cinnamon desktop has shipped a new release to help spice up your eggnog with new features and a new look.
-
Armbian 24.11 Released with Expanded Hardware Support
If you've been waiting for Armbian to support OrangePi 5 Max and Radxa ROCK 5B+, the wait is over.