MacBookで快適なリモート操作を目指す

Snow Leopardになり、サポート対象はIntel CPUのマシンだけとなってしまった...。でも、年に1度だけ、未だにOS9とOSX10.4のアプリケーションが大活躍する。そう、年賀状の作成である。具体的には、宛名書きの「宛名職人」と文字や画像にエフェクトをかけて自由に配置できる「Photoshop」だ。どちらもバージョンアップすれば、最新のOSX10.6 Snow Leopard環境でも問題なく動作するはず。しかし、年賀状を作成するという目的においては、その当時の機能で十分なので、そのまま使い続けてきた。バージョンアップの料金も馬鹿にならない。

年賀状作成の時だけ、PowerBookの前に移動して作業すれば良いことなのだが、普段からMacBookを常用していると、最近はそれさえも面倒になる。できることなら、MacBookからそのままPowerBookも操作したい欲求に駆られる。

OSX10.5以降はOS標準で画面共有機能(VNCによるリモート操作)がサポートされた。Finderウィンドウで共有するマシンを選択して接続すれば、接続先マシンのデスクトップが表示されてリモート操作できるのだ。GUI画面の更新に多少のもたつきはあるが、十分実用になる。ただし、快適に使うためには多少の要点を押さえておく必要があると思った。

OSX10.5以降のマシン同士の画面共有(リモート操作)

OSX標準の画面共有を利用すれば、余分なことを考えずに以下の手順で画面共有(リモート操作)を実現できる。

操作されるマシン(サーバー)
  • システム環境設定 >> 共有 のサービス項目「画面共有」のチェックを入りにする。
操作するマシン(クライアント)
  • Finderウィンドウを開いて、サイドバーの共有項目に表示される上記マシンを選択して、[画面を共有...]ボタンを押す。
  • 名前とパスワードの要求で、操作されるマシンで画面共有の設定をしたユーザー名とログインパスワードを入力すれば接続完了。

OSX10.4のマシンをOSX10.6のマシンからリモート操作

OS標準で画面共有がサポートされたのはOSX10.5以降だが、それ以前のマシンであってもVNCを利用すれば同様にリモート操作が可能だ。

操作されるマシン(サーバー)
  • OSXvncの設定




      • 一般設定タブで、「ディスプレイ名:」と「ホスト名:の.localを除く部分」を一致させることで、OSX標準の共有サイドバーと同等の表示になる。(ファイル共有と画面共有の識別名が一つにまとまる)


VNCサーバーの起動方法は二つある。

  • 右下の[サーバを開始]ボタンを押す。
    • 「アプリケーションの起動時にサーバを開始する」にチェック入りにすることで、OSXvncを起動した時にVNCサーバーを稼働することもできる。
    • この方法では、ユーザーがログインしてOSXvncを起動するまでは、リモート操作は出来ない。
  • 中段の[起動項目を設定する]ボタンを押す。(ボタンを押した直後からVNCサーバは稼働する)
    • 次回以降は、コンピュータの起動時にVNCサーバーが稼働する。
    • この方法なら、ユーザーがログイン前の状態でも、リモート操作が可能になる。


ファイアーウォールを設定しておく。

  • OSX10.4までの環境で、ファイアーウォール*1を有効にしている場合...
    • VNCが利用する5900ポートを開いておく必要がある。
    • 必要なら、5900-5910のように範囲指定して追加しておく。
  • OSX10.5以降は、アプリケーションが外部と通信する許可を初回起動時に確認する仕様になったので、上記設定は不要。
操作するマシン(クライアント)
  • Finderウィンドウを開いて、サイドバーの共有に表示される上記マシンを選択して、[画面を共有...]ボタンを押す。
  • パスワードの要求で、上記OSXvncで設定したパスワードを入力すれば接続完了。

メニューバーとDockを非表示にするには...

  • OSX標準の画面共有で操作していて煩わしいのは、MacBook環境のメニューバーとDockが、リモートウィンドウ内のそれらと並んでしまい判別し難いこと。
  • 特に、Dockを非表示にした環境では、Dock操作時に完全に重なってしまい、マウスだけではリモートウィンドウ内のDockを操作するのが困難になる。
  • ショートカットcommand-option-DでDockを表示させれば操作できるが、毎回ショートカットで表示させるのは結構面倒くさい。
  • そこで、Info.plistを書き換えて、メニューバーとDockを非表示にする画面共有.appにしてみた。
  • まずは、オリジナルの /System/Library/CoreServices/画面共有.app を /Applications/画面共有.app にコピーして、バックアップの代わりとした。
  • /Applications/画面共有.app のInfo.plistを修正して、メニューバーとDockを非表示とするアプリケーションに仕立てた。
      • 以下のコマンド中の半角¥は、半角\に変更する必要あり。
cp -r /System/Library/CoreServices/Screen\ Sharing.app /Applications/Screen\ Sharing.app
defaults write /Applications/Screen\ Sharing.app/Contents/Info LSUIPresentationMode -int 3
  • これで、/Applications/画面共有.app をダブルクリックして起動すれば、メニューバーとDockが無効になった。
  • 共有コンピュータへ接続のホスト:は、"コンピュータ名"+".local"で指定すればOK。(もちろん、IPアドレスで指定してもOK。例:10.0.1.2)

  • 稀に、環境設定などのメニューを操作したい時もある。そんな時は、いつもの手順でFinderから画面共有を開始すれば、メニューバーとDockが表示される。

フルスクリーンでリモート操作するには...

せっかくSpacesが利用できる環境なのだから、できることならフルスクリーンで、まるで自分のマシンを操作する感覚でリモート操作したい。

操作するマシン(クライアント)
  • 残念ながら、OSX10.6の画面共有.appで実現する方法は分からなかったが、Chicken of the VNC.appをインストールして実現できた。
  • 最初、OSX10.6.2環境ではChicken of the VNC.appでリモート接続できなかった(突然、強制終了してしまう)が、以下の設定で正常に利用できるようになった。
    • メニューバーから Connection >> Connection Profiles...(command-option-P)を開く。
    • Encodingsタブで、ZRLEのチェックを切りにする。(意味は理解していない)


操作されるマシン(サーバー)
  • システム環境設定 >> 共有 >> 画面共有 を選択して、[コンピュータ設定...]ボタンを押す。
  • VNC使用者が画面を操作することを許可」をチェック入りにして、パスワードを設定しておく。
  • これで、このマシンは一般的なVNCソフトウェアから接続して操作できるようになる。


クリップボードの共有

画面共有で操作している遠隔地のマシンに対してコピーした文字列(例:"ABC")は、自分のデスクトップに戻ってペーストした場合、"ABC"と書き込まれることを期待している。つまり、異なるマシン間でもクリップボードを共有して、コピー&ペーストできるのが理想だと思う。

画面共有.app
Chicken of the VNC.app

スリープ中のマシンを呼び覚ます

リモート操作しようとしたら、接続先のマシンがスリープしていて接続できないという、残念な状況が多々ある。もし、接続先のマシンが有線LANで接続されていれば、Wake On LANという仕組みを使って、呼び覚ますことができるかもしれない。

Wake On LAN
  • OSXであれば、WakeOnLanをインストールしておく。
  • [Wake Up!]ボタンを押せば、スリープ中のマシンを瞬時に呼び覚ますことができる。

  • 同じ名前のマシンが二つ見えているのは、内蔵EthernetAirMacの両方で接続している状態のため。
Wake On Demand
  • Wake On LANは、有線LAN接続していることが必要条件だが、今時のMac環境は無線LAN接続がメインである。
  • かつては、無線LAN接続のマシンを呼び覚ますことは、お手上げ状態だった。
  • だから、定期的にタイマー予約しておくとか、決してスリープしない設定にして常時稼働させておくとかしていた。

ところが、Snow Leopardでとうとうこの不便が解消された!

  • Wake On Demandが有効な環境であれば、スリープ中のマシンも、稼働中のマシンと同じ感覚で操作できるのだ!
  • Finderのサイドバーの共有にも表示されるし、[画面を共有...]ボタンを押せば即座にリモート操作が開始できる。
  • ただし、Wake On Demandに対応していないマシンでは利用できない。PowerBookは有線LAN接続して、WakeOnLanで呼び覚ますことにした。
モニタを閉じたマシンをリモート操作
  • Wake On Demandと言えども、モニタを閉じた状態のMacBookを呼び覚ますことはできない。
  • Wake On Demandを利用するには、モニタを開いた状態でスリープしていることが必要条件なのだ。
  • ところが、InsomniaXをインストールしておけば、モニタを閉じた状態でスリープしていてもWake On Demandが有効になる。
  • InsomniaXは、OSX標準のスリープを無効にするソフトウェア。モニタを閉じてもスリープしなくなる。
  • InsomniaXを有効にした状態で、InsomniaXのメニューからスリープさせて、モニタを閉じてた状態のMacBookを呼び覚ますことができた。

画面共有.appの隠し機能

defaults write com.apple.ScreenSharing 'NSToolbar Configuration ControlToolbar' -dict-add 'TB Item Identifiers' '(Scale,Control,Share,Curtain,Capture,FullScreen,GetClipboard,SendClipboard,Quality)'

    • フルスクリーンや描画品質、マウスの描画方法、監視モードの切替など詳細な設定が可能になる。
defaults write com.apple.ScreenSharing debug -bool YES
    • ただし、Bonjourブラウザを表示して、それが正常に機能するのはOSX 10.5.5まで。
  • command-tabを送信しないようにする。
defaults write com.apple.ScreenSharing DoNotSendSystemKeys -bool YES

iPhoneiPod Touchでリモート操作

  • 画面共有やVNCサーバーが稼働しているマシンを、iPhoneiPod touchからリモート操作することも可能だ。
  • Mocha VNC Lite
  • 最初は、そんな小さい画面でパソコンを操作するのは無理...と思ったが、やってみると、意外にも操作できてしまうことに驚いた。


隣のPowerBookMacBookから操作

  • 以上はすべて、操作されるマシン(サーバー)の画面状況を随時、操作するマシンに画像として送信して、そのGUIを操作する仕組みだ。
  • 刻々と変化するGUIな画面状況を画像データとして送受信するのは、負荷がかかる処理だ。
  • そのため、リモート操作した反応は結構鈍い。反応を早くしようとすれば、画質を落とすことになる。(それでも鈍いが)

ところで、もし操作されるマシン(サーバー)が隣にあって、その画面を見ながら作業できる環境であれば、絶対にsynergyがお勧め!

  • まるで、マルチディスプレイの感覚で複数のマシンを操作することができる。
  • VNCで感じる反応の鈍さもほとんどなく、素晴らしい快適さだ。
  • クリップボード(文字列のみ)も、自然な感覚で共有される!

所感

  • Chicken of the VNC.appは、使い易い。
    • フルスクリーンにすれば、自分のマシンを操作する感覚で利用できる。
    • クリップボードも特に意識することなく、自然に共有できる。
  • 快適なVNC環境は、(名前のとおり)まさに仮想ネットワークコンピュータになる。
    • 遠隔地のマシンの機能を、自分のマシンの一部のように利用できる。
    • Spacesで、フルスクリーンのVNC環境を割り当てれば、遠隔地のマシンと自分のマシンの区別は、さらに曖昧になる。


画面共有やVNCは、手元のCPUとHDしか利用できないMacBookから、ネットワークで接続されたあらゆる環境を利用できるMacBookにしてくれた。現実世界のOS9は遥か昔に死んでしまったが、MacBookの中の仮想ネットワークコンピュータでは今もなお生き続けているのだ。

*1:システム環境設定 >> 共有 >> ファイアーウォール