LoginSignup
7
6

More than 5 years have passed since last update.

参考メモ/CentOS7にSSH越しでVNC接続してみる

Posted at

参考メモ/minimal installしたCentOS7にXfce4 + ibus-kkcで日本語入力可能にする でXfce4 + ibus-kkcを入れてみましたが、VNCも試してみました。

ちなみに、VNCって結局、ログイン状態で画面がたちがるんですね。グラフィカルログイン画面の状態からVNCで接続できて、そこから好きなユーザでログインできる・・・ようには、簡単にはできないようです。(今回軽くググッたところでは、そこまで言及してる記事がすぐには見つからなかった)
なので、今回の実験でも、systemctlの設定ファイル中に「どのユーザで起動する」という情報を埋め込んで、最初からそのユーザで起動して専用の画面で待ち受ける、というような仕組みになってます。VNCクライアントで接続すると、最初からそのユーザでXが起動済みの画面が見えるイメージです。

検証環境:
VirtualBox ホスト : Windows 10 64bit
VirtualBox : 5.0.16
VirtualBox ゲスト : CentOS Linux release 7.2.1511 (Core)

今回は短いので先に参考記事のURL :

VNC Serverのインストール

CentOS7 で yum search vnc してみたところ、普通に使える VNC Server としては tigervnc-server パッケージが提供されてるようです。
検索で見つかる記事によっては、 yum install vnc-server としてますが、試したところ結局 yum install tigervnc-server と同じパッケージがインストールされます。
なので今回は素直に yum install tigervnc-server します。

# yum install -y tigervnc-server
-> tigervnc-server, tigervnc-license, tigervnc-server-minimal パッケージがインストールされます。

# rpm -ql tigervnc-server
/etc/sysconfig/vncservers
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/lib/systemd/system/vncserver@.service
/usr/share/man/man1/vncserver.1.gz
/usr/share/man/man1/x0vncserver.1.gz

# rpm -ql tigervnc-license
/usr/share/doc/tigervnc-1.3.1/LICENCE.TXT

# rpm -ql tigervnc-server-minimal
/usr/bin/Xvnc
/usr/bin/vncconfig
/usr/bin/vncpasswd
/usr/share/man/man1/Xvnc.1.gz
/usr/share/man/man1/vncconfig.1.gz
/usr/share/man/man1/vncpasswd.1.gz

コンパクトなので、ファイルを漁ってみますと /usr/lib/systemd/system/vncserver@.service にVNC Serverをsystemctlで起動して管理するやり方が書いてありました。
内容は見ればわかりますので省略します。
とりあえずその内容に従い以下のように作業しました。

(画面番号1番 -> TCP 5901 番でlistenするよう、"@:1" にしてコピー
# cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

(VNC Serverを動かしたいユーザ名で、ファイル内の "<USER>" という部分を書き換える)
# vi /etc/systemd/system/vncserver\@\:1.service

# systemctl daemon-reload
# systemctl enable vncserver@:1
Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@:1.service.
# systemctl restart vncserver@:1
Job for vncserver@:1.service failed because the control process exited with error code. See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.

失敗してしまいました・・・。

# journalctl -xe
(...)
Mar 12 20:43:13 localhost.localdomain runuser[2772]: Warning: localhost.localdomain:1 is taken because of /tmp/.X11-unix/X1
Mar 12 20:43:13 localhost.localdomain runuser[2772]: Remove this file if there is no X server localhost.localdomain:1
Mar 12 20:43:13 localhost.localdomain runuser[2772]: A VNC server is already running as :1
(...)

":1"はすでに使われてるよ、と出てます。そういえばこのVM、すでにグラフィカルログインでXが起動してるので、それで使用済みになってるんでしょう。
なので、":2"になるようにします。

(まずは "@:1" での登録を外す)
# systemctl disable vncserver@:1
Removed symlink /etc/systemd/system/multi-user.target.wants/vncserver@:1.service.

(ファイル名を "@:2" にリネーム)
# mv /etc/systemd/system/vncserver\@\:1.service /etc/systemd/system/vncserver\@\:2.service 

# systemctl daemon-reload
# systemctl enable vncserver@:2
# systemctl restart vncserver@:2
# systemctl status vncserver@:2
● vncserver@:2.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:2.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2016-03-12 20:47:34 JST; 6s ago
  Process: 2950 ExecStart=/usr/sbin/runuser -l msakamoto -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
  Process: 2946 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
 Main PID: 2992 (Xvnc)
   CGroup: /system.slice/system-vncserver.slice/vncserver@:2.service
           ‣ 2992 /usr/bin/Xvnc :2 -desktop localhost.localdomain:2 (msakamoto) -auth /home/msakamoto/.Xauthority -geometry 1024x768 -rfbwait 30000 -rfbauth /home/msakamoto/.vnc/passwd -rfbport 5902 -fp catalogue:/etc/X11/fontpath.d -...

今度は正常に起動しました。ss -tanp で確認すると、TCP 5902 番をVNC ServerがlistenしてましたのでOKです。

VNC Passwordの設定

設定ファイルに埋め込んだユーザでログインして、

$ vncpasswd

で設定します。そのユーザの $HOME/.vnc/passwd に保存されます。(暗号化されてるのかわかりませんが、平文では保存されてなかったです)

UltraVNCでの接続

VirtualBoxホストのWindows 10 64bit からVNCで接続します。クライアントとしてはUltraVNCを使ってみました。

インストールしたら、"UltraVNC Viewer" を起動し、画面番号2番のTCPポート番号5902なので "IPアドレス:2" に接続します。
無事接続できたら、単にXとVNC用のツールが起動しただけのそっけない画面が表示されるはずです。(あと、なぜかfirefoxも起動してました)

VNCからXfce4を使う

一度VNCを起動すれば、$HOME/.vnc/xstartup にデフォルトの起動スクリプトが生成されます。これをカスタマイズしてVNC Serverを再起動すれば、好きなDesktop環境やWindow ManagerをVNCから使えます。
今回はXfce4を起動するようにします。

~/.vnc/xstartup(デフォルト)
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/xinit/xinitrc

~/.vnc/xstartup
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc

#すでにXfce4 + ibus-kkcのグラフィカルログイン実験により、起動済みだったので入れなくて良いかも。
#ibus-daemon -drx
exec /usr/bin/xfce4-session

この後 systemctl restart vncserver@:2 した後UltraVNCから接続してみたのですが・・・やっぱりモタツキました・・・。

SSH越しにVNC接続

まずfirewalldを入れてVNCに接続できなくします。

# yum install -y firewalld

# systemctl enable firewalld
# systemctl start firewalld
# firewall-cmd --list-all
public (default)
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

# firewall-cmd --get-services
... vnc-server ...

# rpm -qf /usr/lib/firewalld/services/vnc-server.xml
firewalld-0.3.9-14.el7.noarch

# cat /usr/lib/firewalld/services/vnc-server.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Virtual Network Computing Server (VNC)</short>
  <description>A VNC server provides an external accessible X session. Enable this option if you plan to provide a VNC server with direct access. The access will be possible for displays :0 to :3. If you plan to provide access with SSH,
do not open this option and use the via option of the VNC viewer.</description>
  <port protocol="tcp" port="5900-5903"/>
</service>

firewalldの方に最初からVNCサーバ向けのサービス設定が含まれてたようです。でも、今はデフォルトの、OFFのままなので、これでUltraVNCで接続しようとすると、接続できません。
そこで、/usr/lib/systemd/system/vncserver@.service を参考にSSHのポートフォワーディングをしてみます。
私はたまたまCygwin使いで、VirtualBoxホストのWin10にcygwinでOpenSSHのsshコマンド入れてましたので、win10上のTCP5903番を、VNCサーバが起動してるVM中の5902番につなげてみます。

(Win10上から)
$ ssh -C -L 5903:localhost:5902 xxx@(VNCサーバが起動してるゲストVMのIP)

これで、UltraVNCで "IPアドレス::5903" (TCPポート番号で指定するときは、コロンが2つ) に接続してみますと、接続成功です。
心なしか、反応も直接接続よりは速い感じがします。

でも結局・・・

結局、SSH越しでも直接でも、やっぱり反応が遅いですし、日本語入力もうまくいきませんでした。("Option" -> "Mouse and Keyboard" の "Japanese keyboard"にチェックいれても半角/全角でのIME切り替えが動かなかった。)

そのため、あんまり使えないかなぁ・・・という感じで、実験は終了です。(VNCクライアントの問題かなぁ・・・)

EC2上のminimal CentOS7 イメージにVNCできれば面白いかな~と思ってたんですが、ちょっと厳しいかも?

# systemctl disable vncserver@:2

無効化して、今回の実験は終了します。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6