답변:
systemd 에는 훨씬 좋은 솔루션이 있습니다. 미디어에 의존하고 원하는 서비스를 작성합니다. 예 :/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
그런 다음 서비스를 시작 / 활성화해야합니다.
sudo systemctl start your.service
sudo systemctl enable your.service
마운트 후 systemd는 트리거 스크립트를 시작합니다. udev 규칙에 비해 장점은 시스템 장치를 추가 한 후가 아니라 마운트 후에 스크립트가 실제로 실행된다는 것입니다.
사용 사례 : 자동 백업하려는 암호화 된 파티션이 있습니다. 장치를 추가 한 후 암호를 입력해야합니다. 백업 스크립트를 udev에 연결하면 암호를 입력 할 때 스크립트가 실행을 시도하는데 실패합니다.
리소스 : udev를 사용한 스크립팅
참고 : 다음 과 같은 장치 장치를 찾을 수 있습니다.systemctl list-units -t mount
systemctl enable your.service
. 스크립트 파일은 실행 가능해야합니다.
Requires=
, After=
그리고 WantedBy=
모두와 선을 media-bb.mount
그리고 media-BB.mount
노틸러스 나 쇼 "BB"가 아닌 "BB"로 볼륨 때문이다. 대문자를 제외하고 동일한 오류 메시지. 뭐가 문제 야? 어떻게 든 그 media-<something>.mount
서비스 를 만들어야 합니까?
에서 기기를 찾아 시작하십시오 lsusb
. (예 : ID를 참고 0a81:0101
)
/etc/udev/rules.d/
via를 통해 새로운 udev 규칙 파일을 생성하고 sudoedit /etc/udev/rules.d/100-mount-videos.rules
다음과 같이 새로운 규칙을 생성합니다 :
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
의 ID를 어떻게 사용했는지 참고하십시오 lsusb
.
그런 다음 작업을 수행하기 위해 스크립트를 작성하면됩니다. 간단한 마운트 명령이 작동해야합니다. sleep 5
파일 시스템이 초기화 될 때까지 기다릴 명령 이 필요할 수 있습니다 (주로 마운트하기 위해 gnome을 남겨 두는 경우 먼저 마운트 할 수 있으며 잠자기 상태가 필요하지 않을 수 있습니다).
Allan에서 추가 : 오래 실행되는 스크립트는 "이 장치 또는 종속 장치에 대한 모든 추가 이벤트"를 차단할 수 있습니다. My Mint 매뉴얼 페이지에 "오래 실행중인 작업을 이벤트 프로세스 자체에서 즉시 분리해야합니다." 이를 수행 할 수있는 기술에 대한 정보는 없습니다.
Oli의 답변 : 다음과 같이 포장하십시오 : https://askubuntu.com/a/106359/449
/root/
루트 만 편집 할 수있는 곳에 보관 하십시오.
ATTRS {idVendor} 및 ATTRS {idProduct}의 값을 얻는 또 다른 방법은 Ubuntu 12.04에서 테스트 한 것입니다.
USB가 마운트 된 위치를 찾으십시오.
$ mount | grep /dev/sd*
이것은 다음과 같은 것을 보여줍니다.
/dev/sdb on /media/SOMEDIR type vfat ...
장치 정보를 얻으려면 udevadm을 사용하십시오.
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
출력은 다음과 같아야합니다.
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
이제 ATTRS {idProduct}의 모델 ID와 ATTRS {idVendor}의 공급 업체 ID를 사용하십시오.
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
장치 마운트 및 마운트 해제에 대한 파일 관리자 (노틸러스, konquerer, gnome 등)의 제어를 방해하지 않으려면 udev 경로를 사용하지 않는 것이 좋습니다.
대신, 사용 udisks - 접착제 시스템 사용의 udisks이 (거의 모든 할) 경우.
설치가 끝나면 ~/.udisks-glue.conf
홈 디렉토리에 다음과 같이 구성 파일 을 만드 십시오.
다음 예제는 SD 카드를 꽂을 때마다 카메라의 GPS-Assist 데이터를 업데이트합니다.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
그런 다음 부팅하거나 로그인 할 때 udisks-glue가 시작되는지 확인하십시오. 그놈의 시작 응용 프로그램을 통한 즉
@sumid의 답변에 문제가 있습니다. 서비스를 시작 해서는 안됩니다 . 당신은 그것을 활성화해야합니다.
파일: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
그런 다음 서비스를 활성화하십시오.
sudo systemctl enable your.service
그게 다야.
참고 : 다음을 사용 하여 중간 레이블을 찾을 수 있습니다.sudo systemctl list-units -t mount
참고 2 : 서비스가 실패한 경우 (예 : 스크립트를 실행할 수없는 경우) <old_mount_point_name>1
다음 번에 USB 장치를 마운트 할 때 마운트 지점이 변경됩니다 . 이 문제를 해결하려면 다음을 실행하면됩니다.sudo systemctl reset-failed