Perl spies on a sniffer
Secret Agent
Many Ubuntu users are blissfully unaware that the Zeitgeist daemon is shoulder surfing them and logging their desktop actions. Several Perl scripts can help sanitize the sniffer report and reveal interesting facts about a user's habits.
Precisely how does the Nautilus browser know which files an Ubuntu user edited recently to be able to display them in the Recent column? Figure 1, for example, lists two screenshots that I recently viewed with the Eye of Gnome (eog
) photo viewer.
Nautilus and Eye of Gnome are two totally different applications that do not exchange any data, but an unofficial helper named zeitgeist
runs in the Ubuntu desktop's background, greedily absorbing information about what's going on with the numerous applications running on the desktop. If you are interested, you can type
ps aux | grep zeitgeist
to see the daemon running with your user ID in the process list. Gnome applications connect to the Zeitgeist daemon on D-Bus, and the daemon inquisitively logs any relevant transactions in its database, while providing this information in turn to other applications interested in it – for example, the Nautilus browser.
To store the desktop events, Zeitgeist uses a SQLite database, which other utilities or even a hand-crafted Perl sniffer can also read and evaluate. If you want to watch the daemon snapping up events that roll in from the desktop, you can type
zeitgeist-daemon -r --log-level=DEBUG
to launch the daemon in debug mode. The -r
option actually stops the daemon running in the background and replaces it with one running in the foreground.
The Future Is Uncertain
Having said this, the Zeitgeist project on Launchpad [1] seems to have been dormant since 2013. Today, searches return critical comments from users concerned about data protection, who are frantically trying to kill off the daemon without crippling their Ubuntu desktop at the same time. Although the project might not have a rosy future, however, it is still worthwhile peeking behind the curtains to perform a critical analysis of the collected data.
Respecting Private Matters
Because logging actions on the desktop without so much as a by-your-leave can infringe on users' privacy, the Unity desktop lets users restrict Zeitgeist's collecting mania and even discard all the data collected thus far. In System Settings below the Security & Privacy entry, users can tame the daemon by disabling a number of checkboxes. Zeitgeist is then given a blacklist and ignores any events that come in from blocked applications.
Figure 2 shows that Zeitgeist can also be talked into avoiding logging actions that relate to music, movies, photos, chat logs, or documents. You can even press Clear Data to tell the daemon to delete permanently any data it has collected thus far. To see what exactly the Zeitgeist daemon collects, you can use the graphical zeitgeist-explorer
from the package of the same name (Figure 3).
On a newly installed Ubuntu, Zeitgeist will log anything it can get its hands on. However, not all applications are as verbose as Eye of Gnome. For example, if you want Zeitgeist to record any tracks that you play with Rhythmbox, you actually need to install the rhythmbox-plugin-zeitgeist Ubuntu package. For Chrome or Firefox, other plugins are available for users who want to track their own web activities.
Perl Investigates
The Perl scripts introduced in the following sections rummage through the data collection. For example, to discover which new photos the user last viewed, Listing 1 [2] reads the uri
table in the SQLite activity.sqlite
database below .local/share/zeitgeist
in your home directory. The SQL SELECT * from uri
query simply lists all the rows of data from the uri
table in which Zeitgeist assigns index numbers to newly discovered paths or URLs.
Listing 1
urls-recent
The CPAN DBD::SQLite module used in the listings for querying SQLite contains not just the Perl wrapper but also the C code for the SQLite project itself. After installing the sqlite3 Ubuntu package, you can type
sqlite3 activity.sqlite .schema
in the Zeitgeist database's directory to see which tables exist in the database. Later, you can look into the table contents with interactively submitted SQL commands.
Listing 1 uses the DBI module's prepare()
method, with the loaded SQLite driver to prepare the SQL command, and then runs execute()
against the statement handle that is returned to transfer this to the SQLite engine. As is typical in DBI, repeating the call to fetchrow_array()
snaps up the rows of results returned by the database engine. Each of these rows contains (in the case of the uri
table) two column values – id
and value
– which the script assigns to two Perl variables of the same name.
Figure 4 shows that Listing 1 not only returns paths to images but also strange-sounding URLs, like application://firefox.desktop, which are indicative of events in which the user called specific applications (e.g., the Firefox browser).
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
-
Plasma 6.3 Ready for Public Beta Testing
Plasma 6.3 will ship with KDE Gear 24.12.1 and KDE Frameworks 6.10, along with some new and exciting features.
-
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.