歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

設置fc3HAL自動掛載優盤上的vfat分區

  內容部分是翻譯,參見 redhat magazine 第一期中,關於 fedora core 3 新特性的文章http://www.redhat.com/magazine/001nov04/features/fedoracore3/Meet Fedora Core 3by Warren Togami and Colin Charles* IntrodUCtion* Desktop Improvements* Behind the Desktop* NetworkManager* International Language Input* Multimedia and Fun* GCC* Faster Updates* Common Gotchas in Fedora Core 3* Looking Ahead* About the Authors本來把文檔翻譯了一遍,但是在後台打開另一個網頁時,Firefox 掛掉了本來還做了很多很多評注的。把大概意思說說FC3 的新東西,包括 gnome-2.8, kernel-2.6.9, gcc-3.4.2 等等。(文中就是這樣說的, 而論壇上大家關心的 fat32, ntfs, mp3, nvidia,fonts 等等幾乎不可能成為自由軟件的東西是永遠不會出現的。)(所有其他發行版都會用到 redhat 在 Linux 的開發中做出的貢獻,並不是只有一個公司會受益。即使你使用別的發行版,也有一大半的組件是 redhat 的作品,那麼用 fedora 有什麼不好?)fedora 中主要的新內容,是設備的即插即用。這一套並不是表面上可以看到的。它主要由 hotplug, udev, D-BUS, HAL, gamin 幾個組件組成。hotplug 是內核的一部分,在設備插入或拔出時,自動進行配置內核狀態。udev 是 hotplug 的一部分,負責維護動態的 /dev 目錄,使 /dev 目錄的內容與當前系統狀態一致。D-BUS 可以在應用程序之間傳送消息,例如可以把“連接上一台打印機”的消息發送給 HAL。HAL 可以集成多種來源的信息,包括內核消息,配置文件等等,然後根據 D-BUS 的消息進行操 作。gamin 是改進的文件狀態監視程序。例如插入優盤。hotplug 自動加載需要的模塊,udev 創建相應的 /dev/sda1 等等節點,hotplug 向 HAL 發消息,HAL 收到消息後,根據配置文件,它運行 fstab-sync 來修改 fstab,創建 /media 的子目錄作為掛載點。gamin 檢測到 fstab 發生變化之後,通知桌面系統。桌面系統在 “計算機” 項目中建立驅動器圖標。在拔出優盤時,與上面的過程類似,模塊被卸載,設備文件被刪除,fstab 中相應條目被刪除,/media 目錄下的掛載點也被刪除了。如果認為 autofs 或者手動 mount 比這個要簡單,那麼可以同時使用兩個優盤,試試看哪個更好用。這個過程非常有用,不同的設備都可以用這個過程,例如音樂 CD 放入光驅後,HAL 可以啟動播放程序或者抓軌程序等等。另一個最重要的用途,在 redhat magazine 第三期中提到了,是 NetworkManager。因為使用移動無線通訊的用戶可能會頻繁更換網絡的連接方式,只有用 hotplug 和 hal 等協作,才可能快速地作出反應,動態切換網絡配置。gnome-2.8 對於 gnome-2.6 的改進,體現在文件選擇框上。只要按任意鍵,就會彈出簡單 的搜索窗口,可以更快地找到自己需要的內容。如果按下 `/' 鍵,那麼會跳出與在 nautilus 中按下 ctrl-l 一樣的跳轉位置框。evolution-2.0 采用了 SpamAssassin,垃圾郵件的防范非常出色。另外還有 gpg 等等非常重要的功能。至於去掉的新聞功能,使用 firefox 的動態書簽可以更方便.忘了其他的了。建議大家關心一下 redhat magazine 中關於 fedora 的內容,有些是非常精彩的!設置 hal 的 mount policy 使優盤自動掛載可以正常工作聲明部分轉載並翻譯自 redhat 網站,本文遵循 GNU FDL,僅正文部分可自由修改,重發布時正 文之外的部分必須同時原樣發布。譯者對未告知作者表示歉意,但對誤讀的後果表示不負責。正文開始由於 fc3 內核默認 fat32 文件系統字符編碼是 ascii,如果優盤的文件名包含中文,那麼在轉換時會出問題,應用程序就會失去響應。具體的表現有多種,比如桌面假死,關機時提示無法卸載分區等等解決的辦法是在掛載時,根據語言環境 locale 的值,使用掛載參數。如果是 UTF-8 那麼就用 mount -o utf8,如果是 GB* 那麼就用 mount -o iocharset=cp936。但是這樣繁瑣地手動掛載就失掉了 FC3 的好處。正確的解決辦法,是添加自己的配置文件,我的是這樣


代碼:

[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 目錄,並按照上面的內容復制配置文件就可以了



</deviceinfo>update:在新的 hal-0.50 中,配置文件的位置發生了變化,因此如果以前做過上面所說的設置,那麼必須在安裝之後,將 /usr/share/hal/fdi/95userpolicy 移動到 policy 子目錄中,也就是說,移動後成為 /usr/share/hal/fdi/policy/95userpolicy 目錄如果以前沒有做過任何設置,那麼只要新建 /usr/share/hal/fdi/policy/95userpolicy 目錄,並按照上面的內容復制配置文件就可以了



Copyright © Linux教程網 All Rights Reserved