1. 今回は設定編
前回は代表的な実現方法と、それぞれの特徴について説明した。今回はXサーバ「VcXsrv」での設定方法や使い方を説明する。
1-2. 作業の流れ
設定手順は以下の通り。1から2がLinuxサーバでの手順で、3から6がWindowsクライアントの手順である。今回はPuTTYを使用するが、Tera Termでも同じことができる。
Linuxサーバで実施:
1. X11フォワーディングに必要なライブラリをLinuxにインストールする
2. X11フォワーディングするようにsshdを設定する
Windowsクライアントで実施:
3. VcXsrvをWindowsクライアントにインストールする
4. VcXsrvを起動する
5. sshクライアント(PuTTY)をX11フォワーディング用に設定する
6. sshクライアント(PuTTY)でLinuxサーバに接続する
1-3. 使用環境
今回は以下の環境を使用している。またOracle Cloud Infrastructureを使用しているが、他のクラウドでもほとんど同じはずだ。
- RHEL9および互換ディストリビューション
- RHEL8および互換ディストリビューション
- RHEL7および互換ディストリビューション
- RHEL6および互換ディストリビューション
- PuTTY 0.71(他のバージョンやごった煮版などでも同じ)
1-4. 前提条件
- WindowsクライアントにPuTTYがインストール済みで、Linuxサーバに接続可能な状態になっていること。Tera Termについては説明しないので、他の記事を参考にしてほしい。
2. Linuxサーバにライブラリをインストールする
X11フォワーディング(画面転送)を使用するときは、Linuxサーバに完全なデスクトップ環境は不要である。しかし必要最小限のライブラリ群は必要になる。
2-1. Linuxサーバに必要なライブラリ
X11フォワーディングに必要なライブラリは以下の通り。一般にはxorg-x11-xauth
だけで十分だ。しかし以前使ったGUIツール(WebLogicのインストーラ)ではライブラリが不足していて起動できないことがあった。
-
xorg-x11-xauth
(xauth
) libXtst
libXrender
たいした大きさでもないし、不足していたときのトラブルシュートが意外と大変なので、念のためlibXtst
とlibXrender
を追加している。
2-2. ライブラリをインストールする
以下のコマンドでインストールする。
注目して欲しいのが、末尾のInstalled size
である。GNOMEデスクトップのインストールには数百MBytesのパッケージが必要になるが、今回のライブラリは5MBytesにも満たない。
# yum install xauth libXtst libXrender -y
---以下コマンドの実行結果---
★中略★
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
libXrender x86_64 0.9.10-1.el7 ol7_latest 25 k
libXtst x86_64 1.2.3-1.el7 ol7_latest 20 k
xorg-x11-xauth x86_64 1:1.0.9-1.el7 ol7_latest 29 k
Installing for dependencies:
libICE x86_64 1.0.9-9.el7 ol7_latest 66 k
libSM x86_64 1.2.2-2.el7 ol7_latest 39 k
libX11 x86_64 1.6.5-2.el7 ol7_latest 606 k
libX11-common noarch 1.6.5-2.el7 ol7_latest 163 k
libXau x86_64 1.0.8-2.1.el7 ol7_latest 28 k
libXext x86_64 1.3.3-3.el7 ol7_latest 38 k
libXi x86_64 1.7.9-1.el7 ol7_latest 40 k
libXmu x86_64 1.1.2-2.el7 ol7_latest 70 k
libXt x86_64 1.1.5-3.el7 ol7_latest 172 k
libxcb x86_64 1.13-1.el7 ol7_latest 213 k
Transaction Summary
================================================================================
Install 3 Packages (+10 Dependent packages)
Total download size: 1.5 M
Installed size: 4.6 M ★とてもサイズが小さい
★以下省略
2-3. 動作確認用のGUIアプリケーションをインストールする
動作確認用のGUIアプリケーションにはxeyes
を使用するが、Linuxディストリビューションのバージョンによって状況が異なっている。そのため利用しているバージョンによってインストール方法が異なる。
- RHEL6/RHEL7系では
xeyes
は標準リポジトリに含まれている - RHEL8系では
xeyes
はcodeready_builder
リポジトリに含まれている - RHEL9系では
xeyes
は廃止されているので、xtermなどを使用する
2-3-1. RHEL6/RHEL7系の場合
動作確認用のGUIアプリケーションxeyes
をインストールする。xeyes
はxorg-x11-apps
に含まれるプログラムなので次のように実行する。
# yum install xorg-x11-apps -y
2-3-2. RHEL8系の場合
xeyes
はcodeready_builder
リポジトリに含まれているので次のように実行する。ただし、リポジトリ名はディストリビューションによって異なるので、適切なリポジトリに変更すること。
# yum --enablerepo=codeready_builder install xorg-x11-apps -y
ディストリビューション | リポジトリ名 |
---|---|
RHEL8 | codeready_builder |
Oracle Linux 8 | ol8_codeready_builder |
AlmaLinux 8/ RockyLinux 8 / CentOS Stream 8 | powertools |
2-3-3. RHEL9系の場合
RHEL9系ではxeyes
は廃止されているのでxterm
などを使用する。
# yum install xterm -y
3. Linuxサーバのsshdを設定する
X11フォワーディングできるようにsshdを設定する。設定値を確認して、設定が不足していれば変更する。
3-1. X11フォワーディングで設定するパラメータ
確認するパラメータは以下の通り。
-
X11Forwarding yes
であること -
X11UseLocalhost
はコメントアウトされているかno
であること -
AddressFamily inet
であること(IPv6が無効化されている環境のみ)。それ以外はデフォルトのany
でも問題ない
それぞれのパラメータの意味はman sshd_config
で確認できる。
3-2. 現在のsshdパラメータを確認する
sshd
の設定ファイル/etc/ssh/sshd_config
に設定されている値を確認する。
# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config
---以下コマンドの実行結果---
#AddressFamily any
#X11Forwarding no
X11Forwarding yes
#X11UseLocalhost yes
# X11Forwarding no
3-3. sshdのパラメータを変更する
どの値を変更するかは各自の状況に応じて判断して欲しい。当然エディタで変更してもかまわない。今回はAddressFamily
をany
からinet
に変更する。
# sed -i -e "s/^\#AddressFamily any/AddressFamily inet/" /etc/ssh/sshd_config
今回一番ハマったのがAddressFamily
の値である。デフォルトのany
でも問題ないはずだが、Oracle Cloud Infrastructure Computeの2019年5月OSイメージでは、これが原因で接続できなかった。
半年以上前に以下のホワイトペーパー通りに試したときには問題なかった気がするのだが…。Oracle Cloud Infrastructureを使用していなくても、IPv6が無効化されているときは変更した方がいいかもしれない。
今回は↓のエントリを参考にさせていただきました。ora_gonsuke777さん、ありがとうございます。
IPv6が無効化の確認方法:
IPv6が無効化されていることはip
コマンドで判別できる。以下のようにinet
で始まる行だけで、inet6
で始まる行がないときはIPv6が無効化されている可能性がある。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
link/ether 02:00:17:00:13:0c brd ff:ff:ff:ff:ff:ff
inet 10.5.0.2/24 brd 10.5.0.255 scope global dynamic ens3
valid_lft 81375sec preferred_lft 81375sec
3-4. パラメータが正しく設定されていることを確認する
最後にもう一度、正しく設定されていることを確認する。
# grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config
---以下コマンドの実行結果---
AddressFamily inet
X11Forwarding yes
#X11UseLocalhost yes
# X11Forwarding no
3-5. sshdのパラメータを有効化する
パラメータを有効にするためにsshd
を再起動する。
RHEL7/8/9系の場合
# systemctl restart sshd
RHEL6系の場合
# service sshd restart
これでLinuxサーバ側の作業はおわりだ。次にWindowsクライアント側で設定する。
3-6. まとめ版(7/8/9系Linux OS用)
コピペ用のまとめ版。使用環境よって/etc/ssh/sshd_configの内容は異なるので、grepの結果を確認すること。
# 必要ライブラリのインストール
yum install xauth libXtst libXrender -y
# GUIツールのインストール(使用ディストリビューションに応じて選択)
# ---
# RHEL6/7系
yum install xorg-x11-apps -y
# ---
# AlmaLinux8/RockyLinux8/CentOS Stream8
yum --enablerepo=powertools install xorg-x11-apps -y
# Oracle Linux 8
yum --enablerepo=ol8_codeready_builder install xorg-x11-apps -y
# RHEL8
yum --enablerepo=codeready_builder install xorg-x11-apps -y
# ---
# RHEL9系
yum install xterm
# AddressFamilyの変更(環境に応じて)
sed -i -e "s/^\#AddressFamily any/AddressFamily inet/" /etc/ssh/sshd_config
# 設定値の確認。X11UseLocalhostが
grep -e X11UseLocalhost -e X11Forwarding -e AddressFamily /etc/ssh/sshd_config
# sshd再起動
systemctl restart sshd
4. VcXsrvをインストールする
ここからはWindowsクライアントでの作業になる。
-
VcXsrv公式サイト(SourceForge)からインストーラをダウンロードして実行する。これ以降は基本的にデフォルトのままでよい。
5. VcXsrvを起動する
X11フォワーディングで画面を転送できるようにVcXsrvを起動する。
-
Windowsデスクトップの
XLaunch
アイコンをクリックしてVcXsrvを起動する。
なおVcXsrvとXmingの両方をインストールしているときは、アイコンも名前も同じで区別しづらい。名前を変えたほうがいいだろう。 -
[Disable access control] をチェックしてから [次へ] をクリックする。今回の検証環境では必須ではないが、チェックが必要な環境もある。
-
起動に成功するとデスクトップ右下のタスクバーにアイコンが表示される。これ以降、Windowsをシャットダウンしたり、VcXsrvを明示的に停止したりしない限り、起動したままになっている。
6. PuTTYを設定する
PuTTYはLinuxサーバに接続する設定があることを前提に、それをカスタマイズする。
-
PuTTYを起動して、使用する接続情報をロードする。
-
最後に左側ツリーの[Session]に戻り、変更した設定を保存する。これを忘れると変更が消えるので注意すること。
-
これで設定は終了である。次から実際にLinuxサーバに接続する。
7. Linuxサーバに接続する(基本編)
まずは基本編として、踏み台なしでLinuxサーバに接続する。
-
前のステップで保存した設定を利用し、PuTTYでLinuxサーバに接続する。
-
DISPLAY
環境変数が設定されていることを確認する。sshdとPuTTYを正しく設定していれば、自動的に設定されているはずである。
$ echo $DISPLAY
localhost:10.0
4.動作確認のためxeyes
を起動する。デスクトップに以下の目玉が表示されれば成功している。
$ xeyes &
注意:ログイン後にsuするときは追加作業が必要
SSHログイン後にsu
してからGUIアプリを起動すると、次のエラーが出て実行できない。
X11 connection rejected because of wrong authentication.
Error: Can't open display: localhost:10.0
これは~/.Xauthorityの認証クッキーが他のユーザーに無いことが原因だ。対応方法は以下のとおり。
- SSHログインしたユーザーでクッキーを確認する(今回の場合はopc)。複数表示されたときは自ホスト名でディスプレイ番号:10が該当のクッキーである。
$ xauth list
<hostname2>:1 MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXX(32桁の英数字)
<hostname1>/unix:1 MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXX(32桁の英数字)
<hostname1>/unix:10 MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXX(32桁の英数字)★これ
2.目的のユーザーにsuする。-i
は、suしたユーザーの.bashrcや.bash_profileを読み込むオプション。
$ sudo -i su - oracle
3.xauth add
コマンドでクッキーを追加する。このとき先頭部分からすべて指定する。
$ xauth add <hostname1>/unix:10 MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXX(32桁の英数字)
4.ディスプレイ番号を設定したら準備完了。
$ export DISPLAY=localhost:10.0
5.目的のGUIアプリケーションを実行する。
$ xeyes &
こちらのブログに教えてもらいました。
8. 次回は?
事前にsshで接続できていれば、驚くほど簡単な作業だったかもしれない。次回は踏み台経由の接続方法を説明する。