⚙️

Chromebook Crostini の有効化と日本語化

2020/10/27に公開
1

C425TA のChromebook 本体の設定は(設定というほどの設定もなく)無事終わりましたので、Crostini の設定をします。
https://zenn.dev/igac/articles/78d107b45ffe4098a3d6

Crostini とは

Chrome OS 上で Linux アプリケーションをサポートするための一式の総称です。
大まかな仕組みとしては、Chrome OS 上で VM が動き、その VM 上でコンテナを動かすというものです。
ユーザーはコンテナ内で Linux アプリケーションを実行することとなります。また、コンテナ内の X プロトコルを Wayland プロトコルに変換することで Chrome OS 上で Linux アプリケーションの GUI をサポートしています。
開発者ガイドに概念図がありました。
https://chromium.googlesource.com/chromiumos/docs/+/master/crostini_developer_guide.md#what-is-all-this-stuff

なぜ Crostini を使うのか

Crostini ですが、私は積極的に使っていくというよりは次善の策として考えています。
あくまでメインは Chrome という前提で、Chrome だけでは出来ない(快適ではない)ものでさほど計算リソースを必要としないことを時々やるために使う想定です。
Crostini で頑張りすぎても Windows PC なり Mac なりを使うほうが簡単で快適という結果になりかねません。

設定する Chromebook の概要

  • ASUS C425TA
    • Chrome OS 86
    • Core m3-8100Y
    • 4GB RAM
    • eMMC 64GB ストレージ

Crostini の有効化とコンテナのアップグレード

前置きが長くなりましたが、いよいよ Crostini の設定をしていきます。
コンテナは標準の Debian Linux です。

Crostini の有効化

Chromebook の [設定]-[Linux(ベータ版)] から Crostini を有効化しました。
https://support.google.com/chromebook/answer/9145439
所要時間は数分で、完了すると Chromebook にインストールされたターミナルが立ち上がります。
ここではターミナルをシェルフ(Windows のタスクバーに相当)に固定だけして終了。
インストールされたターミナルはランチャーアイコンから開いたアプリ一覧の「Linux アプリ」フォルダの中にあります。

コンテナを Debian 10 へアップグレード

コンテナが Debian 10 へのアップグレードが可能でしたのでアップグレードしました。
Chrome OS 側から簡単にアップグレードできました。

アップグレード時にはバックアップを提案されます。了承すると数分でマイファイル以下にコンテナのイメージファイルが作成されました。

Crostini 有効化直後のイメージファイルでサイズは 425MB ありました。
アップグレードにかかった時間は30分ほど。アップデート完了後はターミナルを開いてコンテナ内の設定を続けます。

コンテナ内での設定

locale の設定と日本語入力の設定をしていきます。

ルートディレクトリのパーミッションの確認と変更

これは後になってから気がついたのですが、作成されたコンテナはルートディレクトリのパーミッションが 777 でした。これはバグとして修正されているのですが、まだ Chrome OS 86 では反映されていないようです。
https://bugs.chromium.org/p/chromium/issues/detail?id=951063
ルートディレクトリのパーミッションを確認します。

$ ls -ld /

もし確認して 777 なら 755 が適切なので変更します。

$ sudo chmod 755 /

パッケージの更新

$ sudo apt update
$ sudo apt upgrade

タイムゾーンを確認

タイムゾーンは設定無しで日本になっていました。
Crostini を有効化した時点の Chromebook 本体のタイムゾーンで環境が作成されるのかもしれません。

$ timedatectl status 
               Local time: Thu 2020-10-22 10:53:05 JST
           Universal time: Thu 2020-10-22 01:53:05 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

日本語関連パッケージ、フォント、locale データの確認

以下の日本語化に必要なパッケージは全てインストール済みでした。

  • task-japanese
    debian の日本語関連パッケージ
  • fonts-ipafont
    IPA フォント
  • locales-all
    全 locale 用 locale データ
$ apt list task-japanese
Listing... Done
task-japanese/stable,now 3.53 all [installed]
$ apt list fonts-ipafont
Listing... Done
fonts-ipafont/stable,now 00303-18 all [installed]
$ apt list locales-all
Listing... Done
locales-all/stable,now 2.28-10 amd64 [installed]

locale の変更

locale を日本語に変更します。

$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ source /etc/default/locale

Mozc のインストール

2020年10月時点では Chromebook の日本語入力を Linux アプリに渡すことが出来ません。
fctix-mozc パッケージをインストールします。
このパッケージはインプットメソッドが fcitx、日本語変換エンジンが Google 日本語入力のオープンソース版 Mozc です。

$ sudo apt install fcitx-mozc

fcitx の環境変数設定

/etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf ファイルに環境変数を追加します。

/etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf
Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"
Environment="GDK_BACKEND=x11"

fcitx 自動起動の設定

~/.sommelierrc ファイルを作成して、fctix の自動起動を設定します。

~/.sommelierrc
/usr/bin/fcitx-autostart

Sommelier はコンテナ内で実行される Chrome OS 側との入出力のプロキシーです。

VMの再起動

ここで VM を再起動しました。方法は二通り。

  • crosh を使う
    1. Ctrl + Alt + t キーで crosh を開く
    2. コマンドで停止と起動
      crosh> vmc stop termina
      crosh> vmc start termina
      
  • ターミナルアイコンから再起動
    ターミナルアイコンを右クリックして、[Linux(ベータ版)を終了] で終了します。
    少し待ってターミナルのアイコンをクリックして起動し直します。

fcitx の設定

fctix の設定画面を開きます。

$ fcitx-configtool

入力メソッドの確認

[入力メソッドタブ]を確認します。

ここではすでに「キーボード - 英語(US)」、「Mozc」の順で正しく設定されていたので、変更しません。

ホットキーの変更

デフォルトでは入力メソッドのオンオフは Ctrl + Space ですが、Emacs のキーバインドと競合するので、Ctrl + Shift + Space に変更しました。
[全体の設定]タブで変更します。

リアルタイム入力のための設定

日本語入力時にカーソルがある位置にリアルタイムで入力が表示されるようにするための設定をします。

  1. [アドオン]タブで [Advanced] チェックボックスをオン
  2. 一覧から [Fctix XIM Frontend] を選択してダイアログを開く
  3. 「XIM で On The Spot スタイルを使う(起動中は変更できません)」チェックボックスをオン

ターミナルの設定

ややこしいのですが、Crostini を有効化したときに Chromebook に追加される標準ターミナルは Chrome OS 上で実行されます。そのためコンテナにインストールした Mozc ではなく Chromebook の日本語入力を利用します。
このターミナルはデフォルトの設定では日本語入力のホットキーを通さないので、日本語入力を切り替える事ができません。
| 日本語オンでターミナルアクティブ | 日本語オフでターミナルアクティブ |
| - | - | - |
| ターミナル上で日本語オフに出来ない | ターミナル上で日本語オンに出来ない |
ホットキーを通すようにターミナルの設定を変更します。

  1. Chrome を開いて Ctrl + Alt + t キーで crosh を開く
  2. crosh タブをアクティブな状態で Ctrl + Shift + p キーでターミナルの設定を開く
  3. [キーボード]-[キーボードバインディング/ショートカット] に Ctrl + Shift + Space を追加
    {
      "Ctrl-Shift-Space": "PASS"
    }
    
    Emacs キーバインドと競合しないように Ctrl + Shift + Space だけを PASS で追加しましたが、Ctrl + Space も通したい場合は以下です。
    {
      "Ctrl-Space": "PASS",
      "Ctrl-Shift-Space": "PASS"
    }
    

ここまでで Crostini を有効化して最低限日本語が使えるようになりました。

結びに

先人を参考にして設定自体はさほどトラブルなく終わらせることができました。
また、先人が何をやっているのか理解する過程で Linux デスクトップを使うだけでは全然気にしていなかった Window System や日本語環境について学び直す機会にもなりました。
日本語にこだわらなければもっと楽だなというのは素直な感想ではありますが、日本語化しなければCrostini の構造を調べなかっただろうなとも思うので、結果やって良かったです。

これからやること

  • Linux アプリのインストールと評価
  • フォントの追加
  • コンテナイメージのポータビリティ検証
  • 設定を Ansible Playbook にする

参考にしたもの

crostini 全般

https://chromium.googlesource.com/chromiumos/docs/+/master/containers_and_vms.md
https://chromium.googlesource.com/chromiumos/docs/+/master/crostini_developer_guide.md

crostini 日本語化関連

Crostini導入編: 健康で文化的な最低限度の生活のためのChromebook設定
Crostiniで日本語環境設定:健康で文化的な最低限度の生活のためのChromebook設定(2)
https://ja.blog.documentfoundation.org/2019/12/05/install-libreoffice-on-chromebook/
https://qiita.com/komde/items/25b4c80598d7e2b679f6
https://note.com/setomits/n/n4885ba58c9e3
Chromebook Crostini (Linux VM) - @//メモ

fcitx, Mozc 関連

https://docs.oracle.com/cd/E19455-01/806-2798/appendixa-3/index.html
https://dev.to/nabbisen/fcitx--1n59

Discussion

フラクタルフラクタル

ルートディレクトリのパーミッションを確認してみたら154だったのですが、755に直したほうがよろしいでしょうか。
また、上記以外のコンテナ内での設定、ターミナルの設定をすべて行いましたが、VScodeで試してみたところ動作しませんでした。どうしたらよろしいでしょうか。