27 February 2010

(Ubuntu 9.10) vncserver

Ubuntu 9.10でvncserverを使う設定

■ デスクトップ共有を行う場合

標準でインストールされているvino(リモート・デスクトップ)を有効化すると、デスクトップ共有のみが行える。 システム → 設定 → リモート・デスクトップ で設定する。

■ ユーザ権限で稼働させる場合

vncserverをインストールする。


# apt-get install vnc4server

接続したいユーザに移って、そこでvncserverを常駐実行する。たとえば、userに接続したい場合は、次のようにする。最初に起動するときに、パスワードの入力が促され、自動的に ~/.vnc/passwd が作成される。


# su - user

# vncserver :1 ← display=1 (5901/tcp) を開く例

iptablesを利用している場合は、vncserverのポートを開ける。例えば、192.168.1.0/24にアクセスを許可する場合は次のようにする。


# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5901 -j ACCEPT

クライアントにインストールされているvncviewerより接続する。


# vncviewer 192.168.1.101:1 ← xvnc4viewerを使う場合の例
# vinagre 192.168.1.101:1 ← アクセサリ → インターネット → リモートデスクトップビューワを使う場合の例

20100227-vnc-desktop.jpg

ログアウト後は vncserver の残骸が実行されたままになるため、強制的に停止する。


# vncserver -kill :1

■ gdmのログオンをさせる場合

vncserverと(インストールされていない場合は)xinetdをインストールする。


# apt-get install vnc4server
# apt-get install xinetd

vncserverがxinetdから起動できるように、設定ファイルを新規作成する。

/etc/xinetd.d/vnc

service vnc-2
{
disable = yes
socket_type = stream
wait = no
protocol = tcp
user = nobody
group = tty
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -once PasswordFile=/etc/passwd_vnc -extension XFIXES
}

上で赤に着色されている”サービス名”に対応するポート番号を定義する。

/etc/services

~ 省略 ~
ggz 5688/udp # GGZ Gaming Zone
vnc-1 5901/tcp # VNC Server (display:1)
vnc-2 5902/tcp # VNC Server (display:2)
vnc-3 5903/tcp # VNC Server (display:3)
vnc-4 5904/tcp # VNC Server (display:4)
x11 6000/tcp x11-0 # X Window System
~ 省略 ~

ログオン用のパスワードを作成する。


# vncpasswd /etc/passwd_vnc

# chown nobody:tty /etc/passwd_vnc

Gnomeログオン画面を表示させるため、GDMの設定を行う。custom.confファイルが無い場合、/usr/share/doc/gdm/examples/custom.conf からコピーしてから編集する。(/usr/lib/gdm/gdmlogin というファイルは存在しないが、この内容でよいらしい…)

/etc/gdm/custom.conf

# GDM configuration storage

[daemon]
RemoteGreeter=/usr/lib/gdm/gdmlogin

[xdmcp]
Enable=true

[chooser]

[security]

[debug]

/etc/gdm/gdm.schemas

~ 省略 ~
<schema>
<key>security/DisallowTCP</key>
<signature>b</signature>
<default>flase</default>
</schema>

<schema>
<key>xdmcp/Enable</key>
<signature>b</signature>
<default>true</default>
</schema>
~ 省略 ~

xinetdとgdmサービスをリスタートする。

iptablesを利用している場合は、vncserverのポートを開ける。例えば、192.168.1.0/24にアクセスを許可する場合は次のようにすればよいはずだが、gdmに接続できない… (Wiresharkでパケットをチラッと見てみたが、原因不明)


# iptables -A INPUT -p tcp -s 192.168.1.0/24 -m multiport
--dports 5901:5904 -j ACCEPT

# iptables -A INPUT -p tcp -s 192.168.1.0/24 -m multiport
--dports 6000:6007 -j ACCEPT

# iptables -A INPUT -p udp -s 192.168.1.0/24 -m multiport
--dports 6000:6007 -j ACCEPT

# iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 177 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.1.0/24 -m multiport
--dports 1024:65535 --sport 177 -j ACCEPT


20100227-vnc-gdmlogin.jpg

■ 参考リンク
Linux Post : [SOLVED] Ubuntu 9.10: Remote VNC Server login problem