Ubuntu – How to make udev rules work

udev

I would like to learn udev rules. Here is what I do:

victor@X301A1:~$ ls /etc/udev/rules.d/
70-persistent-cd.rules  70-persistent-net.rules  README

Then:

victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules

My rule:

ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"

After saving the file:

 sudo udevadm control --reload-rules

I expected that connecting an USB device would write in the file but nothing happens.
Where am I wrong?

Best Answer

In RUN you must to put a path to a script. See man udev:

Add a program to the list of programs to be executed for a specific device. This can only be used for very short running tasks. Running an event process for a long period of time may block all further events for this or a dependent device. Long running tasks need to be immediately detached from the event process itself.

For examle, create a new script, let say hello.sh in /lib/udev with sudo -H gedit /lib/udev/hello.sh and put next lines inside:

#!/bin/bash

echo HELLO ! > /home/<username>/udev_test_log.txt

Change <username> with your user name. Save the file, close it and make it executable with:

chmod +x /lib/udev/hello.sh

Add a new rule in your /etc/udev/rules.d/01-my-first-udev.rules file like this:

ACTION=="add", RUN+="/lib/udev/hello.sh"