4Kが主流になりつつあるにも関わらず、DisplayPortの問題は一向に改善される気配はありません。一体全体どうしてこんな変な仕様にしてしまったのでしょうか?
DisplayPortを利用したデュアルモニター環境だと、スリープや休止状態から復帰した時にアイコンの位置がずれたり、他のモニターにウィンドウが移動してしまったり、ウィンドウサイズが変わってしまう問題があります。
今回はこのDisplayPort環境でのスリープ復帰問題の原因と対処方法を完全に洗い出してみたいと思います。
目次
DisplayPort問題の症状
一番被害が大きい部分では、スリープからの復帰時に想定外の配置になってしまう事です。
- ウィンドウサイズやアイコンの配置等が変わってしまう
- 全てのウィンドウが一箇所にまとまってしまう
- 整理されたアイコンの配置位置がぐちゃぐちゃになる
- 解像度の誤認識でウィンドウサイズが崩れたりずれたりする
モニター電源ONとOFFの挙動
左が4Kメインディスプレイ、右がフルHDサブディスプレイとします。
省電力やスリープ移行前の作業段階です。
いざスリープ!…そして復帰!
なんということでしょう。メインディスプレイにあったはずのウィンドウが別のディスプレイに移動してしまいました。さらに、ウィンドウサイズも保持できていません。
原因はDisplayPortのプラグ&プレイ
DisplayPortにはプラグ&プレイという機能が備わっていて、DisplayPortで接続されたモニターの電源が一度でもオフになると、Windows側では、ディスプレイが切断されたと思い込みます。これはDisplayPortの正式な仕様です。
切断されると、生きているモニターにアイコンやウィンドウを自動で移動させます。
その時に生きているサブモニターの解像度が優先されるので、メインモニターの解像度から変わってしまうわけです。DisplayPortで繋いだモニター設定を消去するわけではないので、電源がオンになると認識しますが、一度移動してしまったアイコンやウィンドウは元に戻せないのです。
モニターをHDMI等の他の接続方法で繋いでいる時は、こんな仕組みになっていないので、スリープから復帰しても、ウィンドウやアイコンが元の位置に残ります。
DisplayPort問題の対処方法
DisplayPortのプラグ&プレイによる問題の一番の改善策は「DisplayPort以外の接続方法で代替する」という事になってしまいますが、そんな選択肢が残っていない人もいるはずです。
【非推奨】レジストリを変更してウィンドウサイズを保持する
レジストリエディタから、自分が利用しているモニター環境に書き換えてしまう対処方法が随所で出回っていますが、ほとんどの場合解決しません。
一見すると解決したように見えますが、別の問題が山積みなのでこの対処方法は絶対におすすめできません。一応手順を掲載しておきます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
SIMULATED_で始まるキーの00キーのPrimSurfSize.cxとPrimSurfSize.cyをメインディスプレイの解像度に変更します。
SIMULATED_のレジストリが見当たらない場合にはNOEDID_の中を探してみると幸せになれる可能性が2%上がります。
OSのごきげんが良いとバッチリ動いているように思えますが、ご機嫌斜めだとぐちゃぐちゃになります。
しかも環境によっては上記のレジストリだけでは改善できない場合もありますので…そういう事です。
【非推奨】DisplayPortのホットプラグ信号を常時オンにする改造
ディスプレイポートに改造アダプターを取り付けて、ホットプラグ信号を強制的にオンにした状態を保つ方法です。
「改造」や「強制的」という単語が出て来る方法なのであまりおすすめできません。実際にオークションで手に入れたDisplayPort改造アダプターを使ってみましたが、挙動は概ね安定しています。2日ほどスリープしてから復帰したらウィンドウ配置がずれました。
機器トラブルがあっても自己責任がとれるという人以外はトライしない方がいいと思います。一応改造方法を載せておきます。
まずは「DisplayPortの延長アダプタ」と「抵抗 1kΩ 1/8」を用意します。
分解して「アダプタのオス側18ピン」を「メス側20ピン」に「1kΩ 1/8W抵抗」で短絡するだけです。
ここまで聞いてピンとこない人は絶対に行わない方がいいです。できる人はダメ元でこういう手段があるという事を覚えておいて損はないかもしれないです。
【解決】「二本差し」というアナログテクニック
ここまでの解説は、DisplayPort問題と戦ってきた先人達の知恵の結晶です。しかし、私がDisplayPort問題から完全に開放されたのは意外にも超アナログな方法でした。
- DisplayPort + HDMI
- DisplayPort + D-sub
- DisplayPort + DVI
このどれかの組み合わせでメインディスプレイとPCを二本繋げてしまう方法です。
二本差しを行うと、OS側で2つのモニターとして検出される場合があります。検出されていれば十分なので、DisplayPortではない方の検出されたモニターは切断しておきます。
なぜ二本差しをするだけでDisplayPortの不具合が出ないかというと、簡単に説明するなら、二本目のケーブルが「私は生きています」という信号だけ残してくれるからです。
DisplayPortはモニターの切断さえなければ、まったく問題のない仕様なので、たったこれだけの事で解決してしまうんですよね。
え?
二本目を差す場所がない?
EIZOの場合はモニター側が対応してくれる
EIZOのモニターは以前からDisplayPort問題に注力しているので、以下のような機能が付いています。
- DP HotPlug機能
- Compatibility Mode
- USB接続
モニターとPCをDisplayPortで接続した場合に、モニターの電源ボタンのオフ・オンのたびにアイコンやウィンドウが移動してしまいます。
参考 FAQ詳細 | EIZO株式会社
EIZOのモニターはディスプレイを使うプロ達が選ぶメーカーとして本当に有名ですが、こういった細部まで作り込まれているならばむしろ安いぐらいです。
いつかサブモニターも全てEIZOにしたいですね。
まとめ
DisplayPortのせいでウィンドウの位置がずれる現象に悩まされる人はめちゃくちゃ多いです。それは、4Kの普及時期と重なっているのも大きな原因なのかもしれないですね。
解像度がバラバラのマルチディスプレイ環境だと見るも無残な結果になる事が多いので、仕事の効率にも影響してくると思います。
今回は「DisplayPortが原因」だと特定できている方にとってはなんとか解決できそうな情報をまとめてみましたが、現実的な物だとやっぱり二本差しという結果が悲しいですね。
余談ですが、三本差しで完全に改善したという声もあったので、とにかくモニターの電源オフでも信号を残す事に注力してみて下さい。
いずれ…WindowsがOSレベルで改善してくれる事を願うばかりです。その前にブーイングの嵐でDisplayPortの仕様が変更すればいいのかも。
今日も知識欲は止まらない。