<< Mac Pro を Snow Leopard へ | main | Apple社に囲われていく私… >>

起動毎にサウンド出力設定が内蔵スピーカーに戻ってしまう

 Mac Pro(Snow Leopard)が、Mac OS X の起動毎にサウンドを出力する装置の設定が内蔵スピーカーに戻される、という現象が起きるようになった。
 直前にやったことといえば、ソフトウェア・アップデートで “セキュリティアップデート 2010-006” をインストールしたことである。
 P-RAMのクリア(P+R+option+commandを押しながら起動)、起動ディスクのアクセス権の修復をしてみたが、状況は変わらず。
 ネットで情報を漁ると、「ターミナルから、 sudo chown -R _coreaudiod:_coreaudiod /Library/Preferences/Audio とすれば解決」という情報にありついた。( Cocoa を飲んで、ほっとして。: Mac のサウンド出力設定が保存されないときは... [ LiNK (norihito.typepad.com) ])
 しかし、私の環境では、これを実行しても治らなかった。

 システム環境設定で、サウンドの設定を変更しても、/Library/Preferences/Audio/ にある2つのファイル com.apple.audio.DeviceSettings.plist と、com.apple.audio.SystemSettings.plist の日付や容量が変わらない。書き換えられた様子がないと見ていいのだろう。
 なので、 chmod -R 666 /Library/Preferences/Audio としてみたのだが、ダメだった。

 そこで、この2つのファイルをリネーム(別名にすることにより、このファイルを無効化)してみたところ、治りましたよ! 
 リネーム後、再起動して、システム環境設定からサウンドを再設定したら、この2つのファイルが新たに作成されていました。

 ちなみに、再度アクセス権の修復をしたら、/Library/Preferences/Audio のオーナーを root に修正されていました。

 よくよく調べてみると、拡張属性とやらが付いてしまったのが今回の主要因のようである。(たぶん。)

 以下は、 /Library/Preferences/Audio/ にて、“ls -l” コマンドで表示させたところ。
-rw-r--r-- 1 _coreaudiod _coreaudiod 8271 9 24 16:55 com.apple.audio.DeviceSettings.plist
-rw-rw-rw-@ 1 _coreaudiod _coreaudiod 4803 9 18 10:45 com.apple.audio.DeviceSettings.plist~org2
-rw-rw-rw- 1 _coreaudiod _coreaudiod 892 9 18 14:59 com.apple.audio.DeviceSettings.plist~orig
-rw-r--r-- 1 _coreaudiod _coreaudiod 1680 9 24 16:56 com.apple.audio.SystemSettings.plist
-rw-rw-rw-@ 1 _coreaudiod _coreaudiod 1498 8 26 19:37 com.apple.audio.SystemSettings.plist~org2
-rw-rw-rw- 1 _coreaudiod _coreaudiod 429 9 18 14:55 com.apple.audio.SystemSettings.plist~orig

 *.plist~orig というファイルは、現象発生時には既に存在していた。
 *.plist~org2 というファイルは、現象発生時に *.plist だったファイルをリネームしておいたもの。 このファイルのパーミッションが、-rw-rw-rw-@ となっており、“@”が表示されているということは、拡張属性(EA:Extended Attributes)が付与されている事を示しているらしい。 これが問題を起こしていた主要因だったのかもしれない。

 さらに、拡張属性の種類を表示させるオプション(“-@”)と、アクセス制御リスト(ACL)情報を表示させるオプション(“-e”)を付けて、表示させてみた。

$ ls -ale@
total 72
drwxrwxr-x 8 root _coreaudiod 272 9 24 16:53 .
drwxrwxr-x 65 root admin 2210 9 25 10:04 ..
-rw-r--r-- 1 _coreaudiod _coreaudiod 8271 9 24 16:55 com.apple.audio.DeviceSettings.plist
-rw-rw-rw-@ 1 _coreaudiod _coreaudiod 4803 9 18 10:45 com.apple.audio.DeviceSettings.plist~org2
    com.apple.metadata:_kTimeMachineNewestSnapshot  50
    com.apple.metadata:_kTimeMachineOldestSnapshot  50
 0: group:everyone deny write,delete,append,writeattr,writeextattr,chown
-rw-rw-rw- 1 _coreaudiod _coreaudiod 892 9 18 14:59 com.apple.audio.DeviceSettings.plist~orig
-rw-r--r-- 1 _coreaudiod _coreaudiod 1680 9 24 16:56 com.apple.audio.SystemSettings.plist
-rw-rw-rw-@ 1 _coreaudiod _coreaudiod 1498 8 26 19:37 com.apple.audio.SystemSettings.plist~org2
    com.apple.metadata:_kTimeMachineNewestSnapshot  50
    com.apple.metadata:_kTimeMachineOldestSnapshot  50
 0: group:everyone deny write,delete,append,writeattr,writeextattr,chown
-rw-rw-rw- 1 _coreaudiod _coreaudiod 429 9 18 14:55 com.apple.audio.SystemSettings.plist~orig

 こんな感じ。
 “com.apple.metadata:_kTimeMachineNewestSnapshot”とかは、「ファイルの本質とは直接関係のない修飾的な情報」が記録されているメタデータを記録しているファイル名らしい。(その後ろの“50”は何を示しているのかまでは調べていない。)

 ファイルの内容が破損しているのでなければ、この拡張属性を解除してやるのが一番スマートな解決方法なのだろうな。
 拡張属性を解除をするには、xattr コマンドを使うらしい。
 やってみた。

 一旦コピーして、それに対して試してみる。
# cp -p com.apple.audio.SystemSettings.plist~org2 COPY_com.apple.audio.SystemSettings.plist~org2

# ls -l@e COPY_com.apple.audio.SystemSettings.plist~org2
-rw-rw-rw-@ 1 _coreaudiod _coreaudiod 1498 8 26 19:37 COPY_com.apple.audio.SystemSettings.plist~org2
    com.apple.metadata:_kTimeMachineNewestSnapshot  50
    com.apple.metadata:_kTimeMachineOldestSnapshot  50
 0: group:everyone deny write,delete,append,writeattr,writeextattr,chown

# xattr -d com.apple.metadata:_kTimeMachineNewestSnapshot COPY_com.apple.audio.SystemSettings.plist~org2
# xattr -d com.apple.metadata:_kTimeMachineOldestSnapshot COPY_com.apple.audio.SystemSettings.plist~org2

# ls -l@e COPY_com.apple.audio.SystemSettings.plist~org2
-rw-rw-rw-+ 1 _coreaudiod _coreaudiod 1498 8 26 19:37 COPY_com.apple.audio.SystemSettings.plist~org2
 0: group:everyone deny write,delete,append,writeattr,writeextattr,chown

 “+”が表示されているということは、ACL情報が付いている事を意味している。
 現在有効な設定ファイルである *.plist のファイルには付いていない。
 このACL情報を消すには、chmod コマンドに“-N”オプションを付ければいいらしい。
 やってみた。

# chmod -N COPY_com.apple.audio.SystemSettings.plist~org2
# ls -l@e COPY_com.apple.audio.SystemSettings.plist~org2
-rw-rw-rw- 1 _coreaudiod _coreaudiod 1498 8 26 19:37 COPY_com.apple.audio.SystemSettings.plist~org2

 おー! 消えたよ! 

 今回の私の環境での事例では、このようにするのが正解だったのだろうな。…たぶん。(全てrootでの作業。)
 ていうか、なんでこんな余計な属性が付いてしまったのよ? (怒)
 で、試しに *.plist~org2 ファイルを TimeMachine から復元してみたら、拡張属性やACLは付いていませんでした…。(こっちが Mac使いとしては正解なのかもな。笑)

参考:
Macでlsした時のパーミッションにあるアットマークを消す。xattrコマンド。 - kanonjiの日記[ LiNK (d.hatena.ne.jp) ]
コンピューター | comments (2) | trackbacks (0)

Comments

ksさん、遅くなりましたが、コメントありがとうございます。
こんなネットの隅っこに置いてる記事でもお役に立てて幸いです。
しゅういち | 2011/09/23 12:07 PM
ある日突然オーディオインターフェイスが選択出来なくなって困っていたところ、この記事のお陰で復活!大変助かりました!本当にありがとうございます
ks | 2011/09/02 01:02 AM

Post your Comment

Trackbacks