Xvnc


未来の自分へ。間違っていたらスマン。

x11vnc は、画面上に twm などのウィンドウマネージャ が立ち上がっている状態にしておいて vnc 接続するものだ。それゆえ、現状では、FreeBSD マシンの電源を入れたら自動的に SLiM でユーザログインさせて .xsession が動き出すようにしておき(.xinitrc は startx の場合)、twm が起動した頃合を見計らって vnc クライアントから接続を試みる。

Xvnc の場合は、Xサーバの機能を持ちつつ vnc接続ができる。であるから、理屈的には、vnc クライアントで接続した段階では、Xming で表示するのと同じような画面遷移で、xdm などのディスプレイマネージャから表示する・・・はずだ?(ぉぃ)

ただし、Xサーバの機能が働くのは、Xming の場合はMS-Windows など Xming をインストールしたコンピュータであり、Xvnc の場合はFreeBSD マシン上で動作する。だから、どっちに負荷をかけるか選択して使用することになる・・・と思う?(ぁぅ)。

はい。

今回は、jail 環境下でのお話。

net/vnc

vnc 4.1.3_4

# cd /usr/ports/net/vnc
# make config-recursive
# make install clean

て、Xサーバの役割を持っているだけあってか・・・make 時間かかるなぁ。

あ、「vncserver :ディスプレイ番号」だそうですよ。

さて、動かしてみましょうか・・・っと。

> vncserver :0

You will require a password to access your desktops.

Password:
Verify:
A VNC server is already running as :0

パスワードを変更したようだ・・・ん? already running !?

クライアントから接続してみるが、繋がらないよ・・・じゃぁってことで。

> vncserver
vncserver: no free display number on hoge

なんで空いてないねん!

ぐぐった。

ぎょぎょ! あった!

Creating A Jail With VNC Server On FreeBSD ← 元記事 ( original )

やってみた。

/usr/local/bin/vncserver の中の CheckDisplayNumber 関数を探して、その中の 2 箇所の pack を sockaddr_in に書き換える。具体的には、

sub CheckDisplayNumber
{
    local ($n) = @_;

    socket(S, $AF_INET, $SOCK_STREAM, 0) || die “$prog: socket failed: $!\n”;
    eval ‘setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack(“l”, 1))’;
#   if (!bind(S, pack(‘S n x12’, $AF_INET, 6000 + $n))) {
    if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
        close(S);
        return 0;
    }
    close(S);

    socket(S, $AF_INET, $SOCK_STREAM, 0) || die “$prog: socket failed: $!\n”;
    eval ‘setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack(“l”, 1))’;
#   if (!bind(S, pack(‘S n x12’, $AF_INET, 5900 + $n))) {
    if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
        close(S);
        return 0;
    }
    close(S);

↑この様な感じ。

もう一度起動してみた。

> vncserver

New ‘xorg.hoge.net:1 (user)’ desktop is xorg.hoge.net:1

Starting applications specified in /home/user/.vnc/xstartup
Log files is /home/user/.vnc/xorg.hoge.net:1.log

ディスプレイ番号 0 は、もともと動いている Xorg が使っている。 なので、Xvnc は、次の 1 が割り当てられるとか。

起動したっぽい!!!!

vnc クライアント xorg.hoge.net:1 へ接続!

どど~ん!

・・・て、何か違う・・・なんだろう・・・・あっ! xdm が表示されてない! いきなり、twm が出てる!

じゃぁなにさ、先にターミナルでユーザログインしてから vncserver 起動しないと使えないってわけ? それなら、x11vnc でイイしぃ。

その後、

Xvnc を inetd で動かすことで、ディスプレイマネージャを起動できるらしい記事を発見。一度見つけると、他のサイトでも出てくるわ、出てくるわ。

つーことでやってみる。

/etc/services

vnc5901     5901/tcp   # Xvnc Display Number 1

/etc/inetd.conf (下記はすべて1行で書く)

vnc5901    stream    tcp    nowait    nobody    /usr/local/bin/Xvnc    Xvnc -inetd -query localhost -once -geometry 1024×640 –securitytypes=none

–securitytypes=none は、vncパスワード無しという意味。

  • スペルミスをしたはまったのでメモしておく。securitytypes 間違えないように。Xvnc -help 参照。

必要に応じて、 /etc/hosts.allow も書き換えておく。

Xvnc    : 192.168.0.0/255.255.255.0 : allow

で、

# /etc/rc.d/inetd restart

からの~、vnc 接続を試す。

って、xdm が表示されないでしょう。なぜだなぜだ・・・・と、ログをみたら。

/var/log/xdm.log

xdm error (pid 11251): server open failed for www:1, giving up
xdm error (pid 9465): Display www:1 cannot be opened
xdm error (pid 9465): Display www:1 is being disabled

www ってなんだぁぁぁぁ!?!?!?!

www、www、www、www、www、落ち着け、落ち着け。むんっ ホスト名か!

/etc/rc.conf を見たら、自身のサーバ名が、xorg.hoge.net になってるのに、/etc/hosts を見たら、www.hoge.net になってた・・・まーさーにぃ orz 。

修正して、リトライ。

おしゃ、きたでしょ、コレ。

んで、ログインすると、

できた~~~~~!

 

 

 

Leave a Comment