WindowsでリモートのLinuxのGUIアプリを表示させる-Xサーバ VcXsrv

WindowsからLinuxを使用する為のソフト Xサーバです。
これまで、Xming(ここ)、Cygwin/X(ここここ)を紹介しました。
今回は、フリーソフトの VcXsrv です。Xming、Cygwin/X よりも性能が良かったです。

下の画面はリモートホストの Ubuntuの xeyesとemacsを Windowsの画面に表示していますが、このようなことが出来ます。
画像



インストール


下の個所からダウンロード・実行します。
VcXsrv Windows X Server download | SourceForge.net

「Download」ボタンでダウンロードできるのは 64bit版です。
32bit版が必要な場合は、https://sourceforge.net/projects/vcxsrv/files/vcxsrv/ から最新バージョンを選択し、vcxsrv.XX.XX.XX.XX.installer.exe 形式になっているファイルをダウンロード・実行してください。


VcXsrvのインストーラを実行すると、下記画面になります。
「Next」ボタンを押してください。
画像



「Install」ボタンを押してください。
画像



「Close」ボタンを押してインストール完了です。
画像




設定


Xサーバで日本語入力を行いたい場合は、下記記事に沿ってリモートサーバの設定を行ってください。

Windows用Xサーバ での日本語入力設定 パソコン鳥のブログ/ウェブリブログ



実行


スタートメニューやデスクトップの VcXsrvアイコンから起動します。

起動すると、タスクトレイに Xアイコンが表示されます。
画像


その後、ターミナルエミュレーターでサーバに接続してください。
Tera Term や PuTTY から実行する場合の設定は、下記の記事を参照して下さい。

ターミナルエミュレーター PuTTY(日本語版)
WindowsでリモートのLinuxのGUIアプリを表示させる-Xサーバ Xming の「Tera Termの設定」



他のXサーバとの性能比較


Xming、Cygwin/X、VcXsrv の性能を測定しました。

Xサーバ側は Windows10 64bit、クライアントは Ubuntu14 64bitで、クライアントで x11perf を下記のように実行して測定しました。
Xサーバが Xming、Cygwin/X、VcXsrv の場合それぞれで、下記の各行を実行しました。


$ x11perf -repeat 1 -rect500 -f14text16 -copypixwin500 -putimage500 > xming.x11perf.dat
$ x11perf -repeat 5 -rect500 -f14text16 -copypixwin500 -putimage500 > cygwin.x11perf.dat
$ x11perf -repeat 5 -rect500 -f14text16 -copypixwin500 -putimage500 > vcxsrv.x11perf.dat



結果は以下となります。
1が Xming、2が Cygwin版Xサーバ、3が VcXsrv のスコアです。
値が大きいほど良い結果で、VcXsrvが最も性能が良かったです。


$ x11perfcomp xming.x11perf.dat cygwin.x11perf.dat vcxsrv.x11perf.dat
1: xming.x11perf.dat
2: cygwin.x11perf.dat
3: vcxsrv.x11perf.dat

1 2 3 Operation
-------- -------- -------- ---------
21400.0 24000.0 26200.0 500x500 rectangle
1710000.0 1030000.0 2250000.0 Char16 in 40-char line (k14)
13400.0 15000.0 16300.0 Copy 500x500 from pixmap to window
42.9 42.8 43.2 PutImage 500x500 square



以上、Xサーバ VcXsrv についてでした。







この記事へのコメント

通りすがりの者
2018年06月23日 17:48
こんにちは。

この記事に触発されて、最近のXサーバーの性能はどれほど改善されたのか気になったので、自分でやってみました。
どのXサーバーも頑張っているんじゃないかと思います。

【環境】
Xサーバー側:Windows 10 Pro ver. 1803
Xクライアント側:WSL Ubuntu (16.04.4 LTS)
Xming:7.7.0.32
VcXsrv:1.20.0.0
Cygwin:1.20.0-2

【結果】
$ x11perfcomp xming.x11perf.dat cygwin.x11perf.dat vcxsrv.x11perf.dat
1: xming.x11perf.dat
2: cygwin.x11perf.dat
3: vcxsrv.x11perf.dat

1 2 3 Operation
-------- -------- -------- ---------
22700.0 23900.0 22200.0 500x500 rectangle
1680000.0 1830000.0 1850000.0 Char16 in 40-char line (k14)
12200.0 12900.0 11800.0 Copy 500x500 from pixmap to window
552.0 491.0 387.0 PutImage 500x500 square
2018年06月25日 18:37
コメントありがとうございます。
最新の性能測定、参考になりました!
時々チェックした方がいいですね。
教えて下さい!
2018年08月15日 21:01
Windows上でVcXsrvを起動してタスクトレイに表示された後、
「ターミナルエミュレーターでサーバに接続」とありますが、どこにどう接続するのかもう少し詳しく教えていただけますか?

TeraTermでリモートのlinuxへssh接続してコマンドを入力しても、Linux側のディスプレイにGUIアプリが表示されてしまいます。
TeraTermで接続後 export DISPLAY=:0.0 等の設定も試したのですが変化なし。

それとも上記で言う「サーバに接続」とはWindows上のVcXsrvのことでしょうか?
だとしたらTeraTermでどのように接続するのかがよくわかりません。

ググったのですが、他の記事ではどれもWSLを使う前提になっているのですが、これも必要なのでしょうか?
なお、TeraTermのSSH転送設定でリモートのXアプリをローカルに表示する設定はしてあります。
またVcXsevのタスクトレイアイコンにマウスオーバーすると常にClientが0となっています。

よろしくお願い致します。
2018年08月16日 20:24
TeraTermは、本記事中の通り、
 WindowsでリモートのLinuxのGUIアプリを表示させる-Xサーバ Xming パソコン鳥のブログ/ウェブリブログ
 https://vogel.at.webry.info/201310/article_6.html
の設定での接続でもですか?
「Linux側のディスプレイにGUIアプリが表示されてしまいます。」とのことですが、Linux端末上でログイン画面が出ている場合では、TeraTermの画面にはどのような表示が出ていますでしょうか。
なお、WSLは必要ありません。(Windows7でも本記事の内容で、動作OKです)
教えて下さい!
2018年08月17日 16:56
お返事ありがとうございます!

はい。
ご指摘のリンク先(article_6)のTeraTermの設定をした上でこのような状態になります。

リンク先の記事でも、「この状態(Xmingを先に起動した状態)で、Tera Term等のターミナルエミュレーターを起動して、コマンドでGUIアプリを実行して下さい。」と書かれていて、TeraTermの起動後に関しての具体的な説明がなかったので、とりあえずリモートのLinuxにSSHで接続して試した結果、Linux上の物理モニターにアプリが起動するという状態です。

そもそも勝手な憶測で上記の方法で普通にリナックスへ接続してますが、これは合っているのでしょうか? VcXsrvと完全に無関係にSSH接続されているだけに見えるのですが。。。TeraTermのSSH転送のところでポート転送は設定不要ですか?

VcXsrvのタスクトレイアイコンにマウスオーバーしても依然「0 clients」と表示されているので、Linux側のXがクライアントとして認識されていないのが問題のような気がします。

(字数制限のため連投します)
教えて下さい!
2018年08月17日 16:58
また、Linux側をログイン画面の状態(lightDM)にして試したところ、

TeraTermの上での出力は
------------------------
Unable to init server: Could not connect: 接続を拒否されました。
(thunar:14055): Gtk-WARNING **: 16:26:31.679: cannot open display:

------------------------
となりました。export DISPLAYを設定しても同様でした。

なお、Windows10 64bit と ArchLinux(xfce)のペアです。
お手数をお掛けして申し訳ありません。
よろしくお願い致します。
2018年08月17日 19:53
「Tera Term等のターミナルエミュレーターを起動して、コマンドでGUIアプリを実行して下さい。」は、「とりあえずリモートのLinuxにSSHで接続」の通りでOKです。

>VcXsrvと完全に無関係にSSH接続されているだけに見えるのですが。。。
SSHのコネクション経由で、リモートからクライアント(=Windows)のXサーバ(=VcXsrv)に接続されてきます。

>TeraTermのSSH転送のところでポート転送は設定不要ですか?
不要です。
2018年08月17日 19:56
>Unable to init server: Could not connect: 接続を拒否されました。
のエラーはすみません、わかりません。

>cannot open display:
は、
・TeraTermで「リモートの(X)アプリケーションをローカルのXサーバに表示する」でチェックが入っていない
・Linux側のDISPLAY変数が変
な場合に出ます。
こちらではUbuntu/CentOSを使っているので、ArchLinuxでは違うかも知れませんが・・
2018年08月17日 20:00
ちなみに、Ubuntu/CentOSではデフォルトで、「export DISPLAYを設定」する必要はありません。
Teratermで接続時点で、設定されています。

例えば、/etc/ssh/sshd_config に X11DisplayOffset 10 のような行がありますが、この X11DisplayOffset の値を
export DISPLAY="localhost:XX.0"
のXXの部分に置き換えた場合は、どうでしょうか?
教えて下さい!
2018年08月18日 17:31
解決出来ました!!

sshd_configの話を教えていただいて、いろいろと試すこと数時間。
Archlinuxの公式WikiにX11Forwardingに関しての詳細な説明があることを見つけて、
https://wiki.archlinux.jp/index.php/Secure_Shell

今回の肝は、公式リポジトリから xorg-xauth をインストールすることと、
/etc/ssh/sshd_configでデフォルトで"X11Forwarding no"となっているのを"yes"に
することでした。

その他、初めだけAddressFamilyをinetにしたりも必要なようでしたが、
一度ハンドシェイクが確立した後は、設定を外しても動作するのでよくわかりません。

またDISPLAYの値は、SSH接続時にsshd_config上で設定されている"X11DisplayOffset 10"の値に、exportしなくても自動でセットされました。
トレイアイコンにマウスオーバーで表示される:0.0とは違っていてもいいようです。

お手数おかけしました。
ありがとうございました。
2018年08月18日 20:45
解決できたとのことでよかったです。
X11Forwardingオプションでしたか。
確かに、大事な確認事項でした・・
最近のUbuntuとかはデフォルトでonだったので、頭に無かったです・・

この記事へのトラックバック