2013年9月22日 星期日

Puppy Linux 讓 512MB 隨身碟敗部復活! (scim 的注音與嘸蝦米中文輸入法 OK)

Puppy Linux 5.7.1 桌面 很久以前下載過 puppy linux, 不過那時中文化的資訊很少。 最近再試一次, 試了很久, 中文終於大致可用。 156 MB 的下載檔再加上 256 MB 裝入中文及 mk-boot-usb, 讓原本已經被淘汰的 512 MB 隨身碟也可以敗部復活, 超感動的! (呃, 老實說我手邊最小的隨身碟是 1G 的, 在 puppy 面前, 這真是太尊榮了。) [2014/10/1: 改推薦 中文版 finnix]

一、 下載與安裝

我下載的是 precise-5.7.1 標準版。 如果你的電腦真的很老舊 -- 例如是 i486 (而非 i686) 等級、 從 scsi 硬碟開機、 ... 那麼就按照 release notes 的建議改用 retro 版。

不必安裝。 燒一片光碟, 開機就直接用。 請跳到下一節。

如果你跟我一樣, 電腦裡已有 grub, 或隨身碟已用 mk-boot-usb 裝入 grub, 那麼可以這樣子把 puppy linux 安裝到硬碟或隨身碟上:

  1. 在某個分割 (比方說 /dev/sdz99 好了) 上面建立一個子目錄 (比方說 /precise-puppy 好了)。
  2. 把光碟映像檔的所有內容複製到上面的子目錄。
  3. 在 grub 的 menu.lst 裡面加上這一段:
        title precise puppy 5.7.1
        kernel (hd25,98)/precise-puppy/vmlinuz
        initrd (hd25,98)/precise-puppy/initrd.gz
    

重開機就可以選擇進入 puppy linux 了。

二、 使用小技巧

初次登入, 被詢問語言環境時, 請維持預設的英文環境 (en_US) ; 不要選中文。

大部分的動作只需要單擊 (click) 就有反應; 不需要雙擊 (double click)。

桌面下方一排圖示顯示所有硬碟及隨身碟的所有分割。 隨身碟插入/拔出會隨時自動反應。 點下某個分割的圖示就會掛載 (mount) 起來並在圖示右上方顯示一個小紅叉。 點一下小紅叉就會卸下來 (umount)。

安裝套件: 從主選單的 「Setup」 進入 「Puppy Package Manager」 或是從桌面上的 「Install」 也可以找到 PPM 的入口。 第一次安裝之前, 建議先點 「Configure Package Manager」 再點 「Update now」 進入冗長的 「更新套件資訊」 程序 -- 意思類似 debian/ubuntu/antix 的 apt-get update 但 puppy 會很囉嗦地要你不斷地按 Enter。 更新結束後, 回到 PPM 主視窗, 左下角可以搜尋套件名稱。 例如搜尋 「imagemagick」 會找到名字類似的一堆套件。 點選真正的套件本身, 再點選 「examine dependencies」 讓 puppy 自動幫你牽出主套件所需要用到的其他相依套件。 最後點選 「download-and-install selected packages」 之後再點幾下就真的把它裝起來。 安裝好還沒完, puppy 會問你要不要 「trim the fat」 (去除油脂)。 對於像貴哥一樣的肉腳兼懶惰鬼而言, 未來不太需要自行編譯, 所以 dev 可打勾 (要刪除); 文件可以上網找, 所以 doc 也可打勾表示要刪除。 至於要保留哪些 locales (各種語言的訊息翻譯) ? 請把 「en」 改成 「en,zh_TW」。

我在 eeepc 上, 螢幕太小, 經常視窗裡面的字會亂掉。 按視窗外框的 「放到最大」 鍵, 它就會自動重新整理。 如果需要移動視窗卻無法抓到視窗的頭頂, 可以在視窗四個邊緣任一處按住滑鼠右鍵, 就會出現 "Move" 及 "Resize" 等等選項。

一開機就直接登入 root, 所以不需要密碼。 不過遇到需要的時候 (例如用 ctrl-alt-f1 切換到文字終端機) root 的密碼是 woofwoof。 (也就是初次開機完的小狗叫聲)

三、 回存

Puppy 採用 unionfs (還是 aufs?)。 也就是說, 它可以把所有 「新的寫入動作」 全部集中到一個儲存檔裡面 -- 那個儲存檔本身就是一個檔案系統的映像檔。

事實上在平常使用時, 所有寫入資料 (新增/刪除套件、 修改設定檔、 畫面快照、 ..) 全部都暫放在記憶體裡面, 直到第一次試用完, 要關機前系統才會詢問是否要存檔。 (事實上第二次開機以後, 也可以按桌面上的暗紅色 save 按鈕來存檔) 如果同意, 比方說把存檔版本取名為 ckhung 好了, 那麼系統將在 /dev/sdz99 的 /precise-puppy 底下 (或你所選擇的其他地方) 建立一個 precisesave-ckhung.2fs 檔案, 記錄你這次使用的所有更改。 也就是說, 只要備份這個檔案, 就等於備份了你在 puppy linux 上曾經做過的一切更改。 再換個方式說, 如果不考慮隱私問題, 好幾個人可以各自擁有一個 precisesave-????.2fs 儲存檔, 放在同一顆隨身碟上輪流共用, 還能保持各自的設定與桌面。 (如果偵測到多個儲存檔, 開機時 puppy 會請你選一個。) 光是想到一家人共同擠在同一顆 2G 隨身碟上的畫面, 就讓人覺得超溫馨 :-) 隱私提醒: 所以你的無線網路連線密碼還有各網站的登入帳密也會存在這個檔案裡! 請小心別複製給別人。 另外, 就算你當初是用光碟開機, puppy 也懂得到硬碟尋找儲存空間。

存檔之後, 再下一次開機會很慢 (出現 「updating... layered file system. next boot will be faster」 的訊息。) 以後就不會了。 (但如果你在兩次開機之間用別的系統去更改記錄檔的名字, 下次開機又會重新慢一次。) 如果後來不想接續先前儲存的結果, 而想從最原始的 puppy 重來再設定一次, 可以在 grub 的命令列最後面加上 pfix=ram。 關於更多開機時的選項, 詳見 Puppy Boot Parameters

四、 mk-boot-usb

對我來說, 採用 puppy linux 時, mk-boot-usb 比中文更重要。 因為平常還是用 antix 比較完整方便。 Puppy 的好處跟 slax 一樣: 隨身碟 A 如果採用 antix 或其他較完整的版本開機, 就只能把隨身碟 B 複製給隨身碟 C; 但若 A 當初採用 puppy 開機, 就可以省略 B, 直接把 A 自己複製給 C。 (但請見上面隱私提醒。)

mk-boot-usb 在執行的時候, 會用到一些外部指令。 其中 /sbin/sfdisk 跟 /usr/sbin/grub-probe 這兩個指令, puppy 並未內建。 我就直接從 antix 13.1 把這兩個檔案 copy 過來。

有點可惜的是: Puppy 的 grub 0.97 是 grub-legacy 版, 所以 背景圖只能有 14 色。 如果需要 255 色的背景圖, 還是需要改用 antix grub-gfxboot 才行。

文章寫完, 開始量產 puppy 開機碟之後才發現: 在 puppy 底下用 mk-boot-usb 把自己複製給別人, 第一顆正常, 第二顆就會出錯。 重開機就又可以複製一顆。 好吧, 還是不太方便 orz

五、 中文顯示

建議預先用別的作業系統在硬碟或隨身碟上準備幾個 「中文名稱的檔案」。 在終端機 (urxvt) 及檔案總管底下, 看起來應該是亂碼。 也把瀏覽器 seamonkey 開在一頁中文網頁, 欣賞一開始的亂碼。

安裝 ttf-arphic-ukai 之後, 再從桌面上的 setup 進入 Configure Puppy for your Country, 或是從主選單的 Desktop => Choose Locale Country Localization, 把語言改成 zh_TW。 然後順著指示 restart X server 或稍後再從主選單 => shutdown => restart X server。 再檢視上述三個 apps, 中文顯示 ok!

不過你若注意看應用軟體的標頭 (例如正在瀏覽中文網頁的時候), 該有中文的地方還是亂碼。 而且系統選單有些地方也開始出現亂碼。 這些部分是視窗管理員 window manager 在管的。 Puppy 預設的視窗管理員是 jwm。 嘗試解決中文顯示問題時, 找不太到詳細的文件, 即使查看 /tmp/xerrs.log 裡面的 jwm 錯誤訊息也看不出所以然來。

於是安裝 icewm, 並且從終端機下指令 restartwm icewm 叫系統改採 icewm 作為視窗管理員。 如果出現錯誤訊息, 可以先 restartwm jwm 再來一次 restart icewm 最後再重新啟動 X server, 中文顯示就 OK 了。 (直接修改 /etc/windowmanager 好像沒用?) 注意:改用 icewm 之後, 「關機」、 「重開」、 「重新啟動 X server」 的選項 (並未中文化) 是在 「shutdown」 選單裡面而不是在 「登出」 選單裡面。

內建的 vi 無法顯示中文; 改安裝 vim-tiny 就可以了。

六、 中文輸入

試了很多不同的輸入法及不同的排列組合都失敗。 目前的輸入法引擎好像都沒有一個 debug 模式可以印出錯誤訊息, 而且當 ctrl-space 鍵失效時, 我也不知道該如何追蹤/除錯 (拜求文件) 所以只能沒什麼章法地胡亂試 orz

最後按照官方推薦的方式安裝 scim, 再加一點修改, 終於成功。 根據 puppy 官網的 scim 主頁面scim 安裝頁面, 首先安裝最新版的 scim-1.4.9-i486.pet 跟 scim-bridge-0.4.16-i486.pet。 其次請省略 scim-tables, 因為它的注音輸入法表格出來一堆亂碼。 可以先安裝 scim-tables-zh 套件 (其中的注音輸入表格也是一堆亂碼), 再下載我從原始碼抓出來的注音表格以及根據注音表格修改出來的嘸蝦米表格: scim-tables 並且在根目錄解壓縮:

    cd /
    tar xzpsf /路徑/.../scim-tables.tgz

如果想略微更動表格, 可以:

    cd /usr/share/scim/tables/
    編輯修改 Boshiamy.txt.in
    scim-make-table Boshiamy.txt.in -b -o Boshiamy.bin

重新啟動 X server, 瀏覽器 seamonkey 就可以輸入中文了。 但是終端機 urxvt 還是沒反應。 根據 「Please Note」 那一節的說法, GTK 的軟體比較確定可以使用 scim 輸入中文。 於是安裝 roxterm, 果然就 OK 了。 如果想順便換掉桌面的終端機圖示, 可以把 /root/Choices/ROX-Filer/globicons 裡面的 urxvt 改成 roxterm。

七、 網路服務

如果要啟動

Puppy 採用 hiawatha 作為網頁伺服器。 預設並不會自動啟動, 要在終端機下 hiawatha 指令才會啟動。 按照原本的設定, 只有本機能瀏覽本機的 hiawatha 所提供的網頁; 若要讓其他機器也能劉覽, 必須按照 這裡的提示 在 /etc/hiawatha/hiawatha.conf 裡面的 Binding 那一段裡面加上一句 Interface = 192.168.0.103 之類的 (依照你實際 IP 修正)。 網頁檔放在 /root/Web-Server/ 底下。 即使是從本機瀏覽, 網址用 localhost 也只能看首頁; 改用完整 ip 就可正常瀏覽其他網頁。

八、 其他雜記

過程當中其實也有搜尋到一些中文化教學資源:

  1. puppy 4.1.x 繁體中文化 pet 外掛套件
  2. Puppy Chinese Language Pets (5.4.3)
  3. Puppy Linux 5.2 中文化教學

但可能是因為版本不對吧, 我照著試都失敗。

一個小發現: 就算 X Window 的中文輸入失敗, 終端機 mlterm 還是可以獨立啟用中文輸入法。 方法是安裝 ibus 中文輸入法及 mlterm-im-ibus 套件, 並且以這個指令啟動: mlterm --im=ibus。 實在沒辦法的時候, 這可以當做救急備案。

九、 結論

雖然我自己是因為 mk-boot-usb 而接觸 Puppy, 但是隨著 樹莓派 的走紅, 在 ARM CPU 環境上安裝各種版本 linux 的機會可能也會增加。 相較於其他版本, Puppy on ARM (PARM) 可能會有很多優勢。 希望大家把 puppy 中文化的細節分享出來 (而不是只有打包一個懶人包), 甚至希望有人可以把打包後的成果上傳回官網, 這樣貴哥或其他跟我一樣技術不是很深入的人才可以幫忙寫中英文說明文件等等, 讓更多人看見既強大又可愛的汪汪 linux :-)

2 則留言:

  1. 您好,以下是我使用dpup的方式,不知是否有幫助
    1.依ppm安裝字型及gcin
    2.在root下找到.xinitrc檔案
    在前段加上
    #gcin start
    export LC_ALL=zh_TW.UTF-8
    export XMODIFIERS=@im=gcin
    export GTK_IM_MODULE=gcin
    #export XIM_PROGRAM=gcin
    export QT_IM_MODULE=gcin
    exec gcin&
    #gcin end
    3.再選台灣 locale
    中文的顯示及輸入基本上是完成了
    但是,lxterminal,也無法輸入中文(因為小弟是新手,也不會)

    回覆刪除
  2. precise + gcin

    http://electronmania.blogspot.tw/2014/09/precise-puppy-linux57112.html

    回覆刪除