スクリプトでのmount volume実行時にダイアログが出ないようにしたい

macOS Big Sur 11.5.1にて、下記スクリプトを決まった時間にcronで実行しているのですが、接続 or キャンセルの選択を求めるダイアログが表示されてしまいます。


このダイアログを出さずに接続するにはどのようにすればよいでしょうか。



ーーースクリプトーーーーーー


tell application "Finder"

 try

  mount volume "smb://guest:@SERVERNAME/FOLDER"

  delay 1

 on error

 end try

end tell


ーーーーーーーーーーーーーーー

※実行前は切断されている状態です

※スクリプトエディタ上で手動実行するとダイアログは表示されないようです(100%かどうかは不明です)


表示されるダイアログ



よろしくお願いいたします。

投稿日 2021/08/04 16:11

返信
返信: 10

2021/08/05 21:19 Pajerow への返信

キーチェーンの当該サーバーの項目を削除してからFinder左側の当該サーバーを選択して「別名で接続」をクリックしてみたところ、まず問題のダイアログが表示されることがわかりました。


この後、「接続」をクリックするとユーザー情報の入力を求めるダイアログが表示され、キーチェーンに登録されます。

また、「キャンセル」をクリックした場合でもキーチェーンに登録され、その後あらためて「別名で接続」をクリックすると問題のダイアログは表示されず、ユーザー情報の入力を求めるダイアログが表示されます。



キーチェーンを削除してから「⌘ + K」を実行した場合、


・問題のダイアログ→(接続)→ユーザー情報の入力を求めるダイアログ

・問題のダイアログ→(キャンセル)→再度「⌘ + K」→問題のダイアログ


というように少し動作が異なります。



しばらく時間をおいてからcronで自動実行された場合は、

キーチェーンにあろうがなかろうが問題のダイアログが表示されるという動きです。

(有効期限が切れる??)


時間を置くと「別名で接続」や「⌘ + K」でも問題のダイアログが出るようになるのかもしれません。



いずれもの場合でも問題のダイアログが出ないようになる設定やコマンドのオプションなどがあれば良いのですが。

2021/08/04 21:54 はに への返信

ありがとうございます。


試してみたところ、作ったアプリ・スクリプトファイルを手動実行するとうまくいくのですが、それをcronで実行するとうまく動きませんでした。


他の行のコマンドは正常動作し、

do shell script〜にしたところだけがエラーが出るわけでもなく無視されているようなかんじです。



※「do shell script "mount volume smb://guest:@SERVERNAME/FOLDER"」だとエラーになるので以下のようにしてみました。


do shell script "mkdir -p ~/mnt/FOLDER"

do shell script "mount -t smbfs //guest@SERVERNAME/FOLDER ~/mnt/FOLDER"



今回の件に限らず今後のためにもcronでも動く方法があれば知りたいところです。

2021/08/05 20:22 Pajerow への返信

やはりダイアログが表示されました。


キーチェーンにはguestで登録済だったのですが無関係なようです。

アクセス制御で「この項目の使用をすべてのアプリケーションに許可」にしてみたりもしたのですが効果なしでした。


同じようにcronで実行しても、

手動でサーバーにアクセスしてそれほど時間が経っていない場合は表示されないのですが、しばらく時間を置いた場合だと表示されるようです。


引き続きよろしくお願いいたします。

2021/08/06 17:54 anne3 への返信

スクリプトファイルに下記のように /sbin/ を追加することで、

cronで実行した場合でもマウントされるようになり、問題のダイアログも表示されないことを確認できました。


  do shell script "mount -t smbfs //guest@SERVERNAME/FOLDER ~/mnt/FOLDER"

  ↓

  do shell script "/sbin/mount -t smbfs //guest@SERVERNAME/FOLDER ~/mnt/FOLDER"


お二方にはシェルによる実行、キーチェーンについて情報をいただき大変参考になりました。

ありがとうございました。

2021/08/06 21:36 はに への返信

cronはそのような扱いなのですね。


実はshファイルを作ってLaunchdで動かすというのもちょっとやってみたのですが、それはそれでうまく動かずでした。

ほとんど知識がないところから、実現方法を探しながら試行錯誤でやっているもので色々つまづいてしまいます。


cronの様子を見ながら次の課題としてLaunchdでのやり方に再挑戦してみます。

2021/08/04 19:34 anne3 への返信

私はこんな感じでやってます。


tell application "Finder"
	
	mount volume "smb://Landisk(smb)._smb._tcp.local/disk1/" as user name "Guest" with password ""
		
end tell


最初の1回だけは確認ダイアログが表示されますが、

それでログイン情報がキーチェーンに保存されると、

2回目以降はダイアログは表示されません。

2021/08/06 18:41 anne3 への返信

うまく行ったとのことでよかったです。

cronで実行されるということですが、macosではcronは動作を保証されてません(アップデートとかで削除されることもあるようです)ので、launchdを使うということです。書き方とかはcronとは全く違うのですが、安定した動作を望まれるなら、launchdにしておく方が良いと思います。

macOS で cron 的なことをするのは launchd を使う

Macの「ターミナル」でのlaunchdを使ったスクリプトの管理 - Appleサポート

Macの「ターミナル」でのシェルスクリプトについて - Appleサポート


このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

スクリプトでのmount volume実行時にダイアログが出ないようにしたい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。