rcmdnk's blog

20150716_controlplane_200_200

今は主にMacBook Proを使っていますが、 普段机の上では外付けディスプレイや外付けキーボード等を付けて使っています。 ネットワークも有線。

机以外に持ち出すことも良くするのでこれらの機器やネットワーク環境が 良く変わったりしますが、 そのような時に ControlPlane を使うと色々設定を自動的に行なってくれる様に出来ます。

Sponsored Links

ControlPlaneの導入

以前、

Macで最初に行う設定備忘録: その他の設定

の所で書きましたが、 普段、WindowsのCtrl-Tab の様にウィンドウ事の切り替えが出来る様にするために HyperSwitch を使っていますが、 これが外付けディスプレイをつけたり外したりすると ウィンドウ一覧の背景が選択色と一緒になってしまって見づらくなってしまいます。

これを再起動するのに毎回メニューバーから一度消すなり 表示させてない場合はタスクバーで消すなりして、 再びアプリを起動、とかしたりしなくてはいけなくて結構煩わしかったので、

Macでアプリを再起動するAppleSCript

の所で作った様なアプリの再起動スクリプトを作ってスクリプトを呼ぶだけで 再起動出来る様にしていました。

さらに

Automatorを使った簡単なアプリリセット用アプリ

で書いたようにAutomatorを使ってもっと簡単なResetApps.appという アプリケーションを作ってDockに置いてクリックするだけで再起動できるようにしました。

ただ、これでも毎回ディスプレイをつけたり外したりするたびにやるには面倒です。

そんな時に ControlPlane を使えばディスプレイの接続状態を感知して自動で再起動をしてくれます。

ControlPlaneもともと MarcoPolo というアプリを引き継いだもので、 Macのあらゆる状態を感知してその状況に応じた設定に変更したり アプリやスクリプトを実行することが出来ます。

CodePlaneはCaskが用意されてるのでHomebrew Caskを使って

$ brew cask install codeplane

でインストールできます。

もしくは 公式ページ からダウンロード。

感知出来る状態、状態変化

感知できる状態は Feature List にありますが、例えば

  • 特定のアプリケーションがアクティブかどうか、または起動しているかどうか
  • 現在繋がってるネットワークの種類
  • 現在のIPアドレス
  • 特定のモニタがつながっているかどうか
  • 特定のUSBデバイスがつながっているかどうか
  • ラップトップの蓋の開け閉め
  • 特定のディスクをマウントしているかどうか
  • 電源アダプタがつながっているかどうか
  • スリープに入る、スリープの解除

等の状況に応じて何らかのアクションを起こせます。

シャットダウンやブート時に関しては指定出来ない様です。 (ブート時に関してはデフォルトMac機能でユーザー設定のログイン項目からアプリの指定とかは簡単に出来ますが。)

取り敢えず使ってみる

上で書いた外部ディスプレイをつなげたり外したりする時に ResetApps.appを呼ぶには

  • GeneralタブのConfidence required to switchのレベルを確認。(デフォルトは75%)
  • Contextsタブで新たにMonitor ConnectedというContextを作る。
  • Evidence SourcesAttached Monitorにチェック。
  • RulesAdd 'Attached Monitor' Rulesを追加し、
    • An attached monitor named: 外部ディスプレイの名前1
    • Context: 上で作成したDisplay Connection
    • Confidence: 上で調べたConfidence required to switchよりも高くする(90%とか)。
    • Negate: チェックを入れない。
  • Actionsタブで以下の物を作成。
    • Parameter: /path/to/ResetApps.app
    • Description: Reset Applications (HyperSwitch, BetterTouchTool)
    • Context: Display Connection, Both
    • Delay: None
    • Enabled: チェックを入れる。

と言った感じで新たなコンテクストやアクションを作ります。

  • General

general

  • Context

contexts

  • Evidence Sources

evidencesources

  • Rules

rulsesmake

rulses

  • Actions

actionsmake

actions

正しく作ってから指定の外部ディスプレイが繋がっている状態になっていると、 Contextsの所のMonitor Connectedの所に90%と出ているはずです。

contexts90

さらに、これがGeneralConfidence required to switch の値よりも高ければ メニューバーのCodePlaneのマークが強い白になって、 押してみるとActive Context:の欄にMonitor Connectedが 表示されてるはずです。

menubar

外部ディスプレイを外すとこれらが消えるはずです。

Confidenceレベルについて

上で、Confidenceという値を指定していますが、 Rulesで指定している状態の結果が、 Generalで指定している Confidence required to switchよりも高い状態になると、 そのContextの状態がActiveになったりInactiveになったりします。

上の例ではDisplay Connectionというコンテクストに対して 一つのルールしか指定しなかったのでこの場合は 単にこのルールが適用される時のConfidenceレベルが そのままDisplay ConnectionConfidenceレベルになるので、 これが Confidence required to switch より大きくなるようにしないといけません。

もし小さくするとディスプレイをつなげても外してても常に Inactiveな状態になります。

このConfidenceレベルが重要になるのは複数の ルールを同じContextに指定する場合です。

それぞれ一つでも該当する場合にActiveにしたければ 全てのルールにおいてConfidenceレベルを Confidence required to switchより大きくしてあげれば良いだけです。

複数の条件を組み合わせたいとき、

  • 指定のIPで繋がってる
  • かつ指定のディスプレイが繋がってる時のみ

みたいな物を指定したいとき、

  • Attached MonitorルールでのConfidence: 60%
  • Assigned IP AddressルールでのConfidence: 60%

として、これらをIP/Monitorというコンテクストに結びつけておくと、 片方だけが有効な時は IP/MonitorConfidenceレベルは60%になります。

両方が有効な時は

1 - (1-0.60)*(1-0.60) = 0.84

で、84%になります。

つまり、複数のルールを同じコンテスクトに指定すると、 有効な物が複数ある場合、 それらがActiveでないconfidenceレベルを掛けあわせて1から差っ引いた形になります。

これで、片方のルールだけが有効な時には IP/MonitorはActiveにはなりませんが、 両方が有効な時に限りActiveになるように出来ます。

音量調整

ControlPlaneのアクションに Sound and Music Actionsというものがあって、 ここでMuteを指定することが出来、音量調整が出来ます。

また、Evidence SourcesにはSleep/Wake Eventという スリープに入る時と解除される時にトリガーをかけれる物もあるので、 これらを使うとスリープ時に音量をmuteにする、ということが出来ます。

Macの起動時のジャーン音を消すやつ

の所でいくつかこれ系のアプリを試してみたりしましたが、 これが代用になるかな、と思ってちょっと試してみました。

たしかにスリープに入る時に音量をMuteにすることは出来ました。

ですが、上にも書いたように、シャットダウン時のSourceが無いので 特にいきなり電源を切って他に持ち出す、といった際に 外でジャーンと鳴ってしまうのを防ぐことは出来ません。

ということで、取り敢えず素直に上の記事で書いたとおり、ボリューム調整に関しては Volume Resetを使おうかな、と思います。

ちなみに、このSound and Music Actions等一部のアクションに関しては、 初回実行時にアクセシビリティの設定が要求されることがあります。

accessibility

Sponsored Links
  1. 環境設定ディスプレイで 該当ディスプレイの方に出てるウィンドウのタイトルから調べられる

Sponsored Links

« Automatorを使った簡単なアプリリセット用アプリ URLを絵文字にしてくれるURL短縮サービス »