AppleScriptでSpacesをON/OFFする

MacBook ProのUSB経由サブモニタが稼働したことで、デュアルモニタ環境でのSpacesの動作への不満が噴出しました。当該記事でも触れましたが、Spaces上で3画面作成してると、2モニタx3セットで切り替わるようになり、メインモニタでページ移動するとサブモニタまでめくれてしまい非常に使いづらいです。メインモニタだけ単体使用時と同じにSpacesが使えるのが理想ですが、それが無理ならいっそSpaces自体をオフにしてしまいたい。

そこでサブモニタをつないだ時、外した時にサクっとSpacesをオン・オフするAppleScriptを作ってみました(というかググって拾ってきました)。具体的にはこの掲示板スレッドの#9に書かれているものです。

tell application "System Events"
  tell expose preferences
    tell spaces preferences
      set spaces enabled to true
    end tell
  end tell
end tell

これでSpacesがオンになります。4行目のtrueをfalseにするとオフです。AppleScriptエディタに貼り付けて、ファイルフォーマットを「アプリケーション」にして保存すると、ダブルクリックで実行可能なアップレットになります。これをどこかサクっと実行できるようDockやランチャーなどに登録しておけばOKです。

σ(^^)はMarcoPoloというネットワーク環境や接続された周辺機器で設定プロファイルを自動切り替えするユーティリティを使っているので、そこで自宅ワークデスク環境の時のプロファイルに組み込んでみました。ちゃんと動作するかどうかのテストはこれからですが、環境要因(Evidence Sources)のモニタの項目でUSB-DVIアダプタ経由でつながっているモニタの型番も見えてたので、それをキーにすればまず大丈夫だろうと思います。

4本指水平スワイプでSpacesを移動する

MacOSXのマルチタッチジェスチャーで、4本指による左右スワイプはアプリケーション切換(Command + Tab)にアサインされています。ただ、スワイプ操作でこれをする場合、確定操作をしないとスイッチャーが消えてくれない為、いまいち使い勝手がよくありませんでした(キーボードからCommand + Tabした時は不要)。ならばいっそこのジェスチャーはSpaces間の移動に使えた方が便利じゃね?と思って環境設定をいじってみたんですが、そういうアサインはできなそげ。

結局、BetterTouchToolというユーティリティを導入することで実現できました。設定例としては、

  1. 「システム環境設定」->「トラックパッド」で一番下の「左右にスワイプでアプリケーションを切り替える」をオフ
  2. BetterTouchToolの「Gestures」->「Trackpad / Magic Trackpad」で、「Four Finger Swipe Left」にCommand+←(Tool上の表記は「^←」)をアサインする。同Rightも同様に。
  3. 「システム環境設定」->「Expose と Spaces」->「Spaces」で「操作スペース間の切り換え」に「^ 矢印キー」を選択

という感じ。もちろんCommand + 左右矢印を別のことに使ってるなら、2.と3.は適宜別の設定をご利用下さい。

また、このツールはアプリケーションなのでOS起動時に自動で立ち上がってくれるように、General Settingsの「Launch BetterTouchTool on startup」にチェックをしておきます。滅多に設置をいじらないなら、「Show Menubar Icon」を外して、代わりに「Add BTT PreferencePane to your System Preferences」しておくと、「システム環境設定」から設定画面を呼び出せるようになって便利です。

更にこのツールは、Windows7のウインドウスナップ相当の機能も実現してくれます。特にウインドウのタイトルバーをドラッグして画面上端にあてると全画面化してくれるのは重宝しますね。

64bit非対応のMac用USBディスプレイアダプタが動いた!

先日Mac miniをデュアルモニタ化するために買ったIO-DATAのUSB-DVIディスプレイアダプタUSB-RGB/D2ですが、64bitモードで動くMacBook Proだとインストーラーが非対応CPUだといってドライバが入れられず利用できていませんでした。メッセージ的にはCPUが非対応といっているので、Sandy Bridge世代のCore iプロセッサをインストーラーが誤検知してるんじゃないかと思ってサポートにメールしてみたんですが、そうではなくそもそも64bitに対応していないということが判明しました。公式ページには明示されてますが、Mac miniを買った時点ではまったく気にしてませんでした。こうしてMacBookのメインラインも64bitが標準になった今、対応を急いでほしいですね。

でまぁ使えないものは仕方ないとしばらく放置してたんですが、ふと「どうせIO-DATAやBUFFALOなんてOEM製品を買ってきてるだけなんだから、その元メーカー辿ってみれば対応ドライバもすでに配布されてるんじゃね?」と思い検索。ビンゴでした!

この製品はDisplayLinkというメーカーが作っているらしく、こちらにある1.6β3ドライバを入れてみたところ、MacBook Pro Early 2011で見事動作しました!いずれ正式版がリリースされればIO-DATAも更新してくれるかも知れませんね。

プロセッサが高速になったせいか、Mac miniで使ってた時よりも書き換えのコマ落ちが減って滑らかになったような気もします。

■画質調整ができない

これはβ版というよりUSBだからなんでしょうけど、OSの画質調整(「モニタ」->「カラー」からできるもの)は一切機能しないようです。ちとギラギラすぎたので調整しようと思ったんですが。とりあえずモニタ側の調整で済ますしかないようです。

■Spacesとデュアルモニタの相性

Mac miniではSpaces使ってなかったので気付かなかったんですが、デュアルモニタで使うと両モニタとも動いちゃうんですね。つまり、Spacesを3画面分作成してると、モニタ2枚x3セットという状態になり、例えばサブモニタに資料を表示したままメインモニタをSpacesで切換、みたいなことができません。うーん、これは微妙だ。なにか回避手段はないですかね。

TimeMachineデータをお引っ越し

MacOSX 10.5 (Leopard)から搭載されたバックアップ機能TimeMachineは便利ですよね。一度設定してしまえばバックグラウンドでデータをバックアップ、しかもほとんど気づかない程度の負荷でいつのまにか完了してる感じ。バックアップドライブとつながっていれば1時間毎のスナップショットがとれるので、うっかり削除や上書きしてしまったファイルも簡単に取り戻すことができます。

さてTimeMachineのバックアップ先はUSB/FireWire等でつないだローカルディスクかLAN上にあるネットワークストレージですが、MacBook Air/Proの我が家では紐付きになるのは論外。ということでAir購入時既に家にあったLinkStation miniがTimeMachine対応してたのでそちらを利用していました。しかしAir/Proの2台体制になりLinkStationの容量を圧迫してきたので、引っ越しを決意。ちょうど我が家の無線LANアクセスポイントはAirMac Extreme。これにUSBで外付けHDDをつなげば、Time Capsule的に機能させることができます。MBPをSSD換装することで余った500GBの2.5inch HDDを適当なケースに入れて利用することに。

■TimeMachineのファイル構成

TimeMachineはHFS+フォーマットのストレージの上に、ハードリンクを使ったミラーコピーをとります。ハードリンクとは、エイリアス(Windowsでいうショートカット)の応用的な機能で、エイリアスでは本体とエイリアスが明確に区別されているのに対し、ハードリンクではどちらが本物という区別はなく、片方が削除されてももう片方が残っていればそれが本物という扱いになる、というもの。AというファイルのハードリンクA’を作成し、最初のAを削除した場合、エイリアスだとA’だけ残っていてももう元ファイルは読めないですが、ハードリンクならA’が本物となります(そもそも最初から両方本物なんですがまぁわかりやすく例えると、です)。

TimeMachineではまず最初に全てのファイルをコピーし、次のタイミングでは各ファイルを既にあるコピーと比較し変更があれば新たにコピー、変更がない場合はハードリンクを張る、ということをしているようです。そうすると、どのバックアップ時間のフォルダに入っても全てのファイルがそこにあるように見えるし、古い日付のフォルダを丸ごと削除しても、同じファイルを参照しているハードリンクが他の日付フォルダに存在する限り、実体が消えてしまうことはありません。上手いやり方ですね。まぁもともとはUNIX由来の技術ですし、Windows Home Serverなんかでは更に複数のPCでの重複ファイルをハードリンクで済ますことでバックアップ総量を抑えるなんてことまでしてたりしますが。TimeMachineの場合、グラフィカルでわかりやすいUIでそれをカバーして過去のファイルを簡単に取り出せるようにしたところが特長と言えるでしょう。

さて話が遠回りになりましたが、TimeMachineはこのバックアップを作るストレージを1つのディスクイメージとして作成します。TimeMachineの保存先に指定したディスクのルートフォルダに、1台のMacにつき1つのファイルが作られます。ファイル名は、「マシン名_MACアドレス.sparsebundle」みたいな感じ。基本的にはネットワークマウントできる(HFS+の?)ボリュームにこのファイルが置ければTimeMachine保存先として使えるみたいです。むしろこの形式のディスクイメージを最初に作るところが少しコツがいって、TimeMachine対応を謳うNASの場合、Web管理画面からこれを新規作成できるって意味合いが強いみたいです(手作業でディスクユーティリティで作って、適当なネットワークフォルダに置き、社外NASもTimeMachine対象に含めるというおなじないをターミナルで入力すれば、非対応NASでも使用可能みたい)。

今回は既にLinkStation miniによって作られたディスクイメージがあり、保存先はApple製品が作るネットワークフォルダなので特に難しいことはなく、単純にコピーだけで済みました。一応手順を書くと、

  • 目的のUSB-HDDをMacに直接つなぐ
  • ディスクユーティリティでHFS+パーティションを作る
  • USB-HDDをAirMac Extremeにつなぎかえ、AirMacユーティリティから共有設定をする
  • Macからネットワークフォルダとしてマウントできることを確認
  • TimeMachineバックアップを止める
  • LinkStation miniのバックアップ領域を手動でマウントし、*.sparsebundleファイルを新ディスクのルートフォルダに移動
  • TimeMachine設定で新しいドライブを指定する

こんな感じであっさり移行できました。

ちなみにTimeMachineはパーティションの容量がある限り差分をとり続けるらしいので、通常のファイル共有にも使いたい場合はパーティションをわけて切っておくのがいいようです。ディスクユーティリティでイメージの上限サイズも決められるみたいですが、ファイル共有フォルダのルートに常にバックアップファイルが見えてるのは心臓に悪いですし。ただし、後述の「どこでもMy Mac」用とをにらんで、AirMacユーティリティでユーザアカウント設定をしたところ、ユーザ名によるネットワークフォルダは別途作成されました。バックアップがパンパンに膨れあがるまでは、(バックアップファイルを目にすることなく)そちらをファイル共有の場として使用することは出来ます。

■どこでもMy Macでの利用は苦戦中

どこでもMy MacによるWAN経由の使用は成功していません。一応、ポートをあけてIPアドレスで指定すればマウントはできるんですが、TimeMachineボリュームと同一のものとはみなしてくれない感じ。こちらは追々検証していきます。

Poptopを使ったPPTP接続でブロードキャストを有効にする

前エントリでVPN(PPTP)経由でWake-On-LAN(以下WOL)を使おうとしたら上手くいきませんでした。WOLでは相手のMACアドレスを使って宛先指定をしていますが、実際にはブロードキャストを使うみたいで、これは通常PPTPでは中継されません。

我が家のサーバーで使っているPPTP実装はPoptopで、ググってみると設定ファイルで1行変更するだけでブロードキャストパケットを転送することができました。具体的には、/etc/pptpd.confで

bcrelay eth0

のようにします。eth0の部分はサーバーのLAN側に使っているネットワークデバイスを指定します。これが受けたブロードキャストパケットをVPN側に丸投げしてくれるようになります。デフォルトでオフなのは、大量のブロードキャストが流れるLANにつないだ場合、VPNの帯域が圧迫されるからでしょう。すばらく様子をみて実際に問題なようだったらオフに戻して、WOLはサーバー経由で運用しようかと。

あと残念ながらこのオプションを有効にしてもiTunes共有などのBonjourは機能しませんでした。