ともやん どっと ねっと


2012年5月20日(日) 21:34 JST

 

VNC(Virtual Network Computing)

 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は携帯用)から遠隔操作することができる。 す

Xvnc の設定(xinetd 編)

 この方法では、接続要求が発生するごとにメモリーを消費するので経済的です。この方法では、接続するとログイン画面表示されるので、ユーザーとパスワード入力してログインします。
 ルートのログインを許可することも可能ですが、標準の設定ではそのようにはなっていないのでおすすめはしません。

パッケージのインストール

  1. スーパーサーバー(xinetd)のパッケージをインストールする。
    # yum install xinetd
  2. リモートデスクトップ(vnc)のパッケージをインストールする。¥¥
    # yum install vnc vnc-server

設定と反映

  1. サービスのポートを指定するために、以下の設定ファイルを修正する。
    /etc/services (行追加)
    vncserver       5900/tcp                        # VNC Server
  2. スーパサーバーが起動するプログラムを設定するために、以下の設定ファイルを作成する。
    /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 に追記したサービス名と一致していなければならない。
     画面サイズ 1600×960 はお好みに応じて変更してください。

  3. vnc のパスワードファイルを作成する。
    # vncpasswd /etc/vncserver_passwd
    Password: <-- パスワードを入力
    Verify:   <-- パスワードを入力
  4. Xvnc がパスワードファイルを参照できるようにパーミッションを設定する。
    # chmod 644 /etc/vncserver_passwd
  5. GDM(Gnome Display Manager)の設定を変更するために、以下の設定ファイルを修正する。
    /etc/gdm/custom.conf (該当セクションに以下の内容を追記)
    [daemon]
    RemoteGreeter=/usr/libexec/gdmgreeter
    
    [xdmcp]
    Enable=true

     おすすめしないが、管理者ログインを許可したいのなら以下の設定を追加する。

    [security]
    AllowRemoteRoot=true

    Fedoraの場合は以下のように修正する。

    [security]
    DisallowTCP=false
    
    [xdmcp]
    Enable=true
  6. サービスのポートをファイヤウォールで許可するために、以下の設定ファイルを修正する。
    /etc/sysconfig/iptables (行追加)
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT
  7. OS 起動時にスーパーサーバーが自動起動するように、以下のコマンドを実行する。
    # chkconfig xinetd on
  8. 設定の変更を反映させるために、以下のコマンドを実行する。
    CentOS6、Fedoraの場合
    # restart prefdm
    # service xinetd restart
    # service iptables restart

    CentOS 5 の場合はrestart prefdmではなく以下を実行する。

    # gdm-restart
    # service xinetd restart
    # service iptables restart
  9. クリップボードを共有するために、ユーザーがログオンした際に以下のコマンドが自動実行されるように設定する。
     メニューより [システム]-[設定]-[他の個人設定]-[セッション] を開いて、自動起動するプログラムに以下のコマンドを追加する。
    vncconfig -nowin

トラブルシューティング

 CentOS 6で以下のようなトラブルが発生する場合:

  • vnc 経由で管理者権限を必要とするアプリケーションが起動しない。
  • スーパーユーザーでアプリケーションを実行すると以下のエラーが発生する。
    No protocol specified
    Could not parse arguments: ディスプレイをオープンできません:

 解決方法:

  1. /etc/X0.hosts を作成してホスト名を追加する。
    ※”green.fireball.local:1.0” の場合は X1.hosts のようにディスプレイ番号に応じて作成する必要がある。
    # vi /etc/X0.hosts

    /etc/X0.hosts の内容

    localhost
  2. prefdm を再起動する。
    # restart prefdm

 CentOS 5で以下のようなトラブルが発生する場合:

  • vnc 経由で管理者権限を必要とするアプリケーションが起動しない。
  • スーパーユーザーでアプリケーションを実行すると以下のエラーが発生する。
    Xlib: connection to "green.fireball.local:0.0" refused by server
    Xlib: No protocol specified

 解決方法:

  1. /etc/X0.hosts を作成してホスト名を追加する。
    ※”green.fireball.local:1.0” の場合は X1.hosts のようにディスプレイ番号に応じて作成する必要がある。
    # vi /etc/X0.hosts

    /etc/X0.hosts の内容

    green.fireball.local
  2. gdm を再起動する。
    # gdm-restart

Xvnc+xinetd でセッション保持設定

 リモートサーバーに接続して長時間処理などを実行しておきたい場合は、Xvnc のセッションが保持されるように設定しておくと便利である。
 以下では前述の設定に追記することを前提に説明する。

設定と反映

  1. セッション保持用のサービスのポートを指定するために、以下の設定ファイルを修正する。
    /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)
  2. スーパサーバーが起動するプログラムを設定するために、以下の設定ファイルを修正する。
    /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 に追記したサービス名と一致していなければならない。
     画面サイズ 1600×960 はお好みに応じて変更してください。

  3. vnc のパスワードファイルを作成する。
    # vncpasswd /etc/vncserver_passwd
    Password: <-- パスワードを入力
    Verify:   <-- パスワードを入力
  4. Xvnc がパスワードファイルを参照できるようにパーミッションを設定する。
    # chmod 644 /etc/vncserver_passwd
  5. サービスのポートをファイヤウォールで許可するために、以下の設定ファイルを修正する。
    /etc/sysconfig/iptables (行修正)
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5905 -j ACCEPT
  6. 設定の変更を反映させるために、以下のコマンドを実行する。
    # gdm-restart
    # service xinetd restart
    # service iptables restart

    Fedoraの場合はgdm-restartではなく以下を実行する。

    # restart prefdm

参考文献

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 に接続する場合
...
ようこそ: Guest (Guest)
linux/vnc.txt · 最終更新: 2012/03/14 01:31 by tomoyan
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Noncommercial-Share Alike 3.0 Unported