motoe.sh
Ubuntu 12.04에서 내 규칙은 Motorola Moto E가 컴퓨터 USB 포트에 연결될 때 호출되는 스크립트를 실행합니다 . 내 사용자 정의 규칙이 작동하지 않습니다.
규칙은 다음과 같습니다.
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="22b8", ATTRS{idProduct}=="2e76", RUN+="/usr/local/bin/motoe.sh"
motoe.sh
이다:
#!/bin/bash
motoemount.sh & motoedesktop.sh
motoemount.sh
이다:
#!/bin/bash
go-mtpfs /media/MyAndroid
motoedesktop.sh
이다:
#!/bin/bash
gmessage -center -timeout 3 -buttons OK:0 "message to "
rdesktop -u username -d domain -r disk:motoe=/media/MyAndroid/Interno/Download ip_address -a 8 -k pt-br
gmessage -center -timeout 3 -buttons OK:0 "another message to the user" &
umount /media/MyAndroid/
모든 .sh 스크립트에는 실행 권한 세트가 있습니다.
DRIVER 없이 DRIVER와 함께 SUBSYSTEM, SUBSYSTEMS를 사용하려고 시도했지만 효과가 없었습니다.
내가 무엇을 놓쳤는지 알 수 없습니다. motoe.sh
터미널에서 실행하면 올바르게 실행됩니다.
답변1
udev
-1- 외부 프로그램 실행 중에는 외부 프로그램 실행이 정지되므로 주의하시기 바랍니다 . 즉, 계속 진행하기 전에 외부 프로그램이 종료될 때까지 기다립니다. 여전히 장황한 프로그램을 실행할 수 있지만 백그라운드에서 실행하여 즉시 "분리"해야 합니다. yr의 경우 yr은 motoe.sh
다음과 같이 읽어야 합니다.
#!/bin/bash
{
motoemount.sh
motoedesktop.sh
} &
이는 와 동일합니다 { motoemount.sh; motoedesktop.sh }&
. 즉, 실행motoedesktop.sh
무조건종료된 후 motoemount.sh
입니다.
참고 사항:
$ motoemount.sh &; motoedesktop.sh
즉 motoemount.sh
, 종료되기 전에 실행이 시작됩니다 motoedesktop.sh
.motoedesktop.sh
motoemount.sh
$ motoemount.sh && motoedesktop.sh
동일하지 않습니다. 이 경우 motoedesktop.sh
종료값이 motoemount.sh
"0"인 경우에만 실행됩니다.
[....] 터미널에서 motoe.sh를 실행하면 올바르게 실행됩니다.
-2-는 udev
활성 터미널에서 외부 프로그램을 실행하지 않으며 쉘 컨텍스트에서 실행하지 않습니다. 프로그램이 실행 가능한 것으로 표시되었는지 확인하고, 쉘 스크립트인 경우 적절한 shebang(예: #!/bin/sh)으로 시작하는지 확인하십시오. 보는 환경은 udev
귀하(또는 $USER)가 콘솔에 있는 환경과 동일하지 않습니다. 따라서 모든 명령에 대해 절대 경로를 지정하십시오.
motoemount.sh
-> /path/to/motoemount.sh
motoedesktop.sh
-> /path/to/motoedesktop.sh
go-mtpfs
-> ...
gmessage
-> ...
rdesktop
-> ...
umount
->/bin/umount
시스템 cmd(예: )의 경로를 찾으려면 대괄호 없이 umount
cmd를 사용할 수 있습니다 . 예:which [cmd]
$ which umount
/bin/umount
-3- 해당 프로세스에 마운트 해제할 수 있는 충분한 권한이 있는지 확인/media/MyAndroid/
[....] 터미널에서 motoe.sh를 실행하면 올바르게 실행됩니다.
-4- 화면에 인쇄하는 경우(잘 알지 못하기 때문에 확실하지는 않지만 gmessage
그렇게 보이는 것 같습니다) DISPLAY 환경 변수가 설정되어 있고(udev에 알려짐) 내보내졌는지 확인하십시오(하위로 전달됨). 껍질). 그렇지 않으면 터미널에 표준 출력이 나타날 것이라고 기대하지 마십시오. 예를 보려면 다음을 참조하세요.이것, 특히 # set DISPLAY
섹션.