Post

非NVIDIA出力1枚 + NVIDIA出力8枚を、使いやすく整列するソフトを作った話

非NVIDIA出力1枚 + NVIDIA出力8枚を、使いやすく整列するソフトを作った話

非NVIDIA出力1枚 + NVIDIA出力8枚を、使いやすく整列するソフトを作った話

はじめに

マルチディスプレイ環境を大きくすると、意外なところで運用が難しくなります。
特に、

  • NVIDIA GPU に 8 画面
  • iGPU(Intel 内蔵GPU)に 1 画面

というような構成では、Windows の画面番号NVIDIA コントロールパネル側の認識 がきれいに揃わず、日常運用で混乱しやすくなります。

今回作ったのは、そうした環境で

  • 画面の物理的な並びを安定して管理
  • NVIDIA 側 1〜8、非NVIDIA 側 9 のような独自ルールで表示
  • ドラッグで並べて、Windows の実配置へ適用
  • 将来的にはカーソル循環マルチスクリーン表示アプリにもつなげる

ための、画面整列ソフトです。

この記事では、
詳しい仕組みの話 と、
PCにそこまで詳しくない人にも分かる話 を、両方混ぜて説明します。


まず結論

このソフトの考え方は、かなりシンプルです。

  • Windows は「実際に効く画面配置」を担当
  • ソフトは「どの物理モニターがどれか」を追跡
  • 番号はソフト独自で付ける

これだけです。

Windows の「1番モニター」「2番モニター」という表示は、見た目上は分かりやすいのですが、
再起動や接続状態の変化でズレることがあります。

一方、実際の運用では、

  • いつもの左上のモニター
  • NVIDIA 側の 3 番として扱いたい画面
  • 非NVIDIA 側の管理用画面

のように、人間側の使い方 のほうが重要です。

そのズレを埋めるのが、このソフトです。


1. そもそも何が困るのか

よくある理想

たとえば 9 画面あるとき、使う側としてはこう考えます。

  • NVIDIA 側の 8 枚は 1〜8 で綺麗に並んでほしい
  • iGPU 側の 1 枚は 9 番扱いにしたい
  • 画面配置を変えても、同じ物理画面は同じ役割でいてほしい
  • 再起動しても運用が崩れてほしくない

これは自然な感覚です。

実際に起こること

しかし実際には、

  • Windows の画面設定で見える番号
  • NVIDIA コントロールパネルで見える番号
  • 物理的な並び
  • アプリが実際にウィンドウを出す先

が、きれいに一致しないことがあります。

特に iGPU + NVIDIA の混在環境 では、
NVIDIA 側だけで並び替えをすると、Windows 側の画面設定が思ったようにならないことがあります。

つまり、「見えている番号」と「実際に使いたい並び」がズレる のが問題です。


2. かんたんに言うと

このソフトは、たとえるとこういう役割分担です。

Windows

机そのもの

  • どこに何を置くか
  • どこからどこへマウスが動くか
  • どれがメイン画面か

を決める土台です。

自作ソフト

席表を管理する人

  • この席はいつものAさん
  • この席はNVIDIA側の3番
  • この席は管理用の9番

というふうに、実物を見分けて覚えておく 役目です。

独自番号

席札

Windows が何番と呼んでいようが関係なく、

  • これは 1
  • これは 2
  • これは 9

と、人間が使いやすい番号を付けます。


3. なぜ Windows だけではうまくいかないのか

Windows は「番号中心」ではない

ここが大事です。

Windows は、内部的には
「今つながっている表示パス」
を基準に画面管理しています。

簡単に言うと、

  • どの GPU の
  • どの表示出力が
  • どのモニターにつながっていて
  • 仮想デスクトップ上のどこにあるか

を見ています。

つまり Windows が重視しているのは、
見た目の 1 / 2 / 3 番号 ではなく、
実際に成立している接続と配置 です。

だから起きること

その結果、

  • 再起動で番号がズレる
  • 同じモニターなのに別番号になる
  • 非NVIDIA の画面が途中番号に入る
  • NVIDIA 側の都合と Windows 側の都合が揃わない

ということが起きます。

Windows から見ると壊れているわけではなく、
その時点で成立している構成を正しく扱っている だけです。

でも、使う人間からすると分かりにくい。
そこで、運用ルールを自作ソフト側で持つ必要があります。


4. なぜ NVIDIA 側で並べると Windows が狂うのか

問題の本質

NVIDIA コントロールパネルは、当然ながら
NVIDIA GPU に接続されている表示 を中心に見ます。

一方 Windows は、

  • NVIDIA 側 8 画面
  • iGPU 側 1 画面

全部まとめたシステム全体 として扱います。

つまり、

  • NVIDIA は NVIDIA 側の世界を見ている
  • Windows は全体世界を見ている

という違いがあります。

その結果

NVIDIA 側で「8枚を綺麗に並べた」としても、
Windows 側はその後に全体を再評価します。

すると、

  • 非NVIDIA画面が途中番号に割り込む
  • Windows の識別番号が変わる
  • 見た目上、整列が崩れたように見える

ことがあります。

これは故障ではなく、
違う視点で再構成されている だけです。


5. このソフトがやっていること

5-1. 物理モニターを追跡する

このソフトは、単純な「Windowsの番号」ではなく、
モニターの識別情報を使って、

  • 前回と同じ物理モニターか
  • NVIDIA 側か
  • 非NVIDIA 側か
  • どの接続口に近いか

を判断します。

もう少し具体的に言うと、Windows の表示番号は再起動や検出順でズレることがあるので、ソフトは番号そのものを信用しません。その代わりに、たとえば次のような情報を使います。

  • monitorDevicePath
  • adapterId + targetId + connectorInstance
  • EDID 情報

これらを組み合わせて、

  • 前回の左上のモニターはこれ
  • NVIDIA 側の8枚はこれ
  • iGPU 側の1枚はこれ

というふうに、実物ベースで追跡します。

monitorDevicePath とは何か

これは、Windows がそのモニターを内部で管理しているデバイスの道筋 のようなものです。
言い換えると、そのモニター自身の住所 に近い情報です。

Windows の表示番号より安定していて、同じ型番のモニターが複数あっても区別の手がかりになります。

adapterId + targetId + connectorInstance とは何か

これは、どのGPUの、どの表示先で、どのコネクタ寄りか を表す組み合わせです。

  • adapterId = どの GPU か
  • targetId = その GPU のどの表示ターゲットか
  • connectorInstance = その出力口をさらに見分ける補助情報

つまり、これはモニターそのものというより、どの接続位置にぶら下がっているかを追う情報です。

EDID とは何か

EDID は、モニターが自分の情報をPCへ伝えるためのデータです。
メーカー名、製品コード、解像度に関する情報などが入っています。

ただし、EDID だけでは同じ型番のモニターを完全に区別できないこともあるので、これ単独ではなく、上の情報と合わせて使います。

なぜここまでやるのか

これをやる理由は単純で、Windows の番号だけでは運用が安定しないからです。

たとえば再起動後に、Windows 上では非NVIDIA 側の画面が 5 番になっていたとしても、ソフト側では

  • この実物は iGPU 側の管理用画面
  • だから独自番号では 9 番扱い

と判断できます。

そのため、再起動や再認識が起きても、
同じ実物を同じ役割として扱いやすくなります。

5-2. 独自番号を付ける

番号は 2 モードで考えています。

モード1: 運用固定モード

  • NVIDIA 側 = 1〜8
  • 非NVIDIA 側 = 9

これが、いちばん実運用向けです。

モード2: 並び順モード

  • 左から右
  • 上から下

のような順番で、1,2,3… と付けます。

こちらは、見た目重視で扱いやすいモードです。

5-3. ドラッグで配置する

ソフト上で画面をドラッグして並べ替え、
その結果を Windows に適用します。

これにより、

  • マウスの移動
  • ウィンドウの配置
  • メイン画面
  • 仮想デスクトップ上の位置関係

が、実際の運用に合った形になります。


6. このソフトでできること

現時点または今後の発展も含めると、次のような機能が考えられます。

配置管理

  • 画面をドラッグして並べる
  • メイン画面を切り替える
  • 現在のレイアウトを保存する
  • 保存済みレイアウトへ戻す
  • 再起動後に再適用する

運用番号管理

  • NVIDIA 側 1〜8 固定
  • 非NVIDIA 側 9 固定
  • 並べた順番で 1..N の採番
  • どちらのモードでも切り替え可能

見える化

  • 各画面の識別表示
  • 色分け表示
  • 独自番号表示
  • NVIDIA / 非NVIDIA の区別表示

今後の拡張

  • カーソルの上下左右ラップ
  • 8画面またぎの専用プレーヤー
  • 一部画面だけ PowerPoint、中央は動画などの領域割当
  • 9番画面を操作画面として固定運用

7. 何が一番価値なのか

このソフトの価値は、単なる「並べ替え」ではありません。

価値1: 番号の混乱を減らせる

Windows と NVIDIA の番号がズレても、
自分のルールで一貫して扱える のが大きいです。

価値2: 再起動後も運用が崩れにくい

Windows の見た目番号が変わっても、
物理モニター追跡で戻しやすいです。

価値3: 混在構成でも使いやすくできる

iGPU + NVIDIA という、少し扱いにくい構成でも、
人間側の都合で整列管理 できます。

価値4: 専用システムへの土台になる

将来的に、

  • 動画ウォール
  • 複数画面プレーヤー
  • 監視画面システム
  • 店舗・展示用のサイネージ
  • プレゼン・映像送出ツール

へ発展させる土台になります。


8. 具体例

たとえば 9 画面構成で、次のような使い方ができます。

例1: 管理しやすい番号付け

  • NVIDIA 側の 8 画面 → 1〜8
  • iGPU 側の管理画面 → 9

Windows が途中で 5 番と見せてきても、
このソフトの上では 9 番として扱えます。

例2: 再起動後の復元

再起動したら Windows の番号がズレた。
でもこのソフトは、
「これは前回の左端の物理モニター」
と認識して、独自ルールで再配置できます。

例3: 将来の映像分割

  • 左 2 画面 → PowerPoint
  • 中央 4 画面 → 動画
  • 右 2 画面 → ロゴや情報表示
  • 9 番画面 → 操作画面

のような構成へ発展させることもできます。


9. 技術寄りに見るとどういうソフトか

少し技術寄りに言うと、このソフトは

  • Windows の実表示構成
  • 物理モニター追跡
  • 独自の論理番号
  • UI 上のドラッグ操作
  • Windows への適用

を分離して考えています。

この分離がポイントです。

悪い設計

  • Windows の番号をそのまま信じる
  • NVIDIA 側番号もそのまま信じる
  • 両者の番号を無理やり一致させようとする

これは、混在環境で壊れやすいです。

良い設計

  • Windows は実配置だけ担当
  • モニター追跡はソフトで担当
  • 番号は独自に付ける
  • UI 上の運用を人間基準で作る

これなら、番号の揺れに強くなります。


10. こんな人に向いている

このソフトは、次のような人に向いています。

  • マルチディスプレイを大量に使う人
  • NVIDIA + iGPU の混在環境で困っている人
  • Windows と NVIDIA の番号ズレに悩んでいる人
  • サイネージや映像表示の土台を作りたい人
  • 将来的に複数画面向けアプリを作りたい人

11. まとめ

このソフトの考え方を、最後にもう一度シンプルに書くとこうです。

Windows

実際に効く配置を担当する

自作ソフト

どの物理モニターがどれかを追跡する

自作ソフトの番号

人が使いやすい名前を付ける

この3つを分けることで、
iGPU + NVIDIA の混在環境でも、実用的で分かりやすい画面管理 ができるようになります。

Windows 単体では難しいことも、
「実配置」と「運用ルール」を分けるだけで、かなり扱いやすくなります。


おわりに

マルチディスプレイ環境は、画面が増えるほど「表示する」こと自体より、
どう管理するか が大事になります。

今回のソフトは、派手な見た目のツールというより、
混乱しやすい環境を、ちゃんと運用できる形に整えるための道具 です。

同じように、

  • Windows の番号が信用できない
  • NVIDIA 側と Windows 側で感覚がズレる
  • 混在構成でも安定して管理したい

という悩みがあるなら、この方向はかなり有効です。


付記: 今後やりたいこと

  • カーソル上下左右ラップ
  • 配置プロファイルの複数管理
  • 識別表示の強化
  • 8画面またぎ専用プレーヤー
  • 領域ごとのコンテンツ割当
  • 操作用画面と表示用画面の分離
This post is licensed under CC BY 4.0 by the author.