プログラマー探偵の事件簿:赤いメッセージがPCを目覚めさせる
Linuxをインストールした古いノートPCをスリープから復帰させた時にフリーズする問題を解決した話である。
事件のはじまり
TWSNMP FCに旧バージョンにあった Wake On LANのパケットを送信する機能を開発しようと思った。Wake On LANはネットワーク経由でパソコンを電源をいれるものである。この機能をテストするためにLinuxをインストールしたノートPCを使うことにした。スリープ(サスペンド)状態にしたノートPCにWake On LANのパケットを送信してみた。電源はONになるが画面が真っ黒なままフリーズしてしまった。キーボードや電源ボタンを押しても何も反応しない。電源ケーブルの抜き差しでもだめ。ノートPCのバッテリーを外して完全に電源を切り、再び電源を入れると復活した。これでは Wake On LANのテストの度にバッテリーの抜き差しが必要だ!ストレスの多いテストになりそうだが本筋ではないので調べるのは後回しにした。
やはり気になる
本筋の開発ができてTWSNMP FCからWake On LANのパケットを送信できるようになるとノートPCが電源ONでフリーズする問題が気になる。まじめに調べることにした。いつものようにGoogleさんに聞いてみた。なかなか良い情報がみつからなかったが、「vaio linux suspend」で探すと
を見つけた。正に同じ現象だと思った。「これで解決」と思ったがそれほど甘いものではなかった。同じことをやってみたが解決しない。
うんざりする試行錯誤のはじまり
同じ現象と思ったブログの記事の参考サイトに
をみると、pm-suspendコマンドでサスペンド(スリープ)する時につけるオプションパラメータがカギであるようである。書いてあるもの以外のオプションも試してみることにした。
でも、
うんざりするほどある。
・オプションを指定してサスペンドする
・ Wake On LANで電源ON
・ノートPCの電源ケーブルとバッテリー抜いて再起動
を繰り返し実施した。全部のオプションを試してだめだった!!
赤いメッセージが私を救う
長い時間やったことが無駄になったと思って諦めかけたが、指定したオプションにはディスプレーのハードウェアに関するものが多いことに気づいた。画面表示のディスプレードライバーがどうなっているかdmesgコマンドでOSのログを見てみた。
なんとなく赤いメッセージが気になる。よくみるとradeonと書いてある。画面表示のためのGPUの名前である。GPUのファームウェアが利用できないというエラーのようである。
他に解決するためのアイデアも尽きているので、だめ元でこのエラーを解決することにした。エラーに書いてある
などを見るとnon-free(フリーじゃない)のパッケージを利用しないとGPUのファームウェアを利用できないことがわかった。
GPUのファームウェアのパッケージを組み込んで再起動すると
赤いエラーメッセージは消えてradeonのファームウェアを読み込んでいる。
この状態で サスペンドして Wake On LANを試してみた。
なんと、ちゃんと復帰する。
pm-suspendにオプションのパラメータは必要なかった。
天から助手の猫が「赤いメッセージにはご利益がある」と言っているような気がする。
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。