Windowsのリモートデスクトップですが、実はマルチモニター環境で特定の画面だけにまたがって全画面表示する、という機能があります。この機能を使ってとあるVMで作業するときに「1枚の全画面だと微妙に使いにくいけどマルチモニタすべての画面をリモデに使いたくない」という要件を満たすべく2枚の画面だけを使うようにしていました。
https://www.hanselman.com/blog/how-to-remote-desktop-fullscreen-rdp-with-just-some-of-your-multiple-monitors
https://qiita.com/yusuke-sasaki/items/5f70dc266caf13021838
先に結論を書くと、 RDPで複数画面が使えない!というときは、使いたいディスプレイ同士が0pxで隣接しているかを確認する必要があります。以下、検証のメモです。
実際のモニターのセットアップはこうなっています。グラボの出力順を考慮していないのでぐちゃぐちゃになっていますが、この中から5,6を使ってRDPを全画面表示する、ということをしていました。
今までこれは動いていたのですが、モニターのつながっているグラボの出力端子を入れ替えたタイミングで画面をまたがっての表示が動かなくなってしまいました。
mstsc /l
で調べてみると、端子が入れ替わったことによってモニターのIDが変わっていたので、IDを確認してrdpファイルに書かれている順番を入れ替えれば動くだろう、と思いました。しかし、若干の移動はあったもののIDは大きく変わっておらず、何をやってもモニタをまたがって全画面表示ができずプライマリモニタだけ全画面で表示される挙動を示しました。よくわからないので一度マシンを再起動し、もう一度mstsc /lをすると今度は何故かモニターIDが大きく変わっていた(1,3,10,11,12,13から0,1,2,3,4,5になっていた)のですが、それを直しても動かず、色々検証すると下記設定の赤字0,2の2画面表示と2,4及び5,3の2画面表示は問題なく動き、なぜか2,4,5,や4,5と横一列にしようとしたときに5を含むと動かなくなるということがわかりました。
検証に使った最低限の要素だけ含めたrdpファイルは以下になります。
## NG ##
full address:s:VM1
use multimon:i:1
selectedmonitors:s:4,5
dynamic resolution:i:0
## OK ##
full address:s:VM1
use multimon:i:1
selectedmonitors:s:0,2
dynamic resolution:i:0
プライマリモニタがRX7900XTXにつながっていることもあり、最初はRadeon仕草かと思いましたが、
mstsc /l
の値をよく見るとmstsc側ID(画像赤文字)の5の起点座標がおかしい事に気が付きました。この場合、0,0から3839,2159が4の値なので5が3840から始まらないといけないのですが、なぜか3853となっており、赤字4と5の間に13ピクセルの隙間があるいうことがわかりました。カッコ内部の値はそれぞれプライマリモニタ(この場合は赤字の4)の左上を0,0として右下に向けて座標がプラスになり、プライマリモニタより左にモニタがあればxはマイナスに、プライマリモニタより上にモニタあればyがマイナスになります。
Windowsの仕様として隣り合うモニタ同士はどこかでくっついていないといけないのですが、赤字5は赤字3とくっついているという扱いになり、4と5は13ピクセル離れている、という認識になっているようです。出力端子を入れ替えたのがちょうど赤字の5にあたるものだったのですが、Windowsで画面の位置を移動したときにそれがズレたようです。わかるかそんなモノ…。
離れてるのであればマウスの移動もできないのではと思いましたが、ある程度の加速度があると多少の隙間を乗り越えて隣のモニタに行けるようです。逆に、隙間があるととてもゆっくりマウスを動かしてモニタの境界線をまたごうとするとブロックされます。密着しているとマウスカーソルの加速度が1px/sでも境界をまたげるようです。たまに感じた違和感はこれだったのか…。
ディスプレイのスナッピングとの格闘の末、最終的に一回り小さい赤字の1以外は0pxで整列できたのですが、どうしても最後の1つが完全密着になりませんでした。1の値は1279,ー1440,3840,ー1になるべきなのですが、Windowsのディスプレイ設定は2辺と隣り合うことを想定していないのか、赤字の3の左辺、もしくは4の上辺のどちらかにしかスナップせず、逆にどちらかにスナップすると絶対にもう一方は合わないという動きをしていました。
ただ、赤字の0,2,4,5の横一列は整列されたので、当初赤字4,5の2画面でリモデが使えないという問題は解決しました。現状、赤字の1,3を使って画面をまたいでリモデをする、ということができませんが、このパターンはないと思うので諦めました…。座標を使ってディスプレイの場所を指定できる方法があればいいんですが…。
変な環境でディスプレイを出力していてRDPで複数画面が使えない!というときは、使いたいディスプレイ同士が0pxで隣接しているかを確認する必要がある、という、ほんとに使い所のないナレッジを得たのでここに供養します。
追記:
その後またディスプレイポートの差し替えがありスナッピングと格闘していましたが、それを便利にするDPEditというツールがあるのを知りました。
DPEdit -A simple Windows command line utility to accurately set the relative position of displays in a dual- or multi-monitor setup -
dpedit /L でつながっているディスプレイ一覧を取得できます。
dpedit /L
Display #5
Device name: \\.\DISPLAY5
Device string: AMD Radeon RX 7900 XTX
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 0
Removable: 0
VGA compatible: 0
Dimensions: {3840, 2160}
Position: {3840, 0}
Display #6
Device name: \\.\DISPLAY6
Device string: AMD Radeon RX 7900 XTX
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 4
Removable: 0
VGA compatible: 0
Dimensions: {3840, 2160}
Position: {0, 0}
Display #10
Device name: \\.\DISPLAY10
Device string: NVIDIA Quadro M2000
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 0
Removable: 0
VGA compatible: 0
Dimensions: {3840, 2160}
Position: {-7680, 0}
Display #11
Device name: \\.\DISPLAY11
Device string: NVIDIA Quadro M2000
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 0
Removable: 0
VGA compatible: 0
Dimensions: {2560, 1440}
Position: {1280, -1440}
Display #12
Device name: \\.\DISPLAY12
Device string: NVIDIA Quadro M2000
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 0
Removable: 0
VGA compatible: 0
Dimensions: {3840, 2160}
Position: {-3840, 0}
Display #13
Device name: \\.\DISPLAY13
Device string: NVIDIA Quadro M2000
Active: 1
Mirroring: 0
Modes pruned: 0
Primary: 0
Removable: 0
VGA compatible: 0
Dimensions: {3840, 2160}
Position: {3840, -2160}
dpedit [ディスプレイ番号] [x座標] [y座標]
でディスプレイを一つづつ、もしくは複数指定して配置を指定できます。上記の内容を5,6,10,11,12,13の順で一発で指定しようとすると以下のようになりますdpedit 5 3840 0 6 0 0 10 -7680 0 11 1280 -1440 12 -3840 0 13 3840 -2160
複雑な配置を行っている場合にピクセルパーフェクトで配置できずにツラミを感じている人は他にもいるようなので、そのうちPowerToysに入るかもしれません
Fine-tune multi-monitor positioning tool #2652 - microsoft / PowerToys -
いずれにしても、これで不毛なイラつきがなくなったのでまた一つPCの利用が快適になりました。
ツイート
コメントを書く
必要事項とコメントを入力して下さい。