モニタの電源OFF/ONにするとウィンドウ配置がズレるんだけど、どうにかならないの?
『DisplayPort問題』だね!サクッと解決しちゃおう!
こんにちは、自称節約家のしゃおです。
デュアルディスプレイ(マルチモニタ)環境で、DisplayPortケーブルを使用しているモニタの電源をOFF/ONにすると
- ウィンドウが他のモニタへ移動
- ウィンドウサイズが変わる
ってことがあります。
解決方法を調べてみましたが、ケーブルやアダプタなどを追加購入しなければ解決できないものばかり。。。
できればお金はかけたくない!
今回は『DisplayPort問題』の原因と対策を調べ尽くし、無事「無料」で解決できたので、その方法を紹介していきます。
DisplayPort問題とは?
「モニタの電源をOFF/ON」や「PCを省電力モード/復帰」したときに、ウィンドウやアイコンの配置やサイズが勝手に変わってしまう問題です。
※省電力モード:スリープ、休止状態など
問題が起きる環境
モニタとPCを「DisplayPortケーブル」で接続している環境だと、起こる可能性があります。
※EIZO製など、対策済のモニタでは起こりません。
原因はDisplayPortのプラグアンドプレイ
DisplayPortには「プラグアンドプレイ」という機能(仕様)があります。
DisplayPortケーブルで接続したモニタの電源をOFFにすると、PC側に「ディスプレイが切れたよ」という信号が送られます。
すると
- PCはモニタが切断されたと認識
- 再びモニタ電源がONになったときに、モニタの解像度の再設定(変更処理)がなされ、『DisplayPort問題』が発生します。
こんな信号送る仕様やめてくれ!
一度できた仕様はなかなか変更されないんでしょうね。
DisplayPort問題の解決方法を調べる
ググった結果
ググってすぐに出てきた対処方法を紹介
4kなどの解像度が大きいモニタ1台を使う
話になりません。
「好きで&便利で」デュアルディスプレイ(マルチモニタ)環境にしているのであって、モニタを1台にするのは本末転倒!
即刻却下!!
対策済ディスプレイを使う
お金持ちならね?
対策済のディスプレイ、例えばEIZO製品を購入する?
製品の価格高過ぎますし、そんな無駄金ありません!
却下!!
電源を落とさない
解決?
解決とはいえない。
退席時などに無駄な電気を使いたくないから、「モニタ電源をOFF」や「スリープ」にするわけで、この方法も却下!
ウィンドウ位置記憶プログラムを使う
試しましたが、Windows10のデュアルディスプレイ環境ではうまくいかず
上記リンクから、「ウィンドウ位置記憶プログラム」をダウンロードし、使ってみましたが、解決しなかったので却下!
信号を送らない(ホットプラグ状態を維持する)対策の改造アダプタを使う
良いかも?
参考:DisplayPortの切断を回避するアダプター|Qiita
良さそうですが、少し改造しただけのアダプタに数千円支払うのももったいない!
自称節約家と名乗っているからには「なるべく安く」をモットーに今回はパス!
うまくいかないという方もいらっしゃいましたよ。
ケーブル二本挿し
一番現実的
参考:「二本差し」というアナログテクニック|DEAIMOBI
この方法試したのですが、私は
- デュアルディスプレイ
- メインは横置き(HDMI×2、DisplayPort)
- サブは縦置き(HDMI、DVI、VGA)
という環境で、
- メインをHDMI+DisplayPort
- サブをDVI
にするとなぜか、UEFI(BIOS)とWindowsログイン画面がサブに表示されてしまいました。
サブに表示されるだけなら良いのですが、ディスプレイは縦置きなのに、画面は横向きという。。。
私の環境(グラボが問題かなと?)だと、HDMIやDisplayPortよりも「DVI」の方が優先されてしまうようです。
あと一歩でしたが、却下!
レジストリを変更する
もちろん試しました。
参考:ディスプレイの休止でアプリのWindowサイズや配置が崩れる問題への対策
こちらも試しましたが、うまくいかず。
却下!
予めディスプレイとログオン中ユーザとの “リンク” を切断しておく
こちらは解決した後で見つけたので、試していません。
参考:ディスプレイの電源をオフする際、予めディスプレイとログオン中ユーザとの “リンク” を切断しておけばよい|適当に備忘雑記
毎回毎回同じことをしなければならないです。
できたとしても面倒なので、私としては却下!
私が成功した下記の「MonitorKeeper64.exe」でうまくいかない方用。
「WinReDock」を常駐させる ~2023.1追記~
「WinReDock」で成功したという方や記事も見るので試してみてください。
winredock-master.zipもしくはbin.zipをダウンロード
- winredock-master.zip解凍 > bin.zip解凍
- bin内の「wm.exe」を右クリックし、ショートカットを作成
- wm.exeのショートカットをスタートアップに配置
やり方が怪しい方MonitorKeeper64.exeの常駐設定を参考にしてください。
※Githubのリンク「WinReDock」については、「VirusTotal」で検査し、安全性を確認しています。(2023.1)
DisplayPort問題の解決方法
2つの手順で完全解決!
ググって×2、海外のWebページまで調べて、ようやく完全に解決できた方法です。
手順1:ソフト(アプリケーション)をダウンロード&常駐設定
システムの種類を調べる
最近のPCであれば、ほとんど64bitを使っているかと思います。
システムの種類を調べるには、ショートカット「Windows+pause/break」を同時押しで調べることができます。
「システムの種類を調べる」もうひとつのやり方として
「スタートメニュー > 設定 > バージョン情報」でもOKです。
私は断然ショートカット派!
Githubから「MonitorKeeper64.exe」をダウンロード
※Github:ソフトウェア開発プロジェクトのためのソースコード管理サービス
今回はダウンロードだけなので、アカウント登録は必要なし
上記リンクから、システムの種類に合わせてソフトをダウンロードします。
ページを開いたときは、MonitorKeeper○○.exeが見当たりませんが、「Assets」をクリックすると表示されます。
「MonitorKeeper64.exe」をクリックして、ダウンロードします。
※システムの種類が32ビットの場合は、「MonitorKeeper32.exe」を選択
※今回使用する「MonitorKeeper64.exe」については、「VirusTotal」で検査し、安全性を確認しています。
ダウンロードした場所のままで不都合があれば、移動します。
私の場合は、Cドライブ(システムドライブ)に「tool」フォルダを作り、そこへ置いています。
パス例)C:\tool\MonitorKeeper64.exe
常駐設定
Windows起動時に「MonitorKeeper64.exe」が起動するように設定します。
「MonitorKeeper64.exe」を右クリックし、「ショートカットの作成」を選択
「MonitorKeeper64.exe – ショートカット」を作成します。
ショートカット「Windows+r」でファイル名を指定して実行を開き
「shell:startup」と入力し、「OK」をクリック
「MonitorKeeper64.exe – ショートカット」を「スタートアップ」フォルダへ移動します。
これで、Windows起動時に「MonitorKeeper」も起動するようになります。
見栄えを良くするために、「右クリック > 名前の変更」から「 – ショートカット」を削除し、「MonitorKeeper64.exe」としてもOK
ランチャーを使っていない方は「ランチャーを使用している場合」を読み飛ばしてください。
ランチャーを使用している場合
「CLaunch」などのランチャーソフトを使用している方は、そちらの起動設定に「MonitorKeeper64.exe」を設定してもOKです。
手順2:レジストリのゴミを削除=レジストリ値再取得
レジストリの中に、ディスプレイの解像度設定にゴミが残っていることがあるので削除します。
ショートカット「Windows+r」でファイル名を指定して実行を開き
「regedit」と入力し、「OK」をクリック
※「このアプリがデバイスに変更を加えることを許可しますか」と聞かれたら「はい」でOK
「レジストリエディター」が起動したら
「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration」まで開きます。
レジストリのゴミを削除前に必ずバックアップを取っておきます。
「Configuration」を右クリックから「エクスポート」を選択し、任意の場所にバックアップ
「Configuration」よりも下のフォルダをすべて削除します。
既に削除 → 再取得後なので少ない
削除前は、こんな感じでたくさんありました。
これをすべて右クリックから「削除」を選択し、消します。
ゴミの削除後、再起動もしてみましたが、このように2つだけとなりました。
※レジストリの変更によって、画面表示がおかしくなってしまった場合は、バックアップから元に戻しましょう。
以上の2つの手順を行うことで、私のPCでは「モニタの電源をOFF/ON」や「PCを省電力モード/復帰」をしても、『ディスプレイポート問題』が起こることは一切なくなりました!
まとめ
- 「MonitorKeeper64.exe」のダウンロード
- スタートアップやランチャーなどで、Windows起動時に「MonitorKeeper」が起動するように設定
- レジストリのゴミを削除
私も『DisplayPort問題』に遭遇し、あれこれ試行錯誤し、結構時間を取られました。「時間返せコノヤロ!」と言いたいw
ググって×2、海外のページまで調べて、ようやく完全に解決することができました。
モニタ2枚を横置きしている方は、ケーブルさえあれば、「ケーブル二本挿し」が手っ取り早く解決できるかもしれません。
DisplayPortの仕様を決めたのは、PCやワークステーション等のビデオ周辺機器に関する業界標準化団体である「Video Electronics Standards Association(VESA)」です。
彼らは『DisplayPort問題』をどう思っているのでしょうか。
MircoSoft様!なんとかしてください!!
いつかこの問題がなにもせずとも起きなくなることを願っています。
現場からは以上です!
ではまた(#`・ω・´*)/
コメント
こちらの方法を使えば、電源管理の○○分後にディスプレイの電源を切るを設定していてもディスプレイポート問題が起こらなくなるのでしょうか?
「ディスプレイの電源を切る:1分」で試してみたところ、私の環境では、ディスプレイポート問題は起きませんでした。
ご確認ありがとうございます。
DisplayPort問題大嫌いなせいで最近のグラボのほとんどがDP3+HDMI1の組み合わせばかりで手が出せませんでしたが、購入してみようと思いました。
ディスプレイを切ると、グラボのクロックが異常に上昇し、ファンが唸る現象が発生しておりました。ディスプレイの信号だけ維持する方法を探していたところ、たまたまこのページを拝見し、一発で改善しました。本当にありがとうございます。
役立てたようで幸いです。
すみません。完全には改善していませんでした・・。間欠で現象が出てしまいます。
再度検証してみます。お騒がせしてすみませんでした。
間欠でとなると、モニタの相性がありそうですね。
私のLG+iiyamaのデュアルモニタ環境では、問題ないんですけどね。
参考に、どのモニタをご使用か教えていただくことは可能ですか?
返信ありがとうございます。ディスプレイはシングルで「TUF Gaming VG249Q1R-J」です。
あれからも検証していたのですが、何かしらウインドウを開いたままディスプレイの電源を手動で切ると、症状が出にくいようです。
「ディスプレイの電源を切る」やスリープで自動で切った場合は、100%現象が再現されてしまい、解像度も変わってしまいます。
グラボは「HIS RX 580 IceQ X2 OC 8GB」で、ダメ元でドライバのバージョン変えたりもしたのですが、正直手詰まりです。
HDMIだと大丈夫そうなんですが、ディスプレイポートでないと165Hz出せない仕様にこんなに悩まされるとは・・(笑)
試行錯誤の末、一応改善できたのでご報告を。結局設定やアプリを用いた方法ではどうにもならずレジストリを変更するしかなかったです。
「\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\NOEDID_xxx」以下のDwmClipBox.bottomとDwmClipBox.rightをディスプレイの解像度に変更することで、復帰時の解像度の問題は解決。ただし、グラボの動作異常については直らず。
更に検証して、ディスプレイポートのリンクエラーから、そういえばWindows10以降、Radeon固有の省電力で不具合が発生する場合があったのを思い出し、これまたレジストリでEnableULPSを無効(1から0)に設定したこところ、すべて改善しました。
ディスプレイポートの仕様+Radeonの省電力+Windows10の合わせ技のトラブルだったようです。DPが主犯なのは言うまでもないですが(笑)
解決おめでとうございます。
検証お疲れ様でした。相当時間がかかったのでは?
グラボの省電力が悪さをしているとは!
Radeon(AMD)グラボを使用している人は、武田様の検証が役に立ちますね。
時間があるときに「EnableULPSを無効」を、記事に追記させていただきます。
トリプルモニター(2 HDMI、1 DisplayPort(メインモニター)、3 DVI-I)で出来ました。
以前は、モニター3つ消して またONにすると、
1のDisplayPortのウインドが、2のHDMIに移動していました。
教えて頂いた方法で解決しました。
ずっと困っていて色々試しましたが出来ず、しゃおさんのこのブログに出会って助かりました。
ありがとうございます。感謝
コメントありがとうございます。
役立てたなら幸いです。
本当、デュアルディスプレイ環境だと誰もが出くわす可能性のある問題ですし、どうにかしてほしいですよね!
Dellの43型モニタU4320Qでの3画面PBPで、DPメイン+HDMIサブx2 環境でスリープからの復帰不具合に遭遇し、本記事を参考に対応できました・・ありがとうございます。
ただ、自分環境では、以下のような付加作業があったので追記致します。
1.MonitorKeeperのインストールおよびスタートアップへのショートカット登録だけでは、タスクバーへの常駐とはならず、MonitorKeeperへの管理者権限付与、タスクスケジューラーの登録を追加しました。
2.上記にてタスクバーで常駐が確認できるようになり、復帰後のAPの画面移動はなくなりましたが、DPメイン環境で使われている一部のソフトで不具合(ソフトのメニューバーが失われる)が生じました・・そこで、DPをメインからサブに切り替え、HDMIメイン+DP/HDMIサブの3画面PBPに切り替え、DPはブラウザなど、一般的なソフトでの利用に限定するようにしました。
※Dell U4320QはDPx2/HDMIx2/USB-Cのインターフェース仕様ですが、自分グラボはUSB-Cがないため、上記のような構成となりました。
パソコンが壊れて新規購入したら、画面復帰後、2つのモニターのうちメインモニターに表示が移動するという現象が起こりました。
ググっていろいろ試すも解決に至らず、こちらのサイトに出会ってようやく解決しました。
レジストリは怖くていじらなかったのですが、うまくいっています。
ありがとうございました。
解決おめでとうございます!
コメントまでわざわざありがとうございます。
困ったときの個人ブログですねw
UEFIがサブモニター優先で表示される問題から解消するべく、メインモニターを仕方なくDPでつないだところやはりDPの欠点が露出したのでこちらの記事にたどり着きました。
MonitorKeeperを起動して常駐させていてもモニターの電源をOFFにすると容赦なくサブモニターにウィンドウが集約されるのですがなぜでしょうか…
使っているモニターはDELLのS2721DGFです。
環境について教えてください。
モニターは2つとも同じ型ものでしょうか?
現在の接続はメインがDPケーブル、サブがHDMIケーブルでしょうか?
解決策として
①モニターの接続ケーブルを交換(可能であれば)
②モニターのケーブルを接続できる箇所が複数ある場合は接続する場所を変えてみてください。
例えば私のグラボだと以下のようになっており、左の方が優先順位が高い傾向にありました。
□(DP1) □(HDMI) □(DP2) □(DP3)
環境があやふやなので解決できるかは分かりませんが試してみてください。
メインがS2721DGFでサブがBenQのGL2450-Bを使用しています。
S2721DGF=DP
GL2450-B=HDMI(DP変換ケーブルでHDMI接続してます。挙動はHDMIです)
①モニターの接続ケーブルを交換
→効果なし
②モニターのケーブルを接続できる箇所が複数ある場合は接続する場所を変えてみてください。
→効果なし
②に関しては左側のポートほど優先順位が高いのは同じでした。(UEFI表示で確認)
ただしHDMIの優先順位は順番に関係なく最下位。
monitorkeeperのみならず似たような動作をする他のDP対策ソフトを試してみてもダメだったのでS2721DGFのモニターの電源をOFFにした時の挙動が他のモニターとは違うのかもしれませんね…
MonitorKeeperを起動後、一度でも成功しましたか?
私は以前とは異なるモニター2枚を使用していますが、先ほど試したところDisplayPort問題は起きませんでした。
あとはレジストリのゴミは削除くらいですが、試しました?
余談ですが、ウィンドウを閉じるときはCtrlを押しながら閉じる(✕)ボタンを押すとウィンドウ位置を記憶してくれます。
一度も成功していませんね…
もちろん記事に書いてある内容をすべて実施した上でのお話です。
色々試した結果、DP問題を無理に抑え込もうとするのではなく上手く付き合っていく方向にシフトしました。
結局のところモニターの電源を切らなければよいというだけのことですので…。
そう認識を変えたところ、根本的な解決はできませんでしたが精神衛生上は改善されたのでこの記事に辿り着いて試行錯誤した意義はありました。ありがとうございました。
いえ、お力になれず申し訳ないです。
ディスプレイやケーブルの相性、使用状況も関係しているのかもしれません。
S2721DGFにケーブル2本挿しも試されましたか?(環境的に試せますか)
MonitorKeeperで解決できない環境でどうしても電源オフしたくなったときは、対策済みアダプタやディスプレイ購入 or ウルトラワイドディスプレイや4kディスプレイ1枚にするのしかなさそうですね。
モニターキーパーを試してみましたが、SDI表示(一つのソフトウェアが使用するウインドウがいくつも開く表示形式)のウインドウの位置は覚えてくれませんでした。
ここに紹介がありませんが、displayport-hdmi変換ケーブルまたはdisplayport-DVI-D変換ケーブルを使用するのがもっとも手っ取り早い解決方法だと思います。要は信号を送れなくすればよいわけですから。まともな会社が発売していますから、野良アダプタよりはよさそうです。
貴重な情報ありがとうございます。
MonitorKeeperはSDI表示に対応していないようですね。
変換ケーブルでDisplayPort問題は解決しましたか?
以前、変換ケーブルを使用しても解決していない方がおりましたので変換ケーブルでも信号が送られているものだと思っております。(変換ケーブルは持っていないため自分で試せていません)
本当に、本当にありがとう。
windows11にアップデートしたらDisplayPort問題解決しました。windows11からこの問題に対応したようです。ご存じでしたら申し訳ありません。
申し訳ありません、以前にwindows11でDisplayPort電源オフ問題が解決するとコメントしたものです。しかしwindows11は他の部分で使いづらいのでwndows10に戻すことにしました。申し訳ありません。
windows11からwindows10に戻した後こちらの方法でDisplayPort電源オフ問題が解決しました。本当にありがとうございます!!!
ありがとうございます。