未来の自分へ。間違っていたらスマン。
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 。
修正して、リトライ。
おしゃ、きたでしょ、コレ。
んで、ログインすると、
できた~~~~~!










