起動時の「接続に失敗しました」警告対策
OSX 10.6.8のMacBookを起動した時に、いつの頃からか「接続に失敗しました」という警告が出るようになってしまった。
接続に失敗しました
サーバ"MacBook-Pro-Retina15(3)"が存在しないか、現在利用できません。
サーバーの名前またはIPアドレス、およびネットワーク接続を確認してから、もう一度やり直してください。
まったく身に覚えがない...。長らく、どうして起動時にMacBook-Pro-Retina15(3)に接続しようとするのか、原因不明のままだった。
- 普段はモニタを閉じてスリープするだけで、再起動することがほとんどない、ということがこの問題の放置に拍車をかけた。
- それに、警告されるだけで、OKボタンを押すと問題なく起動が完了して、正常に使えたので。
- 警告される煩わしさ、ボタンを押す面倒臭さ、原因不明の気持ち悪さ、を我慢して使い続けてしまった。
共有のコンピュータ名に数字が付加されて増えていく怪現象
- (3)という数字が付加していることには、以下のような経緯がある。
- もう一台のMacBook Proは、共有のコンピュータ名を「MacBook-Pro-Retina15」としているのだけど、
- 何らかの原因でネットワーク上で名前がダブってしまうことがあるらしい。
- OSXは、ネットワーク上で名前がダブっていると判断すると、自分の名前に"(n)"を付加する仕様のようだ。
- ファイル名がダブっている場合も、数字が付加される。その仕組みに似ている。
- nは数字である。1から始まり、ダブっていると判断される度に+1ずつ加算され、増えていく。
- そのまま放っておくと、MacBook-Pro-Retina15(12)なんて名前になっていることもあった。
想像と試行錯誤
- 「サーバ"MacBook-Pro-Retina15(3)"が存在しない」と警告するMacBookは、MacBook Pro Retina15が無線LANで接続している時に、何らかの共有をしたのだと思う。
- "MacBook-Pro-Retina15(3)"が存在しなくなった現在も、なぜか起動する時に接続しようとしている。
- しかし、MacBookの設定を見直してみたが、接続するような設定はどこにも残っていない...。
-
- Finderのサーバへ接続...が怪しいと思って、そこに残っている履歴もすべて削除してみたが、状況変わらず...。
-
- /Library/StartupItems/やlaunchd.plistの設定も確認したけど、原因らしきものは見当たらない...。
-
- 残るはログイン項目か?と思い確認してみたが、サーバに接続するような設定は見当たらない...。
もはやここまでか?と諦めかけた時、stringsコマンドを使った検索技を思い出した。
stringsコマンドで設定ファイルから文字列を探す
- stringsコマンドは、ファイル中に存在する文字列を取り出してくれるコマンド。
- バイナリファイルや実行ファイルであっても、そこに含まれる文字列を探して出力してくれる。
- GUIにはない未知の設定項目などを探す時にも、強力な道具となるコマンドだ。
~/Library/Preferences/から"MacBook-Pro-Retina15"を検索するワンライナー
- そこにファイルは400項目近くあるので、とても手作業ではやってられない。
- 以下のようなシェルスクリプトを書いて、実行してみた。
for f in ~/Library/Preferences/*; do if strings $f 2>/dev/null|grep 'MacBook-Pro-Retina15'; then echo ======== $f; fi; done
- すると、MacBook-Pro-Retina15を含む設定ファイルのリストが表示された!
...中略... afp://bebe-MacBook-Pro-Retina15(3)._afpovertcp._tcp.local ======== /Users/zari/Library/Preferences/com.apple.loginitems.plist ...中略... \f0\fs24 \cf0 bebe-MacBook-Pro-Retina15} ======== /Users/zari/Library/Preferences/com.aynimac.CotEditor.plist ...中略...
- 暫し眺めていて、そして気付いた。
限りなくcom.apple.loginitems.plistが怪しい!
- com.apple.loginitems.plistは、システム環境設定 >> アカウント >> ログイン項目の設定を保存するファイルである。
- システム環境設定を目視して確認する限り、MacBook-Pro-Retina15を共有するような設定は見当たらないのだけど、
- 未知のログイン項目のどこかに、afp://bebe-MacBook-Pro-Retina15(3)._afpovertcp._tcp.localを共有しようとする設定が残っているのかもしれない。
- 疑いの目線で再びログイン項目を確認してみると、種類が「不明」となっている項目が気になってきた。
- ログイン項目には、全部で5項目の「不明」があった。
- 「不明」の項目は、AppleScriptで作ったアプリケーションやシェルスクリプトが登録されているみたい。
- ひとつ一つ中身を確認するのは面倒なので、5項目すべて削除してみた。
- 再起動してみる...
- すると「接続に失敗しました」は表示されずに起動が完了した!
直った!
原因の想像
直接的な原因がわからずに解決してしまったので、考えられる2つの原因をメモしておく。
- ログイン項目に登録されていた「不明」の5項目のどれかが悪さをしていた。
- 削除したことで、MacBook-Pro-Retina15(3)を共有しなくなった。
- GUI上には表示されない未知の設定項目がcom.apple.loginitems.plist残ってしまっていた。
- ログイン項目を削除あるいは追加したことで、GUI上見える項目のみに設定がリセットされた。
- 再度、設定ファイルからMacBook-Pro-Retina15を検索してみると、com.apple.loginitems.plistは表示されなくなった。
for f in ~/Library/Preferences/*; do if strings $f 2>/dev/null|grep 'MacBook-Pro-Retina15'; then echo ======== $f; fi; done
まとめ
試してみる価値のある手順
- ログイン項目に何かを追加して、削除してみる。
- 種類が不明のログイン項目を一つずつ削除してみる。
- 削除する前には、バックアップを忘れずに。
- ログイン項目のスクリーンショットも撮影しておく。
- 以下のシェルスクリプトを使って、設定ファイルをキーワード検索してみる。
- 'キーワード'の部分に、警告文中の固有のテキストを入力して、実行するのだ。
- 出力された設定ファイルが怪しい!
for f in ~/Library/Preferences/*; do if strings $f 2>/dev/null|grep 'キーワード'; then echo ======== $f; fi; done