Chrome OS デバイス
この記事では Acer, HP, Samsung, 東芝, Google によって作られた Chromebook ノートパソコンで Arch を動かす情報を提供しています。現在はページを改訂してモデルごとのページを作成しています。
目次
- 1 イントロダクション
- 2 Chromebook 機種一覧
- 3 インストール
- 4 インストール後の設定
- 5 Known issues
- 6 参照
イントロダクション
レガシーブート
最近の Chromebook (Intel の Haswell や Broadwell が搭載されている機種) には"レガシーブート"モードが存在し Linux や他のオペレーティングシステムを簡単に起動することができます。このレガシーブートモードは Coreboot の SeaBIOS ペイロードによって提供されています。Coreboot は Intel が搭載されている Chromebook に載っているファームウェアです (第一世代は除く)。SeaBIOS がディスクの MBR に起動する伝統的な BIOS のように振る舞い、そこから Syslinux や GRUB などの標準的なブートローダーを起動します。
SeaBIOS が載っている Chromebook では、Arch Linux のインストール手順にほとんど変更がなく、多少のマイナーな調整があるくらいです。
SeaBIOS が存在しない機種
古い機種、また最新機種の一部には、ファームウェアに SeaBIOS が付いていません。SeaBIOS が存在しないデバイスに Arch Linux をインストールする方法は以下の通りです:
- 特定の機種では、ファームウェアのフラッシュメモリの
RW_LEGACY
にだけ SeaBIOS ペイロードを書き込むことができる場合があります (例: Acer C740, Acer C910, Google Chromebook Pixel 2)。Chrome OS のflashrom
を使って手動でRW_LEGACY
をアップデートしたり、John Lewis のflash_chromebook_rom.sh
スクリプトによってサポートされていれば、スクリプトを使って SeaBIOS を書き込むことができます。この方法の利点は (RW_LEGACY
以外の) 標準のファームウェアは変わらないということです。 - SeaBIOS が付属するカスタムファームウェアを書き込む。
- ファームウェアのフラッシュメモリの
BOOT_STUB
に書き込む。この方法では SeaBIOS ペイロードを追加して、SeaBIOS をロードするようにファームウェアを書き換えます。完全にファームウェアを書き換えるよりも安全ではありますが、欠点が複数存在します (例: サスペンドや VMX に対応していない)。John Lewis のflash_chromebook_rom.sh
スクリプトのModify ROM to run SeaBIOS exclusively
オプションです。 - Chrome OS のカーネルとモジュールを使用する ChrUbuntu を使う。
- 自分でカーネルをビルドして署名する。[1] や [2] を参照。
このページで説明しているインストール方法には、SeaBIOS がない機種でも、カスタムファームウェアを書き込むことにより Arch Linux をインストールする方法を記載しています。
ファームウェア書き込み保護
全ての Chromebook にはファームウェア書き込み保護が存在します。インストールの途中で (GBB フラグを更新したりカスタムファームウェアを書き込むために) 書き込み保護を無効化する必要があるかもしれないので、注意しておいてください。
詳しくはファームウェア書き込み保護を見て下さい。
事前注意事項
- Arch をインストールする前に Google ドライブに 100GB-1TB の空き容量が必要になります。これは ChromeOS (バージョン23以上) のためで、linux のためではありません。ドライブの容量を使って ChromeOS を同期・バックアップすることができます。
- 使用している Chromebook の ArchWiki ページを見て下さい、Chromebook 機種一覧を参照。
- あなたの使用しているデバイスの ArchWiki ページが存在しない場合は、デバイスに関する情報を収集して、もし Arch Linux のインストールが成功したのならば、ArchWiki ページを新しく追加することを希望します (SeaBIOS が載っているデバイスには Acer C720 が、SeaBIOS が載っていないデバイスには Acer C710 のページが良いサンプルとなるでしょう)。
- このガイドを隅々まで読み込んで、何か変更をする前に手順についてちゃんと確認を行なって下さい。
Chromebook 機種一覧
Chromebook のページにハードウェアの比較表が載っています。SeaBIOS の有無やストレージの拡張ができるかどうかなどの情報も記載。
インストール
一般的なインストール手順:
- デベロッパーモードを有効にする。
- SeaBIOS のある Chromebook:
- レガシーブート / SeaBIOS を有効化する。
- SeaBIOS をデフォルトに設定 (必須ではありませんが推奨。書き込み保護を無効にする必要があります)。
- SeaBIOS のない Chromebook:
- カスタムファームウェアに書き換え。
- インストールメディアを準備。64ビットのメディアを手動で作成するには他の Linux マシンが必要です。
- Arch Linux インストールメディアを起動して Arch をインストール。
デベロッパーモードの有効化
ChromeOS の中からスーパーユーザーシェルにアクセスするには デベロッパーモード が必要です。SeaBIOS での起動を許可するなど、システムに変更を加えるために有効化は必須になります。
デベロッパーモードに入るには:
- Chromebook を起動します。
Esc + F3 (Refresh)
キーを押しながら、Power
ボタンを押して下さい。これでリカバリーモードに入ります。Ctrl + D
を押して下さい (プロンプトは出ません)。確認がされてから、システムは状態を初期化してデベロッパーモードを有効にします。
スーパーユーザーシェルにアクセス
デベロッパーモードに移行した後は、スーパーユーザーのプロンプトを表示する必要があります。スーパーユーザーシェルのアクセス方法は Chrome OS を設定したかどうかで変わります。
Chrome OS の設定をせずにスーパーユーザーシェルにアクセス
Chrome OS を設定しない場合は、Ctrl + Alt + F2
を押せば (F2 は上段の"右"矢印です, →)、ログインプロンプトが表示されます。
chronos
をユーザー名として使って下さい、パスワードは聞かれません。sudo bash
でスーパーユーザーになってください。
Chrome OS の設定をしてスーパーユーザーシェルにアクセス
Chrome OS を既に設定している場合は:
Ctrl + Alt + T
で crosh window を開いて下さい。shell
コマンドで bash シェルを開いて下さい。sudo bash
でスーパーユーザーになってください。
SeaBIOS の有効化
あなたの Chromebook に SeaBIOS が載っていない場合、もしくはカスタムファームウェアをインストールしてみたい場合は、カスタムファームウェアの書き込みのセクションに飛んで下さい。
以下は Coreboot のデベロッパーモード画面で、プリインストールされている SeaBIOS にアクセスする方法です。
- スーパーユーザーシェルで以下を入力:
# crossystem dev_boot_usb=1 dev_boot_legacy=1
- マシンを再起動。
これで白いブートスプラッシュ画面で Ctrl + L
を押すことで SeaBIOS を起動できます。
以上で Chromebook の SeaBIOS の有効化が完了です。SeaBIOS をデフォルトに設定しない場合は Arch Linux のインストールに進むことができます。
デフォルトで SeaBIOS を起動
デフォルトで SeaBIOS を起動するには、Chrome OS で set_gbb_flags.sh を実行する必要があります (Chrome OS に初めから入っています、Arch Linux では正しく動作しません)。
- ハードウェア書き込み保護を無効化。ファームウェア書き込み保護セクションのハードウェア書き込み保護の無効化を見て下さい。
- スーパーユーザーシェルで次を入力:
# sudo su
- ソフトウェア書き込み保護の無効化。
# flashrom --wp-disable
- 書き込み保護が無効化されているか確認。
# flashrom --wp-status
- 何もパラメータを付けずに
set_gbb_flags.sh
を実行。
# set_gbb_flags.sh
- 以下の出力がされたか確認、[4] を参照。
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001 GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008 GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080 GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
- SeaBIOS をデフォルトに設定。
# set_gbb_flags.sh 0x489
- ソフトウェア書き込み保護を有効に戻す。
# flashrom --wp-enable
以上で Chromebook は SeaBIOS をデフォルトで起動するようになります。Arch Linux のインストールに進んで下さい。デバイスが正しく起動したら、ハードウェア書き込み保護を有効に戻して下さい。
カスタムファームウェアの書き込み
- ハードウェア書き込み保護を無効化します。
ハードウェア書き込み保護のネジ/スイッチ/ジャンパの位置は使用している Chrome OS デバイスのページを見て下さい。使用しているデバイスのページが ArchWiki にない場合、Information for Chrome OS Devices や Coreboot の Chromebook ページ を見て下さい。ファームウェア書き込み保護に関する詳細は Chrome OS カスタムファームウェア#ファームウェア書き込み保護 を見て下さい。
- Lewis のサイトの ROM ダウンロードページ に書かれているコマンドを入力。
- スクリプトが終了したらシステムを再起動する前に外部ストレージにバックアップされたファームウェアをコピー。
以上でデバイスにカスタムファームウェアがインストールされたはずです。うまくいくことを祈って再起動しましょう。
ファームウェアの書き込みに成功したら Arch Linux のインストールを行って下さい。
Arch Linux のインストール
インストールメディアの準備
Arch Linux インストーラの USB ドライブを作成してください。
インストールメディアの起動
- USB ドライブを Chromebook に接続して、(SeaBIOS をデフォルトに設定していない場合) 白いブートスプラッシュ画面で
Ctrl + L
を押して SeaBIOS を起動します。 Esc
を押してブートメニューを表示して USB ドライブの番号を選択してください。
Arch Linux インストーラのブートメニューが表示されるので、通常通りにインストールすることができます。
Arch Linux のインストールが完了したらインストール後の設定を読んで下さい。
別のインストール方法: Chrome OS に加えて Arch Linux をインストール
内蔵ドライブに Arch Linux と Chrome OS の両方をインストールすることも可能です。
ドライブの再パーティション
ドライブをパーティションするには、Chrome OS で ChruBuntu スクリプトの第一段階を実行します。ログインした後、Ctrl + Alt + T
でシェルを開いて、shell
を実行し、cd ~/
でホームディレクトリに移動してください。そして、次のコマンドを実行します:
curl -L -O http://goo.gl/9sgchs; sudo bash 9sgchs
別パーティションの容量をどうするか聞かれます。16GB の SSD なら 8GB が安全な数字です。9GB 以上だと動作しないかもしれません。
ファイルシステムの修正
上記のパーティションを行った後、システムを再起動してください。Chrome OS はファイルシステムの修復を行います。それが完了したら、ファイルマネージャを開いてウィンドウ右上の歯車をクリックしてディスク容量が減っていることを確認してください。
インストールプロセスの続行
インストールに移りますが、内蔵ドライブを全て消去して新しいファイルシステムを作成する代わりに、前のステップで Arch のために用意した既存の空きパーティションに Arch をインストールします。
インストールメディアを起動した後:
fdisk -l
コマンドを実行してドライブとパーティションを表示してください。内蔵ドライブを見つけたら ChrUbuntu スクリプトで指定したサイズと一致するパーティションの名前をメモします。mkfs.ext4 /dev/sdxY
(xY はドライブ文字とパーティション番号に置き換えて下さい、例:/dev/sda7
) を使って arch のファイルシステムを作成します。- GPT に GRUB をインストールする手順に従って、gdisk を使って 1007kb のパーティションを作成しタイプを EF02 に設定します。
Arch Linux と Chrome OS の選択
システムを再起動してください。Ctrl + l
を押して SeaBIOS を起動してから Arch を起動するか Ctrl + d
を押して ChromeOS を起動します。
ここで SeaBIOS をデフォルトに設定することもできます (Chrome OS があるので後でいつでも出来ます)。
インストール後の設定
パッチのあたったカーネル
基本的に Chrome OS 端末では公式の linux パッケージを使うことが推奨されていますが、Chromebook Pixel 2015 など、ごく最近に発売された端末はパッチのあてられたカーネルを必要とすることがあります。
linux-samus4AUR には Chromebook Pixel 2015 のためのパッチが含まれており、上流の Linux カーネルにまだマージされていない、タッチパッドやタッチスクリーン、スピーカーなどの機能の修正を行います。詳しくは its GitHub のページ を見て下さい。
パッチがあてられたカーネルが必要な場合、上流ソースにパッチがマージされるたびにパッチのリストは小さくなっていくので、パッチのリストを見てパッケージが必要かどうか決めるのを推奨します。最終的には公式の linux パッケージが使えるようになるはずです。
Linux カーネルの詳細はカーネルを見て下さい。
ビデオドライバー
Intel Graphics を見て下さい。
タッチパッドとタッチスクリーン
Touchpad Synapticsとタッチスクリーンを見て下さい。
カーネル 3.17 から、関連するパッチは全て上流のソースにマージされたので、core の linux パッケージでタッチデバイスはサポートされています。
タッチパッドの設定
タッチパッドを設定する方法はいくつかあります:
- あなたが使っている Chromebook 機種の ArchWiki ページに (Chromebook 機種一覧を参照) タッチパッドの
xorg.conf.d
ファイルがないか見て下さい。 - KDE の Synaptiks などのタッチパッド設定ツールを使う。Synaptiks はメンテナンスがされておらず KDE 4.11 ではクラッシュすると書かれていますが、KDE 4.12.2 では問題なく動作します。別のユーティリティ、kcm_touchpadAUR は全く使えません。
Chromium OS input drivers
xf86-input-cmtAUR offers a port of the Chromium OS input driver: xf86-input-cmt as an alternative for the Synaptics input driver. It provides tweaked configuration files for most devices, and provides functionality that the Synaptics input driver does not such as palm rejection. Additionally, it enables functionality not enabled by default in the Chromium OS input driver such as tap-to-drag.
Please note, the input driver does not work under some circumstances where you have insufficient permissions to access /dev/input/event
This will affect you if you use startx to load a DE/WM session.
If this is the case or if the driver does not load for any other cases, you should run:
# usermod -a -G input $USER
Where $USER is the current user wanting to use the input driver.
It should also be noted that some users have reported the driver does not work in GDM but works normally after log in. If you are affected by this, you should run:
# usermod -a -G input gdm
After reboot, you should be able to use the touchpad normally.
Fixing suspend
The following are instructions to fix the suspend functionality. Even if you are using a pre-installed SeaBIOS or John Lewis' pre-built SeaBIOS you will still need this fix.
There have been a few alternatives discussed and those may work better for some. [5] [6]
To fix suspend, the general idea is to disable the EHCI_PCI module, which interferes with the suspend cycle. There are multiple ways to achieve this.
With kernel parameters
Add the following to your GRUB configuration:-
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=ehci_pci"
Then rebuild your grub config. After rebuilding your GRUB config, reboot your computer.
With systemd
Sometimes the synaptics touchpad, and various other parts of the laptop are used as wakeup devices causing certain movements of the laptop during suspend to end suspend. In order to disable all wakeup devices except for the laptop lid sensor, create the following suspend-device-fix.sh
file.
/usr/local/sbin/suspend-device-fix.sh
#!/bin/bash awk '{if ($1 != "LID0" && $3 == "*enabled") print $1}' < /proc/acpi/wakeup | while read NAME do echo "$NAME" > /proc/acpi/wakeup done exit 0
Now give the file executable permissions:
# chmod +x /usr/local/sbin/suspend-device-fix.sh
Create a systemd service to execute the script on every boot.
/etc/systemd/system/suspend-fix.service
[Unit] Description=Suspend Fix [Service] Type=simple ExecStart=/usr/local/sbin/suspend-device-fix.sh [Install] WantedBy=multi-user.target
First start the service.
# systemctl start suspend-fix.service
If it properly starts, then allow it to be started on bootup.
# systemctl enable suspend-fix.service
Add the following line at the end of /etc/rc.d/rc.local
(if it does not exist, just create it) to prevent bad handling of EHCI USB:
/etc/rc.d/rc.local
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove
Then, create the following cros-sound-suspend.sh
file. Only the Ath9k binding/unbinding lines are listed below; see the alternatives linked above for additional sound suspend handling if you experience issues.
/usr/lib/systemd/system-sleep/cros-sound-suspend.sh
#!/bin/bash case $1/$2 in pre/*) # Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating) echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind # Unbind snd_hda_intel for sound echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind ;; post/*) # Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating) echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind # bind snd_hda_intel for sound echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind ;; esac
Make sure to make the script executable:
# chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh
Then rebuild your grub config.
Fixing audio
Haswell based models
One or more of followings might help solving audio related issues, setting snd_hda_intel
module index reported the most useful. It is highly possible that you will not need to make any change.
- Create
/etc/modprobe.d/alsa.conf
, the optionindex
will make sure the analog output is the default (and not HDMI), the optionmodel
will notify the driver our board model which will make the built-in microphone usable (you can try insteadmodel=alc283-sense-combo
).
/etc/modprobe.d/alsa.conf
options snd_hda_intel index=1 model=alc283-dac-wcaps
- Use the
~/.asoundrc
file from [7].
- If having problems with headphones (perhaps no audio playing), try
alsactl restore
in terminal. Now, ALSA should automatically switch between channels when using headphones/speakers.
Chromebook Pixel 2015
linux-samus4AUR includes a patch for Broadwell SoC sound devices. Its GitHub page includes additional instructions for initializing the sound device.
Hotkeys
The Chromebook function keys recognized as standard F1-F10 by the kernel, it is preferable to map them accordingly to their appearance. It would also be nice to get the keys Delete, Home, End, PgUp, PgDown
which in Chrome OS mapped to Alt + : BackSpace, Right, Left, Up, Down
.
Sxhkd configuration
One way to set the hotkeys would be by using the Sxhkd daemon. Besides sxhkd, this also requires amixer, xorg-xbacklight, and xautomation.
- See [9] for an example configuration in
~/.config/sxhkd/sxhkdrc
.
Xbindkeys configuration
Another way to configure hotkeys would be by using Xbindkeys. Besides xbindkeys this requires amixer and xorg-xbacklight and xvkbd.
- See [10] for an example configuration in
~/.xbindkeysrc
. - See vilefridge's xbindkeys configuration for another example.
Alternate xbindkeys configuration
Volchange (originated in the Debian User Forums)) can manipulate the volume with PulseAudio instead of using amixer. Besides Volchange this requires xorg-xbacklight and xvkbd.
- Download the script from [11].
- Make it executable
$ chmod u+x ~/.local/bin/volchange
See [12] for a matching ~/.xbindkeysrc
.
Patch xkeyboard-config
Another option is to install xkeyboard-config-chromebookAUR, for more details visit [13].
Mapping in Gnome with gsettings set
Some of the function keys can be mapped in Gnome with the advantage of HUD notifications on changes (like volume and brightness changes) which can supplement one of the mapping methods mentioned above. This linked example maps the brightness and volume actions. Notice that xdotool is required.
Power key and lid switch handling
Ignore using logind
Out of the box, systemd-logind
will catch power key and lid switch events and handle them: it will shut down the Chromebook on a power key press, and a suspend on a lid close. However, this policy might be a bit harsh given that the power key is an ordinary key at the top right of the keyboard that might be pressed accidentally.
To configure logind to ignore power key presses and lid switches, add the lines to logind.conf
below.
/etc/systemd/logind.conf
HandlePowerKey=ignore HandleLidSwitch=ignore
Then restart logind for the changes to take effect.
Power key and lid switch events will still be logged to journald by logind. See Power management#ACPI events.
Ignore by Gnome
Install gnome-tweak-tool, open the Tweak Tool and under Power change the Power Button Action.
Known issues
Syslinux
Follow Syslinux installation instructions carefully. Try manual installation to see where the problem comes from. If you see Missing Operation System then it may be because you need to use correct bootloader binary. If syslinux does not work try other bootloader such as GRUB.
参照
- Developer Information for Chrome OS Devices at the Chromium Projects site
- BBS topic about the Acer C720 which include generic information on Haswell Based Chromebooks.
- Re-partitioning in Chrome OS [14], [15]
- Brent Sullivan's the always updated list of Chrome OS devices
- Google Chromebook Comparison Chart