解決 OS X Lion 中 Log 一直出現 sanboxd deny 的訊息

雖然不是什麼大不了的事情

不過看了總是很不順眼 XD

就是每次開 Console Log 都會噴一堆

sandboxd: ([]) WebProcess() deny file-read-data /Library/Caches/com.nvidia.OpenGL
sandboxd: ([]) WebProcess() deny file-write-create /Library/Caches/com.nvidia.OpenGL/

之類的 deny 訊息,如下圖


這看了很讓人不順眼阿!
於是開始從源頭找…

首先是 OS X 的 sandbox 機制,每個被 sandboxd (sandbox daemon) 限制住的 process 都有一個對應的設定檔

裡面寫著該 process 可以 access 那些檔案 (包含 allow & deny) 而且設定檔的副檔名是 .sb

在以下資料夾可以發現系統預設的 sandbox 的 profile

  • /System/Library/Sandbox/Profiles/
  • /Library/Sandbox/Profiles/
  • /usr/share/sandbox/

不過這些都是系統相關的檔案而非應用程式的

應用程式的 profile 通常會在他自己目錄下的 Resources

例如我們這裡的 WebProcess 指的就是 WebKit2 的一個 Process 而他的 sb profile 就在

/System/Library/PrivateFrameworks/WebKit2.framework/WebProcess.app/Contents/Resources/


如圖所示,我們可以看到底下有個名為 com.apple.WebProcess.sb 的檔案

我們只要用 vi 編輯她即可

加入下列文字,表示給與 WebProcess 對於 /Library/Caches/com.nvidia.OpenGL 的讀寫權限


類似這樣


加在最下方後重新啟動 Safari 就大功告成啦!

再看 Console Log 應該就沒有這些訊息了~

不過雖然是看不到了 不過也因為把權限放大了一些不知道會不會出事 XD