====== VNC(Virtual Network Computing) ====== {{:linux:tigervnc_001.png?600|TigerVNC 001}}\\  VNC(Virtual Network Computing)は、リモートデスクトップを実現するクロスプラットフォームのソフトウェアである。\\ VNCサーバが動作するOS(Windows CE/98/Me/2000/XP/2003、Linux、Solaris)をVNCクライアントが動作する\\ OS(Windows CE/98/Me/2000/XP/2003、Linux、Solaris、Javaが作動する全てのOS、μVNCやiVNCは携帯用)\\ から遠隔操作することができる。\\ [[wwjp>Virtual_Network_Computing|Virtual Network Computing | Wikiwand]] も参照\\ ===== TigerVNC (Tiger Virtual Network Computing) ===== ==== インストール ==== tigervnc-server パッケージをインストールする🤔\\
$ sudo dnf install tigervnc-server
メタデータの期限切れの最終確認: 0:16:48 時間前の 2022年08月28日 04時04分24秒 に実施しました。
依存関係が解決しました。
========================================================================================================================
 パッケージ                       アーキテクチャー       バージョン                       リポジトリー            サイズ
========================================================================================================================
インストール:
 tigervnc-server                  x86_64                 1.12.0-6.fc36                    updates                 259 k
依存関係のインストール:
 tigervnc-selinux                 noarch                 1.12.0-6.fc36                    updates                  24 k

トランザクションの概要
========================================================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 284 k
インストール後のサイズ: 682 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): tigervnc-selinux-1.12.0-6.fc36.noarch.rpm                                         32 kB/s |  24 kB     00:00    
(2/2): tigervnc-server-1.12.0-6.fc36.x86_64.rpm                                          70 kB/s | 259 kB     00:03    
------------------------------------------------------------------------------------------------------------------------
合計                                                                                     60 kB/s | 284 kB     00:04     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                1/1 
  scriptletの実行中: tigervnc-selinux-1.12.0-6.fc36.noarch                                                          1/2 
  インストール中   : tigervnc-selinux-1.12.0-6.fc36.noarch                                                          1/2 
  scriptletの実行中: tigervnc-selinux-1.12.0-6.fc36.noarch                                                          1/2 
  インストール中   : tigervnc-server-1.12.0-6.fc36.x86_64                                                           2/2 
  scriptletの実行中: tigervnc-server-1.12.0-6.fc36.x86_64                                                           2/2 
  検証             : tigervnc-selinux-1.12.0-6.fc36.noarch                                                          1/2 
  検証             : tigervnc-server-1.12.0-6.fc36.x86_64                                                           2/2 

インストール済み:
  tigervnc-selinux-1.12.0-6.fc36.noarch                       tigervnc-server-1.12.0-6.fc36.x86_64                      

完了しました!
現在のファイヤウォールの内容を確認する🤔\\ [[linux:commands:network:firewall-cmd|firewalld (Linux)]]\\
$ firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh
vnc-server のファイヤウォール定義は以下のようになっている🤔\\
$ cat /usr/lib/firewalld/services/vnc-server.xml 
Virtual Network Computing Server (VNC) 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.
ファイヤウォールに vnc-server の設定を行う🤔\\
$ sudo firewall-cmd --permanent --add-service=vnc-server
success
ファイヤウォール設定を有効化するためにリロードする🤔\\
$ sudo firewall-cmd --reload
success
設定が適用されていることを確認する🤔\\
$ firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh vnc-server
VNC 接続時に適用されるデフォルト設定を行う(例: GNOME セッション、解像度 1366x768)\\
$ cat << "EOF" | sudo tee -a /etc/tigervnc/vncserver-config-defaults
session=gnome
geometry=1366x768
EOF
session=gnome
geometry=1366x768
画面番号 :1 のログインユーザーを設定する(例: tomoyan)🤔\\
$ echo ":1=tomoyan" | sudo tee -a /etc/tigervnc/vncserver.users
:1=tomoyan
VNC 接続時パスワードを設定する(この設定を行わないとサービスが起動出来ない)🤔\\
$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
vnc-server サービスの有効化と起動を行い、正常に起動することを確認する😀\\
$ sudo systemctl enable --now vncserver@:1
$ systemctl status vncserver@:1.service
 vncserver@:1.service - Remote desktop service (VNC)
     Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; vendor preset: disabled)
     Active: active (running) since Fri 2022-10-07 10:26:31 JST; 1min 29s ago
    Process: 2756 ExecStartPre=/usr/libexec/vncsession-restore :1 (code=exited, status=0/SUCCESS)
    Process: 2768 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
   Main PID: 2775 (vncsession)
      Tasks: 0 (limit: 19016)
     Memory: 1016.0K
        CPU: 38ms
     CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
             ‣  2775 /usr/sbin/vncsession tomoyan :1

10月 07 10:26:31 WICKED-BEAT systemd[1]: Starting vncserver@:1.service - Remote desktop service (VNC)...
10月 07 10:26:31 WICKED-BEAT systemd[1]: Started vncserver@:1.service - Remote desktop service (VNC).
==== Remmina で実際に接続確認を行う ==== [[linux:remmina|Remmina リモートデスクトップ]] を参照。\\ {{:linux:tigervnc_001.png?800|TigerVNC 001}}\\ ==== vncserver が起動しない場合...😥 ====
$ systemctl status vncserver@:1.service
 vncserver@:1.service - Remote desktop service (VNC)
     Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; preset: disabled)
     Active: inactive (dead) since Sat 2023-03-04 16:24:58 JST; 25s ago
   Duration: 1.083s
    Process: 3001 ExecStartPre=/usr/libexec/vncsession-restore :1 (code=exited, status=0/SUCCESS)
    Process: 3010 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
   Main PID: 3017 (code=exited, status=0/SUCCESS)
        CPU: 56ms

 3月 04 16:24:57 highway-x.fireball.local systemd[1]: Starting vncserver@:1.service - Remote desktop service >
 3月 04 16:24:57 highway-x.fireball.local systemd[1]: Started vncserver@:1.service - Remote desktop service (>
 3月 04 16:24:58 highway-x.fireball.local systemd[1]: vncserver@:1.service: Deactivated successfully.
vnc パスワードの設定をしていない可能性があるので設定する🤔\\
$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
vncserver を起動し直してステータスを確認する🤔\\
$ sudo systemctl start vncserver@:1
$  systemctl status vncserver@:1.service
 vncserver@:1.service - Remote desktop service (VNC)
     Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; preset: disabled)
     Active: active (running) since Sat 2023-03-04 16:31:50 JST; 3s ago
    Process: 3220 ExecStartPre=/usr/libexec/vncsession-restore :1 (code=exited, status=0/SUCCESS)
    Process: 3232 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
   Main PID: 3239 (vncsession)
      Tasks: 0 (limit: 9402)
     Memory: 1.0M
        CPU: 67ms
     CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
             ‣ 3239 /usr/sbin/vncsession tomoyan :1

 3月 04 16:31:50 highway-x.fireball.local systemd[1]: Starting vncserver@:1.service - Remote desktop service >
 3月 04 16:31:50 highway-x.fireball.local systemd[1]: Started vncserver@:1.service - Remote desktop service (>
===== Xvnc の設定(xinetd 編) =====  この方法では、接続要求が発生するごとにメモリーを消費するので経済的です。この方法では、接続するとログイン画面表示されるので、ユーザーとパスワード入力してログインします。\\  ルートのログインを許可することも可能ですが、標準の設定ではそのようにはなっていないのでおすすめはしません。\\ ==== パッケージのインストール ==== - スーパーサーバー(xinetd)のパッケージをインストールする。\\ $ sudo yum install xinetd - リモートデスクトップ(vnc)のパッケージをインストールする。\\ **CentOS** $ sudo yum install vnc vnc-server **Fedora**\\
$ sudo yum install tigervnc-server-minimal
メタデータの期限切れの最終確認: 3:23:49 時間前の 2022年08月28日 00時36分21秒 に実施しました。
パッケージ tigervnc-server-minimal-1.12.0-6.fc36.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
==== 設定と反映 ==== - サービスのポートを指定するために、以下の設定ファイルを修正する。(行追加)\\ $ sudo vi /etc/services vncserver 5900/tcp # VNC Server - スーパサーバーが起動するプログラムを設定するために、以下の設定ファイルを作成する。\\ $ sudo vi /etc/xinetd.d/vncserver service vncserver { disable = no nice = 10 flags = REUSE socket_type = stream wait = no user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --securitytypes=none log_on_success += DURATION log_on_failure += HOST } **注意:**\\  service vncserver の部分は /etc/services に追記したサービス名と一致していなければならない。\\  画面サイズ 1600x960 はお好みに応じて変更してください。 - vnc のパスワードファイルを作成する。 $ sudo vncpasswd /etc/vncserver_passwd Password: <-- パスワードを入力 Verify: <-- パスワードを入力 - Xvnc がパスワードファイルを参照できるようにパーミッションを設定する。 $ sudo chmod 644 /etc/vncserver_passwd - GDM(Gnome Display Manager)の設定を変更するために、以下の設定ファイルを修正する。(該当セクションに以下の内容を追記)\\ $ sudo vi /etc/gdm/custom.conf [daemon] RemoteGreeter=/usr/libexec/gdmgreeter [xdmcp] Enable=true # XDM認証有効化  おすすめしないが、管理者ログインを許可したいのなら以下の設定を追加する。\\ [security] AllowRemoteRoot=true Fedoraの場合は以下のように修正する。 [security] DisallowTCP=false [xdmcp] Enable=true # XDM認証有効化 - サービスのポートをファイヤウォールで許可するために、以下の設定ファイルを修正する。\\ /etc/sysconfig/iptables (行追加) -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT - OS 起動時にスーパーサーバーが自動起動するように、以下のコマンドを実行する。\\ $ sudo chkconfig xinetd on - 設定の変更を反映させるために、以下のコマンドを実行する。\\ CentOS6、Fedoraの場合 $ sudo restart prefdm $ sudo service xinetd restart $ sudo service iptables restart CentOS 5 の場合はrestart prefdmではなく以下を実行する。 $ sudo gdm-restart $ sudo service xinetd restart $ sudo service iptables restart Fedora 16 $ sudo systemctl restart xinetd.service Fedora 18 以降 $ sudo systemctl restart gdm.service - クリップボードを共有するために、ユーザーがログオンした際に以下のコマンドが自動実行されるように設定する。\\  メニューより [システム]-[設定]-[他の個人設定]-[セッション] を開いて、自動起動するプログラムに以下のコマンドを追加する。 vncconfig -nowin ==== トラブルシューティング ====  **CentOS 6で以下のようなトラブルが発生する場合:**\\ * vnc 経由で管理者権限を必要とするアプリケーションが起動しない。 * スーパーユーザーでアプリケーションを実行すると以下のエラーが発生する。\\ No protocol specified Could not parse arguments: ディスプレイをオープンできません:  **解決方法:**\\ - /etc/X0.hosts を作成してホスト名を追加する。\\ ※"green.fireball.local:1.0" の場合は X1.hosts のようにディスプレイ番号に応じて作成する必要がある。 $ sudo vi /etc/X0.hosts /etc/X0.hosts の内容 localhost - prefdm を再起動する。 $ sudo restart prefdm  **CentOS 5で以下のようなトラブルが発生する場合:**\\ * vnc 経由で管理者権限を必要とするアプリケーションが起動しない。 * スーパーユーザーでアプリケーションを実行すると以下のエラーが発生する。\\ Xlib: connection to "green.fireball.local:0.0" refused by server Xlib: No protocol specified  **解決方法:**\\ - /etc/X0.hosts を作成してホスト名を追加する。\\ ※"green.fireball.local:1.0" の場合は X1.hosts のようにディスプレイ番号に応じて作成する必要がある。 $ sudo vi /etc/X0.hosts /etc/X0.hosts の内容 green.fireball.local - gdm を再起動する。 $ sudo gdm-restart ===== Xvnc+xinetd でセッション保持設定 =====  リモートサーバーに接続して長時間処理などを実行しておきたい場合は、Xvnc のセッションが保持されるように設定しておくと便利である。\\  以下では前述の設定に追記することを前提に説明する。\\ ==== 設定と反映 ==== - セッション保持用のサービスのポートを指定するために、以下の設定ファイルを修正する。\\ $ sudo vi /etc/services (行追加) vncsrvkeep01 5901/tcp # VNC Server(keep session 01) vncsrvkeep02 5902/tcp # VNC Server(keep session 02) vncsrvkeep03 5903/tcp # VNC Server(keep session 03) vncsrvkeep04 5904/tcp # VNC Server(keep session 04) vncsrvkeep05 5905/tcp # VNC Server(keep session 05) - スーパサーバーが起動するプログラムを設定するために、以下の設定ファイルを修正する。\\ $ sudo vi /etc/xinetd.d/vncserver (設定追加) service vncsrvkeep01 { disable = no nice = 10 flags = REUSE socket_type = stream wait = yes user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --PasswordFile=/etc/vncserver_passwd log_on_success += DURATION log_on_failure += HOST } service vncsrvkeep02 { disable = no nice = 10 flags = REUSE socket_type = stream wait = yes user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --PasswordFile=/etc/vncserver_passwd log_on_success += DURATION log_on_failure += HOST } service vncsrvkeep03 { disable = no nice = 10 flags = REUSE socket_type = stream wait = yes user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --PasswordFile=/etc/vncserver_passwd log_on_success += DURATION log_on_failure += HOST } service vncsrvkeep04 { disable = no nice = 10 flags = REUSE socket_type = stream wait = yes user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --PasswordFile=/etc/vncserver_passwd log_on_success += DURATION log_on_failure += HOST } service vncsrvkeep05 { disable = no nice = 10 flags = REUSE socket_type = stream wait = yes user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry 1600x960 -depth 16 --PasswordFile=/etc/vncserver_passwd log_on_success += DURATION log_on_failure += HOST } **注意:**\\  service vncsrvkeep01~05 の部分は /etc/services に追記したサービス名と一致していなければならない。\\  画面サイズ 1600x960 はお好みに応じて変更してください。 - vnc のパスワードファイルを作成する。 $ sudo vncpasswd /etc/vncserver_passwd Password: <-- パスワードを入力 Verify: <-- パスワードを入力 - Xvnc がパスワードファイルを参照できるようにパーミッションを設定する。 $ sudo chmod 644 /etc/vncserver_passwd - サービスのポートをファイヤウォールで許可するために、以下の設定ファイルを修正する。\\ CentOS $ sudo vi /etc/sysconfig/iptables (行修正) -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5905 -j ACCEPT Fedora $ sudo firewall-cmd --permanent --add-port=5901-5905/tcp - 設定の変更を反映させるために、以下のコマンドを実行する。\\ CentOS $ sudo gdm-restart $ sudo service xinetd restart $ sudo service iptables restart Fedora $ sudo systemctl restart gdm.service $ sudo systemctl restart xinetd.service $ sudo firewall-cmd --reload ===== VNCサーバの設定(vncserver サービス編) =====  この方法では、ユーザー1人につきポート5901より1ポートを消費します。また、VNCSERVERARGSの定義数が増えるとメモリーを多く消費します。\\ ==== 設定ファイルの修正 ==== /etc/sysconfig/vncservers の以下の箇所を参考に最終行に設定を追加 # VNCSERVERS="2:myusername" # VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost" VNCSERVERS="1:tomoyan 2:hogehoge" VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp -nohttpd" VNCSERVERARGS[2]="-geometry 1280x1024 -nolisten tcp -nohttpd" -localhost オプションが指定されているとリモートから接続することができないので注意。\\ ==== VNCSERVERS ==== VNCSERVERS="ディスプレイ番号: ユーザ名" ==== VNCSERVERARGS ==== VNCSERVERARGS[ディスプレイ番号]="-geometry 1024x768 -nolisten tcp -nohttpd" ==== VNCパスワードの設定 ==== $ su - tomoyan パスワード: $ vncpasswd Password: Verify: $ su - hogehoge パスワード: $ vncpasswd Password: Verify: ==== VNCサーバの起動とウィンドウマネージャの設定 ==== $ su - パスワード: # service vncserver start VNC サーバー を起動中: 1:tomoyan VNC サーバー を起動中: 2:hogehoge ~省略~ VNCサーバが起動すると以下の設定ファイルが作成されるので設定を変更する。\\ /home/tomoyan/.vnc/xstartup\\ #vncconfig -iconic & vncconfig -nowin & #xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & # twm & → 最終行の twm & をコメントアウト gnome-session & # → gnomeを起動するように変更 /home/hogehoge/.vnc/xstartup も同様に修正する。\\ VNCサーバを再起動すると設定が反映される。\\ # service vncserver restart ==== ファイアウォールの設定 ====  VNCサーバを利用するには以下のポートの開放が必要である。\\ tcp port 5900 マシン コンソールに接続する場合 tcp port 5901 ディスプレイ番号:1 に接続する場合 tcp port 5902 ディスプレイ番号:2 に接続する場合 ... ===== 参考文献 ===== [[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-tigervnc|第13章 TigerVNC Red Hat Enterprise Linux 7 | Red Hat Customer Portal]]\\ [[https://www.server-world.info/query?os=Fedora_34&p=desktop&f=6|Fedora 34 : VNC サーバーの設定 : Server World]]\\ [[qita>taconana/items/8a9b07ea686d68587281|CentOS8.3でVNCサーバをセットアップする手順 - Qiita]]\\ [[http://mo.kerosoft.com/0123|VNC Serverをxinetd経由で立てる方法 [Fedora 10] - Kerosoft : Modus Operandi]]\\ [[http://iseebi.half-done.net/?TechDoc%2FRemoteDesktopWithxinetd|伊勢的新常識 - xinetd + VNC でリモートデスクトップ]]\\ [[http://qx-xp.net/VNCserver.aspx|VNC-server]]\\ [[http://www.fedoraforum.org/forum/archive/index.php/t-1606.html|Vnc & Gdm [Archive] - FedoraForum.org]]\\ [[http://codeghar.wordpress.com/2009/06/11/remote-login-with-gdm-and-vnc-on-fedora-11/|Remote Login with GDM and VNC on Fedora 11 << Code Ghar]]\\