2010.09.24 Friday
起動毎にサウンド出力設定が内蔵スピーカーに戻ってしまう
Mac Pro(Snow Leopard)が、Mac OS X の起動毎にサウンドを出力する装置の設定が内蔵スピーカーに戻される、という現象が起きるようになった。
直前にやったことといえば、ソフトウェア・アップデートで “セキュリティアップデート 2010-006” をインストールしたことである。
直前にやったことといえば、ソフトウェア・アップデートで “セキュリティアップデート 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) ]
ネットで情報を漁ると、「ターミナルから、 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
こんなネットの隅っこに置いてる記事でもお役に立てて幸いです。