Linux でも Immersed で Virtual Dislay



Immersed.com に行くと「Spawn 5 Virtual Monitors」とあるのだが・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/adcf3def-67e1-21a2-458f-03699b375f0c.png)


残念なことに Virtual 世界に持ち込めるディスプレイは Linux では物理ディスプレイのミラーのみ。Windows/Mac だと物理に存在しないディスプレイを持ち込めるのだが、Linux だと

「Supported Computers &amp; Headsets &ndash; Immersed」
https://immersed.zendesk.com/hc/en-us/articles/14226089686157-Supported-Computers-Headsets

> Currently, Linux only supports plugged-in external monitors (virtual displays coming in the future)

とある。この future は3億年ぐらい待たないといけないので、自前で Virtual Display を作る。

「VNC をセカンドディスプレイとして使う on Ubuntu 18.04」
https://qiita.com/nanbuwks/items/d12a98c8d41630c31a55

を元に、出張先でさくっと作った記録。

# 環境

- Ubuntu 20.04
- ThinkPad X250


# ディスプレイ


作業した ThinkPad X250 は 12.5 型 FullHD LCDを装備していて、そのほかに HDMI と miniDP ディスプレイポートが付いている。

xrandr で調べてみた。

```
$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 276mm x 155mm
   1920x1080     60.05 +  60.01    59.97    59.96    59.93* 
   1680x1050     59.95    59.88  
   1600x1024     60.17  
.
.
.
   320x240       60.05  
   360x202       59.51    59.13  
   320x180       59.84    59.32  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
   3840x2160     24.00  
   2560x1440_30.00  29.94  
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DVI-I-4-4 disconnected (normal left inverted right x axis y axis)
DVI-I-3-3 disconnected (normal left inverted right x axis y axis)
DVI-I-2-2 disconnected (normal left inverted right x axis y axis)
DVI-I-1-1 disconnected (normal left inverted right x axis y axis)

```

出てきたディスプレイヘッドは

- eDP-1
- DP-1 
- HDMI-2
- DP-2
- HDMI-2
- DVI-I-4-4
- DVI-I-3-3
- DVI-I-2-2
- DVI-I-1-1

前回の実験では、

> xrandr での出力を見ると VGA-1/DP-1/DP-2/DP-3/HDMI-1/HDMI-2/HDMI-3 が含まれているけれども同時に使えるのは1つのみ。

ということがあり、それから類推して


- eDP-1
- DP-1 
- HDMI-2
- DP-2
- HDMI-2

これは恐らくX250の内蔵ディスプレイインターフェースで、多分排他使用ではないかと。

DVI-I-1-1 とかは 過去に USB to HDMIx2 ディスプレイアダプタなどをつなげていた名残だと・・・思う。
まあ使わないだろう DVI-I-4-4 を使うことにした。


まずは無難に Full HD で試してみる。

```

$ gtf 1920 1080 60

  # 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
  Modeline "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync

```
と出たのでコピペします。

```

    $ xrandr --newmode  "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
```

DVI-I-4-4にモードを追加し、内蔵ディスプレイの左側へ出力します。

```

$ xrandr --addmode DVI-I-4-4  "1920x1080_60.00"  
$ xrandr --output DVI-I-4-4 --mode 1920x1080_60.00 --left-of eDP-1
```

この時点で、ディスプレイの設定画面には出ていませんが

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/97af459f-2004-fd20-374a-257d2eada650.png)


ディスプレイアレイ内部の描画はこのようになっています。新しいディスプレイにウィンドウが移動できますが残像が暴れます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3deb9f30-cc94-27de-ae14-c17fe7baaca9.png)

多分、前回の記事

「VNC をセカンドディスプレイとして使う on Ubuntu 18.04」
https://qiita.com/nanbuwks/items/d12a98c8d41630c31a55

と同じことが起こっているのだと思います。ウィンドウが定位しない問題はありませんでしたが、もしかしたら先の記事のように  window snapping off 設定が母艦側で入っていたかも知れません。


VR ゴークル側で Immersed を起動して接続すると、真っ黒でしたが、母艦側で Immersedを再起動するとうまく描画できました。

前回と同じように、ウィンドウを仮想ディスプレイ内に最大化して残像をごまかしました。最大化ボタンが効かないので手作業で最大サイズに調整しました。

# クアッドディスプレイへ


調子に乗ってもう2台設定しました。

```

$ xrandr --addmode DVI-I-3-3 "1920x1080_60.00"  
$ xrandr --addmode DVI-I-2-2  "1920x1080_60.00"  
$ xrandr --output DVI-I-3-3 --mode 1920x1080_60.00 --above eDP-1
$ xrandr --output DVI-I-2-2 --mode 1920x1080_60.00 --left-of DVI-I-3-3

```

どういうわけか、右上のディスプレイはディスプレイフルサイズのウィンドウを用意しておいて移動してこないとうまく表示できませんでした。

# 終了



マルチディスプレイを終了するには、aranda を使い、モニターのアクティブをOFFにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f003b589-fa98-bd3b-c3e8-b2adeab1428d.png)

# 起動

再度マルチディスプレイにするには、arnda の設定を保存しておき、次に使う時にファイルの開くの後にチェックマークを押すと簡単に再現できます。

なお、コールドブートしたときにはディスプレイモードを忘れているので、改めて以下のように入力します。


```
$ xrandr --newmode  "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +V
$ xrandr --addmode DVI-I-4-4 "1920x1080_60.00" 
$ xrandr --addmode DVI-I-3-3 "1920x1080_60.00" 
$ xrandr --addmode DVI-I-2-2 "1920x1080_60.00" 

```

# 問題点
前回の記事と同じく、以下の問題があります。


## スクリーンキャプチャが取れない
Print Screen では 本物のディスプレイしか取れないので、GIMPで取るようにします。

## Wineアプリが変
どういうわけか一番左上のディスプレイ内部でしか使えませんでした。


そのほか、以下の問題がありました。


## ダイアログやプルダウンメニューがプライマリディスプレイに表示される

KiCAD や LibreOFFICE など。




# 使ってみて


歯を食いしばって設定を行う必要がありますが、マルチディスプレイが使える環境の利便性はそれを補って余りあります。

外出時に使うマルチディスプレイ環境というのが Oclous Quest 2 を導入した主要目的の一つだったので曲がりなりにもそれが実現できました。


外出時に使うマルチディスプレイ環境として、携帯できるディスプレイ、タブレットのディスプレイ転用などで物理ディスプレイを集めて使うノウハウもあります。

しかしながら解像度や枚数が同じとしても、仮想世界内の巨大ディスプレイの方が遥かに操作心地としては価値が高いです。

今後細かな使い心地は詰めていく必要がありますが、可能性は大きいと感じています。