DisplayPortで接続したディスプレイの認識が安定しない件

今使ってる4Kのディスプレイ(EIZO EV3237)は 2015年2月9日(d:id:gae:20150209)に買ったようなので、3年前から困っていた問題。
うちで困っていたのは、起動時にディスプレイが認識されず、サブのディスプレイだけが有効になってしまう問題。
発生確率は50%くらい。
休止やスリープから復帰したときにこれが起こると、ウィンドウがサブディスプレイに移動してしまい、元に戻すのが面倒なので、私の場合は毎回OSをシャットダウンするようにして、起動時に認識されなかったら認識されるまでOSを再起動するという運用でやりすごしていた。
問題は他にもあって、発生確率は低いけど「認識されるけど30Hzになってしまう」こともあったりしてわりと困っていた。


最近、HDRにも興味が出てきたので、ディスプレイの買い替えるのもありかなーと思っていたんだけど、新しいのを選ぶのも古いのを処分するのも面倒なので、この問題を解決する方法がないかもう一度調べてみることにした。
するとこのページが見つかった。

「DisplayPortにBIOSの画面が表示されないんだが?」という質問の回答として「俺はUEFIブートにして、CSMを無効化するとなおったぜ」という書き込みがあった。


私の今の環境を「システム情報」で調べてみると「BIOSモード」は「レガシィ」になっていた。要するにUEFIではなさげ。
まずはUEFIにする方法を調べる。「UEFI 変換」などで調べるとたくさん情報が見つかる。

私もこの手順通りにすすめた。
まず「回復ドライブ」で起動用のUSBメモリを作成しておき、gptgen でドライブを MBR から GPT に変換。
その後 USBメモリから起動してコマンドプロンプトを開き diskpart を起動。
起動ドライブの先頭のパーティションを削除してEFIパーティションを作り、ドライブレターを設定と、ここまでは順調にいっていたけど、msr のパーティションを作るところでつまづいた。
手順ではEFIパーティションの後ろにmsrのパーティションを作ることになっているが、私の場合Windowsが入っているプライマリパーティションの前方に100MBの領域しかない。その100MBの領域はEFIパーティションで埋まっているのでmsrのパーティションが作れない。
結局、Windowsパーティションの後ろに2つの回復パーティションがあったので、2つめ回復パーティションを削除して、そこにmsrのパーティションを作った。このときoffsetの指定方法がわからずハマったが、offsetを指定しなければ、空いている領域に自動的に作られるようだった。
これでめでたくBIOSモードがUEFIに切り替わった。


なぜかUEFIに切り替えてから、起動時にディスプレイが認識されないということが起きなくなった。10回くらい起動とシャットダウンを繰り返したが、まったく問題が発生せず…。もしかして問題解決?


元の記事には「CSMを無効化」という手順があったのでこれも試してみた。
私のマザーボードは ASRock Z170M Pro4S というものなんだけど、設定を見ても CSM の項目が見当たらない。ググってみると、FastBootとCSMを同時に使うと問題が起こるという記事が見つかった。

私の環境では FastBoot が Enabled になっていたので Disabled にすると、CSMの設定が出てきた。
CSMの設定を Disabled にして再起動してみると、なんと今までマザーボードの設定画面はHDMIで接続されているサブのディスプレイにしか表示されなかったのに、DisplayPortの方に出力されるようになった。
何度か再起動してみたが毎回ちゃんとDisplayPortのほうに出力されている。


まだ10回程度しか試してないけど、今のところ問題ない。
これで毎日無駄にシャットダウンせずに、安心してスリープが使えるようになるかな?

追記 2019/01/31

↑上に書いた内容では結局解決しなかった。
最近、モニタを買い替えても同じ状況が発生したので改めて調べたところ、GeForceBIOS のアップデートが公開されていた。
www.nvidia.com
www.asus.com
これで今まで困っていた問題は解決した。