[yuan@jackycom ~/Desktop]$ cat /usr/share/hal/fdi/95userpolicy/storage-policy.fdi <?XML version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- --> <deviceinfo version="0.2"> <device> <match key="@block.storage_device:storage.removable" bool="true"> <merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge> <merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge> <merge key="volume.policy.mount_option.users" type="bool">true</merge> <merge key="volume.policy.mount_option.utf8" type="bool">true</merge> </match> <match key="@block.storage_device:storage.hotpluggable" bool="true"> <merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge> <merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge> <merge key="volume.policy.mount_option.users" type="bool">true</merge> <merge key="volume.policy.mount_option.utf8" type="bool">true</merge> </match> </device> </deviceinfo>原理正如上面所說,hal 在收到優盤插入的通知時,將讀取這些 storage policy 配置文件。在改寫 /etc/fstab 時,將用到配置文件中的數據,將這些 mount_option 全部加入 fstab 中去。如何測試效果測試效果的辦法簡單得很,但是不要急著插入優盤,而是應當先運行 代碼:
service haldaemon restart然後插入優盤。幾秒鐘之後,桌面上會出現優盤圖標。看看你的 fstab,如果多了這樣一行 代碼:
/dev/sda1 /media/YUAN vfat pamconsole,utf8,users,dmask=0,fmask=111,noatime,sync,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0那麼說明沒什麼問題。也許你的系統中 selinux 已經被關閉了,所以參數沒有這麼長。訪問優盤,應該不會再出錯了。可能的問題如果你的語言環境是 gb2312,那麼要把上面的配置文件稍微修改一下,把兩次出現的 utf8 修改為 iocharset=cp936小心配置文件中的拼寫錯誤如果仍然會掛起或死機,那麼可能 haldaemon 沒有重啟動,甚至可能被關閉了。運行
代碼:
chkconfig haldaemon on chkconfig messagebus on service messagebus restart service haldaemon restart命令的可重復性不要手動修改 /etc/fstab,所有修改都會被丟棄掉,應該只修改 hal 的配置文件因為我們只新建了一個配置文件,然後重啟了一個服務,因此可重復性應該很好。配置文件中的選項如果發生沖突,據說將使用讀取時靠後的一個,也就是說 95userpolicy 將比 90defaultpolicy 後讀取?與其他方案的兼容性autofs 修改的是 /etc/auto.misc 和 /etc/auto.master,不會有沖突手動掛載,或手動修改 /etc/fstab, 在重啟後都將失效,因為 haldaemon 將接管 fstab 文件,除非在 fstab 中加入選項 unmanaged (?)如何回退到最初的狀態因為只添加了一個配置文件,因此只要將它刪除就可以了。另外最好執行一次 代碼:
service haldaemon restart正文結束後記這篇文檔中的配置文件已經沒有意義了,因為它的主要目的是添加 utf8 選項,而新版本的 hal 中已經包含了這個配置。並且,新版本的配置文件中使用 volume.fstype 作為匹配時的關鍵字,具有更好的通用性,當優盤是其他格式時仍然可用。代碼如下,節選自新的 90defaultpolicy/storage-policy.fdi 代碼:
<!-- Use UTF-8 charset for vfat --> <match key="volume.fstype" string="vfat"> <merge key="volume.policy.mount_option.iocharset=utf8" ype="bool">true</merge> </match>所以仿照這個文件,將自定義的策略文件 /usr/share/hal/fdi/95userpolicy/storage-policy.fdi 修改如下 代碼:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
<device>
<match key="block.is_volume" bool="true">
<match key="volume.fsusage" string="filesystem">
<match key="volume.fstype" string="vfat">
<merge key="volume.policy.mount_option.fmask=111" type="bool">true</merge>
<merge key="volume.policy.mount_option.dmask=0" type="bool">true</merge>
<merge key="volume.policy.mount_option.users" type="bool">true</merge>
<merge key="volume.policy.mount_option.utf8" type="bool">true</merge>
</match>
</match>
</match>
</device>
</deviceinfo>update:在新的 hal-0.50 中,配置文件的位置發生了變化,因此如果以前做過上面所說的設置,那麼必須在安裝之後,將 /usr/share/hal/fdi/95userpolicy 移動到 policy 子目錄中,也就是說,移動後成為 /usr/share/hal/fdi/policy/95userpolicy 目錄如果以前沒有做過任何設置,那麼只要新建 /usr/share/hal/fdi/policy/95userpolicy 目錄,並按照上面的內容復制配置文件就可以了