【全手順】手探りでChromebookにEmacsを入れることに成功

chromebook上のEmacs
ウェブブラウジングとテキスト打ち作業目的でASUS Chromebook Flip CPA100を購入したが、テキスト入力だったらやっぱりEmacsが一番使いやすいのでね。Emacs欲しいー。

以下はChromebookにEmacsをインストールするまでの苦闘の記録である。

追記:Emacsを入れ直した件

まずは2018年夏の現況から。ある時、いつものようにEmacsを使おうとしたら、おおもとの環境であるLinuxが起動しなくなった。/var/なんちゃら/etc/resolv.conf にアクセスできないとかいうエラー。どうやらLinuxを動かすためのcroutonまわりが壊れちゃったくさい。こいつは困った。

誤操作で壊したという心当たりはない。強いてあげればChrome OSのアップデートがあったくらい。そのせいかなあ。ともかく復旧を頑張るよりは入れ直したほうが早いと思って、下記の「croutonのダウンロードと実行」以降の手順をなぞって入れ直した。ブログに記録を残しておいてよかった。

なお、今後はChrome OS上でLinuxアプリケーションを実行できるアップデートが計画されているそうな。そうなったら、もっと簡単にEmacsを使えるようになるかもしれない。
では、以下本編をどうぞ。


予備知識ゼロからのスタート

Chromebookの常用テキストエディタとしてAndroidアプリのJota+をインストールして使っていた。それはそれで良かったのだが、どうしてもEmacsへの思いを断ち切れず、Emacsのインストールにチャレンジしてみた。

Chromebookについてはもとより、最近のLinux事情についても詳しくない中での手探り作業となる。調べながらやったことを順に記すが、どうしても既知の事柄ばかりになるから、下手なリライト記事とみなされないように、個人的な体験談を交えつつ自分の言葉で書き進めたい。

Chromebookのやっかいな挙動

ChromebookというかChrome OSには次のやっかいな問題がある。

  • キーバインドをカスタマイズできるエディタを入れたとしても、Emacs風に使うことはできない。たとえばカーソル移動のための「Ctrl+n」の入力がアプリではなくOSに奪取されてしまい、新規Chromeウインドウの立ち上げと解釈されてしまう。
  • Chrome OSはLinuxベースのようだが、LinuxのつもりでEmacsをインストールすることはできない。croshというシェルを起動することはできても、セキュリティのためか、基本的なcd, lsといったコマンドすら使えない。

Emacsを入れるには

いろいろ調べ回った結果、オフラインでも動かせるEmacsを使いたければ、次の手順しかなさそうだとわかった。全体のイメージをつかむため、大まかな流れを書くとこうなる。

インストールの手順

  1. デベロッパーモードへ移行する。※既存ローカルデータが消えるので要事前退避。
  2. croutonという仮想OS環境ツール上にLinux…たとえばUbuntu…をインストールする。
  3. そのUbuntu上にEmacsをインストールする。
  4. 追加:GUIベースでEmacsを使うならcrouton integration extensionを入れると便利。
  5. 追加:CUIベースでEmacsを使うならCrosh Windowを入れると便利。

インストール後の起動手順

  1. Chromebookをデベロッパーモードで起動する。
  2. croshを起動する。
  3. shellを実行する。→さまざまなUnixコマンドを制約なく使えるようになる。
  4. GUI Emacsならsudo startxfce4を実行→GUIデスクトップ環境内でEmacsを起動。
  5. CUI Emacsならsudo enter-chrootを実行→CUI環境内でEmacsを起動。

Ubuntuの導入

Chrome OSをLinuxで代替したいわけじゃなくてEmacsさえ使えればよいので、CUIだけでも十分な気はしたが、調べに沿って作業するうち、結果的にGUI環境も整えることになった。

デベロッパーモードに移行する

データの退避・リカバリメディアの作成

crosh上でインストール作業に関わるさまざまなUnixコマンドを利用するためにはデベロッパーモードへ移行しなければならない。ただし、通常モードからデベロッパーモードへ移るときにローカルデータがすべて消えてしまうから、バックアップをとっておく(自分は何も置いてなかったから何もしなかった)。

すでに導入済みのChrome拡張は消えない・もしくは自動的に復活するようである。Ctrlと検索キーの入れ替えや、タッチパッドのスクロールジェスチャの逆方向設定といったカスタマイズ内容も保持されていた。一方、Google Playストアから入れたJota+は消えてしまった。

加えて、もし変なハマり方をして詰んでしまうのが心配なら、リカバリメディアを作成する。自分は丸腰で突撃したが。

デベロッパーモード立ち上げ

Esc+F3(一番上の段の「→」の右にあるリロードマークのボタン)+電源ボタンでデベロッパーモードへの入口に進むそうだが、Flip CPA100の場合「電源ボタン=一番右上のボタン」のつもりで押しても何も起こらなかった。

Esc+F3(+もしかしたら一番右上のボタンも)を押しながら本体左側面の電源スイッチを押すことで認識された。
デベロッパーモードへ行くために押すキー
すると白背景の画面が表示されるからCtrl+dを押す。ふだんCtrlと検索キーを入れ替えていても、それはないものと思って、左下の本来のCtrlキーを押すべし。

あとはメッセージに従って、確認機能をオフにする方向で指示に従う。最初のセットアップのとき5分か10分か待たされるので気長に待つ。

これ以後、起動のたびに白画面が出てCtrl+dを押すことになる。間違ってもここでスペースキーを押さないように。押すと通常モードに戻ってしまい、ローカルデータのリセットがかかって、せっかくインストールしたUbuntu環境が消えてしまう。

croutonを介したUbuntuインストール

Chrome OSの再設定

デベロッパーモードの初期化が済むと、初めてChromebookをセットアップしたときのように、ログインアカウントやWiFi接続先などの設定を再び行う必要がある。そうしてログインすると、すでに入れたChrome拡張やキー・ジェスチャのカスタマイズは残っていて、ダウンロードフォルダ以下のローカルデータは消えている。

この状態で普通にChromebookとして使うことが可能だ。しかし先へ進もう。

Secure Shellのインストール

このあとのCrosh Windowのために、まずChrome拡張のSecure Shellをインストールする。いわゆるターミナルエミュレータである。絶対必須というわけではないけれども、入れておいた方が何かとよい。起動時の「Options」ボタンから文字色・背景色などをカスタマイズできる。

Crosh Windowのインストール

続いてChrome拡張のCrosh Windowをインストールする。こいつをかまして起動したターミナルではCtrl+n入力などをChromeに奪取されなくなる。Emacsのためだけでなくシェルのヒストリ呼び出しも楽になるから入れておくとよい。

Crosh Windowの有無はお任せするとして、croshを起動したターミナル上でshellコマンドを実行すると、cdとかlsとか普通に使えるようになる。デベロッパーモードのおかげだ。
Crosh Windowとshell実行

croutonのダウンロードと実行

crouton --- 当初「苦労豚」と読んで身震いを禁じ得なかったが食べ物の「クルトン」だそうです。chromeブラウザのURL窓に「https://goo.gl/fd3zc」なるスカシたアドレスを打ち込むと、ダウンロードフォルダに「crouton」ファイルが作成される。

先に起動したshell状態のターミナル上で次のコマンドを実行する。

sudo sh ~/Downloads/crouton -r trusty -t xfce,keyboard,audio,extension,xiwi,touch

所定バージョンのUbuntuでOK・特にこだわりなし、であればtrustyが最も事例が多くて無難だ。-tオプションはデスクトップマネージャ他を指定するもので、いろいろなマネージャを選べるが事例はxfceが多い。

ふだんからすべての作業をUbuntu上で完結させたい猛者は「全部入り」的な xfce-desktop を指定するようだが、かわりにストレージを圧迫する。Emacsを使いたいだけなら軽量のxfceで十分だ。xiwiはあとでcrouton integration extensionを使うために必要となる。

keyboard,audio,extension,touchは既存事例の真似をしただけ。なくても済むかもしれないが念のため。

なお、このステップは時間に余裕のあるときに行うべきだ。Ubuntuのダウンロードとインストールが始まり、ゆうに30分以上~1時間程度は待たされる。

インストールが終わると、ふだん使うユーザーのアカウントとパスワードを訊かれるから、入力する。これでUbuntu(Xubuntu)が手に入った。

Ubuntuの起動方法

Ubuntuを使うには、Ctrl+Alt+t またはCrosh Windowの起動によりcroshターミナルを立ち上げてshellコマンドを実行する。このあとは次のいずれかを実行する。

GUIデスクトップ環境で使う:
sudo startxfce4
ターミナル上のCUI環境で使う:
sudo enter-chroot

crouton integration extensionのインストール

おまけにもう1つ。Chrome拡張のcrouton integration extensionも入れておく。

UbuntuのGUIデスクトップ環境(ここではxfce)を起動すると、普通はフルスクリーン固定となる。ところがこいつを入れておくとフルスクリーンモードとウインドウモードを切り替えできるようになる。Chrome OSとUbuntuを行ったり来たりする使い方には便利だ。
注意しておきたい点は、xfce起動時に「全画面表示を終了するにはF11を押します」とメッセージが表示されるのだが、Chromebook Flip CPA100にはF11キーがないというか、推測するに右上の電源ボタンを押すってこと?!と混乱してしまう。実際はF4(一番上の“→”の2つ右)キーを押す。


日本語環境のセットアップ

今のままではメッセージは英語表示だし日本語入力もできないから、以下のように日本語環境を仕込んでいく。

なお、mozcを入れるまではenter-chrootのCUI環境で作業したほうが楽かもしれない。準備が不十分なときにGUI環境でターミナルを開いてコマンドを打とうとすると、英語配列キーボードと認識されるためキートップの刻印通りの文字を打てなくて苦しむ(ブラインドタッチできない君なので)。

一応 startxfce4のたびにターミナルを開いて
setxkbmap -layout jp
を実行すれば日本語配列と認識されるが、Xを起動するたび何度も打ち込まされるから、いちいち面倒くさい。

日本語表示設定

日本語フォントのインストール

事例の多かった takao を入れる。
sudo apt-get install fonts-takao
自分的にはこのフォントで満足。

日本語パックのインストール

日本語パックというものをインストールする。ついでにロケールを日本語にする。~/.bashrc に「LANG=ja_JP.UTF-8」行を書くのはやらずに済んだみたい。
sudo apt-get install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8
ここまで来ると、各種表示が日本語化される。たとえばdateコマンドの結果が日本語表記になっている。

日本語入力設定

fcitx-mozcのインストール

mozcはGoogle日本語入力相当のIMEだそうだ。こいつと事例の多いインプットメソッドfcitxの組み合わせを使う。
sudo apt-get install fcitx-mozc

キーボードとfcitxの設定

ここまで準備したら、念のためいったんUbuntuをexitしてshell状態に戻り、あらためて sudo startxfce4 すると、メニュー等が日本語化されたデスクトップ環境が開くはずだ。

日本語キーボードを前提にすると、まず真っ先にキーボードの日本語配列を認識させるべし。

『右クリック→アプリケーション→設定→キーボード→レイアウト』で、キーボードモデルをChromebookにし、キーボードレイアウトから英語を外して日本語を追加する。
xfceキーボード設定
続いて、同様に『アプリケーション→設定→Fcitx設定→入力メソッド』に英語があれば削除し、「キーボード - 日本語」を1行目に追加、2行目に「Mozc」を追加する。

自分は英語を外し忘れたために、「日本語配列が認識されないー」と一晩中悩まされた。その後もMozcを1行目にしてしまってデフォルトでIMEオンという間抜けをやらかした。必ず1行目が日本語、2行目がMozc。あとはいらない。
fcitx入力メソッド設定

IME切り替え設定

IMEのオン・オフを Ctrl+Space や「全角/半角」キー(CPA100だと「かな⇔英数」)でトグルさせるのでなく、「かな」でオン・「英数」でオフにしたかったので、次のようにした。

上記Fcitx設定の全体設定タブ→拡張オプションの表示をチェックして、
「入力メソッドをオンに」行のボタンをクリックして「かな」キーを押す(Henkanmodeとボタン表示が変わるはず)。また「入力メソッドをオフに」行のボタンをクリックして「英数」キーを押す(Muhenkanとボタン表示が変わるはず)。
fcitx全体設定・拡張オプション

Emacsの導入

ようやく目的のEmacs導入ステップまで漕ぎつけた。あと少しだ。

Emacsのインストール

コマンド一発。ありがたや。Emacs上でMozcを動かすためのモジュールもついでに入れる。
sudo apt-get install emacs
sudo apt-get install emacs-mozc

設定ファイルの作成

Mozc連携の設定

Emacsの設定ファイルについては、いつも誰かの .emacs をもらって少し変えて使っていたし、最近のEmacsの作法は知らない。細けぇことはいいんだよ、ってことで、WindowsのMeadow用に長年使っていた .emacs を持ってきて、Meadow専用ぽい記述を削除して流用。

あとはMozcを使うために冒頭に次の行を追加した。
;;; Mozc
(require 'mozc)
(set-language-environment "japanese")
(setq default-input-method "japanese-mozc")
(setq mozc-candidate-style 'overlay)

IME切り替え設定

先の通り、IMEオン・オフを「かな=オン、英数=オフ」でやりたい場合、追加の設定が必要となる。これがないとIME切り替えはデフォルトの Ctrl+\ によるトグルになる。

少し長いですが、前項の冒頭設定に続いて記述:
; on
(global-set-key [henkan]
  (lambda () (interactive)
    (when (null current-input-method) (toggle-input-method))))
; off
(global-set-key [muhenkan]
  (lambda () (interactive)
    (inactivate-input-method)))
; event hook
(defadvice mozc-handle-event (around intercept-keys (event))
  "Intercept keys muhenkan and zenkaku-hankaku, before passing keysto mozc-server (which the function mozc-handle-event does), toproperly disable mozc-mode."
  (if (member event (list 'muhenkan))
    (progn
      (mozc-clean-up-session)
      (toggle-input-method))
    (progn ;(message "%s" event) ;debug
    ad-do-it)))
(ad-activate 'mozc-handle-event)


おめでとう。Ubuntu上でMozc日本語入力付きのEmacsを使えるようになった!

16GBストレージのChromebook Flip CPA100に上記作業を行った結果、残り容量表示は8GBとなった(作業前にいくつだったかはチェックし忘れた)。


補足・注意事項

念願のEmacsを使えるようになって大満足である。実は導入できたことですっかり安心してしまい、まだそんなに触っていないので、これから使い込むうちにいろいろ課題を発見したり調整したりすることもあるだろう。

なお現時点で補足すべきことが若干ある。

Ubuntuについての補足

キーのカスタマイズはChrome OSを引き継ぐ?

startxfce4したときに、特に何もしなくてもCtrlと検索キーの入れ替え設定やスクロールジェスチャの逆方向設定は生きていた。

xfceを終わらせるにはログアウト

crouton integration extensionを導入してウィンドウモードでxfceを立ち上げていると、ついウィンドウの'X'マークをクリックして終わらせようとしてしまう。

しかしそれでは終わったことにならない。Chromeブラウザに常駐するcrouton integrationアイコンを見ると1インスタンスしっかり残っている旨の表示がある。その場所をクリックすると消えたウィンドウが再び現れる。

きちんとデスクトップ環境のログアウトをしないといけない。

Emacsについての補足

CUI環境でのIME切り替えはCtrl+\で

IMEオン・オフを「かな=オン、英数=オフ」でやりたい場合限定。

enter-chrootからのCUI Ubuntu上で起動したEmacsだと、「かな」「英数」キー入力はChrome OS側のGoogle日本語入力に奪取されてしまって、Emacs側のIMEオン・オフにならない。Crosh Windowをかましたターミナル上でも駄目だった。

デフォルトのCtrl+\でトグルさせることになる。

Emacsを使うだけならCUIが気軽だし常用したいつもりもあったのだが、残念。

ともあれテキスト打ちがやりやすくなったのは間違いない。やったね。


参考