Archive for the 'Parallels Desktop' Category

2014/07/01 Parallels Accessを使ってiPadをリモートAppleScriptプログラミング端末に

コンピュータを持たずに自転車で出かけて、ふらっと入った喫茶店でいいアイデアを思いついて、プログラムを実際に書いて試したいと思うことがままありました(だったら最初からMacBook Airを持って歩けよ、というツッコミは当然なんですが)。

そのため、MacBook Airよりも非力でよいので薄くて軽いMac(のようなもの)が作れないものかと思い、いろいろ調べてみました。

img_2581.JPG

とくに最近、8インチのIntel Tablet(Windows 8)が手頃な値段で登場しはじめており、ハードウェア的にはほとんどMacもWindows PCも変わらないため、

  「8インチTabletの上でOS Xが動いたらいいのにな〜」

そんな動機から調べてはみたものの……ハイパワーなPCを組んでOS Xをインストールするという方向では世間的にノウハウがたまっている一方で、バッテリー動作のPC TabletにOS Xを入れて動かすのは、世間的にもノウハウがほとんどないことが分ってきました(それ以前に怪しい領域なので……)。

そんな折、仮想環境であるParallels Desktopをバージョン9にバージョンアップし、新機能についてひととおり確認を行っていたところ……なかなか面白い機能があることに(いまごろ)気付きました。

Parallels Desktop for Mac v9が標準搭載している機能で、リモートデスクトップ機能の「Parallels Access」というものが存在しています(Parallels Desktopと別アプリになっており、これだけインストールすることも可能)。以前の(自分はパスした)バージョンからこの機能が存在していることはうっすらとは覚えていたものの、それほど重視していませんでした。

このParallels Accessは、LAN内だけではなくネットワーク的に直接つながっていない場所にあるMacに対して、iPhoneやiPadからリモートアクセスするというものです(アクセスする端末、アクセスされる端末ともにインターネットにはつながっている必要がある)。

Team Viewerみたいなもの」といえば分りやすいでしょうか。

iOS用とAndoroid用にリモートアクセス端末アプリがあり、iOS用をApp Storeからダウンロード(フリー)して試してみました。

parallels_access.png

主にWindowsのアプリケーションをリモートで使うことを念頭に置いて開発されたParallels Accessですが、これが……Mac OS Xのネイティブ・アプリケーションもリモートで使えるようになっているのが面白いポイントです。

img_2576.JPG

img_2578.JPG

img_2579.JPG

img_2580.JPG

画面の小さいiOSデバイスからOS Xのアプリケーションを使うのは、物理的になかなかつらい(Air Serverでメニューの小さい文字に難儀したことが何度も)ものがありますが、iOSデバイスから使いやすいように、Parallels Accessでアクセス中にはOS X上のアプリを擬似的にシングルウィンドウで動かすようになっており、画面の解像度もiOSデバイス側に合わせて低く変更されます。

img_0673.PNG

デフォルトはシングルウィンドウモードですが、マルチウィンドウがそのまま表示/操作できるデスクトップモードもあります。

img_0676.PNG

つまり……OS Xが動くタブレットを無理矢理作って持ち歩くのではなく、OS Xにリモートアクセスできるタブレット(iPad mini Retina)を持ち歩いても同じことではないか、という話です。

iPad mini RetinaでデスクにあるMacBook Proにアクセスして、AppleScriptのプログラムを組んで試すようなことを実際に行えました。ストレスは……少ないほうだと思います。よくできています、Parallels Access。

Parallels Accessは、Parallels Desktop購入者には半年間のお試しアカウントが提供されているようです。購入者でなくても14日間のお試しが行えるとのこと(Parallels Desktopを持っていないと意味がないんですけれども)。

年間2,000円でParallels Accessを利用できるとのことで……月300円程度と考えると、なかなか納得の行きそうな価格に思えます。

半年のお試し期間中に、iPhone 5経由でインターネットにテザリング接続しているiPad miniで、毎月どの程度のデータ転送量になるのか試しておきたいところです(盛大にデータ転送を行われると、テザリング契約そのものが7GB制限にひっかかって、本当に使いたいときに使えないことに、、、)。

「快適さ」はひたすらネットワーク接続速度に依存するため、「あくまで緊急用」という位置付けになるかもしれません。ただ、風呂に入っている最中に防水ケースに入れたiPadからMacの中に入っているラジオ録音ファイルを聞く……とかいう使い方だとけっこう合っている感じがします(音声もリモート端末側に出力されるので)。

Parallels Accessに問題があるとすれば、複数台のモニタをつないでいるマシンにアクセスs中はすべてのディスプレイがミラーモードで同じ内容が表示され、接続解除したあとのディスプレイ解像度は元に戻るものの、ウィンドウ配置などは「元通り」……とはいかないため、マルチディスプレイ持ちにはちょっと気持ちが悪いというところでしょうか。

2013/07/12 ParallelesにゲストOSとしてインストールしたOS XをAppleScriptで制御

Parallels Desktop 8.0(以下、Parallels)には(それ以前からも?)ゲストOSにWindowsやLinuxだけでなく、Mac OS Xをインストールできることを思い出し、実験してみました。

ためしに、あまり稼働環境が残っていないOS X 10.7を検証用にインストールしてみることに。

Parallelsには、

  Mac OS X 10.5 Server, Mac OS X 10.6 Server, OS X 10.7, OS X 10.8

などのMac OS Xをインストール可能とのこと。ちなみに、まだリリースされていないOSはインストール時にはじかれてしまいました。

para20.png

インストール用アプリケーションのバンドル内に存在する、ディスクイメージ(InstallESD.dmg)をFinder上で抜き出して、Parallelesのバーチャルマシン作成元として同dmgファイルを指定。これで問題なくOS X 10.7をParallelsにインストールできました。

para21.png

画面左側のParallelsのウィンドウ内でOS X 10.7の仮想環境が稼働しています。

インストールしたての状態では、IPアドレスをホスト側(10.8.4)と異なる管理のものを使用する設定になっていたので、そのままでは通信できないと判断。

ネットワーク設定を変更して……

para22.png

仮想環境でも、192.168.0.xのClass CのIPアドレスで、ホスト側のIPアドレスと衝突しないものが割り振られていることを確認。

para23.png

こうなると、単にネットワーク上の別のマシンにアクセスする感覚で仮想環境にアクセスできます。

このように、LAN上の他のマシンをコントロールするのとまったく変わらない調子でAppleScriptから命令することができました(ユーザー名とパスワードをAppleScript中に直接書いていないのはわざとです)。

厳密にいえば、ゲストOS側のOS XにはApple IDとパスワードを入力しても認証が通らず……ということは、AppStore経由のアプリケーションをそのままインストールすることが(通常のやり方では)できないわけで、少々困ってしまうところです。

すぐには用途を思いつきませんが、時間的に余裕のあるときにテストしておけてよかったです。何かのときに使えるかもしれません。

スクリプト名:Parallels上のMacにリモートコントロール
tell application “Safari” of machine “eppc://192.168.0.11″
  make new document
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2013/07/12 オープン中のMacのPowerPointの書類をWindows XPのPowerPointでオープン

Mac上のOffice 2011のPowerPointでオープン中のPowerPoint書類を、Parallels 8.0上で動くWindows XP上のOffice 2003でオープンさせるAppleScriptです。

各個人の環境によって、ゲストOSのインストール名称が異なる可能性が高いので、若干の手直しは必要です。

ここでは、Windows XPを「Microsoft Windows XP(1)」の名前でインストール、起動してあります。

para13.png

ホームディレクトリの直下に、「Applications (Parallels)」フォルダがあり、

para7.png

その中にインストールしたゲストOSの名称にもとづいた各OS上のネイティブアプリにイベントを転送する専用のプロキシーアプリケーションが自動でインストールされます。

para3.png

この中にあるPowerPoint(へのイベントを伝達するだけのプロキシーアプリケーション)に、Mac OS XネイティブのOffice 2011のPowerPointでオープン中の書類のファイルパスを伝えれば、Windows上で同じ書類をオープンして、表示のされ方の違いなどを確認できます。

para1.png

para2.png

Microsoft Office以外でも、AdobeのCreative Suites/Creative Crowdなど各種マルチプラットフォーム展開しているアプリにおいて、実際の見え方の違いをその場で確認できると便利ではないでしょうか?

スクリプト名:オープン中のMacのPowerPointの書類をWindows XPのPowerPointでオープン
property aBundle : “” –バンドルID計算キャッシュ

set a to getPPTpath() of me –PPT書類のパスを取得
if a = false then return

–Windows XPのPowerPointアプリのプロキシーアプリを探す
set homePath to path to home folder from user domain
set homePathStr to homePath as string
set homeParallelsApps to homePathStr & “Applications (Parallels):”
set winXPappPath to homeParallelsApps & “Microsoft Windows XP (1) Applications:” –このあたり、ユーザーごとにフォルダ名が違うかも

if aBundle = “” then
  tell application “Finder”
    tell folder winXPappPath
      set fList to (every file whose name contains “Microsoft PowerPoint”) as alias list –ここで、不気味なほど時間がかかる
    end tell
  end tell
  
  
if fList = {} then
    display dialog “Windows XPのPowerPointが見つかりません”
    
return
  end if
  
set aPPTapp to contents of first item of fList
  
  
set infoF to info for aPPTapp
  
set aBundle to bundle identifier of infoF
end if

tell application “Finder”
  open file a using application file id aBundle
end tell

–オープン中の最前面のPowerPoint書類のフルパスの文字列を取得
on getPPTpath()
  tell application “Microsoft PowerPoint”
    set pCount to count every presentation
    
if pCount = 0 then return false
    
tell presentation 1
      –Documentのフルパスを取得する
      
set aPath to full name
      
return aPath
    end tell
  end tell
end getPPTpath

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2013/07/12 Safariでオープン中のURLを指定のWindowsのWebブラウザでオープン

Mac上のParallelsの上で動く、Windowsに対してイベントをAppleScriptから(Parallels経由で)投げて、Mac上のSafariで現在オープン中のURLをWindows 8.1Beta上のInternet Explorer 11で開いてみました。

調査したところ「Safariでオープン中のURLをIEでオープンする機能」はParallels Desktop 8(以下、Parallels)の標準機能で持っているらしいのですが、画面上で確認したかぎりでは見つけられませんでした。本Scriptでは、指定すればWindows上のChromeだろうがFireFoxだろうが対応できるので、標準機能よりも高度な処理に発展できます。

Paralles上でWindows 8.1Betaを起動した状態。この状態だと、

para10.png

ユーザーのホームディレクトリに「Applications(Parallels)」というフォルダが存在しており、

para7.png

さらに、その中に各ゲストOSのフォルダが存在。ここにWindows 8.1Betaのフォルダも存在しています。

この中に、各Windowsアプリケーションにイベントを転送するプロキシーアプリケーションが存在しています。もちろん、IE11も。

para11.png

ただし、ここで「Modern Internet Explorer」というWindows StoreアプリのIEも存在しており、これにイベントを投げてもWindows 8.1側でWebブラウザ表示にならない(タイル表示からInternet Explorerを選択すれば、オープンさせた内容を確認することは可能)ので、実用性がいまひとつでした。とっととWeb表示に切り替わってほしいので、Internet Explorerを指定しておきたいところです。

では、Finderに「Windows 8.1 Beta Applications」内の「Internet Explorer」ファイルを取得させればよいわけですが、ここにトンだ落とし穴が。

Finder上でこの「Internet Explorer」アプリの情報を調べてみると……

para12.png

Mac OS Xのローカライズドファイルネームの仕組みを使って、名前の指定を行っていることが分ります。その関係かどうか分りませんが、このディレクトリでAppleScriptからファイル名の収集を行うのにやたらと時間がかかります(MacBook Pro Retinaなのに、SSD上のデータなのに)。

この「Internet Explorer」の情報(Bundle ID)については、AppleScriptの初回実行時のみ取得するようにして、2回目以降はpropertyにキャッシュした内容を利用することにしました(処理速度向上のため)。こういう時間がかかる割に毎回同じ内容が返ってくるような処理結果はキャッシュしておくにかぎります。そういうのを毎回演算するのは、時間の無駄です。エラーが発生した場合にかぎって、再計算すればいいでしょう。

そして、「Internet Explorer」のBundle IDを取得して、open locationのイベントを投げます。すると、Parallelsを経由してWindows 8.1BetaのInternet Explorerにイベントが伝達され、Safariでオープン中のURLがWindows側に表示されます。

para8.png

このScriptを発展させて、指定URLを各バージョンのWindowsの各Webブラウザで一気に表示させるようなAppleScriptに仕上げると、かなり使い勝手がいいでしょう。仮想マシンはメモリーの許す限りいくつでも起動できるので、Windows XPとWindows 7とWinodws 8/8.1の仮想マシンを起動しておき、すべての対象OSのすべてのWebブラウザに一気にイベントを投げるという寸法です。

ただ、RAMが8GBの環境ではいささかつらく、最低でも16GBぐらいはほしいところです。

スクリプト名:Safariでオープン中のURLをWin 8.1のIEでオープンする
property aBundle : “” –バンドルID計算キャッシュ

–Safariの最前面のウィンドウからURLを取得
tell application “Safari”
  set dCount to count every document
  
if dCount = 0 then return
  
  
tell document 1
    set aURL to URL
  end tell
  
  
if aURL = “bookmarks://” then return
  
if aURL = “topsites://” then return
  
end tell

–Windows XPのPowerPointアプリのプロキシーアプリを探す
set homePath to path to home folder from user domain
set homePathStr to homePath as string
set homeParallelsApps to homePathStr & “Applications (Parallels):”
set winXPappPath to homeParallelsApps & “Windows 8.1 Beta Applications:” –このあたり、ユーザーごとにフォルダ名が違うかも

if aBundle = “” then
  tell application “Finder”
    tell folder winXPappPath
      set fList to (every file whose name of it contains “Internet Explorer”) as alias list –ここで、不気味なほど時間がかかる
    end tell
  end tell
  
  
if fList = {} then
    display dialog “Windows 8.1のIEが見つかりません”
    
return
  end if
  
set aPPTapp to contents of first item of fList
  
  
set infoF to info for aPPTapp
  
set aBundle to bundle identifier of infoF
end if

–Windows上のWeb BrowserでURLをオープン
tell application id aBundle
  open location aURL
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2013/07/11 AppleScriptでWindowsアプリをコントロール

かなり限定された条件下ではありますが、AppleScriptからWindowsのアプリをコントロールできました。

仮想環境であるParallels Desktop 8.0(以下、Parallels)を用いて、1台のMac上でMac→Windowsの制御を行いました。なお、Parallelsの機能に依存しているため、同様の操作をVMWareやVirtual Box上でできるわけではありません。

(1)Mac上のParallelsの上で動く、Windowsに対してイベントを(Parallels経由で)投げて、Mac上のSafariで現在オープン中のURLをWindows 8.1Beta上のInternet Explorer 11、Chromeで開いてみました。

para8.png

(2)Mac上のOffice 2011上でオープン中のPowerPoint書類を、Parallels 8.0上で動くWindows XP上のOffice 2003でオープンさせました。

para1.png

para2.png

■種明かし:Parallels Desktopの異種OS統合機能を利用

Parallels上のWindowsで動いているアプリをMacのDockにアイコン表示する機能があります。Dock上に表示されているWindowsアプリケーションは、その仲介役のプロキシーアプリがユーザーのホームディレクトリの中の「Applications(Parallels)」内に自動作成されます。

para7.png

para3.png

para5.png

これを使います。

プロキシーアプリに対してFileのパスを渡すとWindowsアプリでFileをオープンしますし、URLのオープンイベントを渡せば、指定の(Windows側の)Webブラウザで指定のURLをオープンするという寸法です。

種明かしをしてしまえば「なーんだ」という内容ですが、これを発展させていくと面白いことになるのではないでしょうか?

■将来的にできたらいいなと思うこと(たわごと)

プロキシーアプリケーションのAppleScript対応機能を強化し(どうやって?)、Windows上のアプリの状態を取得したり、データを設定できたりすると面白いと思います。

ただ……WindowsでAppleScriptのような機能を実現する仕組みを探してはみたものの、Windows 7/8で標準装備のPowerShellは単にコマンドラインのインタフェースでしかないし、自動操作系の機能を提供するものの多くはキーボード操作を実行するとかVBA(Excelなどの一部のアプリのみ操作)を実行する程度で、AppleScriptで期待するような属性の取得とか設定を行えるものは見つかりませんでした。

もうちょっと、Windowsアプリの状態取得や自動制御ができるとよいのですが……。