Let’s note にインストールした Linux では、サスペンドからの復帰後、トラックパッドとキーボードが反応しなくなる不具合がある。これはパッチを当ててカーネルを再構築することで解消できることが分かっている。 Arch Linux には Arch Build System (ABS) とソフトウェアのビルドを自動化するシステムがある。これを使ってパッケージを作成すれば pacman
で管理できるので、今回はこれを使って再構築してみる。
ABS
でリビルドするのに必要なパッケージをインストールしておく。
$ pacman -S abs base-devel
カーネルのパッケージのファイルをカレントディレクトリにダウンロードする。
$ ABSROOT=. abs core/linux
カレントディレクトリ以下に作成された core/linux
の中に PKGBUILD
ファイルがあるのでこれを編集する。
pkgbase
をカスタムパッケージ名に変更する。
pkgbase=linux-custom
prepare()
関数内ではパッチを当てるなどの下拵えの処理が記述されている。今回のサスペンドの問題を解消するにはファイルの中の1行を変更するだけで、パッチを作るほどではないので sed
で処理する。以下の行を追加します。
sed -i "s/\(.resume\s*=\s*i8042_pm_\)\(resume\)/\1restore/" drivers/input/serio/i8042.c
MAKEFLAGS
をエクスポートして、同時に実行するジョブ数を指定する。 nproc
で利用可能なプロセッサ数を調べたところ、4つだったので、以下のように指定する。
export MAKEFLAGS=-j4
以下のコマンドでパッケージをビルドします。
$ makepkg
makepkg
したら bc
と xmlto
の依存関係が解決できないと怒られた。ので、インストールする。
$ sudo pacman -S bc xmlto
ちなみに makepkg
に -s
オプションつけると自動的に解決してくれるらしい。
気を取り直して再び makepkg
する。ビルドにかかった時間は50分ほど。
HDD だった時は数時間かかっていた気がするので、やっぱり SSD 疾いなあと独り言。
出来上がったパッケージをインストールする。
$ sudo pacman -U linux-custom-3.13.8-1-x86_64.pkg.tar.xz
GRUB
を更新する。 os-prober
パッケージがインストールされていれば grub-mkconfig
を実行するだけで OK.
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
再起動すると GRUB
に linux-custom-kernel
のエントリが追加されているので選択して起動する。
コマンドラインからサスペンドしてみる。
$ sudo pm-suspend
うん、復帰してもキーボード使える。
なお pm-suspend
コマンドが見つからない場合は pm-utils
パッケージをインストールする。