この疑問に回答します。
Windows 10の「WSL(Windows Subsystem for Linux)」が使いやすくなってきました。SSHのコンソールによるリモート接続(CUI)することが多いLinuxでも、GUIで操作した時があります。WindowsにXサーバー(Windows X Server)を動作させると、LinuxのGUIを表示させることができます。手順をまとめました。
Xサーバー(Windows X Server)とは
昔からUNIX環境を使い続けて慣れている方には、疑問を持たないと思うのですがWindows環境からスタートした方には難しいです。概念さえ理解すればスグに納得することができます。
X システムとは「X Window System」のことです。X Serverと言ったりもします。昔はWindowsもUNIXもGUIはへなちょこでした。そもそものOSの造りの違い(マルチユーザーとシングルユーザー)が大きいですが、GUIは思想の違いもありWindowsとUNIXで全く異なった発展を行っています。(今のGUIは、WindowsもLinuxも大体同じです。)
X システムの特徴は、Xプロトコルという通信を利用してGUI環境を実現しています。つまり、Xプロトコルはクライアントサーバモデルです。
サーバーとクライアントは同じハードウェアじゃなくても動作します。つまり、Xサーバーを実現するソフトウェアは、機種、アーキテクチャーや場所などに依存しません。
つまり、
プログラムの「実行」と「画面表示」を別の環境で実現できる
ってことです。
Windowsのように接続先にリモートでアクセスするのではなく、Unixは接続先のプログラムを手元に持って来ることが可能です。
- WindowsのGUIは、リモート接続して表示(接続先で操作する)
- Unix(linux)のGUIは、目の前の端末で表示(接続元で操作する)
Windowsで動作するXサーバー(VcXsrv)
Windowsで動作するXサーバー(X Server)は色々あるのですが、VcXsrv が利用しやすいです。昔は Cygwin しかなく使い難かった。
GUIさえ表示できれば、問題解決と考えるのであればVcXsrv を利用してください。一択です。
他と比べる必要はありません。なぜならVcXsrv は、インストール・設定がとても簡単だからです。
VcXsrv(Xサーバー)のインストール
VcXsrv の公式サイトからダウンロードします。
ダウンロードしたインストーラーをダブルクリックして起動し、インストールオプションやインストール先などを指定します。
デフォルトのままで構いません。
デフォルトのままで構いません。
インストールは特に悩む必要もなく完了します。
VcXsrv(Xサーバー)の初期設定
VcXsrvを起動し初期設定を行います。
VcXsrvのアイコン
VcXsrvのアイコンはこんな感じです。
VcXsrvの初期設定画面(起動オプション)
VcXsrvの起動オプションの説明を行います。
VcXsrvを起動すると、Windowの選択画面が表示されます。
デフォルトのままで構いません。VcXsrvの画面表示「Multiple Windows」を選択します。後から変更が可能です。
デフォルトのままで構いません。
「Disable access control」にチェックを入れます。チェックを入れないと、外部からのXプロトコルを拒否します。
チェックを入れることによりアクセスコントロールが無効化されて、外部からのXプロトコルを受け入れることができます。
外部からのXプロトコルを受け入れた結果、手元PCでリモート先のGUIアプリが表示出来るようになります。
チェックを入れなかった場合は、後述「外部からのアクセス許可」の設定が必要です。
どちらで設定しても構いません。チェックを入れるだけなの「Disable access control」での設定をお薦めします。
先ほどから進めた設定を保存することができます。
無事に設定が完了しました。
VcXsrv(Xサーバー) の自動起動
初期設定だとOSを立ち上げる度に、VcXsrvのアイコンをクリックしプログラムを起動させる必要があります。VcXsrvを起動させるとウィザードが立ち上がり、毎回設定を行う必要があります。
ポチポチするだけで難しくはないですが毎回だと面倒臭いです。頻繁にxウィンドウを利用する場合は、OSを起動するとVcXsrvが自動起動する設定を組み込むと便利です。
VcXsrv(Xサーバー) 外部からのアクセス許可
初期設定にて「Disable access control」にチェックを入れた場合は、下記設定は不要です。
VcXsrvは、オプション設定で外部からのアクセス制御ができます。
これからはXサーバーの知識です。
元々、XサーバーはUNIX系OSで利用されおり、Windowsに移植されました。UNIX系OSで利用するときに設定する手順です。作法として覚えても損はありません。別のXサーバーを利用する機会があれば役にたちます。
Xサーバーの初期設定は外部アクセスを許可していません。リモート接続先のIPを登録してアクセス許可を与えます。
設定ファイルを編集してください。
C:\Program Files\VcXsrv\X0.hosts
アクセスを許すホスト名またはIPアドレスを書込みます。
こんな感じで記述します。
localhost hostA 192.168.1.1
色々試しましたが、残念ながらネットワーク指定は出来ないようです。対象のホスト名かIPアドレスを一つずつ登録しましょう。
Xサーバー(VcXsrv)を利用してリモート先のGUIを持って来る
DISPLAY環境変数を設定
Linuxは、設定を行わない限りプログラムの実行と表示を同じ端末で行います。画面表示を別の端末に表示するため環境変数を変更します。
記述方法 DISPLAY=<ホスト名/IPアドレス>:<ディスプレイ番号>.<スクリーン番号>
接続先としてはホスト名やFQDN名、IPアドレスなどを指定ができます。
ディスプレイ番号やスクリーン番号は、「複数画面がある場合に表示先を指定する」設定です。これは昔の名残です。
この仕組みは、仮想デスクトップと言います。仮想で複数のディスプレイを切替て利用する場合に利用します。Windowsを利用している場合は、使う機会が少ないと思いますのでデフォルト画面を意味する「:0.0」を表示対象にします。
設定は、接続先のコンソールからコマンドを実行します。
bashの場合
$ export DISPLAY=192.168.1.1(利用PCのIP):0.0
これでディスプレイ表示を指定のホストに変更することが出来ました。
WSL(Windows Subsystem for Linux)の場合
WSLの場合は、下記の記事を確認ください。WSLに特化した設定方法を記述した記事があります。
プログラムの実行
接続先のコンソールからプログラムを実行し、操作している自分もマシンに表示します。
昔からあるプログラム(xeyes や xclock)を実行しテストします。もしプログラムが入っていないようであればインストールしてください。
# xeyes が入っているパッケージを探します。 $ yum provides xeyes 読み込んだプラグイン:fastestmirror Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Determining fastest mirrors * base: ty1.mirror.newmediaexpress.com * epel: nrt.edge.kernel.org * extras: ty1.mirror.newmediaexpress.com * updates: ty1.mirror.newmediaexpress.com xorg-x11-apps-7.7-7.el7.x86_64 : X.Org X11 applications リポジトリー : base 一致 : Provides : xeyes # 対象のパッケージをインストールします $ sudo yum install xorg-x11-apps
xeyesはマウスのポインターの位置を目線で指し示すアプリで、xclockはアナログ時計です。
プログラムの実行
$ xeyes & $ xclock &
xeyes や xclock の後に付けている「&」はバックグラウンド実行という意味です。&を付けて実行するとコンソールのプロンプトが戻ってきます。プログラムの終了を待たずに次のコマンドを実行することができます。
もう少し実践的な使い方を紹介します。
Google ChromeをLinuxにインストールし、WindowsにGUIを表示させる記事がありますので参考にしてください。。
複数端末、ブラウザ利用するならパスワード管理アプリをインストールするとことをおススメします。
Xサーバー(VcXsrv)の出力エラー
Error: Can’t open display:
表示先が無い場合に表示されます。DISPLAY変数の変更忘れです。
$export DISPLAY=<ホスト名/IPアドレス>:0.0
DISPLAY変数の変更を実行してください。
Error: Can’t open display: IPアドレス:0.0
表示先のXサーバーが未実行の場合に表示されます。
- 指定先が間違ってないか確認
- Xサーバーの VcXsrv を起動
Authorization required, but no authorization protocol specified
Xサーバーのアクセス許可与えられていません。解決方法は2通りあります。
- VcXsrvの設定ファイル「X0.hosts」を修正しアクセス許可を与えてください
- 起動オプション「Disable access control」にチェックを入れてください
Unable to open X display
Xサーバーのアクセス許可与えられていません。解決方法は2通りあります。
- VcXsrvの設定ファイル「X0.hosts」を修正しアクセス許可を与えてください
- 起動オプション「Disable access control」にチェックを入れてください
まとめ
Linuxで動作するプログラムはXサーバーを介して表示します。つまり、実行と表示を別のマシンで実行することが可能です。この特性を生かして、Windows上にLinuxのGUIを簡単に表示することができます。
以上、「WindowsにXサーバーをインストールしてLinuxのGUIをリモート操作する」という記事でした。