ASUS T100CHI-Z3795 に Ubuntu 16.04 を入れて Linux tablet した話

この記事は Linux Advent Calender 15 日目の記事です。ほぼポエムの類です。

![P_20161105_173001.jpg](https://qiita-image-store.s3.amazonaws.com/0/77727/a3eb9c81-bbbb-0c87-7147-baf75d8805e0.jpeg)
_Linux タブレットと ErgoDox を持ち歩くの図　[@株式会社ルーター様](http://rooter.jp/)_

# 気軽に持ち運べる開発環境がほしい

現状まともな開発環境、特に持ち歩けるものとなるとほぼ Macbook シリーズ一択かと思います。ただ最近 Macbook Air でも重く感じる・DPI が低い等不満点がありました。

そこで、気軽に持ち運べる程度に

- 軽量
- 小型
- 雑に扱える(ぐらい安い)

をテーマに検討したのですが、Mac OS / Linux だとちょうどいいぐらいのデバイスがない。

# そうだ、Windows tablet 買おう

OS の枷を外すと、上記の条件に当てはまるデバイスがあります。格安 Windows tablet です。ただ、RAM 8 GB未満は人権侵害なのですが、ほぼほぼこのカテゴリの製品には RAM 8 GB の製品がありません。妥協して 4 GB となると、かろうじていくつか選択肢が出てきます。今回は表題の通り ASUS T100CHI というモデルを採用しました。

- 薄くて軽い
- そこそこ小型
- 35,000 円程度と安価
- CPUは期待してない / RAM はギリギリ人権侵害 4 GB

# Windows を使うと誰が言った？

というわけで、購入したらさっさと Linux 環境を入れましょう。

※ Windows でも使ってみたのですが、RAM 4 GB だと Windows 1 GB + ブラウザ 1 GB + SBT(JVM) 1 GB + IntelliJ IDEA 1 GB みたいな感じでほぼ RAM が即死

# T100TA Install 64bit ISO Final ISO

世の中には Windows tablet、しかも Atom のものを Linux 化しようという奇特な方がいらっしゃるので、その方々の成果物をありがたく利用させていただきましょう。ディストリビューションは Ubuntu 16.04 です。

[T100TA Install 64bit ISO Final ISO](https://plus.google.com/115582184723609367547/posts/CRTyP7DAYvc)

実際のところ、2年ほど前に Windows tablet Ubuntu install battle したときはろくに使えるものではなかったのですが、現在では有志の手によってほぼ動く状態にまでなっています。すばらしい。

インストールについては詳細な手順がリンク先にありますので、ここでは割愛し、ハマリポイントだけ紹介したいと思います。

## 無線LAN は IPv6 サポートを無効にしないとまともに動作しない

Ubuntu をインストールしたことある方ならわかると思うのですが、Ubuntu のインストーラは死ぬほど優しくて、ネットワークに繋いだ状態でインストールすれば、ドライバや最新の OS アップデートを自動的に適用してくれます。

問題はこの "ネットワークに繋いだ状態" です。一応インストール用の Live boot メディアで T100CHI 内臓の無線LANは動作するのですが、すぐに通信できなくなったり非常に不安定です。

これは見出しの通り、無線LAN インターフェースの設定で IPv6 を無効にすることで改善します。

## Windows とのマルチブートの場合のパーティション構成 (論理パーティションにする)

安全のため Windows を残して運用したいという方もいるでしょう。その場合は、事前に Windows 側で準備をしておく必要があります。

Windows を起動し、 ```スタートボタンを右クリック -> コンピュータの管理 -> ディスクの管理``` からディスクの管理を起動し、Windows の利用しているメインのパーティションを右クリックし、```ボリュームの縮小``` で適当に Linux をインストールするスペースを確保します。この時、 ~~ディスクの管理がアホの子なので~~ 一気に大きく縮小しようとせず 4 GB 縮小した後に 4 GB 縮小、のようにやるとうまく大きな範囲を開けることができるようです。準備ができたら Ubuntu のインストールに移ります。

Ubuntu のインストールでパーティションをカスタマイズしてインストールをすることになりますが、この時、Linux で利用するパーティションは物理パーティション・論理パーティションどちらでも問題ないのですが、 _Windows はシステムドライブは物理パーティションしか認識できない かつ 物理パーティションは一つのディスクで 5 個までしか認識できない_ という制約を回避するために、論理パーティションを選択しておきましょう。

この辺に自分はハマりましたが、ここさえ回避できれば比較的インストールは簡単に進むかと思います。

# Linux タブレットを使う

さて、念願の Linux タブレットが手に入りました。ここからは Linux タブレットを実用として使い倒していきたいと思います。

## Bluetooth デバイスを接続して使う

タブレットなので、開発環境として使うには入力デバイスが実質必須です。せっかくのタブレットに USB で外付けデバイスをジャラジャラさせるのもアレなので、無線でスマートに接続したいですね。

T100 Ubuntu のインストールガイドに則れば、Blueman という Bluetooth の管理ソフトウェアがインストールされているはずです。これを使えば大体のデバイスは問題なく接続できると思います。

しかし、うまく接続できないデバイスもあります。例えば Microsoft Universal Foldable Keyboard は薄型軽量折りたたみでまさにタブレット向けのキーボードといった感じなのですが、Blueman でうまく接続できませんでした。なんとか使えるようになった対策を記述します。

1. 接続。どうもペアリングにしばしば失敗する。__=> 根性でなんどもやると突然ペアリングがうまくいったりする__
2. 接続後、キー入力を数秒しないとその後キー入力ができなくなる。 __=> なんか PC 側から定期的に通信してやらないと死ぬ__

2 番の問題については、bluetoothctl で接続デバイスの MAC Address を調べて、定期的に ping を打つコマンドを rc.local とかに書いて常時実行するようにする。

```rc.local
/bin/bash -c 'while true; do l2ping MAC-ADDRESS -d 5 >/dev/null 2>&1; done'
```

完全に力技だけどとりあえず使えるようになります。

## サスペンドできるようにする (オーディオと排他)

タブレットとして運用する以上、当然バッテリー駆動が前提になります。2016 において、さすがに移動のたびにシャットダウンはないでしょう。そのためサスペンド運用が前提になります。

サスペンドしてみましょう。

__カーネルパニックで復帰しないかと思います。__

どうもオーディオドライバーがかなりやんちゃらしく、オーディオドライバーが原因でサスペンドからの復帰ができないようです。(これの特定だけでも苦労した…)

なので、__オーディオ機能をまるっと殺します。__

### lsmod でオーディオ関連モジュールを調べる

```lsmod``` すると現在ロードされているモジュールの一覧が出ます。その中でオーディオ関連モジュールの依存のルートになっているモジュールを調べます。おそらく snd と soundcore があるかと思うので、これらをロードされないようにします。

### blacklist にモジュールを追加する

上記で調べた snd モジュールと soundcore モジュールを blacklist に追加します。```/etc/modprobe.d/blacklist.conf``` に以下を追記します。

```blacklist.conf
install snd /bin/false
install soundcore /bin/false
```

これで、オーディオ関連モジュールがロードされないようになります。当然音はならなくなるのでそこはあきらめましょう。

これでサスペンドした後に電源キーを押すと、みごと復帰できるかと思います。実用！

## OS のフットプリントを小さくする (i3 window manager の導入)

4 GB とかいう人権のない RAM で開発作業を快適に行うためには OS のフットプリントを小さくしておくのが好ましいですね。Unity はかなりリッチな Window manager なので、軽量な WM に差し替えることでかなり起動時の RAM 消費量を抑えることが出来ます。

簡単な導入編については [人権がなくて VM の RAM が 3GB しか取れなかったのでウィンドウマネージャを I3 ってタイル型 WM にしたらめっちゃ軽量な上に使いやすかった話](http://qiita.com/Biacco/items/25160ee0a206d3e95dc2) をご覧ください。

### 電源キーで即シャットダウンしないでサスペンドするようにする

Unity だと電源キーを押した場合には電源ダイアログが表示されるのですが、i3wm は男前なので即時シャットダウンという淑女もびっくりの紳士対応をされます。

これでは不便すぎるので、電源キーを押したらサスペンドするようにしましょう。```/etc/systemd/logind.conf``` を編集します。

```logind.conf
[Login]
HandlePowerKey=suspend
```

### バックライトの自動制御を有効にする

T100 Ubuntu ISO にはバックライト制御用のスクリプトが含まれているのですが、どうも systemd だと正しく動作していない？ように見えました。もし動作していないようであれば rc.local に記載してしまいましょう。

```rc.local
sh /usr/local/bin/auto-brightness.sh
```

### dpi がいい感じにならない(文字が大きすぎる)

i3wm を使っているとすぐにわかると思いますが、dpi 設定が高いのかかなり文字や各種 UI が拡大して表示されていることに気づくかと思います。

すぐに思いつく方法として xrandr があるのですが、なぜか i3wm のレンダリングには効くのですが、それぞれのウィンドウの内部については適用されません…

なぜか Font renderer の dpi 設定を変更すると、その dpi が適用されます…そんなんわかるかいな…

```/etc/X11/Xresources/x11-common``` で X11 設定にフォントレンダラの dpi 設定を追記します。

```conf:x11-common
Xft.dpi: 144
```

### i3 status bar のバッテリー表示が No battery になってしまうのを修正する

```i3status.conf``` (i3status 用のコンフィグファイル) の battery 0 の path を修正する。

```i3status.conf
battery 0 {
    format = " %status %percentage %remaining "
    path = "/sys/class/power_supply/BATC/uevent"
}
```

# まとめ

他にも細々といろいろあった気がしますが、なんかあったらコメント等で質問・指摘いただけると幸いです。というわけで、みなさんよいモバイル Linux ライフを！

おしまい