在 2021 年後,Croissant Project 已經不再維護。不過,出現了另一個項目即 Brunch Framework 可以用於生成 ChromeOS image。具體的生成方式會有所不同,但安裝方式和其他使用經驗仍然可供參考。
Project Croissant, Formerly Chromefy
網路上已經有不少 Chromium OS 的版本,更有諸如 CloudReady、Neverware 等有商業支持的版本。不過在功能性和體驗上,自然還是 Google 的原味胖次 ChromeOS 為佳,正如 Pixel OS 是許多人對於 Android 的追求一樣。Croissant 這個項目的出現,正是為了解決「從 Chromium 到 Chrome」的需求。它提供了一些指令稿,可以從受支持的 ChromeOS recovery image 中提取相關的檔案並與 Chromium OS image 結合,生成偽 ChromeOS 檔案。具體的做法,項目的「讀我」檔案寫得很清楚了。浅羽選擇了方案一,即直接生成 ChromeOS image 並製作映像檔案,透過 Live USB 安裝到 SD 卡上。
首先準備好相關的檔案。Croissant 需要 3 個檔案完成動作:
- Chromium OS image, 浅羽使用 ArnoldTheBats Build;
- 官方 ChromeOS recovery image,可以從 CrOS Updates Serving 下載;
- TPM 模擬器
- 浅羽使用的是來自
caroline
的 recovery image,其他具有 TPM 1.2 的能力裝置映像檔也可以; - 你也可以選擇使用 TPM2 emulator 替代。
- 浅羽使用的是來自
官方 ChromeOS 恢復映像檔案中包含了很多硬體相關的部分,所以最好選擇與目標電腦硬體相近的型號;不過如果對此沒有想法的話,官方推介 eve(也就是 Pixelbook)功能會相對完整。做完這些準備後,下載 Croissant 項目本身,然後把所有的檔案全部喂給它。
$ chmod +x ./croissant.sh
$ sudo ./croissant.sh chromium_os.img recovery.bin caroline.bin
等待指令稿跑完,這時候 chromium_os.img
已經不是原來的 Chromium OS 而是經過改造的偽 ChromeOS 了。隨手改名為 chromefy_os.img
以示區分,將它燒錄到隨身碟上開機即可。在 UEFI 中選擇 ChromeOS 啟動後,按 Control – Alt – F2 進入 Developer Console 並以 chronos
登入,安裝 ChromeOS 到硬碟。在浅羽的裝置上,安裝目的地為 /dev/sda
。
$ sudo /usr/sbin/chromeos-install --dst /dev/sda --skip_postinstall
等待指令完成,就可重新開機,進入 ChromeOS 了。浅羽本想安裝到 SD 卡上,從 SD 卡開機,這樣可以完全不用碰到原先硬碟上的作業系統;並且 ThinkPad X1 Carbon 4th Gen / 6th Gen 有內藏式的 SD 卡槽,對外觀和可攜性也完全不影響。然而 ThinkPad 不知道出於什麼考量,禁止從 SD 卡啟動,無奈只好作罷。另外在 DELL XPS 13 9370 上嘗試從 SD 卡啟動 ChromeOS,雖然成功引導進入 GRUB,但選擇啟動項之後卻無法進入 ChromeOS,也只好放棄。
一法不成,也不能這樣就全盤放棄,乾脆直接手工安裝到硬碟上,並且與 Fedora 做雙重開機。
雙啓動安裝
確認 UEFI 啓動和 GPT 分區表
由於官方的 ChromeOS 目前只支援 UEFI + GPT 環境,因此需要確認電腦正在使用 GPT 分區表。按照各色 Chromebook 的硬體情況,浅羽選擇空出 64G 的空間給 ChromeOS。使用 LVM 的話大致就是三條命令。
$ sudo lvreduce --resize-fs -L -64G /dev/mapper/fedora-home
$ sudo pvmove --alloc anywhere /dev/fedora/root:startExtent-endExtent
$ sudo pvresize --setphysicalvolumesize
不過因為浅羽設定了 LUKS,所以需要先解鎖 LUKS 並且計算 sectors 以調整加密磁碟分割的大小。這裡面的坑也不小,浅羽第一次做的時候就因為不識數算錯了,導致 fedora-root
分割區損壞,好在 fedora-home
保存完好……
接下來用 GParted 或者任何好用的磁碟工具,為 ChromeOS 準備分割區。
- EFI,不需要額外操作,使用已有的分區即可;
- ROOT-A,需要 4096MB 左右的 ext2 分割區,FS Label 和 Name 都是命名為
ROOT-A
; - STATE,這是 ChromeOS 內用戶可用的存儲空間,剩下的空間全部分給它是最簡單的方案;需要 ext4 分割區,FS Label 和 Name 都是命名為
STATE
。
安裝 ChromeOS
首先把本地的磁碟分割都掛載好。
$ cd /mnt
$ sudo mkdir localroot localstate
$ sudo mount /dev/nvmen1p4 localroot
$ sudo mount /dev/nvmen1p5 localstate
然後把之前準備做好的映像檔 chromefy_os.img
也掛載出來。
$ sudo losetup -fP /path/to/chromefy_os.img # assume we're on loop0
$ sudo mkdir efi root state
/* Establish ROOT-A */
$ sudo mount /dev/loop0p3 root/
$ sudo cp -av root/* localroot/
/* Establish STATE */
$ sudo mount /dev/loop0p1 state/
$ sudo cp -av state/* localstate/
對於 EFI,由於浅羽需要做多重開機,所以直接把啟動相關的檔案拷貝過來。
$ sudo mount /dev/loop0p12 efi/
$ sudo cp -av /mnt/efi/BOOT /boot/efi/EFI/cros
$ sudo cp -av /mnt/efi/syslinux /boot/efi/
$ sudo cp -v /boot/efi/EFI/cros/grub.cfg /boot/efi/EFI/BOOT/grub.cfg
現在 ChromeOS 所需要的檔案已經準備好了。接下來需要修改一些檔案讓 ChromeOS 可以開機。首先修改剛才拷貝的 grub.cfg,透過 blkid 查看 EFI 分割區的 PARTUUID 並更改 UUID= 後的參數。
接下來處理 write_gpt.sh
,把目前的分割區設定套用進去。分割區設定集中在 load_base_vars
和 load_partition_vars
兩個函式內。設定主要記錄了分割區的序號、大小等資料,由於浅羽的安裝內分割區數量和順序都不一樣,因此去掉其他的分割區內容,只留下 EFI
、ROOT_A
和 STATE
相關的內容,並且填寫相應的序號。以浅羽的狀況來說,EFI
分割區是第一個,ROOT-A
是第 4 個,STATE
是第 5 個,因此對應地需要修改檔案。具體的情況可以參考第二頁的附錄。
最後更新 UEFI 啓動項,把 ChromeOS 加進去。
$ sudo efibootmgr -c -w -L "ChromeOS" -d /dev/nvme0n1 -p 1 -l \EFI\cros\bootx64.efi
別忘記解除所有用到的掛載。
$ sudo umount efi/ root/ state/ localroot/ localstate/
更新 ChromeOS
由於是土製 ChromeOS,所以當官方推出更新的時候它自然是不能參加 OTA 的。不過,由於 ChromeOS 的所有用戶資料基本都保存在 STATE
分割區內,所以基本上在不動 STATE
的前提下重新安裝 ChromeOS(重新設定和複製 ROOT-A
)就可以了。
詳細的步驟可以參考前面,同時在 Croissant 項目內也有說明,因此浅羽就不再贅述了。
高整合度的 Android Apps
順暢的 Android 平板體驗
大部份機種的 ChromeOS 都內建了 Android Apps 支援,打開之後就可以直接從 Play Store 安裝應用程式了。浅羽目前測試了十個左右比較常用的 Android Apps 都可以流暢使用,沒有遇到功能性問題。
目前浅羽還不太清楚 x86_64 上能否直接運行 ARM 平臺的 Android Apps,抑或是只能下載安裝爲 x86_64 最佳化的應用程式。不過,Play Store 裏的大部份程式都可以下載安裝,而以效能上來說也完全沒有問題,甚至比使用手機更順暢。具體的測試使用的 Android Apps 可以參考第二頁的附錄。
Android Apps 打開之後是以視窗的形式展現的,並且大小可以自由調整。應用程式預設是手機佈局,但如果有做相應的適配,那麼隨着視窗大小的變化,應用程式會調整相應的佈局,充分利用空間展示更多資訊;當然,少數非要限定死佈局的應用程式就沒辦法了。Android Apps 的通知也與 ChromeOS的通知系統高度整合,風格統一、功能齊全。如果筆電支援觸摸,那麼配合觸摸功能使用 Android Apps、用 Shelf 在多個 Apps 之前切換,體驗甚至比真正的 Android 平板還要好,更何況至少還有一個全功能的桌面版 Chrome。難怪說「ChromeOS 是 Android 平板的未來」。
網路、網路、還是網路
浅羽有使用 OpenVPN 的需要,而 ChromeOS 就內建了 OpenVPN 支援。可惜的是,系統內建的支援並不完整,甚至還不能匯入 .ovpn
檔案。但有了良好的 Android Apps 支援,下載 Android 版本的 OpenVPN Connect,直接雙擊 .ovpn
設定檔匯入連結,整個系統都可以使用 VPN 連線了。
另外,對於需要使用工具訪問互連網的情況,直接使用 Android 版本的工具也是完全可行的。ChromeOS 的 VPN 設定內會出現 Android VPN 的項目,所有登錄了 Android 的程式都會出現在其中;連接上 VPN 後,不止對 Android Apps 生效,同時對 ChromeOS 也會生效,整合程度不可謂不高。可惜的是在 Crostini 內並不能使用 ChromeOS 的 VPN,需要在 Linux 容器中進行額外的手工設定。
Linux Apps 和 Crostini
更換預設發行版爲 Fedora
Crostini 本質上是一個運行在虛擬機器中的 LXC 容器,而此虛擬機器中運行了客製化的作業系統,Google 稱之為 Termina
。Termina 雖然為了效能及其精簡,但是還是保留了完整的 LXC 相關程式集。首先依靠 vsh
指令連結 Termina 的 Shell。
crosh> vsh termina
直接列出預設狀態下的所有容器查看。
$ lxc list
+---------+---------+-----------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+---------+---------+-----------------------+------+------------+-----------+
| penguin | RUNNING | 100.115.92.200 (eth0) | | PERSISTENT | 0 |
+---------+---------+-----------------------+------+------------+-----------+
可以看到預設的容器名為 penguin
。事實上,只要存在名為 penguin
的容器,ChromeOS 都會將它作為 Linux Apps(測試版)所使用的容器。因此浅羽需要刪除舊容器,並換用 Fedora 30 的 image 啟動新的 penguin
容器。
$ lxc delete penguin --force
$ lxc launch images:fedora/30 penguin
這樣就很簡單地完成了發行版替換。現在查看 local image 應該可以看到到原裝的 Debian 和剛添加的 Fedora。
$ lxc image list
+-------+--------------+--------+---------------------------------------+--------+----------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+-------+--------------+--------+---------------------------------------+--------+----------+-------------------------------+
| | 18259187900a | no | Debian stretch amd64 (20190214_07:10) | x86_64 | 313.78MB | May 28, 2019 at 10:51am (UTC) |
+-------+--------------+--------+---------------------------------------+--------+----------+-------------------------------+
| | 864824f62fbf | no | Fedora 30 amd64 (20190528_20:33) | x86_64 | 112.68MB | May 29, 2019 at 4:20am (UTC) |
+-------+--------------+--------+---------------------------------------+--------+----------+-------------------------------+
安裝 Crostini Guest Tools
首先在 ChromeOS 中打開 Developer Shell 並進入 LXC 容器操作。
crosh> vsh termina
(termina) chronos@localhost ~ $ lxc exec penguin -- bash
隨後添加一個一般用戶給 Crostini 使用,用戶名可以是任意的。同時還要順便裝一個 sudo
方便日後的使用維護。
[root@penguin ~]# dnf install -y sudo
[root@penguin ~]# USERNAME=SakuragawaAsaba
[root@penguin ~]# useradd $USERNAME -G wheel
接下來還需要安裝和設定 CrOS Guest Tools 以開啟 Linux Apps 整合和檔案共享。
# dnf install -y cros-guest-tools
# systemctl enable dbus-daemon && systemctl start dbus-daemon # Enable and start dbus-daemon
# systemctl unmask systemd-logind
# loginctl enable-linger $USERNAME # Enable linger for your user
# systemctl enable cros-sftp # Enable integration services
然後需要關閉 Linux Apps(測試版)再打開以期生效。現在打開 Linux Apps Terminal,應該就會自動以前面新增的一般用戶登入了。接下來爲用戶啓動 CrOS Guest Tools 的相關工具。
$ systemctl --user enable sommelier@0 sommelier-x@0 sommelier@1 sommelier-x@1 cros-garcon cros-pulse-config
另外,如果遇到了新版 xkeyboard-config 的問題,可以再做一個 workaround。
$ sudo sed -i '/I37/d' /usr/share/X11/xkb/keycodes/evdev
設定中文環境與中文輸入法
浅羽比較愛用 ibus-rime
輸入法,Fedora 下直接 dnf
安裝即可。
$ sudo dnf install -y ibus-rime
由於沒有桌面環境,這裡需要手工運行 ibus-setup
設定輸入法。首先在 General
– Keyboard Shortcuts
中更改預設的 <Meta>space
快速鍵,否則由於 Chromebook 沒有 <Meta>
按鍵會影響切換;隨後在 Input Method
標籤頁中添加 Chinese - Rime
輸入法。然後編輯 /usr/lib/systemd/user/cros-garcon.service.d/cros-garcon-override.conf
並在最末尾添加 IME 相關的環境變數。
....
Environment="GTK_IM_MODULE=ibus"
Environment="XMODIFIERS=@im=ibus"
Environment="QT_IM_MODULE=ibus"
接下來打開 Firefox 或者其他 Linux Apps 並切換輸入法,就可以看到 RIME 在部署,稍候就可以用 RIME 打字了。
之後每次重新啓動 Linux 容器,都需要手動啓動一下 ibus-daemon
。或者你也可以把它添加到系統的自動啓動指令稿中。
$ echo "ibus-daemon -drx" >> ~/.sommelierrc || echo "ibus-daemon -drx" > ~/.sommelierrc
如果在 Firefox 或者其他程式中使用中文,還需要安裝一些中文字形。
$ sudo dnf install gnu-free-sans-fonts gnu-free-serif-fonts gnu-free-mono-fonts dejavu-sans-fonts- dejavu-sans-mono-fonts # English Fonts
$ sudo dnf install -y google-noto-sans-cjk-ttc-fonts google-roboto-fonts # CJKV fonts
雖然看起來滿滿一片,但是安裝起來也沒有佔用特別大的空間。現在打開 Firefox,中文字形顯示已經沒有問題了。
轉換到 Chromebook?
土製系統的一些小問題
浅羽在使用土製 ChromeOS 的過程中也遇到了一些小問題。 首先是匯入 CA 證書的時候整個 Chrome 會 Crash 掉。在 Neverware 的支持中心裏也有類似的情況,但是並不能在所有電腦上穩定復現,Chromium OS 的 bug tracker 上也還沒有類似的案例。
另外一個方面是浅羽使用土製 ChromeOS 時,如果外接熒幕並使用 1920*1080@60Hz,那麼外接熒幕的顯示顏色就會有問題,感覺像是對比度過高的過曝光效果。有意思的是如果讓內建熒幕鏡射外接顯示器,那麼兩塊熒幕都會顯示同樣不正確的效果,因此應該是軟體問題。但內建熒幕也是 1920*1080 的物理解析度就不會有問題,大概是因爲 ChromeOS 會自動縮放到 1536*864 來使用吧。Chromium bug tracker 上也有 848540 和 920623 兩個 Issue 反應這個問題,不過目前還未能修復。
輸入法
ChromeOS 內建的中文輸入法有支援粵拼、倉頡、注音、五筆和拼音,不過並不能在簡體繁體中自由切換。目前 ChromeOS R74.0.3729.125 拼音輸入法分為「拼音」和「傳統拼音」,其實區別在於前者是簡體中文而後者是繁體中文,其實應該是在地化的小小失誤。
輸入法可以打單字和詞組,但根據浅羽目測,並沒有智慧聯想和自動結果排序。另外,即使是「傳統拼音」輸入法,依然無法好好地打出直角引號,同時輸入 Emoji 也比較麻煩。
生產力
生產力是一個很模糊的定義,傳統的「生產力」也許是指文檔、表單和投影片。在這方面,雖然還有很多人離不開 Microsoft Office,但對於浅羽來說,Docs / Sheets / Slides 三件套已經能完成大多數任務了,再不濟還能在 Linux Apps 裏開 LibreOffice。
在 iPad Pro 已經能運行桌面級 Photoshop 的今天,筆電和平板之間的界線已經漸漸模糊。浅羽最常用平板電腦做什麼?瀏覽網頁、看視訊、聊天和寫文和查看照片。現在一臺 iPad Air 2 就能大體上滿足浅羽的需求,那麼有完整的桌面版 Chrome 本身就解決了瀏覽網路的最大需求,而 Linux Apps 與 Android Apps 又豐富和完善了生態。加之 ChromeOS 本身對鍵盤滑鼠的良好支援,一臺可以拆卸鍵盤的 Chromebook 可能是浅羽用來替換掉 iPad 的最好選擇。沒錯 HP Chromebook x2,浅羽就是在說你。
Chromebook 和 ChromeOS 裝置也許並不是在這個需求下最廉價的解決方案,但或許是最具有生產力的解決方案。千萬別忘記,其實體驗也是算作生產力的一個部分的。在 iPad 價格日益高企、Windows 裝置移動體驗不足的當下,ChromeOS 綜合了兩家半三家生態,使得它無論作爲平板電腦還是作爲文書機使用,都有相對較好的效果。
(附錄在第二頁噢)
發佈留言