Mac OS X Server Leopard (Server) 以降、Mac 実機での VirtualBox の Mac OS X 仮想化は、可能だと言われているが、実機への依存性などでその実現性は困難な場合がある。
ここでは、ひとつ MacBook Pro (15-inch, Late 2011) で以下の Mac OS X 仮想化を試みた備忘録を残しておく。
ところで、筆者のこの試みの動機は、開発物の過去の OS のバージョンでの動作確認が主な目的であり、新旧の Mac OS X を比べてみて初めて学ぶことも多い。だからと言って、実機を名残惜しく古いバージョンの OS のまま使っていくのも勿体ない。であるならば、古いバージョンの OS とその個人の資源は、仮想化された Mac OS X に追いやってしまいつつ、いつでも触れるようにしておければ、実機のホスト OS はなるべく最新バージョンの OS で事足りるであろう、というのがここでの主目的である。
では、できるだけ古い Mac OS X 10.5 Leopard (Server) を実機 MacBook Pro, Lion で VirtualBox にインストールする方法を紹介する。ちなみに、VirtualBox のマシンの設定は、結果的に VirtualBox の規定値で構わない(但し、実運用の段階では、VirtualBox ネットワーキングの規定値が「NAT」なので、OS X のソフトウェア・アップデートで NAT が多段であると「信用できないネットワーク」として App Store 等に接続できない可能性があるので、ネットワーク設定のアダプタ1は「ブリッジ」にしておいた方が良いかもしれない。そして、アダプタ2に「NAT」を加えると良いだろう)。
しかし、その前に、現時点では未成功な Mac OS X 10.4 Tiger (Server) を実機 MacBook Pro で VirtualBox にインストールする試みを紹介する。
実機に付属の「Mac OS X Install Disc 1」のイメージそのままでは起動せず、以下のような状態で停滞する。
カーネルパニックなので、期待を込めて次節の方法でビルドした最新のカーネルに差し替えたところ、以下のように状況に変化があった。
なんか大変そうなので、ここまでで諦めた。
現時点で失敗しているが、インストール Disc のディスクイメージを作成する為のシェルスクリプトを以下に紹介しておく。
ここでは、「/System/Installation/Packages/OSInstall.mpkg/Contents/OSInstall.dist
」のサポート対象マシンのチェックを無効化しつつ、「/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
」に「rd=disk1
」を指定するようなインストーラ Disc のディスクイメージを作成している。
しかし、これでは動作しないので、今後の課題である。
この例のように、標準の mach_kernel
では動作せず、ハックしたカーネルが必要になるので、カーネル再構築の為の /usr/local
の整備とカーネル再構築をしておこう。
まずは、カーネル再構築の為の /usr/local
の整備であるが、以降で説明する 10.5 Leopard のカーネル再構築の為の整備をそのまま流用したので、そちらを参照のこと。
そして、いよいよカーネルの再構築である。
そして、以上のシェルスクリプトを以下のように使えば、10.4.11_i386_xnu/xnu-1228.15.4/obj/RELEASE_*/mach_kernel
にカーネル再構築がなされる。
$ ksh 10.4.11_i386_xnu-localhost-prepare.sh $ cd 10.4.11_i386_xnu $ ksh ../10.4.11_i386_xnu-localhost-build.sh
購入した「Mac OS X Install DVD」のイメージそのままでは起動せず、以下のような状態で停滞する。
カーネルパニックの原因が「AppleIntelCPUPowerManagement
」とあることから、ネット情報と照らし合わせて、「AppleIntelCPUPowerManagement.kext
」というカーネル拡張が起動を妨げているらしい。
そこで、後述するが、インストール DVD のディスクイメージを作成するにあたり、「AppleIntelCPUPowerManagement.kext
」を消しておくと、次のように多少状況が変化した。
ここで手掛かりは「Still waiting for root device」であるので、ネット情報によるといろいろあるのだが、結論としてはインストール DVD の「/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
」にて、カーネルフラッグ「rd=disk1
」を指定すれば、インストーラが無事起動することがわかった。
よって、インストーラの起動とともに、インストーラのインストールが上記に整合的であるようなインストール DVD のディスクイメージを作成するには、以下のようなスクリプトで実現でき、インストーラが起動する。
つまりここで、「/System/Library/Extensions/AppleIntelCPUPowerManagement.kext
」を削除しつつ(「OSInstall.pkg
」でもそれを削除しつつ)、「/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
」に「rd=disk1
」を指定するようなインストーラ DVD のディスクイメージを作成している。
ここまで成功すれば、インストールは実機と同様に行えばよい。
この場合、標準の mach_kernel
で事足りたが、本家カーネルが更新され VirtualBox がそれに対応してなかったりすれば自前でカーネルを再構築しなければならないかもしれない。それに備えて、カーネル再構築の為の /usr/local
の整備とカーネル再構築をしておこう。
まずは、カーネル再構築の為の /usr/local
の整備である。
以上のシェルスクリプトはを下のように使えば、/usr/local
にカーネル再構築の為のツール群が整備される。
$ ksh 10.5.8_ppc+x86_xnu_stage_00-localhost-prepare.sh $ cd 10.5.8_ppc+x86_xnu_stage_00 $ ksh ../10.5.8_ppc+x86_xnu_stage_00-localhost-build.sh $ sudo ksh ../10.5.8_ppc+x86_xnu_stage_00-localhost-install.sh
$ ksh 10.5.8_ppc+x86_xnu_stage_01-localhost-prepare.sh $ cd 10.5.8_ppc+x86_xnu_stage_01 $ ksh ../10.5.8_ppc+x86_xnu_stage_01-localhost-build.sh $ sudo ksh ../10.5.8_ppc+x86_xnu_stage_01-localhost-install.sh
上記が成功すれば、いよいよカーネルの再構築である。
そして、以上のシェルスクリプトを以下のように使えば、10.5.8_ppc+x86_xnu/xnu-1228.15.4/obj/RELEASE_*/mach_kernel
にカーネル再構築がなされる。
$ ksh 10.5.8_ppc+x86_xnu-localhost-prepare.sh $ cd 10.5.8_ppc+x86_xnu $ ksh ../10.5.8_ppc+x86_xnu-localhost-build.sh
最後に、ユニバーサルバイナリを作成するには以下のようにすればよい。
$ lipo -create 10.5.8_ppc+x86_xnu/xnu-1228.15.4/obj/RELEASE_PPC/mach_kernel 10.5.8_ppc+x86_xnu/xnu-1228.15.4/obj/RELEASE_I386/mach_kernel -o mach_kernel
購入した「Mac OS X Install DVD」のイメージそのままでは起動せず、以下のように緊急停止する。
これは全く手掛かりがなく困ったが、結局カーネル拡張ではなく、カーネルそのものと私の実機のマイクロアーキテクチャとの相性に問題があることが結論だった。
よって、ivy bridge に対応した mach_kernel
(参考文献[2])に差し替えた DVD を作成すると緊急停止は避けることが出来たが、先の「Still waiting for root device」の問題は残されており、同様の対処が必要だった。
結局、以上の不具合と、インストーラのインストールが上記に整合的であるようなインストール DVD のディスクイメージを作成するには、以下のようなスクリプトで実現でき、インストーラが起動する。
つまりここで、新しい「mach_kernel
」を複製しつつ(「OSInstall.pkg
」でもそれを複製しつつ)、「/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
」に「rd=disk1
」を指定するようなインストーラ DVD のディスクイメージを作成している。
ここまで成功すれば、インストールは実機と同様に行なえばよい。
この例のように、標準の mach_kernel
では動作せず、たまたまビルド済みのバイナリがあるのでそれを取得すれば事足りたが、本家カーネルが更新されたりすれば自前でカーネルを再構築しなければならないかもしれない。それに備えて、カーネル再構築の為の /usr/local
の整備とカーネル再構築をしておこう。
まずは、カーネル再構築の為の /usr/local
の整備である。
以上のシェルスクリプトはを下のように使えば、/usr/local
にカーネル再構築の為のツール群が整備される。
$ ksh 10.6.8_x86_xnu_stage_00-localhost-prepare.sh $ cd 10.6.8_x86_xnu_stage_00 $ ksh ../10.6.8_x86_xnu_stage_00-localhost-build.sh $ sudo ksh ../10.6.8_x86_xnu_stage_00-localhost-install.sh
$ ksh 10.6.8_x86_xnu_stage_01-localhost-prepare.sh $ cd 10.6.8_x86_xnu_stage_01 $ ksh ../10.6.8_x86_xnu_stage_01-localhost-build.sh $ sudo ksh ../10.6.8_x86_xnu_stage_01-localhost-install.sh
上記が成功すれば、いよいよカーネルの再構築である。
そして、以上のシェルスクリプトを以下のように使えば、10.6.8_x86_xnu/xnu-1504.15.3/obj/RELEASE_*/mach_kernel
にカーネル再構築がなされる。
$ ksh 10.6.8_x86_xnu-localhost-prepare.sh $ cd 10.6.8_x86_xnu $ ksh ../10.6.8_x86_xnu-localhost-build.sh
最後に、ユニバーサルバイナリを作成するには以下のようにすればよい。
$ lipo -create 10.6.8_x86_xnu/xnu-1504.15.3/obj/RELEASE_I386/mach_kernel 10.6.8_x86_xnu/xnu-1504.15.3/obj/RELEASE_X86_64/mach_kernel -o mach_kernel
購入した「Mac OS X Install ESD」のイメージ「InstallESD.dmg
」そのままで起動し、そのままインストーラが起動するはずである。
この場合、標準の mach_kernel
で事足りたが、本家カーネルが更新され VirtualBox がそれに対応してなかったりすれば自前でカーネルを再構築しなければならないかもしれない。それに備えて、カーネル再構築の為の /usr/local
の整備とカーネル再構築をしておこう。
まずは、カーネル再構築の為の /usr/local
の整備である。
以上のシェルスクリプトはを下のように使えば、/usr/local
にカーネル再構築の為のツール群が整備される。
$ ksh 10.7.5_x86_xnu_stage_00-localhost-prepare.sh $ cd 10.7.5_x86_xnu_stage_00 $ ksh ../10.7.5_x86_xnu_stage_00-localhost-build.sh $ sudo ksh ../10.7.5_x86_xnu_stage_00-localhost-install.sh
上記が成功すれば、いよいよカーネルの再構築である。
そして、以上のシェルスクリプトを以下のように使えば、10.7.5_x86_xnu/xnu-1504.15.3/obj/RELEASE_*/mach_kernel
にカーネル再構築がなされる。
$ ksh 10.7.5_x86_xnu-localhost-prepare.sh $ cd 10.7.5_x86_xnu $ ksh ../10.7.5_x86_xnu-localhost-build.sh
最後に、ユニバーサルバイナリを作成するには以下のようにすればよい。
$ lipo -create 10.7.5_x86_xnu/xnu-1504.15.3/obj/RELEASE_I386/mach_kernel 10.7.5_x86_xnu/xnu-1504.15.3/obj/RELEASE_X86_64/mach_kernel -o mach_kernel
購入した「OS X Install ESD」のイメージ「InstallESD.dmg
」そのままで起動し、そのままインストーラが起動するはずである。
ダウンロードした「Install OS X Mavericks.app
」内にある「Contents/Resources/createinstallmedia
」は USB メモリ等のデバイスにインストーラ ESD を作成するプログラムなので、それを経由してそのディスクイメージを作成することも可能だが、ここでは別の方法を採ろう。
ダウンロードした「Install OS X Mavericks.app
」内にあるイメージ「Contents/SharedSupport/InstallESD.dmg
」そのままでは起動しない。よって、以下のシェルスクリプトでインストーラ ESD のディスクイメージを作成する。
つまりここで、「InstallESD.dmg
」内の「BaseSystem.dmg
」をベースとしつつ、その System/Installation/Packages
を「InstallESD.dmg
」内の Package
に置き換えたインストーラ ESD のディスクイメージを作成している。
ここまで成功すれば、インストールは実機と同様に行なえばよい。
つづく。。。
ダウンロードした「Install OS X Yosemite.app
」内にある「Contents/Resources/createinstallmedia
」は USB メモリ等のデバイスにインストーラ ESD を作成するプログラムなので、それを経由してそのディスクイメージを作成することも可能だが、ここでは別の方法を採ろう。
ダウンロードした「Install OS X Yosemite.app
」内にあるイメージ「Contents/SharedSupport/InstallESD.dmg
」そのままでは起動しない。よって、以下のシェルスクリプトでインストーラ ESD のディスクイメージを作成する。
つまりここで、「InstallESD.dmg
」内の「BaseSystem.dmg
」をベースとしつつ、その System/Installation/Packages
を「InstallESD.dmg
」内の Package
に置き換えたインストーラ ESD のディスクイメージを作成している。
ここまで成功すれば、インストールは実機と同様に行なえばよい。
つづく。。。
実機の HDD/SDXC/SSD のデバイスのスライスの識別子を「/dev/diskXs2
」だとして、そのディスクイメージを包有する VirtualBox の CD/DVD イメージとして割り当て可能なディスクイメージを作成するには、以下のようにすればよい。
$ mkdir 'Macintosh SD.dmg In' $ hdiutil convert /dev/diskXs2 -format UDBZ -o 'Macintosh SD.dmg In/Macintosh SD.dmg' $ hdiutil create -size $(($(du -gs 'Macintosh SD.dmg In' | cut -f 1)+1))g -srcfolder 'Macintosh SD.dmg In' 'Macintosh SD.dmg In.dmg'
「dd if=/dev/diskX bs=$((1024*1024)) | VBoxManage convertfromraw stdin '/path_to/Macintosh SD.vdi' $((64*1024*1024*1024))
」なども可能であるが、VDI が実サイズになってしまうので上記を採用している。しかし、これだと非常に時間が掛かる上に、同じ大容量のイメージを二つもつことになってしまうので、相当無駄である。よって、次節のように直接 HDD のデバイスを VirtualBox から読み書きできるようにすれば、その問題は回避できる。逆に、VirtualBox ディスクイメージから実機の HDD/SDXC/SSD へ変換するには、実機の HDD/SDXC/SSD のデバイスの識別子を「/dev/diskX
」だとして、以下のようにすればよい。
$ export PATH="/Applications/VirtualBox.app/Contents/MacOS:$PATH" $ VBoxManage clonehd '/path_to/Macintosh SD.vdi' 'Macintosh SD.raw' --format RAW $ hdiutil unmount /dev/diskXs2 && dd if='/path_to/Macintosh SD.raw' of=/dev/diskX
但し、パーティションの一部を選んで書き戻すのは、これでは出来ないようだ。しかし、やはりこれも非常に時間が掛かる上に、圧縮されない生のストレージデータがファイルとして必要となり、ホストコンピュータのストレージ容量を圧迫せざるを得ない。よって、やはり次節のように直接 HDD のデバイスを VirtualBox から読み書きできるようにすれば、その問題は回避できる。
実機の HDD/SDXC/SSD のデバイスの識別子を「/dev/diskX
」だとして、それを VirtualBox から直接読み書きするには、以下のようにすればよい。
$ export PATH="/Applications/VirtualBox.app/Contents/MacOS:$PATH" $ hdiutil unmount /dev/diskXs2 && VBoxManage internalcommands createrawvmdk -filename '/path_to/Macintosh SD.vmdk' -rawdisk /dev/diskX
また、パーティションの一部を指定することも可能であるらしい。
$ VBoxManage internalcommands listpartitions -rawdisk /dev/diskX $ VBoxManage internalcommands createrawvmdk -filename '/path_to/Macintosh SD.vmdk' -rawdisk /dev/diskX -partitions 2
注意すべきは、SD カードなどで書き込み禁止にしたいところがそれは出来ないので、しかも、こうした場合ボリューム名も同一であることが往々にしてあるので、ディスクユーティリティ等でどちらがソースと復元先か注意が必要であることである。また、用事が終わったら、VirtualBox メニューの「ファイル」「仮想メディアマネージャ」で解放&除去をしておいた方が安心だろう。但し、USB ストレージであるなら VirtualBox の USB 2.0 コントローラでリムーバブルメディアとして使えるので、転送速度が気にならないのであれば、こちらの方が便利であろう。
VirtualBox のネットワーキングの NAT モードは規定値で以下のようになる。
gateway: 10.0.2.2 nameserver: 10.0.2.3 host: 10.0.2.4 dhcp-client: 10.0.2.15 〜 10.0.2.254
さて、ゲストからホストへの ssh は可能である。
localguest:~$ slogin 10.0.2.4
しかし、ホストからゲストへの ssh はそのままでは不可能だ。そこで、NAT ポートフォワーディングの設定を行う。
そして、以下のように ssh が可能となる。
localhost:~$ slogin -p 8822 localhost
VirtualBox のネットワーキングのブリッジモードは、ホストのネットワークインターフェースに従う。NAT のようにポートフォワーディングせずともホストとゲスト間で直接通信できるのだが、欠点は、ホストがオフラインだとホストとゲスト間の通信さえも出来なくなってしまうことである。
ともあれ、ホスト・ゲスト相互がサブネットのネットワーキングになるので、Bonjour サービスがそのまま相互に受けられるのは嬉しい。
localhost:~$ slogin localguest.local
OS X のバージョンと対応している各種バージョンや、インストーラそしてインストール先の HDD のサイズ等を表にまとめておく。
Xcode のバージョンと対応しているビルドターゲット OS X バージョン等を表にまとめておく。
仮想マシンで注意すべきは、ホストのスリープからの復帰時や、ゲストの状態保存からの復帰時に、ゲストの時計が遅れていることである。
オンラインであれば、ntp サーバとの時刻同期で事なきを得られるかも知れないが、オフラインのときには、ホストと時刻がずれたままになり、非常に好ましくない。せめてオフライン時も、ホストとの時刻同期はすべきである。以下のようにすればよい。
Ugazin:~ taiji$ sudo launchctl unload /System/Library/LaunchDaemons/org.ntp.ntpd.plist Ugazin:~ taiji$ sudo ntpdate kukunoti.local 24 Oct 13:19:22 ntpdate[175]: step time server 17.83.253.7 offset 2.186823 sec Ugazin:~ taiji$ sudo launchctl load /System/Library/LaunchDaemons/org.ntp.ntpd.plist
kukunoti.local
がホストの名前であり、OS X 10.7 である。OS X 10.5-10.6, 10.9 のホストではそのままでは ntp サーバとはなっていないので、ひと工夫必要である。
仮想マシンで厄介なのは、不要なスクリーンセーバーが起動してしまい、余分な CPU 資源を浪費することである。以下、それぞれの Mac OS X バージョンでのスクリーンセーバーの軽量化と無効化の設定を記しておく。
Ugazin:~ taiji$ defaults -currentHost read com.apple.screensaver { idleTime = 300; moduleName = Flurry; modulePath = "/System/Library/Screen Savers/Flurry.saver"; } Ugazin:~ taiji$ defaults -currentHost write com.apple.screensaver idleTime 0 Ugazin:~ taiji$ defaults -currentHost write com.apple.screensaver moduleName "Computer Name" Ugazin:~ taiji$ defaults -currentHost write com.apple.screensaver modulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Ugazin:~ taiji$ defaults -currentHost read com.apple.screensaver { idleTime = 0; moduleName = "Computer Name"; modulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; }
Ugazin:~ taiji$ defaults -currentHost read com.apple.screensaver { idleTime = 300; moduleName = Flurry; modulePath = "/System/Library/Screen Savers/Flurry.saver"; } Ugazin:~ taiji$ sudo defaults -currentHost write com.apple.screensaver idleTime 0 Ugazin:~ taiji$ sudo defaults -currentHost write com.apple.screensaver moduleName "Computer Name" Ugazin:~ taiji$ sudo defaults -currentHost write com.apple.screensaver modulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Ugazin:~ taiji$ defaults -currentHost read com.apple.screensaver { idleTime = 0; moduleName = "Computer Name"; modulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; }
Yagami:~ taiji$ defaults -currentHost read com.apple.screensaver { PrefsVersion = 100; idleTime = 300; moduleDict = { moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Yagami:~ taiji$ defaults -currentHost write com.apple.screensaver CleanExit -bool YES Yagami:~ taiji$ defaults -currentHost write com.apple.screensaver idleTime 0 Yagami:~ taiji$ defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Yagami:~ taiji$ defaults -currentHost read com.apple.screensaver { CleanExit = YES; PrefsVersion = 100; idleTime = 0; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Yagami:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { moduleDict = { moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Yagami:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowIdleTime 0 Yagami:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowModulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Yagami:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver idleTime 0 Yagami:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Yagami:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { idleTime = 0; loginWindowIdleTime = 0; loginWindowModulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Kusimati:~ taiji$ defaults -currentHost read com.apple.screensaver { PrefsVersion = 100; idleTime = 300; moduleDict = { moduleName = Random; path = "/System/Library/Screen Savers/Random.saver"; type = 8; }; } Kusimati:~ taiji$ defaults -currentHost write com.apple.screensaver CleanExit -bool YES Kusimati:~ taiji$ defaults -currentHost write com.apple.screensaver idleTime 0 Kusimati:~ taiji$ defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Kusimati:~ taiji$ defaults -currentHost read com.apple.screensaver { CleanExit = YES; PrefsVersion = 100; idleTime = 0; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Kusimati:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { moduleDict = { moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Kusimati:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowIdleTime 0 Kusimati:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowModulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Kusimati:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver idleTime 0 Kusimati:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Kusimati:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { idleTime = 0; loginWindowIdleTime = 0; loginWindowModulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Tikatoh:~ taiji$ defaults -currentHost read com.apple.screensaver { PrefsVersion = 100; idleTime = 300; moduleDict = { moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Tikatoh:~ taiji$ defaults -currentHost write com.apple.screensaver CleanExit -bool YES Tikatoh:~ taiji$ defaults -currentHost write com.apple.screensaver idleTime 0 Tikatoh:~ taiji$ defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Tikatoh:~ taiji$ defaults -currentHost read com.apple.screensaver { CleanExit = YES; PrefsVersion = 100; idleTime = 0; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Tikatoh:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { moduleDict = { displayName = Flurry; moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Tikatoh:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowIdleTime 0 Tikatoh:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowModulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Tikatoh:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver idleTime 0 Tikatoh:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Tikatoh:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { idleTime = 0; loginWindowIdleTime = 10; loginWindowModulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Hisatsu:~ taiji$ defaults -currentHost read com.apple.screensaver { PrefsVersion = 100; idleTime = 300; moduleDict = { displayName = Flurry; moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Hisatsu:~ taiji$ defaults -currentHost write com.apple.screensaver CleanExit -bool YES Hisatsu:~ taiji$ defaults -currentHost write com.apple.screensaver idleTime 0 Hisatsu:~ taiji$ defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Hisatsu:~ taiji$ defaults -currentHost read com.apple.screensaver { CleanExit = YES; PrefsVersion = 100; idleTime = 0; moduleDict = { moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }
Hisatsu:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { moduleDict = { displayName = Flurry; moduleName = Flurry; path = "/System/Library/Screen Savers/Flurry.saver"; type = 0; }; } Hisatsu:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowIdleTime 0 Hisatsu:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowModulePath "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" Hisatsu:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver idleTime 0 Hisatsu:~ taiji$ sudo defaults write /Library/Preferences/com.apple.screensaver moduleDict -dict displayName "Computer Name" moduleName "Computer Name" path "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver" type 0 Hisatsu:~ taiji$ defaults read /Library/Preferences/com.apple.screensaver { idleTime = 0; loginWindowIdleTime = 0; loginWindowModulePath = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; moduleDict = { displayName = "Computer Name"; moduleName = "Computer Name"; path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/Computer Name.saver"; type = 0; }; }