[[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