[[Pocketstudio.jp Linux Wiki]]
 #contents
 ----
 * VNC によるリモートからの X Windows 操作 [#v35efd4f]
 
  ここでは VNC(ブイ・エヌ・シー) を使ったリモートからの X Windows 操作を行うための設定方法を紹介しています。
 
 ** VNC って何? とりあえず、こんな画面。[#oab1e746]
 
 
 &ref(http://pocketstudio.jp/r_images/wiki_linux/2005/desktop.jpg,vnc_desktop,,,,,600x450,vnc);
 
  見たところ普通の Windows XP の画面ですが、良く画面の中を見てください。X Window のスクリーンが見えますか? Fedora の部分です。Windows から VNC を経由して Fedora Core 4 サーバに接続しています。
 
  VNC を使えば、Windows のリモートデスクトップのように、簡単にネットワーク上にあるサーバにグラフィカルなアクセスが可能となります。しかも VNC サーバは無料、VNC クライアントも無料版があります。
 
  ホスティングやレンタルサーバ、あるいは自宅サーバだけどディスプレイつけるのが面倒だとか、そういった問題を一挙に解決してくれるのが VNC です。Fedora Core 4 では Vnc バージョン 4 が搭載されています。
 
  なお、標準のままだと tmm((X Window でデフォルトとなっているウインドウ・マネージャの事です)) が起動してしまいますので、上の画像のような gnome インターフェースを表示するのが本文章の目的です。
 
 * VNC サーバ設定 [#m145edd0]
 ** vnc-server のセットアップ [#h32f323a]
 
  VNC サーバの設定方法には2つあります。1つは直接ポートを開く方法。この方法では「各ユーザ毎」の VNC 設定が必要です。ですが逆に「VNCを利用させるユーザを限定」させる事もできます。ただ、セキュリティ的には甘いので別途 iptables でポートの制限を行うことを推奨します。
 
  もう1つの方法は xinetd を経由させる方法です。この方法の利点は「任意のユーザに X Window へのログインを許可する事」と「xined を経由するのでセキュリティ設定が容易に出来る((iptablesの設定をしなくてもよく、/etc/hosts.allow で制限ができる))」事が挙げられます。
 
 ** VNC サーバのインストールと確認 [#s995a69f]
 
  まずサーバ側では vnc-server パッケージのインストールが必要です。
 
  # rpm -qa vnc-server
  vnc-server-4.1.1-10
  このようにコマンドを実行して RPM パッケージがセットアップされていなければ、インストールが必要になります。yum を使ってインストール可能です。
  # yum -y install vnc-server
  インストールが終わったら、以下のコマンドでパッケージ情報を念のため確認します。
 
  # rpm -qi vnc-server
  Name        : vnc-server                   Relocations: (not relocatable)
  Version     : 4.1.1                             Vendor: Red Hat, Inc.
  Release     : 10                            Build Date: 2005年04月27日 15時44分11秒
  Install Date: 2005年06月14日 19時13分25秒      Build Host: decompose.build.redhat.com
  Group       : ユーザーインターフェイス/X   Source RPM: vnc-4.1.1-10.src.rpm
  Size        : 3054396                          License: GPL
  Signature   : DSA/SHA1, 2005年05月21日 03時28分29秒, Key ID b44269d04f2a6fd2
  Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
  URL         : http://www.realvnc.com
  Summary     : VNC サーバー
  Description :
  VNC システムを使用すれば各種のプラットフォーム群から一つのデスクトップ
  にアクセスすることができます。このパッケージは VNC サーバーを含んでいて
  これを使用すれば、自分のマシンのデスクトップに対するアクセスを他人に許
  可することができます。
 
  次にサーバ起動時のランレベルを5にします。はじめからサーバ上で X Window を動作させるためです。
  # vi /etc/inittab
  ファイルを開いて 18 行目を探します。
  id:5:initdefault:
  このようになってれば、既に X Window が起動するモードなので設定は不要です。
  id:3:initdefault:
  上記のようなランレベルが3になっている場合は5と書き換えます。
 
  ファイルの編集が終わった後はサーバの再起動を行います。再起動後 X Window 画面が開くかどうか確認してください。
 
 ** VNC サーバ設定例1(直接ポート番号を指定する方法) [#ne92d808]
 
 ※xinetd を経由して複数ユーザに VNC 経由のログインを考えている場合は、この設定例1をとばして[[設定例2:http://pocketstudio.jp/linux/?FC4%2FVNC%A4%CB%A4%E8%A4%EB%A5%EA%A5%E2%A1%BC%A5%C8%A4%AB%A4%E9%A4%CE%20X%20Window%20%C1%E0%BA%EE#wf9d62ea]]に進んでください。設定方法がかなり違うためです。逆に、設定例1を使う場合は設定例2を行う必要はありません。
 
  まず、設定したい一般ユーザでパスワードファイルの設定を行います。もし root であれば "su - ユーザ名" を実行して、一般ユーザになってください。
 
 ※root での設定も可能ではありますが、セキュリティ上あまりおすすめしません(パスワード情報は暗号化されていないためです。root で設定を行うことも可能ですが、Vnc-client が無償版の場合、暗号化はサポートされていないので、それなりのリスクを伴うことをご理解の上、root に対して作業ください。)
 
  作業としては、vnc パスワード格納用のディレクトリを作成し、パスワードを設定します。
  $ cd
  $ mkdir .vnc
  次にパスワードを設定します。
  $ /usr/bin/vncpasswd ./.vnc/passwd
  Password:
  Verify:
  画面にパスワードは表示されませんが、確認も含めて2回入力します。
 
  その次に X Window 用の初期化ファイルをコピーします。
  $ cp /etc/X11/xinit/xinitrc ./xstartup
  知識のある方はコピーせず、直接 xstartup ファイルを編集して任意のウインドウ・マネージャを実行させることも出来ます。
 
  複数のユーザに対して許可したい場合は、そのユーザ分だけ設定を行ってください。ユーザ毎に別々のパスワード(ここでのパスワードは VNC 接続を行うときのパスワードです。linux サーバへログイン時のものとは別でも構いません)を設定することが出来ます。
 
  次に root ユーザ権限に変わります。
 
  root 権限で /etc/sysconfig/vncserver を編集します。&br;
  root 権限で /etc/sysconfig/vncservers((元は/etc/sysconfig/vncserverになっていました。typoと思われるので修正しました))を編集します。&br;
  記述方法は以下のような書式です。
  VNCSERVERS="ディスプレイ番号:ユーザ名"
  たとえば sakura というユーザにディスプレイ番号1(ディスプレイ番号は1以上を設定します。何故かというとディスプレイ番号0はサーバ本体に直結されているディスプレイ番号を指すからです)を記述します。
 
  VNCSERVERS="1:sakura"
 
 
  最後にサーバ起動時に自動で起動する設定にしておきます。
 
  # /sbin/chkconfig --level 5 vncserver on
  # /sbin/chkconfig --list vncserver
  vncserver       0:off   1:off   2:off   3:off   4:off   5:on    6:off
  このように chkconfig 側の設定は完了です。
 
  では、実際に起動して VNC 経由の接続ができるようにしてみます。
 
  # /etc/init.d/vncserver start
  VNC サーバー を起動中: 1:sakura
  New 'akane:1 (sakura)' desktop is akane:1
  
  Starting applications specified in /home/sakura/.vnc/xstartup
  Log file is /home/sakura/.vnc/akane:1.log
  正常起動すると上記のような記録が残ります。これは akane サーバ上の sakura アカウントに対してディスプレイ番号 1 の許可(akane:1)を行ったという意味です。
 
  あとは VNC Client を起動して "IPアドレスかホスト名:1" として接続が可能です。
 
  特にパケットフィルタリングをしていなければ http://サーバ名:5801/ として Java アプレット経由でのログインが可能です。これはクライアントをインストールしていなくても稼働できるので、実は結構便利な接続方法だったりします。
 
  クライアントの接続画面が開いたら、パスワードはログイン時のものではなく、vncpasswd コマンドで設定した vnc 用のパスワードを入力します。正常に入力すると X のセッション画面が開きます。
 
  以上で設定は終わりです。
 
  あとは、セキュリティ上の対策として接続ポートを 5901 や 5801 に特定のホストやネットワークのみに許可するよう iptables の設定をしておくのが良いと思います。
 
 ** VNC サーバ設定例2(xinetd 経由での接続) [#wf9d62ea]
 
  xined 経由の場合は xinetd 用のファイル設置と /etc/services に対してサービスを行うポートを指定します。
 
  まずサービスファイルの設定です vi /etc/services
 
  # vi /etc/services
 
  ファイルを開いたら、末尾に以下のような行を追加します。
 
  # Local services
  vncserver       5901/tcp                        # Vnc Server 1024x768
  vncserver2      5902/tcp                        # Vnc Server 800x600
 
 
  ここで1つ覚えておくのがディスプレイ番号1の時に開かれるポート番号は 5901 です。5900 + ディスプレイ番号が''接続するポート番号''となります。この 5901 というポートを VNC サーバが使うと明示するため /etc/services に設定の記述を行います。
 
  ここで2つ設定していますが、接続ポートによって VNC クライアントの解像度を分けるために記述しました。接続ポート(ディスプレイ番号)によって解像度は固定されてしまうからです。
 
  この例ではディスプレイ番号"1"の時に "1024×768" の解像度、ディスプレイ番号"2"の時に "800×600" の解像度で表示するように設定します。
 
  次は VNC サーバ接続用のパスワードを設定します。
 
  # /usr/bin/vncpasswd /etc/passwd_vnc
  Password:
  Verify:
  画面にパスワードは表示されませんが、確認も含めて2回入力します。注意しなくてはいけないのは、このパスワードが VNC サーバに接続する全ユーザに共通のもの、という事です。VNC サーバ用に任意のパスワードを決めて、接続を許可するユーザだけパスワードを教えるという運用方法もありますね。
 
  所有者の情報を変更しておきます。
  # chown nobody:nobody /etc/passwd_vnc
 
  次は xinetd 側の設定です。設定用のファイルを作成します。
 
  # vi /etc/xinetd.d/vncserver
 
  ファイルを開いたら、以下の記述を行います。
 
  service vncserver
  {
          disable         = no
          socket_type     = stream
          wait            = no
          user            = nobody
          group           = tty
          server          = /usr/bin/Xvnc
          server_args     = -inetd -geometry 1024x768 -depth 16 -query localhost
                      -once PasswordFile=/etc/passwd_vnc
  }
  
  service vncserver2
  {
          disable         = no
          socket_type     = stream
          wait            = no
          user            = nobody
          group           = tty
          server          = /usr/bin/Xvnc
          server_args     = -inetd -geometry 800x600 -depth 16 -query localhost
                                        -once PasswordFile=/etc/passwd_vnc
  }
 
  画面の関係上 "server_args" の行が2行にわたっていますが、こちらは必ず1行で続くようにお願いします。そうしないと起動時にエラーとなります。
 
  設定を反映させるために xinetd の再起動を行います。
 
  もし xinetd のインストールがされていない場合は[[xinetdのインストール:http://pocketstudio.jp/linux/?FC4%2Fxinetd]]を行ってください。
 
 
  # /sbin/service xinetd restart
  xinetd を停止中:                                           [  OK  ]
  xinetd を起動中:                                           [  OK  ]
 
  もし後で接続が出来ないようであれば、xinetd 関係のトラブルが多いと思います。エラーは /var/log/messages ファイルに記録されるので、xinetd 再起動時に何かエラーが出ていないかどうかチェックされることを推奨します。
 
  以下のようなエラーが出たときは xinetd がセットアップされていません。
 
  # /sbin/service xinetd restart
  xinetd: unrecognized service
 
  こちらのページを参考にして[[xinetdのインストール:http://pocketstudio.jp/linux/?FC4%2Fxinetd]]を行ってください。
 
 
  次に各種設定を行います。xdm の設定ファイルを編集します。
 
  # vi /etc/X11/xdm/xdm-config
  ファイルを開いたら、末尾の行を探して、
  DisplayManager.requestPort:     0
  これを ! 記号を使ってコメントします。
  ! DisplayManager.requestPort:     0
 
  その次は Xaccess ファイルの編集です。
  # vi /etc/X11/xdm/Xaccess
  ファイルを開くと以下のように 40 行目がコメントされています。
  # *                                     #any host can get a login window
  このコメントを削除します。
  *                                       #any host can get a login window
 
  ここで殆どの設定は終わりました。ただ、この段階では接続時のウインドウ・マネージャの画面がデフォルトのショボイものになってしまいます。。。
 
 &ref(http://pocketstudio.jp/r_images/wiki_linux/2005/vnc2.jpg,vnc_desktop,,,,,600x450,vnc);
 
  ちょっとこれじゃ、、ですよね。普通の画面を表示させるにはもう1つ設定を行います。
  # vi /etc/X11/gdm/gdm.conf
  これでファイルを開き、52 行目を編集します。
  #RemoteGreeter=/usr/bin/gdmlogin
  このように設定ファイルはコメントされていますが、
  RemoteGreeter=/usr/bin/gdmgreeter
  このようにコメントをはずして、記述も gdmgreeter にします(これを忘れると画面が寂しくなります……)。
 
  同じく gdm.conf 内で 265 行目を探します
 
  [greeter]
  # Greeter has a nice title bar that the user can move
  TitleBar=false
  # Configuration is available from the system menu of the greeter
  ConfigAvailable=false
  この部分を false から true に書き換えます。
  ConfigAvailable=true
 
  引き続き gdm.conf の 210 行目が Enable=false であれば true に書き換えます。
 
  [xdmcp]
  # Distributions: Ship with this off.  It is never a safe thing to leave
  # out on the net.  Setting up /etc/hosts.allow and /etc/hosts.deny to only
  # allow local access is another alternative but not the safest.
  # Firewalling port 177 is the safest if you wish to have xdmcp on.
  # Read the manual for more notes on the security of XDMCP.
  Enable=true
 
  この記述を忘れると X のセッションが接続できても、画面が真っ暗になってしまいます((私はここでハマってました……))。
 
  あとは、良く見慣れたログイン画面で VNC からも接続が可能です。
 
 &ref(http://pocketstudio.jp/r_images/wiki_linux/2005/vnc1.gif,vnc_desktop,,,,,600x450,vnc);
 
  最終的に設定を反映させるためにはサーバの再起動が必要です。再起動後に VNC クライアントからの接続を確認します。
 
  # /sbin/reboot
 
 
 *** アクセス制限 [#ue18bed7]
 
  Xinetd 経由の場合、ネットワークやホストの制限を /etc/hosts.allow /etc/hosts.deny によって比較的簡単に行うことができます。出来ればセキュリティの安全上、設定されておくことをおすすめします。
 
  まず、/etc/hosts.deny で全ての接続を拒否させるようにします。
  # vi /etc/hosts.deny
 
  Xvnc: ALL
 
  次に /etc/hosts.allow で許可するネットワークやホストを記述します。
  Xvnc: .example.jp
  Xvnc: 192.168.0.0/16
 
  接続の成功や拒否されたという記録は /var/log/secure に残ります。
 
 * VNC クライアント(Windows)からの接続 [#n3d9e707]
 
 ** VNC クライアントの入手 [#fda36a8f]
 
  VNC クライアントは窓の杜などから[[ダウンロード:http://www.forest.impress.co.jp/lib/inet/servernt/netuty/vnc.html]] できます。無償版は暗号化がサポートされていませんが、有償版になるとセッションの暗号化までサポートされているようです。詳しくは[[オフィシャルサイト(英語):http://www.realvnc.com/]]をご覧下さい。
 
  ファイルをダウンロードしたら、画面の手順通りインストールを進めていきます。
 
 +【 vnc-4_1_1-x86_win32.exe 】のクリック
 +「セキュリティの警告」が表示されますが【 実行(R) 】をクリック
 +"Welcome to the VNC Setup Wizard"が表示されます。右下の【 Next > 】をクリック
 +"License Agreement" はライセンスに同意しますので【 I accept the agreement 】をクリックして【 Next > 】をクリック
 +インストール先は特に指定がなければ、そのまま【 Next > 】をクリック
 +ここで VNC Server は不要なので、クリックしてチェックをはずしておきます。そのあと【 Next > 】をクリック
 +プログラム・メニューに表示される名前です。そのまま【 Next > 】をクリック
 +アイコンを作るか?と出ています。【 Next > 】をクリック
 +最終確認画面です。【 Install 】をクリックします。
 +その後の画面で【 Next > 】、最後に【 Finish 】をクリックしてセットアップ完了です。
 
 ** VNC クライアントを使ってアクセス [#e85698f3]
 
 +VNC Viewer を起動します。デスクトップにアイコンがあれば【 VNC Viewer 4 】をクリックします。メニューの場合は【 スタート 】→【 プログラム(P) 】→【 RealVNC 】→【 VNC Viewer 4 】→【 Run VNC Viewer 】で起動します。
 +"VNC Viewer"が起動します。"Server"の部分に接続したいサーバのホスト名とディスプレイ番号を記述します。たとえばサーバ名が "www.example.jp"、ディスプレイ番号が"1" の場合は【www.example.jp:1】と入力します。サーバ名が"db.example.jp"ディスプレイ番号が"3"であれば【db.example.jp:3】のように入力します。
 +サーバ情報を入力したら【 OK 】をクリックします。
 +(もしこの段階で正常に接続できない場合、iptables の制限がかかっていないかや xined 側で何かポートを開く時にエラーが出ていないか確認が必要となります)
 +接続に成功すると"Password:" 欄に VNC をセットアップした時の接続パスワードを入力して【 OK 】を押します。
 
  正常に接続できると、ログイン画面のセッションが表示されます。あとは普通にユーザアカウントとパスワードを入力して、次のように普通に画面が表示されれば成功です。
 
 &ref(http://pocketstudio.jp/r_images/wiki_linux/2005/vnc3.jpg,vnc_desktop,,,,,600x450,vnc);
 
  あとは、普通の X Window の操作が可能です。ネットワークを経由すると多少重たいと感じる場合もあるかもしれません。その場合は色の鮮度を落としたり、解像度を小さくしてみると良いですよ。
 
 * 参考資料 [#d55382f3]
 :基本リソース|各種 man および README
 :VNC-ML "RedHat and VNC server xinetd and init.d"| http://www.realvnc.com/pipermail/vnc-list/2005-March/049889.html
 :-inetd | http://www.realvnc.com/products/free/4.1/man/Xvnc.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS