Проблема исходит из вашего правила: вы пытаетесь сопоставить только родительский элемент вашего устройства, а не само устройство ... см. http: // reactivated. net / writing_udev_rules.html # sysfstree для получения дополнительных сведений:
KERNEL =
, SUBSYSTEM =
, ATTR =
.. .), KERNELS =
, SUBSYSTEMS =
, ATTRS =
...) (обратите внимание на 'S ' в конце на полях). Исправленное правило:
ACTION=="add", KERNEL=="sdb1", SUBSYSTEM=="block", ATTRS{vendor}=="Kingston", ATTRS{model}=="DT 101 G2", RUN+="/bin/sh /root/auto-archive"
Почему ты сам не напишешь?
#include <dlfcn.h>
#include <sys/stat.h>
#include <fcntl.h>
int
open(const char *name, int flags, mode_t mode)
{
int (*real_open)() = dlsym(RTLD_NEXT, "open");
if (strcmp(name, "xxzzy") == 0) {
do my stuff
.....
}
return (real_open(name, flang, mode);
}