1. はじめに
過去4回にわたってWindowsクライアントからLinux上のGUIアプリを実行する方法を説明した。これまではVcXsrvやXmingなどのXサーバに焦点を当てたが、今回はVNCを取り上げる。
- Windowsクライアントを使って…(1)→全体像を説明
- Windowsクライアントを使って…(2)→設定&踏み台なし接続
- Windowsクライアントを使って…(3)→踏み台あり接続(連続ログイン)
- Windowsクライアントを使って…(4)→踏み台あり接続(多段ssh)
1-2. TL;DR
- VNCは、リモートコンピューターのデスクトップを操作するツールとして昔から使われている
- オンプレミスでも有用だが、ローカルアクセスができないクラウドでは重要度が増している
- いろいろなところで取り上げられているネタだが、微妙に正しくないというか、最適ではない記述が多い
1-3. 利用環境
今回はOCI Computeを使用しているが、他のクラウドサービスやオンプレミスでも、ほとんど同じ設定のはずだ。
- Oracle Linux 8 / CentOS 8などのRHEL8互換ディストリビューション
- Oracle Linux 7 / CentOS 7などのRHEL7互換ディストリビューション
- Oracle Linux 6 / CentOS 6などのRHEL6互換ディストリビューション
- Oracle Cloud Infrastructure Compute / Database
1-4. 前提条件
前提条件は以下のとおり。
- インターネット経由でアクセスするときは、VNCサーバをインストールするサーバにパブリックIPが割り当てられているか、踏み台サーバー経由でアクセスできること
- 専用線やインターネットVPNでアクセスするときはパブリックIPは不要
- Yumリポジトリにアクセスできること
1-5. 参考資料
VNCサーバについては、Linuxディストリビューションベンダーのマニュアルが充実している。
8系マニュアル:
7系マニュアル:
- Oracle Linux 管理者ガイド, リリース7「VNCサービス構成」
- Oracle Linux Administrator's Guide for Release 7 "Configuring a VNC Server"
- Red Hat Enterprise Linux 7 システム管理者ガイド「TigerVNC」
6系マニュアル:
その他資料:
- Running Graphical Applications Securely on Oracle Cloud Infrastructure(PDF)
- 意外に複雑なパスワード生成事情とLinuxにおけるパスワード生成方法
2. VNCの特徴
VNCの詳細はどこかで調べてもらうとして、リモートでフルデスクトップ環境を利用するデファクトと言える。またXcXsrv/XmingなどのXサーバと比べたときの特徴は次のとおり。
- 単一のウインドウだけでなく、フルデスクトップ環境を利用できる
- インストールしないで、ファイルを配置するだけで使えるWindowsクライアントがある
- 通信は暗号化されないので、インターネットなどで利用するときはSSHトンネリングで暗号化する必要がある
ただし起動/設定方法の多様さは、利用者を惑わすのに十分な複雑さがある。サービスで起動することもできるし、一般ユーザーで起動することもできる。さらにはXDMCPやxrdpと組み合わせることもできる。
3. 設定の流れ
設定手順は以下のとおり。はじめにLinuxサーバでVNCサーバを設定し、次にWindowsクライアントで設定する。
4. VNCサーバをインストールする
Linuxサーバでは、VNCサーバのインストールと設定を行う。
4-1. Yumリポジトリにアクセスできるか確認する
Yumリポジトリにアクセスできるか確認する。以下のように表示されればアクセスできている。
# yum repolist enabled
Loaded plugins: langpacks, ulninfo
repo id repo name status
ol7_UEKR5/x86_64 Latest Unbreakable Enterprise Kernel Rele 163
ol7_addons/x86_64 Oracle Linux 7Server Add ons (x86_64) 336
ol7_developer/x86_64 Oracle Linux 7Server Development Packages 831
ol7_developer_EPEL/x86_64 Oracle Linux 7Server Development Packages 26,805
ol7_ksplice Ksplice for Oracle Linux 7Server (x86_64) 2,378
ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 13,107
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86 9,958
ol7_software_collections/x86_64 Software Collection Library release 3.0 p 13,856
repolist: 67,434
アクセスできないときは以下の設定を確認する。
- Internet GatewayやNAT Gateway、Service Gatewayなどの配置
- ルートテーブルの設定
4-2. デスクトップ環境をインストールする
デスクトップ環境をインストールする。6系と7/8系では選択するパッケージグループが違うので、利用環境に応じて実行する。
7/8系Linux OS
yum groupinstall graphical-server-environment -y
**ヒント**:グループインストールのテクニック(クリックすると開く)
インストールグループのIDは以下のコマンドで表示できる。--disablerepo
や--enablerepo
は省略可能だが、有効なYumリポジトリがたくさんあってわかりづらいので指定している。Oracle Linux 6のときはol7_latest
ではなくol6_latest
。またCentOSはバージョン共通でbase
。
8系の出力結果
LANG=C yum -v grouplist
---以下画面表示---
Available Environment Groups:
Server with GUI (graphical-server-environment)
Server (server-product-environment)
Minimal Install (minimal-environment)
Workstation (workstation-product-environment)
KDE Plasma Workspaces (kde-desktop-environment)
Custom Operating System (custom-environment)
Virtualization Host (virtualization-host-environment)
Available Groups:
Fedora Packager (fedora-packager)
Legacy UNIX Compatibility (legacy-unix)
Container Management (container-management)
Development Tools (development)
.NET Core Development (dotnet-core)
Graphical Administration Tools (graphical-admin-tools)
Headless Management (headless-management)
Network Servers (network-server)
RPM Development Tools (rpm-development-tools)
Scientific Support (scientific)
Security Tools (security-tools)
Smart Card Support (smart-card)
System Tools (system-tools)
7系の出力結果
LANG=C yum --disablerepo=* --enablerepo=ol7_latest -v grouplist
or
LANG=C yum -v grouplist
---以下画面表示---
Available Environment Groups:
Minimal Install (minimal)
Infrastructure Server (infrastructure-server-environment)
File and Print Server (file-print-server-environment)
Basic Web Server (web-server-environment)
Virtualization Host (virtualization-host-environment)
Server with GUI (graphical-server-environment)
Available Groups:
Backup Client (backup-client)
Base (base)
Cinnamon (cinnamon-desktop)
Compatibility Libraries (compat-libraries)
Console internet tools (console-internet)
Development tools (development)
E-mail server (mail-server)
Educational Software (education)
Electronic Lab (electronic-lab)
Fedora Packager (fedora-packager)
Fonts (fonts)
General Purpose Desktop (general-desktop)
Graphical Administration Tools (graphical-admin-tools)
Graphics Creation Tools (graphics)
Hardware monitoring utilities (hardware-monitoring)
Haskell (haskell)
Input Methods (input-methods)
Internet Applications (internet-applications)
KDE Desktop (kde-desktop)
Legacy UNIX Compatibility (legacy-unix)
MATE (mate-desktop)
Milkymist (milkymist)
Network Infrastructure Server (network-server)
Networking Tools (network-tools)
Office Suite and Productivity (office-suite)
Performance Tools (performance)
Scientific support (scientific)
Security Tools (security-tools)
Smart card support (smart-card)
System Management (system-management)
System administration tools (system-admin-tools)
Technical Writing (technical-writing)
TurboGears application framework (turbogears)
Web Server (web-server)
Web Servlet Engine (web-servlet)
Xfce (xfce-desktop)
Done
6系の出力結果
LANG=C yum --disablerepo=* --enablerepo=ol6_latest -v grouplist
or
LANG=C yum -v grouplist
---以下画面表示---
Installed Groups:
Base (base)
E-mail server (mail-server)
Fonts (fonts)
Graphical Administration Tools (graphical-admin-tools)
Hardware monitoring utilities (hardware-monitoring)
Legacy UNIX compatibility (legacy-unix)
Legacy X Window System compatibility (legacy-x)
Network file system client (network-file-system-client)
Networking Tools (network-tools)
Performance Tools (performance)
Perl Support (perl-runtime)
System administration tools (system-admin-tools)
iSCSI Storage Client (storage-client-iscsi)
Installed Language Groups:
Japanese Support (japanese-support) [ja]
Available Groups:
Additional Development (additional-devel)
Backup Client (backup-client)
Backup Server (backup-server)
CIFS file server (cifs-file-server)
Client management tools (client-mgmt-tools)
Compatibility libraries (compat-libraries)
Console internet tools (console-internet)
Debugging Tools (debugging)
Desktop (basic-desktop)
Desktop Debugging and Performance Tools (desktop-debugging)
Desktop Platform (desktop-platform)
Desktop Platform Development (desktop-platform-devel)
Development tools (development)
Dial-up Networking Support (dial-up)
Directory Client (directory-client)
Directory Server (directory-server)
Eclipse (eclipse)
Emacs (emacs)
FCoE Storage Client (storage-client-fcoe)
FTP server (ftp-server)
General Purpose Desktop (general-desktop)
Graphics Creation Tools (graphics)
High Availability (ha)
High Availability Management (ha-management)
Identity Management Server (identity-management-server)
Infiniband Support (infiniband)
Input Methods (input-methods)
Internet Browser (internet-browser)
Java Platform (java-platform)
KDE Desktop (kde-desktop)
Large Systems Performance (large-systems)
Load Balancer (load-balancer)
Mainframe Access (mainframe-access)
Messaging Client Support (system-management-messaging-client)
MySQL Database client (mysql-client)
MySQL Database server (mysql)
NFS file server (nfs-file-server)
Network Infrastructure Server (network-server)
Network Storage Server (storage-server)
PHP Support (php)
PostgreSQL Database client (postgresql-client)
PostgreSQL Database server (postgresql)
Print Server (print-server)
Printing client (print-client)
Remote Desktop Clients (remote-desktop-clients)
Resilient Storage (resilient-storage)
Ruby Support (ruby-runtime)
SNMP Support (system-management-snmp)
Scalable Filesystems (scalable-file-systems)
Scientific support (scientific)
Security Tools (security-tools)
Server Platform (server-platform)
Server Platform Development (server-platform-devel)
Smart card support (smart-card)
Somali Support (somali-support)
Storage Availability Tools (storage-client-multipath)
System Management (system-management)
Systems Management Messaging Server support (system-management-messaging-server)
TeX support (tex)
Technical Writing (technical-writing)
TurboGears application framework (turbogears)
Virtualization (virtualization)
Virtualization Client (virtualization-client)
Virtualization Platform (virtualization-platform)
Virtualization Tools (virtualization-tools)
Web Server (web-server)
Web Servlet Engine (web-servlet)
Web-Based Enterprise Management (system-management-wbem)
X Window System (x11)
Available Language Groups:
Afrikaans Support (afrikaans-support) [af]
Albanian Support (albanian-support) [sq]
Amazigh Support (amazigh-support) [ber]
Arabic Support (arabic-support) [ar]
Armenian Support (armenian-support) [hy]
Assamese Support (assamese-support) [as]
Azerbaijani Support (azerbaijani-support) [az]
Basque Support (basque-support) [eu]
Belarusian Support (belarusian-support) [be]
Bengali Support (bengali-support) [bn]
Bhutanese Support (bhutanese-support) [dz]
Brazilian Portuguese Support (brazilian-support) [pt_BR]
Breton Support (breton-support) [br]
Bulgarian Support (bulgarian-support) [bg]
Catalan Support (catalan-support) [ca]
Chhattisgarhi Support (chhattisgarhi-support) [hne]
Chichewa Support (chichewa-support) [ny]
Chinese Support (chinese-support) [zh]
Coptic Support (coptic-support) [cop]
Croatian Support (croatian-support) [hr]
Czech Support (czech-support) [cs]
Danish Support (danish-support) [da]
Dutch Support (dutch-support) [nl]
English (UK) Support (british-support) [en_GB]
Esperanto Support (esperanto-support) [eo]
Estonian Support (estonian-support) [et]
Ethiopic Support (ethiopic-support) [am]
Faroese Support (faroese-support) [fo]
Fijian Support (fijian-support) [fj]
Filipino Support (filipino-support) [fil]
Finnish Support (finnish-support) [fi]
French Support (french-support) [fr]
Frisian Support (frisian-support) [fy]
Friulian Support (friulian-support) [fur]
Gaelic Support (gaelic-support) [gd]
Galician Support (galician-support) [gl]
Georgian Support (georgian-support) [ka]
German Support (german-support) [de]
Greek Support (greek-support) [el]
Gujarati Support (gujarati-support) [gu]
Hebrew Support (hebrew-support) [he]
Hiligaynon Support (hiligaynon-support) [hil]
Hindi Support (hindi-support) [hi]
Hungarian Support (hungarian-support) [hu]
Icelandic Support (icelandic-support) [is]
Indonesian Support (indonesian-support) [id]
Interlingua Support (interlingua-support) [ia]
Inuktitut Support (inuktitut-support) [iu]
Irish Support (irish-support) [ga]
Italian Support (italian-support) [it]
Kannada Support (kannada-support) [kn]
Kashmiri Support (kashmiri-support) [ks]
Kashubian Support (kashubian-support) [csb]
Kazakh Support (kazakh-support) [kk]
Khmer Support (khmer-support) [km]
Kinyarwanda Support (kinyarwanda-support) [rw]
Konkani Support (konkani-support) [kok]
Korean Support (korean-support) [ko]
Kurdish Support (kurdish-support) [ku]
Lao Support (lao-support) [lo]
Latin Support (latin-support) [la]
Latvian Support (latvian-support) [lv]
Lithuanian Support (lithuanian-support) [lt]
Low Saxon Support (low-saxon-support) [nds]
Luxembourgish Support (luxembourgish-support) [lb]
Macedonian Support (macedonian-support) [mk]
Maithili Support (maithili-support) [mai]
Malagasy Support (malagasy-support) [mg]
Malay Support (malay-support) [ms]
Malayalam Support (malayalam-support) [ml]
Maltese Support (maltese-support) [mt]
Manx Support (manx-support) [gv]
Maori Support (maori-support) [mi]
Marathi Support (marathi-support) [mr]
Mongolian Support (mongolian-support) [mn]
Myanmar (Burmese) Support (burmese-support) [my]
Nepali Support (nepali-support) [ne]
Northern Sotho Support (northern-sotho-support) [nso]
Norwegian Support (norwegian-support) [nb]
Occitan Support (occitan-support) [oc]
Oriya Support (oriya-support) [or]
Persian Support (persian-support) [fa]
Polish Support (polish-support) [pl]
Portuguese Support (portuguese-support) [pt]
Punjabi Support (punjabi-support) [pa]
Romanian Support (romanian-support) [ro]
Russian Support (russian-support) [ru]
Sanskrit Support (sanskrit-support) [sa]
Sardinian Support (sardinian-support) [sc]
Serbian Support (serbian-support) [sr]
Sindhi Support (sindhi-support) [sd]
Sinhala Support (sinhala-support) [si]
Slovak Support (slovak-support) [sk]
Slovenian Support (slovenian-support) [sl]
Southern Ndebele Support (southern-ndebele-support) [nr]
Southern Sotho Support (southern-sotho-support) [st]
Spanish Support (spanish-support) [es]
Swahili Support (swahili-support) [sw]
Swati Support (swati-support) [ss]
Swedish Support (swedish-support) [sv]
Tagalog Support (tagalog-support) [tl]
Tajik Support (tajik-support) [tg]
Tamil Support (tamil-support) [ta]
Telugu Support (telugu-support) [te]
Tetum Support (tetum-support) [tet]
Thai Support (thai-support) [th]
Tibetan Support (tibetan-support) [bo]
Tsonga Support (tsonga-support) [ts]
Tswana Support (tswana-support) [tn]
Turkish Support (turkish-support) [tr]
Turkmen Support (turkmen-support) [tk]
Ukrainian Support (ukrainian-support) [uk]
Upper Sorbian Support (upper-sorbian-support) [hsb]
Urdu Support (urdu-support) [ur]
Uzbek Support (uzbek-support) [uz]
Venda Support (venda-support) [ve]
Vietnamese Support (vietnamese-support) [vi]
Walloon Support (walloon-support) [wa]
Welsh Support (welsh-support) [cy]
Xhosa Support (xhosa-support) [xh]
Zulu Support (zulu-support) [zu]
Done
6系Linux OS
yum groupinstall basic-desktop general-desktop japanese-support -y
4-3. VNCサーバをインストールする
次にVNCサーバをインストールする。
8系Linux OS
yum install tigervnc-server tigervnc-server-module -y
6/7系Linux OS
3D CGライブラリのmesa-libEGL
は必須ではないが、firefoxが起動できないという報告があるのでインストールする。
yum install tigervnc-server mesa-libEGL -y
使用環境によってインストールされるパッケージに違いはある。
**インストールされるパッケージ一覧(クリックすると開く)**
===================================================================================================
Package Arch Version Repository Size
===================================================================================================
Installing:
mesa-libEGL x86_64 18.0.5-4.el7_6 ol7_latest 101 k
tigervnc-server x86_64 1.8.0-13.el7 ol7_latest 214 k
Installing for dependencies:
gnutls x86_64 3.3.29-9.el7_6 ol7_latest 680 k
libXdamage x86_64 1.1.4-4.1.el7 ol7_latest 20 k
libXdmcp x86_64 1.1.2-6.el7 ol7_latest 34 k
libXfont2 x86_64 2.0.3-1.el7 ol7_latest 143 k
libXinerama x86_64 1.1.3-2.1.el7 ol7_latest 13 k
libXrandr x86_64 1.5.1-2.el7 ol7_latest 27 k
libXxf86misc x86_64 1.0.3-7.1.el7 ol7_latest 19 k
libdrm x86_64 2.4.91-3.el7 ol7_latest 153 k
libglvnd x86_64 1:1.0.1-0.8.git5baa1e5.el7 ol7_latest 89 k
libglvnd-egl x86_64 1:1.0.1-0.8.git5baa1e5.el7 ol7_latest 43 k
libglvnd-glx x86_64 1:1.0.1-0.8.git5baa1e5.el7 ol7_latest 124 k
libjpeg-turbo x86_64 1.2.90-6.el7 ol7_latest 134 k
libpciaccess x86_64 0.14-1.el7 ol7_latest 26 k
libwayland-client x86_64 1.15.0-1.el7 ol7_latest 32 k
libwayland-server x86_64 1.15.0-1.el7 ol7_latest 38 k
libxshmfence x86_64 1.2-1.el7 ol7_latest 6.5 k
llvm-private x86_64 6.0.1-2.el7 ol7_latest 21 M
mesa-dri-drivers x86_64 18.0.5-4.el7_6 ol7_latest 6.6 M
mesa-filesystem x86_64 18.0.5-4.el7_6 ol7_latest 17 k
mesa-libGL x86_64 18.0.5-4.el7_6 ol7_latest 161 k
mesa-libgbm x86_64 18.0.5-4.el7_6 ol7_latest 37 k
mesa-libglapi x86_64 18.0.5-4.el7_6 ol7_latest 44 k
nettle x86_64 2.7.1-8.el7 ol7_latest 327 k
tigervnc-license noarch 1.8.0-13.el7 ol7_latest 28 k
tigervnc-server-minimal x86_64 1.8.0-13.el7 ol7_latest 1.0 M
trousers x86_64 0.3.14-2.el7 ol7_latest 289 k
xkeyboard-config noarch 2.24-1.el7 ol7_latest 833 k
xorg-x11-server-utils x86_64 7.7-20.el7 ol7_latest 178 k
xorg-x11-xinit x86_64 1.3.4-2.el7 ol7_latest 58 k
xorg-x11-xkb-utils x86_64 7.7-14.el7 ol7_latest 102 k
Transaction Summary
===================================================================================================
Install 2 Packages (+30 Dependent packages)
Total download size: 33 M
Installed size: 112 M
5. VNCサーバを設定する
設定方法は6系と7/8系で大きく異なり、また7系と8系で少し異なる部分がある。そのため利用しているバージョンに応じて読むこと。
5-1. VNCサーバのユーザーを理解する
VNCサーバを複数のユーザーで利用するときは、それぞれ別のポートを割り当てる必要がある。またサービスを利用して起動するときは、OSユーザーを意識して設定ファイルを構成する必要がある。
デフォルトのOSユーザー名はクラウドによって異なるので適宜読み替えること。またCentOSやUbuntuではデフォルトと異なることがある。
クラウド | OSユーザー名 |
---|---|
AWS EC2 | ec2-user |
OCI | opc |
Azure VM | azureuser |
次の例はシングルユーザーの場合と複数ユーザーの場合の例だ。この仕組みを頭に入れておく必要がある。
1つのOSユーザーを同時に1人だけで利用
ポート番号 | ディスプレイ番号 | OSユーザー名 | 利用者 |
---|---|---|---|
5901 | :1 | opc | 不特定多数。ただし同時には使用しない |
複数のOSユーザーを同時に複数利用者で利用
ポート番号 | ディスプレイ番号 | OSユーザー名 | 利用者 |
---|---|---|---|
5901 | :1 | opc | Aさん |
5902 | :2 | oracle | Bさん |
5903 | :3 | opc | Cさん |
5-2. VNCサーバを設定する(7/8系Linux OS)
7系では、シングルユーザーと複数ユーザーで設定ファイルの書き方が異なっていた。しかし、8系では同じになっている。そのため自分が使用しているバージョンの内容を読むこと。
5-2-1. VNCパスワードを設定する(7/8系共通)
VNCパスワードを設定する。必ず指定のOSユーザーにsu
してから実行する。パスワードは6文字以上必要。設定したパスワードは、VNCクライアントからの接続時の認証に使われる。
# su - opc
$ vncpasswd
Password: ★パスワード入力
Verify: ★同じパスワード入力
Would you like to enter a view-only password (y/n)? n ★nを入力
A view-only password is not used
5-2-2. 設定ファイルを変更する(7系Linux OS)
7系ではシングルユーザーと複数ユーザーで設定ファイルの書き方が異なる。
- VNCサーバ用ユニット・ファイルのテンプレート
/usr/lib/systemd/system/vncserver@.service
を/etc/systemd/system/
にコピーする。
VNCサーバを利用するOSユーザーが1つだけのときはファイル名を変えなくてよい。しかし複数のOSユーザーで使用するときはvncserver-<OSユーザー名>@.service
のように変更する。
シングルユーザー用
cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
複数ユーザー用(OSユーザーはopc)
以下の例はopcユーザーの場合。複数のOSユーザーでVNCを使用するときは、必要なOSユーザー数分のファイルを作成する。実際に利用する人数ではないことに注意。
cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver-opc@.service
注意
Oracleのマニュアルを含め、世間の情報の中には
vncserver-<OSユーザー名>@:1.service
のように、ファイル名の@の次にディスプレイ番号を入れているものがある。しかしファイル名にディスプレイ番号は不要だ。systemdで起動するときにディスプレイ番号を指定すればよい。
2.コピーしたユニットファイルの<USER>
をOSユーザー名
に変更する。今回は以下のようにopc
に変更する。ユニットファイルの内容やス置換する個数は使用しているバージョンやディストリビューションによって異なる。実際に目視して''が無くなるまで置換していることを確認する。
変更前
Type=forking
WorkingDirectory=/home/★<USER>★
User=★<USER>★
Group=★<USER>★
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l ★<USER>★ -c "/usr/bin/vncserver %i"
PIDFile=/home/★<USER>★/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
変更後
Type=forking
WorkingDirectory=/home/opc
User=opc
Group=opc
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l opc -c "/usr/bin/vncserver %i"
PIDFile=/home/opc/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
コマンドバージョン
sed -i -e '32,50 s/<USER>/opc/' /etc/systemd/system/vncserver@.service
sed -i -e '32,50 s/<USER>/opc/' /etc/systemd/system/vncserver-opc@.service
5-2-3. 設定ファイルを変更する(8系Linux OS)
-
WaylandEnable=false
のコメントを外して以下のように変更する。
[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false
- VNCサーバ用ユニット・ファイルのテンプレート
/usr/lib/systemd/system/vncserver@.service
を/etc/systemd/system/
にコピーする。
cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/
3./etc/tigervnc/vncserver.users
に、ログインするOSユーザーとディスプレイ番号を追記する。
# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers.
# The syntax is <display>=<username>. E.g.:
#
# :2=andrew
# :3=lisa
:1=opc ★例:ディスプレイ番号1はopcユーザー
3./etc/tigervnc/vncserver-config-defaults
に以下の2行を追加する。
session=gnome
geometry=1280x1024
5-2-3. VNCサーバを起動する(7/8系共通)
1.systemdをリロードして設定ファイルを読み込む。
systemctl daemon-reload
2.VNCサーバ起動の文法は以下のとおり。@の次に「コロン+ディスプレイ番号」を指定する。複数起動するときはディスプレイ番号が重複しないようにすること。
systemctl start vncserver@:<display-number>.service
ディスプレイ番号が1のときは次のように指定する。これ以降はシングルユーザー用と複数ユーザー用を分けて書かないので適宜読み替えること。8系では、シングルユーザーと同じ文法で利用できる。そのかわりポートを変えてユーザー数ぶん実行する必要がある。
systemctl start vncserver@:1.service
systemctl start vncserver-opc@:1.service
6.起動していることをsystemctl
コマンドで確認する。確認方法は他にもある。うまくいかないときは$HOME/.vnc/
配下にログファイルも確認する。
systemctl status vncserver@:1.service
---以下画面表示---
● vncserver@:1.service - Remote desktop service (VNC)
Loaded: loaded (/etc/systemd/system/vncserver@.service; disabled; vendor preset: disabled)
Active: active (running★) since Tue 2019-06-18 22:03:27 JST; 1h 17min ago
Process: 9264 ExecStart=/usr/sbin/runuser -l opc -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
Process: 9261 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 9289 (Xvnc)
CGroup: /system.slice/system-vncserver\x2dopc.slice/vncserver@:1.service
‣ 9289 /usr/bin/Xvnc :1 -auth /home/opc/.Xauthority -desktop vncsrv:1 (opc) -fp c...
Jun 18 22:03:24 vncsrv systemd[1]: Starting Remote desktop service (VNC)...
Jun 18 22:03:27 vncsrv systemd[1]: Started Remote desktop service (VNC).
7.使用ポートで起動状態を確認する。netstat
やnmap
でも5901ポートが使われていることがわかる。
# netstat -ltp4 | grep 590
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 16052/Xvnc
# nmap -Pn localhost
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
443/tcp open https
5901/tcp open vnc-1 ★これ
6001/tcp open X11:1
8.VNCサーバをつねに使いたいときは、自動起動を有効にする。
systemctl enable vncserver@:1.service
systemctl enable vncserver-opc@:1.service
systemctl list-unit-files | grep vnc
---以下画面出力---
vncserver@.service enabled★自動起動が有効
xvnc@.service static
xvnc.socket disabled
9.もし、うまくいかないときは、ランラベルを変更して再起動すること。
sudo systemctl set-default graphical
sudo reboot
ヒント:VNCサーバの終了方法
VNCサーバを停止するときはsystemctlを使うこと。vncserver -kill
コマンドは使用できない。複数起動しているときにはポート数分繰り返す。
systemctl stop vncserver@:1.service
5-3. VNCサーバを設定する(6系Linux OS)
- 使用するOSユーザーに応じて、設定ファイル
/etc/sysconfig/vncservers
を変更する。文法は以下のとおり。複数ユーザーのときはワンスペース開けて追記する。
VNCSERVERS="display_number:user"
VNCSERVERS="display_number:user display_number:user"
vi /etc/sysconfig/vncservers
VNCSERVERS="1:opc"
VNCSERVERS="1:opc 2:opc"
2.VNCパスワードを設定する。このときは必ず指定のOSユーザーにsu
してから実行する。パスワードは6文字以上必要。
# su - opc
$ vncpasswd
Password: ★パスワード入力
Verify: ★同じパスワード入力
3.サービスを起動する。
service vncserver start
---以下画面出力---
Starting VNC server: 1:opc
New 'vncsrv6:1 (opc)' desktop is vncsrv6:1
Starting applications specified in /home/opc/.vnc/xstartup
Log file is /home/opc/.vnc/vncsrv6:1.log
[ OK ]
4.serviceコマンドで起動していることを確認する。
service vncserver status
---以下画面出力---
Xvnc (pid 24161) is running...
5.使用ポートで起動状態を確認する。netstat
やnmap
でも5901ポートが使われていることがわかる。
# netstat -ltp | grep 590
tcp 0 0 *:5901 *:* LISTEN 3438/Xvnc
# nmap -Pn localhost
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
443/tcp open https
5901/tcp open vnc-1 ★これ
6001/tcp open X11:1
6.VNCサーバをつねに使いたいときは自動起動を有効にする。
chkconfig vncserver on
chkconfig --list vncserver
---以下画面出力---
vncserver 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ヒント:VNCサーバの終了方法
serviceでVNCサーバを起動したときは、停止するときもserviceコマンドを使うこと。vncserver -kill
コマンドは使用できない。
6. ファイアウオールを設定する
Windowsクライアントから、どのようにVNCサーバに接続するかで、必要なファイアウオール設定は異なる。
次の表は接続方法によるファイアウオール設定の違いである。専用線/インターネットVPNでも踏み台があるときには「インターネット経由(踏み台あり)」と同じになる。
クラウドのファイアウオール | サーバのファイアウオール(iptables/firewalld) | |
---|---|---|
1.インターネット経由(踏み台なし) | 22/ssh | 22/ssh |
2.インターネット経由(踏み台あり) | 踏み台サーバ:22/ssh VNCサーバ:5901, 5902, … | 22/ssh VNCサーバ:5901, 5902, … |
3.専用線/インターネットVPN | 5901, 5902, … | 5901, 5902, … |
6-1. クラウドのセキュリティルール/グループを設定する
「2.インターネット経由(踏み台あり)」と「3.専用線/インターネットVPN」のときは、VNCサーバに疎通できるようにセキュリティルール/グループを設定する。
「2.インターネット経由(踏み台あり)」のときのIngressルール
Source | Protocol | Port |
---|---|---|
踏み台サーバのプライベートIP | tcp | 5901 |
「3.専用線/インターネットVPN」のときのIngressルール
Source | Protocol | Port |
---|---|---|
オンプレミスのCIDR | tcp | 5901 |
6-2. サーバのファイアウオールを設定する
「2.インターネット経由(踏み台あり)」と「3.専用線/インターネットVPN」のときは、サーバのファイアウオール(iptables/firewalld)でポートを開ける必要がある。6系と7系でそれぞれ説明する。
ただしクラウドサービスではiptables/firewalldなどのOSファイアウォールが無効になっていることもある。そのときにはスキップしてよい。
6-2-1. firewalldでポートを開ける(7系Linux OS)
- VNCサーバで使用するポートを開ける。5901以外も開けるときは複数行記述する。
firewall-cmd --add-port=5901/tcp --permanent --zone=public
上記のようにポートごとに設定する方法もあるが、firewalldでは事前定義済みの設定vnc-server
も利用できる。定義を見ると5900から5903までが開いている。
<?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>
定義済みファイルを使用するときには、次のように実行する。
firewall-cmd --add-service=vnc-server --permanent --zone=public
2.設定をリロードして有効化する。
firewall-cmd --reload
3.firewalldの設定を確認する。
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: ssh dhcpv6-client vnc-server
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
6-2-2. iptablesでポートを開ける(6系Linux OS)
- 現在のiptablesの設定を確認する。5行目にREJECTがあるので、その前に新しい設定を追加する。
# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 6663 2155K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 5 264 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 75 3032 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
2.VNCサーバで使用するポートを開ける。複数ポートを開ける必要があるときは、単一ポートの文法で複数回実行するか、複数ポートの文法を使用する。
iptables -I INPUT 5 -p tcp --dport 5901 -j ACCEPT
#カンマ区切りで指定
iptables -I INPUT 5 -p tcp -m multiport --dports 5901,5902,5903 -j ACCEPT
#コロンで範囲指定
iptables -I INPUT 5 -p tcp -m multiport --dports 5901:5903 -j ACCEPT
3.設定を保存する。
service iptables save
---以下画面出力---
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
4.設定を確認する。5行目に設定が追加されていることがわかる。先頭から評価されるので、6行目のREJECT以降に追加してもポートは開かないので注意。
# iptables -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 10954 4529K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 38 2160 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:5901
6 154 9213 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
次回は
長くなったので、このあたりで終了。次回はクライアント編として、ポートフォワーディングやVNCクライアントについて説明する。