Introduction

*.rdp ファイルを編集することで、2 つ以上のディスプレイに対してリモート先のウィンドウを最大化できる。
通常、GUI で指定する場合は、一つのディスプレイまたはすべてのディスプレイを指定するような極端な指定しかできないのに対して、自由なレイアウトが可能になる。
最大化の利点は何といっても、ショートカットキーがリモート先に届くことや、解像度の違うディスプレイでも違和感を抑えてマルチディスプレイかできるところにある。
ところが、この指定が突然動かなくなった。

Why?

前提として指定するディスプレイの指定は間違っていない。
原因は ディスプレイがぴったり隣接していない ことにある。

まず、*.rdp ファイルに指定するディスプレイは下記のコマンドで取得できる。

1
$ mstsc /l

mstsc

ディスプレイ設定で表示されるディスプレイ番号とは異なるのがわかりづらい。
座標情報からどの番号と対象のディスプレイの対応付けを把握する。

Display Setting

このような配置だと、 42 に対応するのは、 64 とわかるので、 *.rdp の指定は下記のようにする。

1
2
3
use multimon:i:1
selectedmonitors:s:6,4
screen mode id:i:2

だが、本来 64 の 2560x1440 のディスプレイ二つが並ぶはずだが、この状態だと 6 だけしか利用できない。
先に書いたように、ディスプレイがぴったり隣接していない からだ。
二つのディスプレイの位置関係は下記。

  • 6
    • l: 0, t: 0, r: 2559 b: 1439
  • 4
    • l: 2563, t: 144, r: 5122, b: 1583

ディスプレイ設定を見ると、42 は隙間なく隣接しているように見えるが、実際にはそうなっていない。
上の位置関係を見る通り、

2563 - 2559 - 1 != 0

となり、隙間が 3 ピクセル空いていることになる。

位置関係を調整し、隙間ないようにすれば問題は解決する。

Display Setting

2560 - 2559 - 1 == 0

ディスプレイ設定だと細かい調整はできないのでレジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration を調整するか ChangeDisplaySettingsExW 関数 で変更すればピクセル単位で対応できる。
さすがに辛いことがわかっているのか、PowerToys で ディスプレイ位置を調整する機能の要望 が出ている。
(5 年近く Open ですが…)