リモート AppleEvent (2)

さて、前回の準備はできたでしょうか? Ethernet で接続した iBook と iMac。iMac の方から iBook を AppleScript で操作しましょうというこの試み。この手の情報って探してみてもなかなか見つからなかったりします。

「システム環境設定」の「共有」の「サービス」タブにある「リモート AppleEvent」にチェックを入れたらこれだけで Mac を遠隔操縦することができます(要注意。セキュリティについてはここでは触れません)。では、スクリプトを書いて試してみます。

通常、Finder のスクリプトを書くときは、次のようにして Finder を指定します。

tell application "Finder"
    (* ここに処理を記述 *)
end tell

リモート AppleEvent で接続された Mac(ホスト)の Finder を操作するには、次のように Finder を指定します。

application "Finder" of machine "eppc://Mac の名前"

ホスト側の Mac の URL 指定が追加されます。「eppc://」は、リモート AppleEvent が利用するプロトコルです。「Mac の名前」は、「システム環境設定」の「共有」で設定したコンピューターの名前になります。iBook には、iBook800 という名前を付けました。これは、「共有」の「コンピューター名」の下の「ローカルサブネット上のほかのコンピュータから、iBook800.local でこのコンピュータにアクセスできます」というように書かれている「iBook800.local」になります。Bonjour で使われるコンピューター名になるのですが、同じものをリモート AppleEvent でも利用します。

先ほどの Finder の指定は、次のようになります。.

tell application "Finder" of machine "eppc://iBook800.local"
    (* ここに処理を記述 *)
end tell

なんらかの処理を記述して構文確認を行うと、ホスト(iBook)の認証ダイアログが表示されます。構文確認を行うだけでも認証が必要なのですね。それではいささかめんどうなので、通常は using terms from を使ってクライアント側(iMac)のアプリケーションの用語辞書を使って構文確認を行います。

using terms from application "Finder"
    tell application "Finder" of machine "eppc://iBook800.local"
        version
    end tell
end using terms from

これで構文確認はできます...?できないですね。思いっきり認証ダイアログが表示されます。これを回避するためにホスト側を変数に入れてしまいます。

set remoteFinder to application "Finder" of machine "eppc://iBook800.local"

using terms from application "Finder"
    tell remoteFinder
        name of startup disk
    end tell
end using terms from

これでクライアント側(iMac)の Finder を使って構文確認ができます。では、実行してみましょう。

...また、認証ダイアログが表示されましたね。このダイアログに「キーチェーンに追加しますか?」というチェックボックスがあるのでホスト(iBook)のユーザー名とパスワードを入力してキーチェーンに追加しておきます。

認証は、キーチェーンに追加して全て解決、というわけには(なぜか)いきません。たとえば、AppleScript を終了して再度スクリプトを実行するときに先ほどの認証ダイアログが表示されます。どうしてでしょう?安全のため?ともかく、これでは認証ばかりで面倒です。次は、これを解決してみましょう。

0 件のコメント :

コメントを投稿