起動時の「接続に失敗しました」警告対策

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)なんて名前になっていることもあった。
  • ある時、コンピュータ名に数字が付加されてどんどん増えていく問題は、無線LANが原因と分かった。
  • 有線LANで接続している場合は、いつまでたっても「MacBook-Pro-Retina15」が維持され、数字が付加されることはないのだ。
  • そこで、現在はほとんど有線LANで接続して使うようになった。
  • コンピュータ名も手入力で「MacBook-Pro-Retina15」と入力し直した。

想像と試行錯誤

  • 「サーバ"MacBook-Pro-Retina15(3)"が存在しない」と警告するMacBookは、MacBook Pro Retina15が無線LANで接続している時に、何らかの共有をしたのだと思う。
  • "MacBook-Pro-Retina15(3)"が存在しなくなった現在も、なぜか起動する時に接続しようとしている。
  • しかし、MacBookの設定を見直してみたが、接続するような設定はどこにも残っていない...。
    • どこかにMacBook-Pro-Retina15(3)のエイリアスがあるのではないかと探したが、どこにもなかった...。
    • そもそも、たとえエイリアスが残っていても、そのエイリアスを開こうとしない限り、接続することはないはず。
    • Finderのサーバへ接続...が怪しいと思って、そこに残っている履歴もすべて削除してみたが、状況変わらず...。
    • /Library/StartupItems/やlaunchd.plistの設定も確認したけど、原因らしきものは見当たらない...。
    • 残るはログイン項目か?と思い確認してみたが、サーバに接続するような設定は見当たらない...。


もはやここまでか?と諦めかけた時、stringsコマンドを使った検索技を思い出した。

stringsコマンドで設定ファイルから文字列を探す

  • stringsコマンドは、ファイル中に存在する文字列を取り出してくれるコマンド。
  • バイナリファイルや実行ファイルであっても、そこに含まれる文字列を探して出力してくれる。
  • GUIにはない未知の設定項目などを探す時にも、強力な道具となるコマンドだ。
  • "MacBook-Pro-Retina15(3)"に接続しようとするならば、どこかに接続しようとさせる設定ファイルが残っているはずである。
  • 当然、その設定ファイルには"MacBook-Pro-Retina15(3)"という文字列が含まれているのではないかと予想した。
  • 設定ファイルと言えば、~/Library/Preferences/以下に存在する.plistが怪しい。
  • stringsコマンドで片っ端から.plistを検索して、"MacBook-Pro-Retina15(3)"を含む設定ファイルを探してみようと決意した。

~/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