What I plan to achieve:

I am trying to automatically run a script when a certain SD card is inserted.


a. Script I plan to run is in /home/vivek/Desktop/Message.sh and has the following script in it. Its permissions are set as being an executable file:

echo "Card is now inserted"

b. Under /etc/udev/rules.d my rules file is called 10-local.rules and has the following rule in it:

ENV{ID_FS_UUID}=="C097-C12A", ACTION == "add", RUN+="/bin/sh /home/vivek/Desktop/Message.sh"

c. The ENV{ID_FS_UUID} of my SD card is detected by udevadm is as follows:

enter image description here

d. My rules file in /etc/udev/rules.d/ is being processed as found by 'udevadm test' pictured below:

enter image description here

ISSUE: When I insert my SD card it mounts fine. But my SCRIPT NEVER GETS EXECUTED! Any help is appreciated.


  • have you seen this: askubuntu.com/questions/642511/…
    – Elder Geek
    Oct 7, 2016 at 21:18
  • Thanks. I just looked it up. It does not seem to be directly contextual to my issue. In my problem, I seem to be doing all the right things. But, obviously, am missing something. Not able to figure out.
    – Vivek
    Oct 7, 2016 at 21:21
  • It would seem to me that you are attempting to autorun a specific script upon insertion of a specific media mounted by udev. Did I misunderstand your question?
    – Elder Geek
    Oct 7, 2016 at 21:23
  • You are right. I would like to automatically execute a certain script when a certain SD card is inserted.
    – Vivek
    Oct 7, 2016 at 21:30
  • Thats why I believe the link I provided to you is directly applicable to your issue. Did you try the solution there? Did it succeed or fail?
    – Elder Geek
    Oct 7, 2016 at 21:32

1 Answer 1


I think the problem may be that your rule file 10-local.rules is far too early in the execution list. If you rename it 95-local.rules and reload the rules with sudo udevadm control --reload (if necessary on your system), then you may have more success. Note, there is never any output from udev, so an echo in your script needs to be to a file.

The values shown by udevadm info that begin E: are ENV{} properties that may be set by earlier rules, so you should put your rules as late as possible.

  • Thanks @meuh. That made sense at first. But then remember that 10-local.rules is the only file in /etc/udev/rules.d/ so it may not matter what I rename it to be. However, I am going to try to rename it to something like a 99zzz.rules an dplace it in /lib/udev/rules.d/ in the odd event that ENV{} is being worked upon there and will come back with finding.
    – Vivek
    Oct 8, 2016 at 19:09
  • It worked when I put my new file in /lib/udev/rules.d as the file that is executed last in sequence! Thanks @meuh for the idea.
    – Vivek
    Oct 8, 2016 at 19:20
  • The files in /etc/udev/rules.d/ and /usr/lib/udev/rules.d/ are merged by order of filename, so normally local changes are made in /etc/udev/rules.d/.
    – meuh
    Oct 8, 2016 at 19:41
  • I am trying to detect USB insert regardless of the device it is. Eg: A phone, a battery pack, a biometric system etc.. which may or may not be recognized by Linux (no drivers or nothing to "Drive/run") Linux will, detect the USB insert, and then proceed to register and act on Recognized devices. For instance it will list USB device details in /dev/bus/usb/ etc... I would like to trap/process everything that is inserted into USB. This means, no dependence on stuff like udevadm. Also means I will need to trap the insert event early on the curve. How do I do this?
    – Vivek
    Oct 9, 2016 at 2:53
  • The one above is a new question, which I was wondering if I could get some on :) Pardon the super terse language, had a character count limitation. lol!
    – Vivek
    Oct 9, 2016 at 2:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .