Tag Archives: Xming

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 。

修正して、リトライ。

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

んで、ログインすると、

できた~~~~~!

 

 

 

ハードウェア環境のめも

現在のハードウェア環境を記録しておく。

FreeBSD側

  • CPU : Intel Celeron 1.70GHz
  • RAM : 1GB
  • HDD : 300GB
  • OS : FreeBSD 8.2R
  • Net : LAN 内のみで外部非公開。

Windows側

  • CPU : Intel Core2 Duo 2.53GHz 2.53GHz
  • RAM : 4GB
  • HDD : 250GB
  • OS : Windows 7 Home Premium SP1 (64bit)

FreeBSD を主にサーバとして terminal でゴリゴリやってた。デスクトップ環境に興味が沸いたので、jail環境を作って試してるヤツ。ゴリゴリと言っても、サーバ環境の調整がほとんど。この機材はテスト環境。FreeBSD にはモニタを繋いでないので、Windows に Xming を入れて X-Window 画面を見ることにした。

ここは、単なる暇つぶしのお遊びサイト。過去に、やったことを記録せず、毎度同じことを調べなおしたという失敗を生かして。成長したな俺。いずれ見返した時に、ちがうんじゃねソレとツッコミどころ満載なブログでしょう。

 

Xming for Windows インストール

1) Xming ダウンロード

Xming X Server for Windows

2) Windows 7 にセットアップ

 ex : Xming-6-9-0-31-setup.exe

3) C:\Program Files\Xming\X0.hosts に加筆

 C:\Program Files\Xming\X0.hosts に接続先IPアドレスを書いておくと後でつまずかない。

4) XLaunch から起動

* Open session XDMCP を選択。

* -screen 0 1024 640 ( ディスプレイ解像度は好きなように )

 Save configuration を押しておけば幸せ。

 

pkg_add -r xorg と x11/xdm - ディスプレイマネージャ (in a jail)

jail 環境で ports x11/xorg からの make でエラーが出たので、package を試してみることにした。 

(参照:6.3 X11のインストール

# pkg_add -r xorg

port で make した時はエラーが出たが、さすが package 。難なく入ったっぽい。 

/etc/rc.conf に下記を追加。

hald_enable=”YES”
dbus_enable=”YES”

続けて、xdm をインストールする。

# cd /usr/ports/x11/xdm
# make config-recursive
# make install clean

 /etc/ttys

#ttyv8  “/usr/local/bin/xdm -nodaemon”  xterm   off secure
ttyv8   “/usr/local/bin/xdm -nodaemon”  xterm   on secure

/usr/local/lib/X11/xdm/Xaccess

#*                                     #any host can get a login window
*                                       #any host can get a login window

XDMCP プロトコルで接続するので↓

/usr/local/lib/X11/xdm/xdm-config

!DisplayManager.requestPort:    0
DisplayManager.requestPort:     177

ログインするユーザのディレクトリに .xsession を作る。-geometry のサイズは画面サイズに合わせて中央に設定しているだけ。パーミッションは644 でOK。

#!/bin/sh

xterm -geometry 80×40+269+57

 

 で、再起動後、別PC にインストールしてある Xming で試してみた、が接続できない。

# ps aux

xdm が起動していなかった

 

ので・・・、

暫定的に FreeBSD 起動時にサービスを起動させてみる。 xdm が自動起動するように、

 /usr/local/etc/rc.d/xdm.sh を作って、パーミッションを 755 にする。

#!/bin/sh

/usr/local/bin/xdm

/etc/ttys の記述を戻す。

ttyv8  “/usr/local/bin/xdm -nodaemon”  xterm   off secure
#ttyv8   “/usr/local/bin/xdm -nodaemon”  xterm   on secure

で、再起動。

# ps aux

xdm が起動したので 別PC の Xming から接続を試みる。

 

動いた!

/usr/local/etc/rc.d/xdm.sh を作ったが、場当たり的なモノなのだから。