ようこそゲストさん

Kerosoft : Modus Operandi

2009/05/29(Fri) VNC Serverをxinetd経由で立てる方法 [Ubuntu Server 8.10]

はてブ情報 はてブに登録 はてブ数 2009/06/01 15:09 Software::Linux
VNC on Fedora 10VNC on CentOS 5.3に引き続き、Debian系のUbuntu Server 8.10でもVNC Serverを立てる必要が出来たので、そのメモ。

インストール

Ubuntuの場合はパッケージ名が違うので注意。
# apt-get install xinetd vnc4server

/etc/services

356行目辺りに次の一文を追加
vnc             5900/tcp                        # VNC Server

/etc/xinetd.d/vnc

次のように設定
service vnc
{
        disable         = no
        nice            = 10
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/bin/Xvnc
        server_args     = -inetd -query localhost -once -geometry 1024x768 -depth 16 -securitytypes=none -extension XFIXES
        log_on_success  += DURATION USERID
        log_on_failure  += USERID
}
設定値の内容については、Fedora 10の方法を参照。
ただし、Ubuntu限定で -extension XFIXESというパラメータが必要らしい。
これを付けないと、つないだ瞬間背景だけ表示されてvncviewerが落ちる。

xinetdを再起動
# service xinetd restart
 * Stopping internet superserver xinetd
   ...done.
 * Starting internet superserver xinetd
   ...done.

iptablesの確認

Ubuntuの場合はデフォルト全て許可なので、Firestarterを使ってたり、手でiptablesを書いている方は5900/tcpを許可する。

/etc/gdm/gdm.conf

以下の行をコメントアウト
Greeter=/usr/lib/gdm/gdmgreeter
RemoteGreeter=/usr/lib/gdm/gdmlogin
以下の行を変更
[xdmcp]
Enable=true
たしか変更したのはここだけだったと思うけど、念のため、全文の/etc/gdm/gdm.conf

再起動しておく
# service gdm restart
 * Stopping GNOME Display Manager...
   ...done.
 * Starting GNOME Display Manager...
   ...done.
これで接続すると、Debianのロゴが出てくる。



普通のUbuntuロゴに戻したい方はいったんログインして、System -> Administration -> Login Windowを開き、Remoteタブを開いてStyleを"Same as Local"にする。





後は、Localタブでお好みのStyleを選べばよい。

最終的に

こんな風にリモートでもローカル同様のログインパネルになります。



Ubuntu 9.10での設定 2010/05/11

8.xxとは色々変わったようで上記の設定のままを真似できないところがある。
いずれまとめなおそうと思っているが暫定でここら辺りが参考になる。(もう10.04とか出てるけど…)
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクはてブしていただけると助かります…。 コメントも歓迎です。

名前:  非公開コメント   

  • TB-URL  http://mo.kerosoft.com/0125/tb/

2009/05/29(Fri) VNC Serverをxinetd経由で立てる方法 [CentOS 5.3]

はてブ情報 はてブに登録 はてブ数 2009/05/29 15:18 Software::Linux
つい先日CentOSでもxinetd経由でVNCサーバーを立てることになったので、その記録。
基本的にはFedora 10の方法と同じだが、一つだけ違う。

/etc/servicesの編集

Fedoraと違ってCentOSには、/etc/servicesにvncの記述が無いので、以下の一行を追加する。
一応順番に並んでいるので、7955行目辺りが妥当。
vnc     5900/tcp            # VNC Server
後は、Fedora 10の方法を参照のこと。
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクはてブしていただけると助かります…。 コメントも歓迎です。

名前:  非公開コメント   

  • TB-URL  http://mo.kerosoft.com/0124/tb/
  • VNC Serverをxinetd経由で立てる方法 [Ubuntu Server 8.10] Kerosoft : Modus Operandi Keroberos
    VNC on Fedora 10、VNC on CentOS 5.3に引き続き、Debian系のUbuntu Server 8.10でもVNC Serverを立てる必要が出来たので、そのメモ。インストールUbuntuの場合はパッケージ名が違うので注意。# ...

2009/05/29(Fri) VNC Serverをxinetd経由で立てる方法 [Fedora 10]

はてブ情報 はてブに登録 はてブ数 2009/05/29 12:40 Software::Linux
私はLinux環境のメインディストリビューションとしてRedHatを7.1位から使っており、その後Fedoraに移ってきているが、ここではFedora 10でVNC Serverを立てる方法を紹介する。

インストール

まずはvncserverをインストール。
vncviewerの方はインストールした時に明示的にチェックを外していなければ、既にインストールされているかも知れない。
$ sudo yum install xinetd vnc vnc-server

xinetd

ここでvncserverコマンドを打ってやれば、現在ログインしているセッションに対してattachすることが出来るが、サーバーを再起動したりした際には立ち上げ直さねばならず、さらに1ユーザー毎にポートとプログラム、そしてVNC Passwordを用意しなければならない。
1ユーザーしか使わないにしても、平文で流れるVNC Passwordだけでユーザーコンソールにログイン出来てしまうのは非常に危険である。
そこで、xinetdというスーパーサーバーを通して、システム起動時から起動しておき、VNC認証ではなくローカルのユーザー名・パスワード認証を通させてから、ログインできるようにするのがこの方法。

まずは、設定ファイルを書く。
今後いくつかファイルを変更するので、rootになっておいた方が楽かな。
$ sudo su -
# vi /etc/xinetd.d/vnc
service vnc-server
{
    disable         = no
    nice            = 10
    flags           = REUSE
    socket_type     = stream
    wait            = no
    user            = nobody
    server          = /usr/bin/Xvnc
    server_args     = -inetd -query localhost -once -geometry 1024x768 -depth 16 --securitytypes=none
    log_on_success  += DURATION
    log_on_failure  += HOST
}
設定ファイルに関しての注意であるが、2行目まではこの通りに書くこと。
特にservice名をvnc-server以外にするとうまく動かない。この名前は/etc/servicesでポートとプロトコルを指定してる行の名前に対応させる必要がある。
あと、以前自分がハマったが、2行目の{をservice行の一番最後に書いた場合もうまく動かなかった。

設定値の説明

disable
このサーバーをxinetd経由で起動するかどうか。noにしておけば起動する。
nice
優先度を10下げる。(なんか、たまに切断後に暴走することがあるし…)
flags
接続ソケットを再使用させるためにREUSE。
socket_type
ネットワークのソケットタイプ。*1
wait
シングルスレッドかマルチスレッドかの設定。yesならシングルスレッドで、サーバーが起動したらそれが死ぬまで要求処理を停止する。noなら新たな要求を処理する。今回は複数人が同時ログイン可能にしておきたいので、noとする。
user
実行ユーザー。どーせ認証画面を出すので不用意にrootにしない方がいい。
server
xientd経由で起動するサーバーコマンド。
server_args
コマンド引数。詳細は以下。
log_on_success/log_on_failure
ログの設定。オプションとしては、ATTEMP(試行記録)、DURATION(サービス時間の長さ)、EXIT(終了ステータス)、HOST(ホストIP)、PID(プロセスID)、USERID(ユーザーID)などを記録できる。ただ、USERIDを書くとidentプロセスが確認にいって遅いことがあるので、あまりオススメしない。(Thanks to Sasaki

server_args

-inetd
inetd経由で起動させるモード。*2
-query localhost
ユーザー認証をさせるXDMCP(X Display Manager Control Protocol)のサーバー指定。自分自身でよい。
-once
ユーザーがVNCセッションを閉じたらXvncも終了して、xinetdの待ち受け状態だけにする。
-geometry 1024x768
解像度の設定。お好みで。
-depth 16
色数の設定。お好みで。
--securitytypes=none
XDMCP経由で認証させるため、VNC Passwordはかけない。

サーバー起動設定

# service xinetd start
xinetd を起動中:                                           [  OK  ]
# chkconfig --list xinetd
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off
ランレベル3-5くらいで起動させるようにしておけばOK。

iptables

ファイアウォールに5900番を開ける。
# vi /etc/sysconfig/iptables
 -A INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT
↑この行をCOMMIT行より前に記述

# service iptables restart
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]
iptables: 追加のモジュールを読み込み中:nf_conntrack_netbios[  OK  ]

接続確認

この状態で、サーバー的には接続できるようになっているはずである。
$ telnet localhost 5900
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
RFB 003.008
^]
telnet>quit
Connection closed by foreign host.
しかし、$ vncviewer localhostとして繋ぐと灰色の画面のまま、何も表示されないと思う。
これは以下のXDCMPがリモートログインを規制しているのが原因なので解除する。

*1 : stream(ストリーム型サービス)の他、dgram(データグラム型サービス)、raw(IP直接制御)、seqpacket(信頼できる連続データグラム交換サービス)があるらしい。詳細

*2 : ちなみにxinetdはinetdの拡張なのでxが無いことを気にする必要ない

gdm

Fedora 7位?までは、vncserverをyumで突っ込んでxinetd.dにファイルを書くだけだった気がするが、ここのところのFedoraはログイン認証周りの設定が強化されており、デフォルトではXDCMP経由のリモートログインが無効化されている。
Fedoraのデフォルトではディスプレイマネージャとしてgdmが使われているので、その設定ファイルを変更する。
以前は、X Windowシステム上で、[システム]→[管理]→[ログイン画面]と開けばgdmsetupが起動していたが、Fedora 8位からこの設定ツールがなくなったようなので、手で書くしかない。
# vi /etc/gdm/custom.conf
# GDM configuration storage

[xdmcp]
Enable=true

[chooser]

[security]
DisallowTCP=false
AllowRemoteRoot=false

[greeter]
IncludeAll=false

[debug]
あんまり中身についてはよくわからないので解説省略^^;
多分重要なのはxdcmpセクションのEnable=true。

gdmの再起動

gdmのみを再起動したいところなのだが、どうも簡単にはできない模様。色々試してみたが…。
一部ではinitを一旦3に下げて5に戻すといいらしいという話もあったが、ここでは素直にサーバーを再起動する。
# shutdown -r now

接続確認

今度はvncviewerで接続したら、グラフィカルなログイン画面が出てくるはず。


参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクはてブしていただけると助かります…。 コメントも歓迎です。

1: Sasaki 2009年07月04日(Sat) 午後9時37分

この方法で設定できましたが Fedora では WindowsXPからの起動が遅くなりました。
以下を参考に
http://d.hatena.ne.jp/ryo_1114/20090321/1237610440

/etc/xinetd.d/vnc を
log_on_success += DURATION
log_on_failure += HOST
に変更したら、早く起動しました。

2: Keroberos 2009年07月04日(Sat) 午後10時57分

>Sasakiさま
ありがとうございます。確かにUSERIDの確認に時間がかかるようですね。
記事にも修正を入れておきました。


名前:  非公開コメント   

  • TB-URL  http://mo.kerosoft.com/0123/tb/
  • VNC Serverをxinetd経由で立てる方法 [CentOS 5.3] Kerosoft : Modus Operandi Keroberos
    つい先日CentOSでもxinetd経由でVNCサーバーを立てることになったので、その記録。基本的にはFedora 10の方法と同じだが、一つだけ違う。/etc/servicesの編集Fedoraと違ってCentOSには、/etc/servicesにvnc...
  • VNC Serverをxinetd経由で立てる方法 [Ubuntu Server 8.10] Kerosoft : Modus Operandi Keroberos
    VNC on Fedora 10、VNC on CentOS 5.3に引き続き、Debian系のUbuntu Server 8.10でもVNC Serverを立てる必要が出来たので、そのメモ。インストールUbuntuの場合はパッケージ名が違うので注意。# ...