우분투 한국 커뮤니티

 

지금 시간: 2013/06/20 목 4:00 pm


새 글타래 올리기 댓글 달기  [ 글: 3 개 ] 
글쓴이 내용
오프라인
글올림: 2012/07/25 수 11:00 pm 
 개인정보

가입일: 2011/05/19 목 7:43 pm
글: 1271
/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


그러나 위의 모니터링 스크립트를 실행할 필요가 있기에, 시작프로그램에 등록하시면 되겠습니다.


protochaos 님이 고침 (2012/07/25 수 11:13 pm), 총 1 번 고쳐짐

맨 위로 이동
 

오프라인
글올림: 2012/07/25 수 11:06 pm 
회원 아바타
 www  개인정보

가입일: 2008/09/01 월 8:39 pm
글: 742
느낌상 딱 저에게 필요한 것 같은데요.

아직 이 내용을 이해할 수가 없어서 공부중이에요~ :)

수고하셨습니다.

_________________
Ubuntu 12.04 32bit on a Compaq cq40
메모리 2GB
C P U Pentium(R) Dual-Core CPU T4400 @ 2.20GHz × 2
그래픽 Intel Graphics Media Accelerator 4500M (shared)
화 면 Compiz + Unity
관심사 협동조합, bash, C, C++, python, CMS


맨 위로 이동
 

오프라인
글올림: 2012/07/25 수 11:51 pm 
 개인정보

가입일: 2011/05/19 목 7:43 pm
글: 1271
앞의 예는 스크립트로 모든것을 처리한 반면..
좀더 쉬운 방법도 있습니다.

Code:
sudo apt-get install udisks-glue


$HOME/.udisks-glue.conf파일을 다음과 같이 만드세요.
Code:
#필터에 사용되는 문자열 형식
#label, type, usage, uuid

#필터에사용되는 진위형식
#optical, optical_disc_closed, partition, partition_table, readonly, removable

#매치에 사용되는 디렉티브
#automount, automount_filesystem, automount_options
#post_insertion_command, post_mount_command, post_unmount_command, post_removable_command

#매개변수로 사용될 수 있는 변수
#%device_file
#%mount_point(only replaced in post_mount,post_unmount)

#match disks {
#    post_insertion_command = "udisks --mount %device_file --mount-options sync"
#}

filter my_usb {
    label =  "MY_USB"
    usage = filesystem
    optical = false
#    partition_table=false
#    removable = true
}

match my_usb {
    automount=true
    #automount_options=sync
    post_mount_command = "mycmd.sh mount %device_file %mount_point"
    post_unmount_command = "mycmd.sh umount %device_file %mount_point"
}


시작프로그램에 udisks-glue를 등록해주시면 됩니다.


맨 위로 이동
 

예전 글 보기:  정렬 순서  
새 글타래 올리기 댓글 달기  [ 글: 3 개 ] 


접속중인 사람

이 포럼에 접속중인 사람: 가입한 회원 없음, 손님 2 명


이 포럼에서 새 글타래를 올릴 수 없습니다.
이 포럼에서 댓글을 달 수 없습니다.
이 포럼에서 자신의 글을 수정할 수 없습니다.
이 포럼에서 자신의 글을 지울 수 없습니다.
이 포럼에서 파일을 첨부할 수 없습니다.

찾기:
포럼 이동:  
Powered by phpBB © 2000, 2002, 2005, 2007, 2010 phpBB Group  
Design By Poker Bandits  
translated by ubuntu-ko