Creating a simple laptop notification

Path

The final step is to set up the systemd units that will monitor and trigger the execution of powerchange.sh.

You use path units to monitor files and directories. As you will be using upowerlog.sh to update the upower.log file, upower.log is what you want to monitor. The path unit shown in Listing 4 does that.

Listing 4

powerchange.path

01 [Unit]
02 Description= monitoring upower log
03 Wants= upowerlog.service
04
05 [Path]
06 PathModified= /home/[username]/.local/share/upower.log

We already talked about the Description directive when explaining upowerlog.service and the PathModified directive is self-explanatory: It points to a file or a directory and is triggered if said file or directory is modified.

There is another new directive in powerchange.path worth looking at in a little more depth, though. Line 3 shows a Wants directive that points to the first unit you created, upowerlog.service. This ensures that if upowerlog.service is not started when you run powerchange.path, systemd will get it started. This means you don't have to run upowerlog.service yourself; systemd will do it for you the moment it parses the Wants= upowerlog.service line.

You will notice that there is no call to powerchange.sh, the script we created in Listing 3. That's because path units do not execute scripts themselves. Instead they rely on a companion service script (usually with the same name, but with the .service extension) to do that for them. After all, that is what service units are for: starting scripts or programs.

powerchange.service looks like what is shown in Listing 5. Again, this service is self-explanatory and all it does is run the powerchange.sh script from Listing 3.

Listing 5

powerchange.service

01 [Service]
02 Type= simple
03 ExecStart= /home/[username]/.local/bin/powerchange.sh

Save both powerchange.path and powerchange.service to /home/[username]/.config/systemd/user/, and you can now run powerchange.path with

systemctl --user start powerchange.path

and check that everything works by unplugging your laptop. The notification shown in Figure 6 should pop up, warning you that your machine has been disconnected.

Walkthrough

To summarize what's going on:

  1. 1 When you start powerchange.path, systemd also starts upowerlog.service thanks to the Wants directive in powerchange.path.
  2. 2 upowerlog.service runs upowerlog.sh, which starts dumping the output of upower -m into /home/[username]/.local/share/upower.log.
  3. 3 Each time /home/[username]/.local/share/upower.log changes, powerchange.path calls powerchange.service.
  4. 4 powerchange.service runs the powerchange.sh script that checks to see if the line power source is connected. If it is not, it sends a notification to the desktop.

Conclusions

I hope this has helped illustrate how you can leverage a wide variety of seemingly unrelated tools to create one single project.

In any case, systemd units, the UPower system, notify-send (and other command-line-to-desktop utilities), and Bash's daisy-chaining of terminal commands are all worth exploring further. They provide you with a rich set of tools you can use to complete all kinds of projects.

Buy this article as PDF

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

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • ACPI Tools

    Linux offers some useful command-line tools that leverage the ACPI power management framework to display detailed data on the status of a laptop battery.

  • Systemd Timers

    Systemd can start timers that automatically perform tasks at specified times. The configuration files are known as timer units.

  • Systemd Units

    Systemd units use files to control resources that Systemd manages.

  • Tutorials – Systemd

    Take control of the services running on your Linux machine

  • Systemd GUIs

    Graphical frontends make it easier to take full advantage of the Systemd process manager. We examine some leading tools for the KDE environment.

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

News