go-mtpfs와 작동하지 않는 Android용 udev 규칙

go-mtpfs와 작동하지 않는 Android용 udev 규칙

motoe.shUbuntu 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.shmotoemount.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(예: )의 경로를 찾으려면 대괄호 없이 umountcmd를 사용할 수 있습니다 . 예:which [cmd]

$ which umount
/bin/umount

-3- 해당 프로세스에 마운트 해제할 수 있는 충분한 권한이 있는지 확인/media/MyAndroid/

[....] 터미널에서 motoe.sh를 실행하면 올바르게 실행됩니다.

-4- 화면에 인쇄하는 경우(잘 알지 못하기 때문에 확실하지는 않지만 gmessage그렇게 보이는 것 같습니다) DISPLAY 환경 변수가 설정되어 있고(udev에 알려짐) 내보내졌는지 확인하십시오(하위로 전달됨). 껍질). 그렇지 않으면 터미널에 표준 출력이 나타날 것이라고 기대하지 마십시오. 예를 보려면 다음을 참조하세요.이것, 특히 # set DISPLAY섹션.

관련 정보