I have background process running as the logged on user that frequently tries to mount an AFP share to backup some data. If the share cannot be mounted this should just be ignored.
In my script (bash, actually) I am mounting the share via an AppleScript mount volume
snippet. In contrast to the mount
or mount_afp
commands, this appears to be the only way to automatically authenticate the user at the respective server with credentials from the Kerberos ticket or the user's keychain. In particular, I do not want to have to store a password in the script:
try
mount volume "afp://server/share"
on error errText number errNum
log {errText, errNum}
end try
This works generally fine, but despite the try ... on error
block, the 'mount volume' command always opens a dialog in case of an error:
I am looking for :
mount
, respectively mount_afp
to use the credentials from the Kerberos ticket and the user's keychain without having to provide a password. I have googled and tried for a couple of hours, but not yet found any solution.
I have been fighting this problem on my mac mini media server for ages and believe i finally have a solution.
I have split it into two scripts:
the first one runs on idle (rather than a repeat loop) and calls a second script every 10 seconds that handles the drive mounting.
--------------------------------------------------------------------------------------
--"On Idle Launch Basic Drive Mounter.app"
on idle
try
--script loads on startup, so first we wait 5 seconds to ensure network
delay 5
--run the mounter script which is on the desktop
run script file ":Users:localusername:Desktop:Basic Drive Mounter.app"
on error errStr number errorNumber
--listen for the apple quit command and quit
if the errorNumber is equal to -128 then
quit
return 1
--listen for the unknown error and ignore it
else if the errorNumber is equal to -5014 then
return 5
else
--all other errors are also ignored
return 5
end if
end try
--return with a wait of 5 seconds before next idle run
return 5
end idle
--------------------------------------------------------------------------------------
the second script does the checking of the network, then tries to mount the volume using a shell mount. i originally used a finder "mount volume" and that codes exists as comments too, but I didn't like the dialog popping up on errors; even if only for a second, so i moved on to shell script.
--------------------------------------------------------------------------------------
--"Basic Drive Mounter.app"
try
set IP_address to "xxx.xxx.xxx.xxx"
set IP_Valid to true
try
do shell script ("ping -c 2 " & IP_address)
on error
set IP_Valid to false
end try
if IP_Valid then
tell application "Finder"
if disk "work" exists then
else
-->>shell script version
try
do shell script "mkdir /Volumes/work"
end try
do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
--<<shell script version
-->>finder mount volume version
--with timeout of 1 second
-- mount volume "afp://xxx.xxx.xxx.xxx/work"
--end timeout
--<<finder mount volume version
end if
end tell
end if
on error
-->>finder mount volume version
--on error finder returns an error dialog which needs to be closed to go back and retry
--tell application "System Events"
-- keystroke return
--end tell
--<<finder mount volume version
return 0
end try
--------------------------------------------------------------------------------------
not all of this is my own code, so many thanks goes out to the applescript community and google - remember to pay it forward
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With