AzureのCentOS7.3でwrdpを使ったGUI環境を作ってみる
完全に手つかずでいましたが、そろそろ更新します。。ふぅ。
今回のお題はAuzre上のLinuxOSをGUIで操作できるようにしてみよう、というテーマです。CUI以外は邪道だー、コマンドラインなめんな、なんて声も軽く聞こえてきますが、まぁたまにはこういったものにも触れてみるのも面白いかなと。
では早速はじめますが、ゴールは以下の状態です。WindowsクライアントについているリモートデスクトップでRDP(3389/tcp)でアクセスし、CentOS内のウィンドウマネージャーを呼び出した、という状態です。
●事前準備
CentOS 7.3を1台、Azure環境で用意してください。
特に特別な設定は不要ですが、NetworkSecurityGroup(NSG)のみ、3389/tcpの
ポートを受け付ける設定(受信セキュリティ規則)を入れておいてください。
接続元であるWindowsクライアントのIPアドレスが固定の場合や、NATされた
アドレス帯として接続元が絞れる場合はNSGの設定で接続元を絞ると、より
セキュアかと思います。(ここではAnyにしています)
●注意事項
ディストリビューションが異なる環境や、バージョンが異なる場合はうまく動か
ない可能性があります。都度構築環境に合わせてググって補足してください。
RHELのBuggillaにもいくつか投稿されていますので結構闇に入る場合も多いです。
●開始
0)以下の手順は全てrootで実施します。
sudo su -
1)必要RPMの準備
※epel-releaseのrpm名はOSのバージョンによってURLが異なります。
rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
2)xrdp、tigervnc-server、GNOME Desktopグループ全てのインストール
※GNOME Desktopのインストールに20分ぐらい時間かかります。
yum install -y xrdp tigervnc-server
yum -y groupinstall "GNOME Desktop"
3)xrdpとxrdp-sesmanのSELinux ラベル付け
※ここが抜けるとsystemctl start xrdpが失敗するので注意。
chcon -t bin_t /usr/sbin/xrdp
chcon -t bin_t /usr/sbin/xrdp-sesman
4)xrdpの日本語設定
※やってもやらなくてよいです。お好みで。
cd /etc/xrdp
wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.inicp km-e0010411.ini km-0411.ini
cp km-e0010411.ini km-e0200411.ini
cp km-e0010411.ini km-e0210411.ini
vi startwm.sh
以下の場所に1行追加
#. /etc/environment
#export PATH=$PATH
#export LANG=$LANG
export LANG=ja_JP.UTF-8
5)xrdpの設定
vi /etc/xrdp/xrdp.ini
色を24bitに変更(defaultの32bitだと接続できない場合がある模様)
以下の行を32から24へ変更
max_bpp=24
さらに以下の場所に8行を追加
;
; Session types
;
[xrdp1]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=ask5910
xserverbpp=24
6)xrdpの起動
※バージョンによってはservie xrdp.servie startですが、以下は7.x系の手順
systemctl start xrdp.service
7)LISTENポートの確認
※以下2つのポートがLISTENしていること
3389 1088/xrdp
3350 1087/xrdp-sesman
8)xrdpの自動起動設定
systemctl enable xrdp.service
9)firewalldの起動、自動起動とxrdpの許可設定
※iptablesでも可。要は3389ポートを受けつける設定を入れる場所です。
systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --list-all
firewall-cmd --list-services --zone=public
firewall-cmd --add-port=3389/tcp --zone=public --permanent
firewall-cmd --reload
firewall-cmd --list-ports --zone=public
10)サーバー再起動
Azureポータルから再起動でもshutdown -r nowでもどちらでも可。
11)vncの設定
vncpasswd
※2回 rootのパスワードと合わせる
vncserver :10
※5910ポートでxrdpからvncアクセスする
※間違えた場合は「vncserver -kill :10」でプロセスを落とす
netstat -atuanp
(以下のポートがLISTENしていることを確認)
5910 1520/Xvnc
12)vnc起動時のウィンドウマネージャを設定
vi /root/.vnc/xstartup
以下の内容に差し替え
#!/bin/sh
#unset SESSION_MANAGER
#unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
startx &
13)rootパスワードの設定
sudo su -
passwd
※2回
13)Windowsクライアントから接続
Windows10 Aniversaryから、接続先はCentOSにターミナルログインする
際に使ったPublic-IPのIPアドレスを指定してリモートデスクトップアクセス
します。IP直打ちなのでセキュリティが、、的なポップアップは無視して
継続します。
以下を選択・入力してOKします。
Session sesman-Xvnc
username root
password rootのパスワード
port 5910
画面が表示され、言語設定の画面になればOKです。
補足:
この手順はまだ不完全な面もあります。
vncserverを固定で5910で起動させていますが、wrdpから呼び出されるポートに
合わせてvncserverを呼び出す方法が見当たりませんでした。ご存じの方が
いらっしゃればレスいただければと。