Canon PIXUS iX6830がStandard TCP/IPに対応してない不便
仕事先でA3用紙に印刷する目的で「PIXUS iX6830」というCanonのインクジェットプリンターを使用しているのですが、この機種は実に維持管理がやりにくいです。なぜなら公式のドライバインストーラーで作成すると、「Canon BJ Network Port」というCanon独自のポートを作成するので後から修正が出来ません。
USB接続で使用している場合はそれほどでもありませんが、管理上の不都合が生じるのは、ネットワーク接続で使用している場合なのです。
ネットワーク接続している時点で、複数のWindowsパソコンからプリントアウトすることになると思うので、いちいちPCの台数分の手間が発生します。
具体的には下記のようなケースではかなりストレスを感じます。
- プリンターのIPアドレスの変更時
- Wi-Fi接続からイーサネット接続に変更時(逆もしかり)
- 故障やインク吸収体フルでプリンター本体交換時
ネットワークアドレス(IPアドレス)とMACアドレスを組み合わせた情報で「Canon BJ Network Port」をインストーラーが作成している様ですが、プリンター設定画面から変更できないのが課題となります。
なぜ、Standard TCP/IPでLPRポートを作成させてくれないのか?かなり疑問のある製品なのですが、Canonは独自実装を好む傾向があるので察するしかありません。
しかも、ドライバインストーラーは、セグメント内の自動検出から行う仕様になっており、IPアドレスを指定することが出来ません。セグメント違い(ルーター越え)の場合は検出されませんので、いちいちPCのIPアドレスをプリンターと同一セグメントにアドレスに一時的に変更してインストーラーに検出させる手間が発生します。せめてインストーラーでIPアドレスを指定できればまだマシなのですが・・(インストーラーを作った人のセンスが悪いと思う)
解析して技術的に管理の手間を減らしたい
Windowsのプリンター設定の多くは、レジストリに保存されていることが多いです。幸いというかMACアドレス値はユニークな値なので、既に設定されているプリンターのMACアドレスを元にレジストリを検索してみると発見することが出来ました。
レジストリの保存場所
レジストリ内を検索することでレジストリの保存場所を特定しました。
KEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Monitors\Canon BJNP Port\PortsCode language: PHP (php)
ここにBJ Network Portが保存され3個のレジストリ値が入っています。
- TargetAddress(DWORD)
- TargetMAC(TEXT)
- TargetPort(DWORD)
TargetAdressについて
TargetAdressは、IPv4アドレスが16進数に変換されている様です。更に4つのオクテットの順序が逆転して、第4オクテット、第3オクテット、第2オクテット、第1オクテットの順に変えられて連結されています。この逆転させることをリトルエンディアンと呼ぶ様です。なにか理由があるのでしょう。
TargetMacについて
MACアドレスについてはそのままテキスト形式で保存されている様です。
TargetPortについて
インストーラーでポートを作成すると、16進数で「21a3」が登録されています。16進数「21a3」から10進数に変換すると「8611」となり、Canon独自のネットワーク印刷プロトコルが、 UDP 8611番を使っていることからUDPポート番号である裏付けが取れました。
参考までに記しておくと、ExcelやLibreCalcでは関数「DEC2HEX」を使うことで10進数から16進数に変換できます。逆に16進数を10進数に変換するには「HEX2DEC」を使用すれば簡単です。LibreOffice Calcでも同様の関数を使えるので換算は可能です。
レジストリ生成ツール
レジストリの構造と生成ルールが見つかったので、プリンター・ネットワークのMACアドレスとIPアドレスを指定すると、登録用のレジストリを生成するツールを作成しました。.regファイルをダウンロード出来るようにしています。
検索用ワード:Canon BJ Network Port作成支援ツール
Canon BJNP .reg 生成
ポート名: (MACアドレスを入力してください)
このツールについて
このツールはHTMLとJavascriptで作成しているので、Webブラウザがあれば.regファイルを生成出来て省力化が実現すると思います。
MACアドレス「74-BF-C0-C0-4F-DD」、IPアドレス「192.168.2.239」で生成された「Canon_Port_74BFC0C04FDD.reg」ファイルの例です。問題なければレジストリ結合でプリンターポートが追加されるハズです。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Canon BJNP Port\Ports\CNBJNP_74BFC0C04FDD]
"TargetAddress"=dword:ef02a8c0
"TargetMac"="74-BF-C0-C0-4F-DD"
"TargetPort"=dword:000021a3Code language: PHP (php)
まあコレを使おうと考える人は限られると思いますが、例外処理は考慮していないので慎重に自己責任で使って下さい。ソースをコピって例外処理を加えるなど完成度を高めても良いかも知れませんね。ご自由にどうぞ。
プリンタースプーラーの再起動
もしレジストリの変更が反映されない場合は、プリントスプーラーの再起動が必要かも知れません。その場合はコマンドプロンプトを管理者として実行してから下記の2つを実行します。
net stop spooler
net start spooler
生成されたプリンターポートの割当を変更する
Canon iX6830 seriesのプロパティより、ポートタブから印刷するポートを変更できます。

変更したいポートに選び直して適用をクリックすると、プリントアウト先のプリンター(MACアドレス、IPアドレス)が変更できます。

不要になった(古いポート)は削除できます。WindowsのUIがクソなので不要ポートの削除にはコツが必要ですが、まあ色々やってみて下さい。最終手段としてレジストリからポートに該当するレジストリキーを削除することでも実現可能です。
最後に
この支援ツールを使うことで、Canon BJNPポートを使うCanon製プリンターを交換したり、ネットワークアドレスを変更した場合には、BJNPポートをレジストリの追加でコントロール出来るので便利だと思います。不要になったBJNPポートは忘れずに削除する様にすればレジストリをクリーンに保てて良いと思います。
Canonのプリンターはパーソナルユースではさほど問題に感じませんが、業務用に使用するととても管理しづらいのでこの様にして自分で工夫するしか無さそうです。
最後に
レジストリ結合によってCanonのBJNPポートを作成することで、インストーラーの自動検出に頼らずにプリンターをWindowsに設定できる柔軟性が出来ます。
NETBIOSやARPで解決できない、セグメント越えが必要なネットワークルーティング先プリンターでもIPアドレスとMACアドレスの指定でプリンターポートの作成が可能となり、少ない手間と時間でセットアップが可能となります。個人的にはこの手法でかなり省力化できる様になったと体感しています。
ただしある程度Windowsのプリンター設定に精通している人向けの情報です。Windowsの操作に不慣れな人がこの記事を読むとは思えないので詳細は記しません。

コメント