SurfacePro3にGentooLinuxをインストールする(2018/12/30suspend有効化完成版)
・概要
うっかりSurfacePro3を落札してしまいました。
しかも,メモリ4GBのSSD128GBという底辺スペックのものを25000円ぐらいで落札。
あーやってしまったと思ったが,ものが届くとメモリ8GBのSSD256GBであった。
どこを間違えたんやと思いながら,
安かったかどうかは議論の余地があるが,MBA以外でまともなスペックのノートがこの値段で買えたならまあええかとなりました。
タイプカバーがついてなかったので,追加で購入。USキーボードのものが国内では人気がなく安いためめっちゃ都合がええやんけと言いながら買いました。
Winタブが完結していない中でこっちを先にやってしまいました。
MacBookもまだ途中だし,年内で全部まとまるのか謎です。。
Surfaceは普通に使う分には普通に動くのですが,細かい部分は積み上げられた叡智があるので叡智をいただくことで比較的簡単にできます。
基本的なところは全部省略します。
基本的なところだけをまとめた記事も製作したいですね。(遠い目)
とりあえず,#gentooinstallbattle カテゴリーでまとめているのでしばらくはそれで追うようにしてください。
追記しないといけない記事もたくさんありますが,もう少し時間をください。
・カーネルコンフィグ
偉大なる叡智は下記にあります。
https://github.com/danielquinn/Gentoo-Surface-Pro-3
ここのkernelディレクトリのReadmeを読んでください。
よくわからん場合,適当に最新のフォルダをそのまま/usr/src/linuxに置いてください。
パッチはしてもしなくても良いかも
.configをgenkernelで読み込むように,/etc/kernels/とかに置いてください。
自分の環境では,rootで実行するのとsudoで実行するので参照フォルダが変わりました。
oldconfigすれば一発でSurface用のカーネルができあがります。
カーネル自体が変わることになるので,
grub-mkconfig -o /boot/grub/grub.cfg
も忘れずに。
多分,なんとかgentoo-surfacepro3が増えてると思います。
・サスペンドやハイバーネイト
→サスペンドは安定化(下方に記載)
ハイバーネイトは復帰後,無線モジュールが死ぬ問題が残っている。
・バックライト明るさ変更
GnomeだとうまくいくがMATEだとうまくいかないので,直接変更するコマンドを自作しました。
変更自体は生きてるのですが,キーボードのショートカットキーがうまくいきませんでした。
作り方
sudo mkdir /usr/local/bin/custom_command
/etc/profileの一番最後に内容を追記
export PATH=$PATH:/usr/local/bin/custom_command
custom_commandディレクトリにコマンドのシェルスクリプトを作成する。
コマンド名をbacklight_brightnessにした。
内容は下記
#!/bin/sh
echo -n "明るさの指定(0-937):"
read value
sudo -- sh -c "echo $value > /sys/class/backlight/intel_backlight/brightness"
明るさは,/sys/class/backlight/intel_backlight/max_brightnessで確認してください。
%で指定したい人は,valueの値を0−100にして最大の明るさと合うように変換してください。
忘れずに実行権限を追加する。
chmod 755 backlight_brightness
・残件
意外とうまくいかない部分が多いです。
その中でも特に実用するのに困ったサスペンドの部分だけ先に書きます。
・サスペンドの有効化
普通にGentooをインストールしたらカーネルが4.14ぐらいのバージョンになっていると思います。
このバージョンのカーネルだとタイプカバーなどは問題なく使えてもサスペンドあたりの機能が正常に動作しないようです。
(だいぶ色々やったけど無理だった)
もう無理なのかと諦めかけていたとき,Ubuntuのフォーラムなどで
4.17だけどうまくいかないんだ
4.18にしたらどうだい?
おお,うまくいったお
みたいなやり取りを何度か見かけたのでとりあえず最新にする試みはするだけしようと思い,4.19までバージョンを上げてみました。
その結果,サスペンドは問題なく動作するようになったのでカーネルのバージョンアップのやり方も復習しながら方法を書いていきます。
①最新のカーネル取得
overlayで最新のカーネルソースを取れるようにします。
私はlaymanで
sudo layman -a gentoo
でしました。(laymanに関しては割愛)
/usr/portage/sys-kernel/gentoo-sources/の中に最新のカーネルソースがあるので,emergeします。
sudo emerge gentoo-sources-4.19.12.ebuild
こうすることで,/usr/src/の中に新しいカーネルソースが入ります。
1GBぐらい容量があるので注意してください。
Gentooは便利なのでカーネルの変更をeselectで簡単にすることができます。
sudo eselect kernel list
で確認して,
sudo eselect set 2
などで新しいカーネルを選択してください。
genkernelを導入している場合は,oldconfigを有効にして
sudo genkernel --install all
で特に変えるところもなくいけると思います。
sudo grub-mkconfig -o /boot/grub/grub.cfg
で完了です。
make menuconfigする場合は,.configのバックアップなどをとってからoldconfigなどを用いて行ってください。
②USB接続によるwakeupの無効
上記,カーネルを最新にするだけで問題なくSuspendが動作する場合もあるようですが,Suspendした瞬間にUSBのドライバがなんかが動きそれによりSuspendが解除される問題が多々あるようです。(Surfaceに限った話ではない)
そこで,USBの接続などでは復帰しないというのを追加することで対策することができます。
まず,状況の確認から行います。
cat /proc/acpi/wakeup
でwakeupの条件となるものに何が設定されているか確認します。
当環境では,
Device S-state Status Sysfs node
WIFI S4 *disabled pci:0000:01:00.0
LID0 S3 *enabled platform:PNP0C0D:00
EC0 S3 *disabled platform:PNP0C09:00
XHC S4 *enabled pci:0000:00:14.0
HDEF S4 *disabled pci:0000:00:1b.0
TPD4 S4 *disabled
TPD7 S0 *disabled
TPD8 S0 *disabled
PEG0 S4 *disabled
PEGP S4 *disabled
PEG1 S4 *disabled
PEG2 S4 *disabled
となっていました。
SurfaceはUSB3.0のポートが1つしかないので,XHCがenableだと困るという感じです。
手動によるチェック
rootになって
# echo XHC > /proc/acpi/wakeup
と打ってください。
これで一時的に無効になります。
さっきのコマンドでdisableになっているのを確認してちゃんとできるか試してください。
このままでは再起動の度に設定が初期化されるので,ちゃんとできてるようなら立ち上がる時点で毎回このコマンドを有効にしたくなります。
そこで,systemctlで毎回できるように設定を作ります。
sudo nano /etc/systemd/system/disable-USB-wakeup.service
など適当にファイル名をつけて中身を
[Unit]
Description=Disable USB wakeup triggers in /proc/acpi/wakeup
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo EHC1 > /proc/acpi/wakeup; echo EHC2 > /proc/acpi/wakeup; echo XHC > /proc/acpi/wakeup"
ExecStop=/bin/sh -c "echo EHC1 > /proc/acpi/wakeup; echo EHC2 > /proc/acpi/wakeup; echo XHC > /proc/acpi/wakeup"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
などで書きます。当環境はXHCだけなので要らない部分は消しました。
sudo systemctl enable disable-USB-wakeup.service
で起動時に設定できます。
・gdbus-codegen not found
sudo emerge gdbus-codegen
をしても,中身がないことがあります。
具体的には,コマンドとして,gdbus-codegenがない。本体がない。(bin系にない)
こういうときは,
sudo emerge glib
してください。そしたら入ります。
色々依存関係で突然なくなることが稀にあるようです。