It can be useful to automatically execute a command when a removable drive is mounted to a file system. The systemd initialization system makes this a relatively easy process.
Note: If you are not familiar with the GNU/Linux command line interface, review the Conventions page before proceeding.
The Use Case
Assume that you have a collection of PDF files on your GNU/Linux system that you want to carry around on a removable drive. You want to be able to read the files anywhere you go, and after you read a file, you remove it from your portable drive.
It may be hard to keep track of what files you deleted, so you create a shell script (e.g., syn_pdfs.bash
) that syncs the files between your GNU/Linux system's directory and the removable drive's directory. The script is interactive and requires you to specify which direction you want the sync to go (e.g., to sync from the system to the removable drive, or vice versa).
The full script is available below:
You could manually run the script every time you attach the drive, but it would be nice to have the system automatically detect when the drive is mounted and launch the script for you. systemd can help you with this task.
The Implementation
When you attach a removable drive to a GNU/Linux system utilizing systemd and GNOME, a corresponding .mount
unit is created for it. To obtain the name of this .mount
unit file, attach the removable drive to your system and run:
systemctl list-units -t mount
Look for the UNIT
that corresponds to your removable drive and copy its name (e.g., media-amnesia-rem_drive.mount
).
Next, ensure that the ${HOME}/.config/systemd/user/
directory exists and create a .service
unit file in it, e.g., syn_drive.service
. The .service
unit file should have contents like the following:
[Unit]
Description=Sync my PDF files.
Requires=media-amnesia-rem_drive.mount.mount
After=media-amnesia-rem_drive.mount.mount
[Service]
ExecStart=gnome-terminal -- '/home/amnesia/Scripts/syn_pdfs.bash'
[Install]
WantedBy=media-amnesia-rem_drive.mount.mount
Finally, start and enable the new .service
unit:
systemctl --user enable --now syn_drive.service
Now, every time you connect your removable drive to the system and GNOME mounts it, a gnome-terminal
instance will automatically open and run the sync script. After you choose a sync direction and the sync completes, the script will exit and the gnome-terminal
instance will close.