WindowsにXサーバーをインストールしてLinuxのGUIをリモート操作する

その他(win)
Windowsからリモート接続してもLinuxのGUIを操作したい。その手順は?

この疑問に回答します。

Windows 10の「WSL(Windows Subsystem for Linux)」が使いやすくなってきました。SSHのコンソールによるリモート接続(CUI)することが多いLinuxでも、GUIで操作した時があります。WindowsにXサーバーを動作させるGUI環境が整いますので、手順をまとめました。

Xサーバーとは

昔からUNIX環境を使い続けて慣れている方には、疑問を持たないと思うのですがWindows環境からスタートした方には難しいです。概念さえ理解すればスグに納得することができます。

X システムとは「X Window System」のことです。昔はWindowsもUNIXもGUIはへなちょこでした。そもそものOSの造りの違い(マルチユーザーとシングルユーザー)が大きいですが、思想の違いもありWindowsとUNIXで全く異なった発展を行っています。(今は、大体同じ)

X システムの特徴は、Xプロトコルという通信を利用してGUI環境を実現しています。つまり、Xプロトコルはクライアントサーバモデルです。

サーバーとクライアントは同じハードウェアになくても動作し、Xサーバーを実現するソフトウェア、機種やアーキテクチャーなどに依存しません。

つまり、

プログラムの「実行」と「画面表示」を別の環境で実現できる

ってことです。

Windowsのように接続先にリモートでアクセスするのではなく、Unixは接続先のプログラムを手元に持って来ることが可能です。

  • WindowsのGUIは、リモート接続して表示(向こうに行って操作する)
  • Unix(linux)のGUIは、目の前の端末で表示(手元で操作)

Windowsで動作するXサーバー

Windowsで動作するXサーバーは色々あるのですが、VcXsrvが利用しやすいです。昔は Cygwin しかなく使い難かった。

VcXsrvのインストール

VcXsrv の公式サイトからダウンロードします。

VcXsrv の公式サイト
VcXsrv の公式サイト

ダウンロードしたインストーラーをダブルクリックして起動し、インストールオプションやインストール先などを指定します。

VcXsrvのインストール(1)
VcXsrvのインストール(1)

デフォルトのままで構いません。

VcXsrvのインストール(2)
VcXsrvのインストール(2)

デフォルトのままで構いません。

VcXsrvのインストール(3)
VcXsrvのインストール(3)

インストールは特に悩む必要もなく完了します。

VcXsrvの初期設定

VcXsrvを起動し初期設定を行います。

VcXsrvのアイコン

VcXsrvの初期設定(1)
VcXsrvの初期設定(1)

VcXsrvのアイコンはこんな感じです。

VcXsrvの初期設定(2)
VcXsrvの初期設定(2)

 

VcXsrvの初期設定画面

VcXsrvを起動すると、Windowの選択画面が表示されます。

VcXsrvの初期設定(3)
VcXsrvの初期設定(3)

VcXsrvの画面表示「Multiple Windows」を選択します。後から変更が可能ですが、変更することは無いと思います。

VcXsrvの初期設定(4)
VcXsrvの初期設定(4)

VcXsrvの起動方法を選択します。

VcXsrvの初期設定(5)
VcXsrvの初期設定(5)

デフォルトのままで構いません。

VcXsrvの初期設定(6)
VcXsrvの初期設定(6)

無事に設定が完了しました。

VcXsrv 外部からのアクセス許可

Xサーバーの初期設定は外部アクセスを許可していません。リモート接続先のIPを登録してアクセス許可を与えます。

設定ファイルを編集してください。

C:\Program Files\VcXsrv\X0.hosts

X0.hosts

アクセスを許すホスト名またはIPアドレスを書込みます。

こんな感じで記述します。

localhost
hostA
192.168.1.1

Xサーバーを利用してリモート先のGUIを持って来る

DISPLAY環境変数を設定

Linuxは、設定を行わない限りプログラムの実行表示を同じ端末で行います。画面表示を別の端末に表示するため環境変数を変更します。

記述方法
DISPLAY=<ホスト名/IPアドレス>:<ディスプレイ番号>.<スクリーン番号>

接続先としてはホスト名やFQDN名、IPアドレスなどを指定ができます。

ディスプレイ番号やスクリーン番号は、複数画面がある場合に表示先を指定するです。昔の名残です。今は使う機会が少ないと思いますので「:0.0」としてデフォルト画面が表示対象にします。

接続先のコンソールからコマンドを実行します。

bashの場合

$export DISPLAY=192.168.1.1:0.0

これでディスプレイ表示を指定のホストに変更することが出来ました。

プログラムの実行

接続先のコンソールからプログラムを実行し、操作している自分もマシンに表示します。

昔からあるプログラム(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 の後に付けている「&」はバックグラウンド実行という意味です。&を付けて実行するとコンソールのプロンプトが戻ってきます。プログラムの終了を待たずに次のコマンドを実行することができます。

Windows上にLinuxのGUIを表示
Windows上にLinuxのGUIを表示

Xサーバーの出力エラー

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サーバーのアクセス許可与えられていません。VcXsrvの設定ファイル「X0.hosts」を修正しアクセス許可を与えてください。

まとめ

Linuxで動作するプログラムはXサーバーを介して表示します。つまり、実行と表示を別のマシンで実行することが可能です。この特性を生かして、Windows上にLinuxのGUIを簡単に表示することができます。

 

以上、「WindowsにXサーバーをインストールしてLinuxのGUIをリモート操作する」という記事でした。