HAYAGUI

FreeBSD 4.11 + howlでBonjour(Rendezvous)プリンタ

Rendezvous(ランデブー)がBonjour(ボンジュール)に変わりましたので、 差し替えました。

はじめに

mdnsd は、他のマシンからのマルチキャストDNSパケットに応答するだけだったような感じでした。 ので、howl を動かしてみました。

インストール

前回の mdnsd を止めて、自動起動(/usr/local/etc/rc.d/mdnsd.sh)もさせないように変更します。
eden# /usr/local/etc/rc.d/mdnsd.sh stop
eden# cd /usr/local/etc/rc.d/
eden# ls -la mdnsd.sh
-r-xr-xr-x  1 root  wheel  369 Apr  5 21:42 mdnsd.sh
eden# chmod 444 mdnsd.sh
eden# ls -la mdnsd.sh
-r--r--r--  1 root  wheel  369 Apr  5 21:42 mdnsd.sh
eden#

FreeBSD 4.11 に howl をインストールするのは、Ports からインストールするのが簡単です。

eden# pwd
/usr/ports/net/howl
eden# ls
Makefile        distinfo        files           pkg-descr       pkg-plist
eden# make install clean

インストール先は、こんな感じ。
eden# rehash
eden# which mDNSResponder
/usr/local/bin/mDNSResponder
eden#
eden#
eden# pwd
/usr/local/etc/rc.d
eden# ls mdnsresponder.sh
mdnsresponder.sh
eden#
mdnsresponder.sh は、起動スクリプトです。vi などで開くと、以下のようになっていますので、
mdnsresponder_enable=${mdnsresponder_enable-"NO"}
mdnsresponder_flags=${mdnsresponder_flags-""}
/etc/rc.conf に以下のように書くか、 mdnsresponder.sh を以下のように変更してください。
mdnsresponder_enable="YES"
mdnsresponder_flags=""
flags は後から追加しますけど、今のところなし。

起動させます。

eden# /usr/local/etc/rc.d/mdnsresponder.sh start
Starting mDNSResponder.
eden#
eden# ps -ax | grep mDNSResponder
14923  ??  Ss     0:00.02 /usr/local/bin/mDNSResponder
eden#
この状態で、前回のmdnsd と同じように、MacOSXから ホスト名.local で名前が引けます。

ここで一度止めておきましょう。

eden# /usr/local/etc/rc.d/mdnsresponder.sh stop
Stopping mDNSResponder.
eden#
止まらない時は、kill -9 プロセスID で止めてください。

動作確認

以下のようなネットワーク環境で動作を確認します。
+-----------------------------------------------+
| Linksys WRT54G 802.11g + Router + DHCP Server |
+-----------------------------------------------+
     |有線        |有線          :無線
+-------------+ +------------+ +-------------+
|mimi         | |eden        | |ibg4         |
|Windows2000  | |FreeBSD4.11R| |MacOSX10.3   |
|192.168.0.100| |192.168.0.8 | |192.168.0.101|
+-------------+ +------------+ +-------------+
mDNSResponder のオプションを確認します。
eden# /usr/local/bin/mDNSResponder -h
usage: /usr/local/bin/mDNSResponder [options]

Options:

-h              this help
-v              display version
-d              run in debug mode
-i ifname       run only on interface ifname
-a addr         run only on interface whose address is addr
-f config_file  load config_file

eden#
では、 /usr/local/etc/mdnsresponder.conf を作成して、 「このマシンは http サービスしてるんだよ。」という意味の設定を書きます。path は、ドキュメントルートです。
eden# pwd
/usr/local/etc
eden#
eden# cat mdnsresponder.conf
eden         _http._tcp      local.  80      path=/
eden#
では、デバッグモードと、設定ファイルを読込み指定で起動します。
eden# /usr/local/bin/mDNSResponder -d -f /usr/local/etc/mdnsresponder.conf
mDNSResponder starting up...
[howl] registered interface 192.168.0.8 (15110)
[howl] starting up... (15110)
Windows2000に Rendezvous for Windows Technology Preview 4 をインストールしたPCの InternetExplorer から、 このマシンが検出されます。

  • ツールバーのRendezvous(ランデブー)アイコンをクリックすると、左にツリーが表示される。
  • ツリー上に、eden と検出される。
  • ダブルクリックすると、こんな感じ。
FreeBSD が起動した時に、mDNSResponder がこの設定ファイルを読むようにするには、以下のように /usr/local/etc/rc.d/mdnsresponder.sh を変更します。

#mdnsresponder_flags=${mdnsresponder_flags-""}
mdnsresponder_flags="-f /usr/local/etc/mdnsresponder.conf"

Bonjour(Rendezvous)プリンタを作る

freebsd + howl っていうと、iTunes サーバ のネタが広まっていますが、 私はこれがやりたかったよ。

参考Web

FreeBSD 上で、CUPSが動いている時に、プリンタをBonjour(Rendezvous)プリンタとしてクライアントに公開してみます。 通常、CUPSはippだけサポートしていますので、 lpr と JetDirect(RAW) をサポートさせるには、以下のように /etc/inet.conf に書いて、inetd を再起動させる必要があります。
cups-lpd , lpr のパスは間違わないように。lpr は BSD-LPR と間違わないように。
printer stream tcp nowait root /usr/local/libexec/cups/daemon/cups-lpd cups-lpd
jetdirect       stream  tcp     nowait  root    /usr/local/bin/lpr lpr
尚、上記のJetDirectの場合、lprが指すプリンタはデフォルトプリンタとなります。プリンタを指定する場合は、-P オプションをつけてプリンタ名を指定してください。(例 -Phogehoge)

mdnsresponder.conf に以下のように書きます。公開するプリンタは、IEEE1284接続の EPSON PM-760C で、プリンタ名は pm760c です。lpr の場合はキュー(Queue)名となりますので、 rp で名前を設定する必要があります。ipp の場合もこんな感じ。

eden# cat /usr/local/etc/mdnsresponder.conf
eden    _http._tcp      local.  80      path=/
edenlpr     _printer._tcp         local. 515 rp=pm760c
edenipp     _ipp._tcp             local. 631 rp=printers/pm760c
edenraw     _pdl-datastream._tcp  local. 9100
eden#
mDNSResponder を再起動させるため、一旦 Ctrl+C で停止させて再度起動します。
eden# /usr/local/bin/mDNSResponder -d -f /usr/local/etc/mdnsresponder.conf
mDNSResponder starting up...
[howl] registered interface 192.168.0.8 (15171)
[howl] starting up... (15171)
^CmDNSResponder shutting down...
[howl] shutting down... (15171)
[howl] deregistered interface 192.168.0.8 (15171)
eden# /usr/local/bin/mDNSResponder -d -f /usr/local/etc/mdnsresponder.conf
mDNSResponder starting up...
[howl] registered interface 192.168.0.8 (15281)
[howl] starting up... (15281)

Windows2000に Rendezvous for Windows Technology Preview 4 をインストールすると Rendezvous Printer Wizard(プリンタウィザード)が追加されますので、起動します。 以下のようにプリンタが見えるはずです。

EPSON PM-760C なので、「Epson Stylus COLOR ESC/P 2」を選択して ipp,raw,lpr のプリンタを追加します。正式なプリンタは、後日確認します。

尚、lpr のポートモニタは、Standerd TCP/IP Port が使用されますが、 初期設定では「バイトカウント」が「無し」になっていますので、「有り」にする必要があります。

Windowsのテスト印刷ができました。

MacOSX もこんな感じにプリンタが検出されて、テキストエディタの mi から印刷できました。

でも多分、CUPSなので AirMac Extreme の時のように、プリンタとの双方向通信は期待できないと思います。

いろいろ見てみる

AirMac Extreme にUSBプリンタを接続した時、MacOSXに追加したプリンタのDeviceURIは、あたかもUSBがローカルにあるような感じでした。 今度はどうなんだろーと見てみたら、今度こそ、DeviceURI に mdns backend が設定されていました。
ibg4:~ kenz$ sudo cat /etc/cups/printers.conf
# Printer configuration file for CUPS v1.1.20rc1
# Written by cupsd on Wed Apr  6 00:07:34 2005
<Printer Canon_iP_4100>
Info Canon iP_4100
Location Base Station
DeviceURI file:///dev/null
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer edenipp>
Info edenipp
Location local.
DeviceURI mdns://edenipp._ipp._tcp.local.
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer edenlpr>
Info edenlpr
Location local.
DeviceURI mdns://edenlpr._printer._tcp.local.
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer edenraw>
Info edenraw
Location local.
DeviceURI mdns://edenraw._pdl-datastream._tcp.local./?bidi
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer EPSON_PM-760C>
Info EPSON PM-760C
Location Base Station
DeviceURI usb://EPSON/PM-760C
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<DefaultPrinter iP_4100>
Info iP_4100
Location ibg4
DeviceURI file:///dev/null
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer PM-760C>
Info PM-760C
Location ibg4
DeviceURI usb://EPSON/PM-760C?serial=B880331583166BJ700
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
<Printer pm760c>
Info pm760c
DeviceURI http://eden.local:631/printers/pm760c
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
ibg4:~ kenz$

印刷時に使われるTCPポートも IPP,LPR,RAW はそれなりに 631,515,9100 が使われています。 また、10000/tcp も開いていませんでした。プリンタをUSB接続にしても同じでした。

戻る



(C)1999 - 2005 Kenji Ito All rights reserved.