ターミナルから画面共有を有効にする

画面共有はとっても便利なんだが、たまに、接続したいマシンの「画面共有」のチェックを入れ忘れていたりして、がっくりする...。もし、sshで接続して、コマンドから画面共有の有効・無効を切り換えることができれば、その瞬間、幸せな人生を感じることが出来そう。...なんて考えていたら、そんな技が紹介されていた。早速、試してみる。

作業環境

コマンドで画面共有を入・切

拙い英語の理解力で読み取ると、その技は、以下のようなコマンドになる。(上段:有効にする/下段:無効にする)

# OSX 10.5
sudo echo -n enabled > /Library/Preferences/com.apple.ScreenSharing.launchd
sudo rm /Library/Preferences/com.apple.ScreenSharing.launchd

# OSX 10.6
sudo echo -n enabled > /private/etc/ScreenSharing.launchd
sudo rm /private/etc/ScreenSharing.launchd
  • 以下、自分のMacBook環境に合わせて、OSX 10.6.3で検証


ところが、アクセス権がないと怒られる...。

 $ sudo echo -n enabled > /private/etc/ScreenSharing.launchd
 -bash: /private/etc/ScreenSharing.launchd: Permission denied
  • sudo付けてるのに、なぜ?
  • sudo rmの方は問題ないのに...。


もう一度読み直してみると、コメントで議論され、解決されていた。

 $ sudo sh -c "/bin/echo -n enabled > /private/etc/ScreenSharing.launchd"
  • 想像するに、最初は、sudoの効力がリダイレクト先に効いていなかったということか?


さらに試すと、ファイルの有無に意味があるようで、もっとシンプルに以下のコマンドでも有効になった。

$ sudo touch /private/etc/ScreenSharing.launchd
  • 但し、GUIのシステム環境設定 >> 共有 >> 画面共有のチェックを入れると、「enabled」が書き込まれたファイルが生成される。

必要最小限のコマンド

  • 同じことを実現できるのなら、コマンドは短い方が良い。
  • 自分の場合は、以下のコマンドとして覚えることにした。
      • OSX環境において、/private/etc = /etc
# OSX 10.5
sudo touch /Library/Preferences/com.apple.ScreenSharing.launchd
sudo rm /Library/Preferences/com.apple.ScreenSharing.launchd

# OSX 10.6
sudo touch /etc/ScreenSharing.launchd
sudo rm /etc/ScreenSharing.launchd
  • 10.5と10.6の違いは、ディレクトリだけでなく、ファイル名も違っている所に注意。
sudo touch /etc/com.apple.ScreenSharing.launchd ... NG
sudo touch /etc/ScreenSharing.launchd ... OK
  • 最初、上段のように書いてしまって、一向に画面共有が開始されず、かなり悩んだ。

sshで接続する

例:

  • 管理者ユーザ名:zari
  • コンピュータ名:MacBook.local


不明な場合は、以下のコマンドで調べられる。

$ whoami
zari

$ hostname
MacBook.local


ターミナルを開いて...

  • リモートログインして、
  • 画面共有を有効にして、
  • 画面共有を無効にして、
  • ログアウトしてみた。
$ ssh zari@macbook.local
Password:
Last login: Wed May 19 03:48:18 2010

MacBook:~ zari$ sudo touch /etc/ScreenSharing.launchd
Password:

MacBook:~ zari$ sudo rm /etc/ScreenSharing.launchd

MacBook:~ zari$ exit
logout
Connection to macbook.local closed.


これで、リモートログインできるなら、何とかなる。