2018年11月27日火曜日

4Kモニタでレイアウトが勝手に崩れる問題の対処法

4Kモニタのスリープ復帰→レイアウトぐちゃぐちゃ

 1年半前ほどから4Kモニタを使っていますが、導入当時にかなり悩まされた問題です。今は完全に解決し、普通に使用できているので、当時行った解決法を備忘録として記載します。
なお、環境はHDMI2.0接続GTX1050Ti @Win10です。
(2020/5/14 対処法を追記)

 現象

 4Kモニタを接続すると、グラボが対応している限り、何の問題もなく認識され使えることでしょう。しかし、モニタをスリープにしたり電源を切ったりして、再度復帰させると惨事が起こるのです…。開いていたウィンドウやらデスクトップのアイコンやらがすべて左上に強制移動され、レイアウトがめちゃくちゃに。スケーリングを100%以外にしていると起こりやすい現象な気がします。
 さっさと解決法のみを知りたい場合は、下部の「対処法まとめ」項目まで読み飛ばしてください。

目標

スケーリング150%で、レイアウト崩れ現象を完全に防ぎたい。

模索

国内外問わず、起こる現象らしく、調べるとそこそこ解決法が載っていました。(と記憶しています)
レジストリをいじるので、自己責任にて行ってください。

レジストリにて以下に移動。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration

該当モニターのキー(SIMURATEDやNOEDIDを含む)を探し、
00\PrimSurfSize.cx
00\PrimSurfSize.cy
00\00\ActiveSize.cx
00\00\ActiveSize.cy
の4つの値を、モニタの解像度(4Kならx=3840,y=2160)に変更します。※デフォは16進数なので注意

ちなみに
00\00\PrimSurfSize.cx
00\00\PrimSurfSize.cy
も変更するといい場合もあるそうです。

これで普通は直る…らしいのですが効果なし。

「該当モニターのキー」は、どれが本命なのか自信がなかったので、シングルディスプレイだし、いっそすべてのキーに対し解像度変更を行いましたが、駄目でした。
ここのキーは過去に使用したモニタ全ての設定が残っているので、散らかっていて見にくいです。荒療治ですが、 Configurationより下のキーをすべて削除して再起動すると、現在のモニタの設定だけが復活するので見やすくなります。同様にConnectivityScaleFactors以下も消すとスッキリします。一応エクスポートしてバックアップしてから消しましょう。

ちなみに、ControlSet00のキーに関しても同様に書き換えるように紹介しているサイトがあったと記憶していますが、ControlSet00CurrentControlSetのハードリンクなので、おそらく意味はありません。

他に試したけど効果がなかったことを書いておきます。
・デバイスマネージャからモニタを右クリックしてアンインストール→再起動
・デバイスマネージャの「表示」メニューから「非表示のデバイスの表示」にチェック→"モニター"ツリーで半透明になっている、過去に使用したモニタを全てアンインストール→再起動
・グラフィックドライバの完全アンインストール→クリーンインストール

なお、デバイスマネージャからモニタをアンインストールしてもブラックアウトとかは起こりませんでした。ビクビクしながらやってましたが。
また、作業途中でNvidiaコントロールパネルが開けなくなる現象が起きましたが、デバイスマネージャからモニタをアンインストールして再起動することで、再び開けるようになりました。

その他の事項としては、
HKEY_CURRENT_USER\Control Panel\Desktop\LogPixels
は144(150%の意味)で正常でした。
また、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\ScaleFactors\**\DpiValue
は0xFFFFFFFBつまり-5でした。
これは、「スケーリング推奨値から値の小さい側に数えて5番目にある値」の意味で、我が家では「350,300(推奨),250,225,200,175,150,125,100」なので、150%を指しており正常でした。
Microsoftのページに詳しく書いてます。

模索終了

4K解像度と関係なくフルスクリーンで解像度が変更されたときにレイアウトが崩れる問題への解決法にて解決しました。
以下のキーへ移動し、
HKEY_CURRENT_USER\Control Panel\Desktop
ここにおいて、
Win8DpiScaling1(型:REG_DWORD)に、
DesktopDPIOverride-5(←環境によって値は違う)(型:REG_SZ)に、
変更します。なければ値を作成します。
これで完全解決しました。
"-5"の根拠は上記のDpiValueの際と同じです。各環境に合った値を使用してください。
ただ正直、DesktopDPIOverrideが効果があるのか不明です。Win8DpiScalingに確実に効果があるのは確認しました。


なお、このあと数日し、また例の現象が発生しました。ただし、レジストリを見ると、以前はなかったNOEDID**キーが生成されていました。荒療治のレジストリキー全削除をした余波ですね。この生成されたキーは、上記PrimSurfSize類の値が全てデフォルト値だったので、モニタの解像度に合わせて値を変更しました。すると、また完全解決しました。


1年ほど経って、突然レイアウト崩れが発生しました。上記設定は全て問題ないことを確認しました。この際はグラフィックドライバの入れ直しにて完全解決しました。
入れ直しは、ドライバの上書きクリーンインストールでは駄目でした。面倒くさいですが、一度コンパネからドライバをアンインストールし再起動します。歴代のドライバが残っている場合には、アンインストール再起動後に再度コンパネを見ると、古いバージョンのドライバが現れている場合があります。この場合はまた同様の手順を繰り返し、コンパネにもうドライバが現れなくなるまでアンインストールを続けます。こうして完全削除した後に、クリーンインストールにてドライバを導入します。これでOK!

2020/5/14追記
新しいPCにて上記の対処を行いましたが問題が解決しませんでした。具体的には、再起動すると強制的にスケーリングが100%に戻されてしまいます。
Windows10(1909)をクリーンインストールするとHKEY_CURRENT_USER\Control Panel\Desktop\LogPixelsが存在しないようで、新たにこの値を作成すると無事解決しました。
追記ここまで

対処法まとめ(2020/5/14追記)


レジストリをいじるので、自己責任にて行ってください。バックアップしてから行うことをオススメします。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
にて、該当モニターのキー(SIMURATEDやNOEDIDを含む)を探し、
00\PrimSurfSize.cx
00\PrimSurfSize.cy
00\00\ActiveSize.cx
00\00\ActiveSize.cy
の4つの値を、モニタの解像度(4Kならx=3840,y=2160)に変更。※デフォは16進数なので注意

該当モニタがわからない場合は、(マルチモニターでないなら)全部変えるか、Configuration以下のキーを全て消してから再起動し、生成されたキーから目星をつける。

これで直らないなら↓

HKEY_CURRENT_USER\Control Panel\Desktop
にて、
Win8DpiScaling1(型:REG_DWORD)に、
LogPixels144(0x90)(←環境によって値は違う)(型:REG_DWORD)に、
変更もしくは作成。
"144"の値は環境によって違うので、下記の表or詳しくはMicrosoftのページを参照。
 スケーリング 10進数
 16進数
 125% 120
 0x78
 150% 144 
 0x90
 200% 192
 0xC0
 ......
...

これで直らないなら↓

DesktopDPIOverride-5(←環境によって値は違う)(型:REG_SZ)に、
変更もしくは作成。
"-5"の値は環境によって違うので、Microsoftのページを参照(あるいはこの記事の真ん中くらいにも書いてます)。

これで直らないなら(or治ったけど再発したら)↓

グラフィックドライバのアンインストール→再起動、をコンパネにドライバが現れなくなるまで繰り返した後、グラフィックドライバのインストール。

再発したら↓

Configurationキーに項目が増えていないか確認。あれば上記のように解像度を変更。

0 件のコメント:

コメントを投稿