Let’s note CF-N10 で Ubuntu を使うと、スリープ、サスペンドからの復帰でキーボード、マウスが動かなくなる
上記の症状が起ります。
この症状はもともと Linux カーネルの i8042 用のシリアルドライバに起因するようなのですが、 let’s note の一部機種の場合機種固有のバグと重なり、対処を施すのに時間がかかりました。
備忘録としてメモっておきます。
CF-N10 では 動作中にカーネルから i8042.reset をすると、その後リセットから復帰しないバグがあるらしい
とのこと。この話はここで議論されていて、その時はカーネルコードに書かれているresetをスキップするようにコードを変更し、 カーネルごとアップデートしている。
しかしながら、grub で渡すことのできるパラメータにスリープ復帰時にリセットをしない設定ができるようだったので、それを試してみた。
結果としてうまくいっており、スリープから復帰してもキーボードとトラックパッドが両方とも動くようになたので、設定を記録しておく。
設定
/etc/default/grub の “GRUB_CMDLINE_LINUX_DEFAULT” にて、“i8042.reset” を 0 に設定する。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.reset=0"
この設定は、i8042に対してリセット動作を行わない事を明示する設定のようです。
参考にしたサイトではカーネルのソースコードのリセット動作を行っている箇所を無効にしていましたが、 どうやらこれだけでも上手くいくようです。
i8042.reset [HW] Reset the controller during init, cleanup and
suspend-to-ram transitions, only during s2r
transitions, or never reset
Format: { 1 | Y | y | 0 | N | n }
1, Y, y: always reset controller
0, N, n: don't ever reset controller
Default: only on s2r transitions on x86; most other
architectures force reset to be always executed