/etc/udev/rules.d/90-usbdisks.rules
파일을 다음과 같이 작성
Code:
ACTION!="add|change", GOTO="usbdisks_end"
SUBSYSTEM!="block", GOTO="usbdisks_end"
ENV{ID_TYPE}!="disk", GOTO="usbdisks_end"
#ENV{ID_BUS}!="ata", GOTO="usbdisks_end"
ENV{ID_BUS}!="usb", GOTO="usbdisks_end"
ENV{DEVTYPE}!="partition", GOTO="usbdisks_end"
KERNEL!="sd*|hd*|sr*", GOTO="usbdisks_end"
RUN+="/bin/sh -c 'echo %E{DEVNAME} `date +%F.%T`> /tmp/usbdisks.evt'"
LABEL="usbdisks_end"
그러나 이코드를 수정하여.. 노틸러스를 실행한다던가 하는것은 불가능합니다.
왜냐면 여기서 실행하는 명령은 아주 짧은 실행시간을 가진프로그램만 가능합니다.
길어지면.. 모든작업이 취소됩니다.
그러므로, 이제.. 이렇게 생성된 파일이 변경되었는지 감시하고, 변경되면.. 프로그램을 실행시켜 주면 됩니다.
감시프로그램 설치
Code:
sudo apt-get install inotify-tools
앞서 udev룰을 사용하여 생성된 /tmp/usbdisks.evt파일을 감시하여
변경되면 $HOME/bin/usbdisks-autorun.sh을 실행
이것은 단지 장치가 변경됨을 인식하여, 자동마운트하고 실행해주는 모니터링 스크립트
Code:
#!/bin/sh
EVT_FILE=/tmp/usbdisks.evt
#파일이 없으면 생성
touch $EVT_FILE 2>/dev/null
while inotifywait -e modify $EVT_FILE;
do
dev=$(cat $EVT_FILE|cut -d " " -f1)
mounted=$(sleep 1;mount|grep "$dev"|cut -d " " -f3)
#자동마운트가 안되어 마운트가 필요한 경우
[ -z "$mounted" ] && mounted=$(udisks --mount $dev|cut -d " " -f4-)
#실행하고자하는 명령
$HOME/bin/usbdisks-autorun.sh $dev "$mounted"
done
모니터링 스크립트에 의해 실행되는 스크립트로, 이경우는 파일시스템의 라벨로 구분하여,
원하는 명령을 실행하는 스크립트입니다.
Code:
#!/bin/sh
#$HOME/bin/usbdisks-autorun.sh
LABEL=$(blkid -o value -s LABEL "$1")
UUID=$(blkid -o value -s UUID "$1")
DIR="$2"
case "$LABEL" in
MY_DATA)
#실제 실행되는 부분.. 이부분을 수정하시면 됩니다.
rsync -abz "$DIR/" "$HOME/mybackup/"
;;
esac
그러나 위의 모니터링 스크립트를 실행할 필요가 있기에, 시작프로그램에 등록하시면 되겠습니다.