「ノートPCをディスプレイ代わりにしてマルチディスプレイを試す on Windows10」
https://qiita.com/nanbuwks/items/aed19202d51e4af82cde
のようなことを Ubuntu Linux でしたい。
「おまけ Ubuntu Linux から接続できるかな?」
https://qiita.com/nanbuwks/items/aed19202d51e4af82cde#%E3%81%8A%E3%81%BE%E3%81%91-ubuntu-linux-%E3%81%8B%E3%82%89%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%8B%E3%81%AA
では MiracleCast を使おうとしましたがうまくいきませんでした。
調査
調べたら、iPadや Android タブレットをセカンドディスプレイとして使っている人がいます。
vnc4serverを使うやり方
「AndroidタブレットをLinuxのサブディスプレイにする | ともの技術メモ 」
https://tomono.tokyo/2016/08/09/6228/
マウスは行き来できますが、ウィンドウは行き来できないそうです。
xrandr + vnc
「Using iPad as a 2nd monitor on Linux」
https://kbumsik.io/using-ipad-as-a-2nd-monitor-on-linux
この例でもx11vncを使っています。
VIRTUAL1 仮想ディスプレイを作って xrandr でディスプレイ集合にアタッチ。ディスプレイ集合の一部画面だけvncで配信するやりかたです。
これだとウィンドウも行き来できるようです。
GUI
先の方法は VirtScreen という新しいプロジェクトに進んでいるらしい。
https://github.com/kbumsik/VirtScreen
GUIユーティリティーになっています。
使用していないディスプレイポートを使うやり方
xrandr + vnc の元ネタはこれ。
「Extending desktop over VNC, the easy way」
https://bbs.archlinux.org/viewtopic.php?id=191555
これは使っていないディスプレイポートを使い、 xrandr で解像度を指定してディスプレイ集合にアタッチしています。
この方法を使って試してみました。
環境
- Ubuntu 18.04
- ThinkPad X230 (1360x768)
- HDMI 入力付テレビ x 1 (1360x768)
- Windows10 ノートPC x 2 (1920x1080)
- USB to HDMIx2 ディスプレイアダプタ
- Plugable USB3.0 HDMIx2 + Gigabit Ethernet RJ-45 port (USB3-6950-HDMI)
https://qiita.com/nanbuwks/items/924324fa51f73307c6c0#%E3%81%9D%E3%81%AE5-plugable-usb30-hdmix2--gigabit-ethernet-rj-45-port-usb3-6950-hdmi
あらかじめ、 USB to HDMIx2 ディスプレイアダプタのうちの1ポートに、 HDMI 入力付テレビ x 1 (1360x768)を接続しています。
方法
この方法ではディスプレイの空きポートを使います。
xrandr で調べます・
$ xrandr
Screen 0: minimum 320 x 200, current 2646 x 1792, maximum 8192 x 8192
LVDS-1 connected primary 1366x768+1280+768 (normal left inverted right x axis y axis) 277mm x 156mm
1366x768 60.00*+
1360x768 59.80 59.96
1280x720 60.00 59.99 59.86 59.74
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
1024x576 59.95 59.96 59.90 59.82
960x600 59.93 60.00
960x540 59.96 59.99 59.63 59.82
800x600 60.00 60.32 56.25
840x525 60.01 59.88
864x486 59.92 59.57
800x512 60.17
700x525 59.98
800x450 59.95 59.82
640x512 60.02
720x450 59.89
700x450 59.96 59.88
640x480 60.00 59.94
720x405 59.51 58.99
684x384 59.88 59.85
680x384 59.80 59.96
640x400 59.88 59.98
576x432 60.06
640x360 59.86 59.83 59.84 59.32
512x384 60.00
512x288 60.00 59.92
480x270 59.63 59.82
400x300 60.32 56.34
432x243 59.92 59.57
320x240 60.05
360x202 59.51 59.13
320x180 59.84 59.32
VGA-1 disconnected 1280x1024+0+768 (normal left inverted right x axis y axis) 0mm x 0mm
1280x1024_60.00 60.00*
HDMI-1 disconnected (normal left inverted right x axis y axis)
2560x1440_30.00 29.94
3840x2160 24.00
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
HDMI-3 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-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 connected 1360x768+1280+0 (normal left inverted right x axis y axis) 1600mm x 900mm
1920x1080 60.00 + 59.94 30.00 24.00 29.97 23.98
1280x1024 60.02
1360x768 60.02*
1280x768 74.89 59.87
1280x720 60.00 59.94
1024x768 75.03 70.07 60.00
800x600 72.19 75.00 60.32 56.25
848x480 60.00
720x480 60.00 59.94
640x480 75.00 72.81 60.00 59.94
1024x768 (0x50) 65.000MHz -HSync -VSync
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
v: height 768 start 771 end 777 total 806 clock 60.00Hz
800x600 (0x53) 40.000MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
v: height 600 start 601 end 605 total 628 clock 60.32Hz
800x600 (0x54) 36.000MHz +HSync +VSync
h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16KHz
v: height 600 start 601 end 603 total 625 clock 56.25Hz
640x480 (0x5b) 25.175MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
v: height 480 start 490 end 492 total 525 clock 59.94Hz
ThinkPad の VGAポート、miniDPポート、 USB to HDMIx2 ディスプレイアダプタのうちの1ポートは空いています。それぞれ、VGA-1、DP-1、DVI-I-2-2という名前です。
使っているポートは内蔵LCDが LVDS-1 、 HDMI 入力付テレビがつながっているUSB to HDMIx2 アダプタのうちの1つのポートは DVI-I-1-1 です。
「Ubuntu で 4K Display @ThinkPad X230(Intel HD 4000 Graphics)」
https://qiita.com/nanbuwks/items/dc26353486df80660e1f
で4Kディスプレイの永続化設定を入れているのでHDMI-1に設定が余計に付いています。
$ 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
VGA-1にモードを追加し、外部ディスプレイの左側へ出力します。
$ xrandr --addmode VGA-1 "1920x1080_60.00"
$ xrandr --output VGA-1 --mode 1920x1080_60.00 --left-of DVI-I-1-1
この時点で、ディスプレイの設定画面には出ていませんが
ディスプレイアレイ内部の描画はこのようになっています。なお、この図ではきれいに描画できているように見えますが実はVGA-1の内部はぐちゃぐちゃになっています(後述)。
vncをインストールし、vncサーバを起動します。ディスプレイアレイ内部の描画の左上から1920x1080だけを切り出して配信します。
$ sudo apt install x11vnc
$ x11vnc -clip 1920x1080+0+0
Windowsマシンでは、UltraVNCを使ってみました。
接続すると・・・ウィンドウが移動できるように見えますが実際に移動するととんでもないことになってしまいました。ウィンドウが定位せず、残像が暴れます。
ウィンドウが定位しない問題は、画面端へのスナップという悪の機能が悪いことをしているようです。
window snapping off で検索して、以下のようにして切りました。
$ gsettings set org.gnome.mutter edge-tiling false
残像が残るだけならまだいいのですが、残像がずっと描画し続けます。これについては、アニメーション効果が悪いのかな・・・?しかしながら
$ gsettings set org.gnome.desktop.interface enable-animations false
とてみましたが効果はありませんでした。
ウィンドウをVGA-1内に最大化すると残像はごまかせそうです。最大化ボタンが効かないので手作業で最大サイズに調整しました。
残像が暴れるのは背景があるところだけだったので、適当にChromeとかを背景においてごまかしました。
背景を隠す自動化はこちら
「XWindow の GUI アプリを CUI で操作」
https://qiita.com/nanbuwks/items/80171364434bc86170fc
クアッドディスプレイへ
調子に乗ってもう一台も設定しました。
$ xrandr --addmode DVI-I-2-2 "1920x1080_60.00"
$ xrandr --output DVI-I-2-2 --mode 1920x1080_60.00 --right-of DVI-I-1-1
$ x11vnc -clip 1920x1080+3280+0 -rfbport 5901
問題点
スクリーンキャプチャが取れない
Print Screen では 本物のディスプレイしか取れないので、GIMPで取るようにします。
Wineアプリが変
Wine-5.2を使ってますがマルチディスプレイに対応していないようです。それもどういうわけか一番左のVGA-1でしか使えません。
WineアプリとしてKindleを使っていますが画面横幅が1360に制限されました。
また、WeChatでは操作ができなくなったりします。
キーボードが変
キーボードリピートが効かなくなる時があります。設定画面のアクセスビリティでタイミングを変更すると使えるようになります。
良い所
Windowsは背景で動いているので VNCの画面の裏でBGMとか流しておくのが、意外とよい感じ。
その後の調査
xrandr での出力を見ると VGA-1/DP-1/DP-2/DP-3/HDMI-1/HDMI-2/HDMI-3 が含まれているけれども同時に使えるのは1つのみ。
X230の本体にはVGAとDisplayPortがついているが排他使用。ドックのVGAやDisplayPortも含めても同時に1つしか使えないことに由来しているようだ。
HDMIはDisplayPortを変換して使う時のものかな?
面白いことに DVI-I-1-1 および DVI-I-2-2 はUSBビデオアダプタのものだけれどもUSBビデオアダプタを外していてもxrandrからは見えるのでUSBビデオアダプタを刺していなくても空きポートとしてxrandrで操作してVNCでマルチディスプレイ化できる。
xrandrの出力には今まで接続したディスプレイアダプタが記憶されているようだ。
しかしながら物理にひっぱられるのはあれなので仮想ディスプレイポートを試してみた。
$ sudo vim /usr/share/X11/xorg.conf.d/20-intel.conf
Section "Device"
Identifier "intelgpu0"
Driver "intel"
Option "VirtualHeads" "2"
EndSection
としてみる。しかしこれで再起動したらUSBビデオアダプタが機能しなくなった。内蔵ディスプレイしか認識していない。xrandrの結果は以下の通り。
$ xrandr
Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767
LVDS1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 280mm x 160mm
1366x768 60.00*+
1360x768 59.96
1280x720 59.86 60.00 59.74
1024x768 60.00
1024x576 60.00 59.90 59.82
960x540 60.00 59.63 59.82
800x600 60.32 56.25
864x486 60.00 59.92 59.57
640x480 59.94
720x405 59.51 60.00 58.99
680x384 60.00
640x360 59.84 59.32 60.00
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
VIRTUAL2 disconnected (normal left inverted right x axis y axis)
2560x1440_30.00 (0x129) 146.250MHz -HSync +VSync
h: width 2560 start 2680 end 2944 total 3328 skew 0 clock 43.95KHz
v: height 1440 start 1443 end 1448 total 1468 clock 29.94Hz
3840x2160 (0x12a) 210.620MHz +HSync -VSync
h: width 3840 start 3888 end 3920 total 4000 skew 0 clock 52.66KHz
v: height 2160 start 2183 end 2188 total 2194 clock 24.00Hz
はて?
明日からがんばる
今回は、使っていないビデオアダプターヘッドを使ったが、仮想ビデオドライバーを使うほうがスマート。これを読んで明日(来週? 来月? 来年? 来生?)がんばる。
http://rarak.jp/16022