Customize your system tray with YAD

Bespoke System Tray

© Photo by Suhyeon Choi on Unsplash

© Photo by Suhyeon Choi on Unsplash

Article from Issue 268/2023

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


Figure 1: A one-line Bash script creates a system tray item that displays the output from lsusb in a dialog.

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.

Figure 2: You can use yad-icon-browser to find and view available icons.

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


Figure 3: YAD lets you launch commands in a terminal window.

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


Figure 4: Right-clicking on the system tray item displays four menu options.

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

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • DeskTOPia: JWM

    JWM is a window manager for Linux users who demand an efficient GUI and are not afraid to fire up an editor to get it. If this sounds like the kind of tool you are looking for, read on to discover more about JWM.

  • Cinnamon and Mate

    The Cinnamon and Mate desktop systems have stirred up plenty attention around the Linux world. We'll show you around these innovative new desktop systems and help you decide which is right for you.

  • deskTOPia: Trayer

    Some applets deposit icons in the system tray of the KDE or Gnome task bar. If you don’t use KDE or Gnome but you still want the system tray applets, check out Trayer.

  • Whiptail

    Whiptail interfaces add menus and information pages to your Raspberry Pi projects.

  • Hard Disk Sentinel

    Hard Disk Sentinel helps you monitor mass storage devices with a fully automated process minus the bells and whistles.

comments powered by Disqus
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.

Learn More