WindowsマシンにつながったWindows専用プリンタでWindows用ドライバを使って
Linuxマシン(やMacから)から印刷を行う方法

− redmon+Ghostscript+smbclient(+netatalk)を使って −


 0. お約束
 1. はじめに
 2. 参考にした資料
 3. 構築する環境
 4. Windowsマシンの設定
  4-1. Windowsへの日本語化Ghostscriptのインストール
  4-2. Windowsへのredmonのインストール
  4-3. Windowsでのプリンター「Canon BJ M70」の作成
  4-4. Windowsでの仮想PSプリンター「canon_bjm70_ps」の作成
  4-5. Windows上のGhostscript用の引数ファイルの作成
  4-6. Windows上の仮想PSプリンター「canon_bjm70_ps」のポート等の設定
  4-7. Windows上の仮想PSプリンター「canon_bjm70_ps」の印刷テスト
  4-8. Windows上の仮想PSプリンター「canon_bjm70_ps」の共有の設定
 5. Linuxマシンの設定
  5-1. Linuxマシンへのsambaのインストール
  5-2. Linuxマシンのsmbclientコマンドによる,LinuxからWindowsへのアクセスのテスト
  5-3. LinuxマシンでのPSプリンター「smb_bjm70」の登録
  5-4. 蛇足:データの流れを目で確かめて楽しみましょう
 6. 補足:TCP/IPとSMBプロトコル上のWindowsのホスト名に同じ名前を使う場合
 7. さらにMacから印刷するための設定
  7-1. Linuxへのnetatalkのインストール
  7-2. Linuxでのnetatalkの設定:LinuxのプリンターをMacから使えるようにする
  7-3. Macでのプリンター「Seis. Canon BJM70 PS」の作成


0. お約束

 以下は無保証です。以下を試す場合は,全て自己責任で行ってください。


1. はじめに

 LinuxマシンでGhostscriptを使ってPS化することができず,Windowsでしか使えない非PSプリンターを,何とかLinuxの印刷(PSファイルの印刷)に使えないものか,とお考えの人は多いと思います。ここでは,

  ・redmon,Ghostscript (←Windowsマシンで使います)
  ・smbclient (←Linuxマシンで使います)

というソフトウェアを使って,「WindowsマシンにつながったWindows専用プリンタでWindows用ドライバを使ってLinuxマシンから印刷を行う」ことを実現する方法を紹介します。

 めでたくLinuxから見えるようになったプリンターを,更にnetatalkを使ってMacと共有すれば,Macからもこのプリンターで(Windows用ドライバを使って)印刷することができるようになります。この場合,

  Mac→Linuxマシン→Windowsマシン→プリンター

という経路でデータは流れることになります(笑)。


2. 参考にした資料

 この作業を行うにあたっては,次のホームページと本を参考にしました。記して感謝いたします。

 ホームページ

  ・RedMon - Redirection Port Monitor
    http://www.cs.wisc.edu/~ghost/redmon/index.htm

  ・[fol] Re: gs driver for ESC/PageS?
    http://search.luky.org/fol.2000/msg02434.html

  ・Ghostscript + GSview + RedMon によるPostScript互換プリンタで印刷
    http://www.geocities.co.jp/SiliconValley-Oakland/5924/vmware/ghostscript/

 

  ・「SAMBAでGO×2! 〜 最新 UNIX & Win & Mac 接続ガイド 〜」
     太田俊哉・加藤浩・濱野賢一朗 著,秀和システム発行,2000年


3. 構築する環境

 ここでは,次の図のような構成を例に説明します。この例では,LinuxマシンとMacから,WindowsマシンにつながったプリンターCanon BJ M70(下の「重要なお断り」参照のこと)に,Windowsドライバを使って印刷するという構成になっています。

 Macからの印刷を考えていない人は,図の点線部分を無視してくださればよいです。
  
 この例に使ったマシンのOSの詳しい情報は以下の通りです。

   Windows:Windows 98
   Linux  :Vine Linux 2.1CR (Alpha Architecture),kernel 2.2.17,samba-2.07_ja_1.3
   Mac   :OS 9.2.1 日本語版

 設定に使う,マシンやプリンターの名前等をここでまとめて記しておきます。

 ・Windowsマシンに関する名前等
   TCP/IPネットワーク上でのIPアドレスaaa.bbb.ccc.ddd
     ↑Windowsマシンの「設定」→「ネットワーク」→「TCP/IP」で設定します。
   TCP/IPネットワーク上でのホスト名sc222
     ↑Linuxマシンからは,TCP/IPネットワーク上でこのWindowsマシンはホスト名sc222として認識
      されるということです。Linuxマシンの/etc/hostsファイルか,ネットワーク上のネームサーバー
      により,上記のIPアドレスがホスト名sc222と関連づけられている,とします。
   SMBプロトコル上でのコンピュータ名seis_winpc
     ↑Windowsの「コントロールパネル」の「ネットワーク」の「識別情報」の「コンピュータ名」
      で設定します。SMBプロトコル上でのWindowsマシンのコンピュータ名(ホスト名)です。
     ※これを上記の「TCP/IPネットワーク上でのホスト名」と同じ「sc222」としておくと,Linuxの
      smbclientでの設定が多少楽になります(後述)。
   ワークグループ名SEIS
     ↑Windowsの「コントロールパネル」の「ネットワーク」の「識別情報」の「ワークグループ」で
      設定します。SMBプロトコルによる「ファイルやプリンタの共有」を行うマシン群で共有するグ
      ループ名です。デフォルトは「WORKGROUP」という名前になっています。

 ・プリンターの名前
   Windowsでのプリンター名Canon BJ M70
     ↑Windowsの「設定」の「プリンタ」での名前。Canon BJ M70(ここでは製品名)というプリンター
      の場合,Windowsの「設定」の「プリンタ」の「プリンタの追加」で素直に設定(Windows用プ
      リンタドライバのインストール等)を行うと,こういう名前(製品名と同じ)がつきました。
   Windowsでの仮想PSプリンター名canon_bjm70_ps
     ↑詳しくは後述。この「Windowsでの仮想PSプリンター」である「canon_bjm70_ps」を,SMB
      プロトコルにより,Linuxマシンと共有します。具体的には,Linuxのsmbclientコマンドを使って
      Linuxマシンから「Windowsでの仮想PSプリンター」に印刷データを流し込みます。
   プリンターの「共有名」CANON_BJM70
     ↑この「Windowsでの仮想PSプリンター」を,SMBプロトコルによりWindowsマシンとLinuxマシ
      ンで共有する時に使う名前。つまりSMBプロトコル上でのプリンター名。
   Linuxマシンでのプリンター名smb_bjm70
     ↑Linuxマシンで(例えばprinttoolコマンドなどで)登録するときに付けるプリンター名。Linuxの
      lprコマンドでは,
        % lpr -Psmb_bjm70 tiger.ps
      のように,-Pオプションでこの名前を指定して使います。
   Macでのプリンター名Seis. Canon BJM70 PS
     ↑AppleTalkプロトコルによるMacとLinuxでのプリンターの共有(具体的にはLinuxでのnetatalkに
      よる)を行う時に,netatalkの設定で使う名前。つまりAppleTalkプロトコル上でのプリンター名。
      共有を行えば,Linuxマシンの(PS化された)プリンターは,Macからは(AppleTalk越しの)PS
      プリンターとして見えます。Macの「セレクタ」で「LaserWriter 8」または「Adobe PS」という
      PSプリンタドライバを選んだときに,このプリンタ名が表示されます。

    物理的なプリンターは1つなのに,Macでのプリンター名を含めると,なんと5種類のプリンター名が登場
   します。5種類の名前の中で(面倒くさがって)同じ名前を使ってしまうと,その名前がどのマシンのどの
   プロトコルについてのものなのか,設定の時に混乱してしまいます。なので,ここで示す設定例では意識し
   て5つとも違う名前をつけています。

    印刷データの流れを図にすると以下のようになります。
    
  この図を見ると,この方法のミソがわかると思います。

  基本的には,「Windowsマシンに(Linuxマシンから)流し込まれたPSファイルを,Windows上のGhostscriptで印刷する」ということをWindows上で「全自動で」実現化しているわけです。この「全自動で」というところを,redmonというソフトが実現してくれます。この流れをもう少し詳しく説明すると,以下のようになります。

   ・Windows用プリンタドライバによる印刷を行うプリンターとして,Windowsマシンにプリンター
    「Canon BJ M70」を作っておく。
   ・Linuxマシンから流し込まれるPSデータの受け口として,Windowsマシンに仮想PSプリンター
    「canon_bjm70_ps」を作っておく。
   ・LinuxマシンからWindowsマシンへのPSデータの流し込みは,Windows上の仮想PSプリンター
    「canon_bjm70_ps」を共有化し,Linuxマシンのsmbclientを使うことで実現する。
   ・Windows上のGhostscriptで,流し込まれたPSデータをWindows用プリンタドライバ用データに変換
    する。
   ・Windows上のredmonというソフトで,上記Ghostscriptによるデータ変換作業の実行と,変換された
    データの「canon_bjm70_ps」から「Canon BJ M70」への転送を全自動で行う。

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
  ※重要なお断り

    ここに示す構成例では,プリンターとしてCanon BJ M70を使っています。そうすると(このホームペー
   ジの趣旨からして),Canon BJ M70がいかにもWindows専用プリンターのようにとれますが,決してそう
   ではありません。Canon BJ M70はMac用ドライバもあるので普通にMacで使えますし,Ghostscriptの
   deviceの「bjc600」(←Canon BJC-600とBJC-4000用のドライバ)を使ってLinuxでPS化することも
   できます(なお,BJシリーズのかなりの機種について,Canon自体がLinux用ドライバを提供してくれてい
   るのですが,03年2月の時点で私が見た限りでは,BJ M70のLinux用ドライバは提供されていないようで
   す)。ここに示す例でCanon BJ M70を使っているのは,手元にあってテストに使える非PSプリンタがこれ
   だけだったという単純な理由によるものです。誤解なきよう願います。

    上述のように,Canon BJ M70はLinuxでGhostscriptによりPS化することができるので,普通ならここ
   で示すような面倒なことはせずに,

  (case1) Canon BJ M70をLinuxマシンにつなぎ,LinuxではGhostscriptによりPS化して使う。Sambaで
       共有化して,Windowsマシンからも(Windows用ドライバを使って)印刷できるようにする。  

  (case2)Canon BJ M70をWindowsマシンにつなぎ,Windowsマシンでは(Windows用ドライバを使って)
       普通に印刷する。Linuxマシンからは,PostScriptデータをGhostscriptで変換したデータを
       smbclientを使ってWindowsマシンにつないだCanon BJ M70に流し込み印刷する。

   のいずれかの設定で使うことになると思います。
 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

4. Windowsマシンの設定

4-1. Windowsへの日本語化Ghostscriptのインストール
  (このページの目的には必要ないですが,せっかくなのでGSviewもインストールしておきましょう)

 僕は

  ・Ghostscript + GSview + RedMon によるPostScript互換プリンタで印刷
   http://www.geocities.co.jp/SiliconValley-Oakland/5924/vmware/ghostscript/

を参考にさせていただき,インストールしました。インストールしたバージョンとインストール先は,以下の通りです。

  ・Gostscript 8.0とその日本語化キット
    c:\progra~1\gs\gs8.00 (=C:\Program Files\gs\gs8.00)

  ・GSview 4.3
    c:\progra~1\Ghostgum (=C:\Program Files\Ghostgum)

  ※Gostscript 8.0のインストール先を c:\gs\gs8.00 でなく c:\progra~1\gs\gs8.00 にしたのは,
   単なる僕の趣味です。

 アーカイブファイルの入手先は以下の通りです。

  ・gs800w32.exe と gsv43w32.exe: 例えば http://www.cs.wisc.edu/~ghost/index.htm
  ・日本語化キット gs800-j-wapi.zip: 例えば ftp://ftp.t.ring.gr.jp/pub/text/TeX/ptex-win32/gs/

4-2. Windowsへのredmonのインストール

 僕は

 ・RedMon - Redirection Port Monitor
  http://www.cs.wisc.edu/~ghost/redmon/index.htm

からバージョン17のアーカイブファイルredmon17.zipを,ダウンロードしてきました。それをWinzipのクラシックモードで解凍すると,



というフォルダができます。このフォルダの「setup.exe」をクリックすると,redmonがインストールされます。ただし,目に見える形でソフトがインストールされるわけではなく,redmonがインストールされると,Windowsのプリンターの設定の「印刷先のポート」の選択肢に「RPT1: (Redirected Port)」というのが加わります。なお,解凍してできる上記の「redmon17」というフォルダは,

  c:\redmon17

とか

  c:\progra~1\redmon17 (=C:\Program Files\redmon17) (←僕は趣味でこっちに置きました)

に置いておくとよいでしょう。redmon.hlpというヘルプファイルに設定の仕方が実にわかりやすく書いてあります。また,このフォルダの中にあるredrun.exe等のファイルは,このページの目的には必要ありませんが,別の用途に使えますので(詳しくはredmon.hlp参照)。

4-3. Windowsでのプリンター「Canon BJ M70」の作成

 Windowsの「設定」→「プリンタ」→「プリンタの追加」で,ごく普通にCanonのWindows用ドライバをインストールして,プリンター「Canon BJ M70」を作っておきます。なお,Canon BJ M70という製品は,パラレルポート接続とUSBポート接続の両方に対応していますが,この設定例ではUSBポートに接続して試しました。

4-4. Windowsでの仮想PSプリンター「canon_bjm70_ps」の作成

 Windowsの「設定」→「プリンタ」→「プリンタの追加」→「ローカルプリンター」で,

   製造元:Apple    プリンタ:Apple LaserWriter II NT
   製造元:Apple    プリンタ:Apple Color LaserWriter 16/200 JP
   製造元:PostScript プリンタ:PostScript Printer
     ↑AdobeのPSプリンタドライバがインストールされていたらこの選択肢があるはず

などというPSプリンターのどれかを選択します。続いて,「利用できるポート」のところで

   「RPT1: Redircted Port」  (←redmonをインストールしたのでこの選択肢がある)

を選びます。で,次の「プリンター名」で,「canon_bjm70_ps」という名前を付けます。この段階ではテスト印刷はやめておきましょう。これで,とりあえず仮想PSプリンター「canon_bjm70_ps」ができました。次に,この仮想プリンターのポートについて,redmonの機能を使った詳しい設定を後の4-6で行います。

4-5. Windows上のGhostscript用の引数ファイルの作成

 Linuxから流し込まれたPSファイルを,Windows上のGhostscriptを使って,Windows用プリンタドライバ用のデータに変換するための,Ghostscriptの引数のファイルを作っておきます。ここではファイルの名前と置き場所を,

  c:\progra~1\gstools\bjm70.rsp (=C:\Program Files\gstools\bjm70.rsp)

としました。(拡張子はともかく)ファイル名と置き場所は自分の好みにしたがってください。僕は,Windowsの「メモ帳」というエディタでこのファイルを作りました。ファイルbjm70.rspの中身は,



こうなっています。念のため以下に中身をテキストで記しておきます。

-Ic:\progra~1\gs\gs8.00\lib;c:\progra~1\gs\fonts;c:\progra~1\gs\gs8.00\kanji
-sDEVICE=mswinpr2
-dNOPAUSE
-dSAFER
-sPAPERSIZE=a4
-sOutputFile="\\spool\Canon BJ M70"

 解説:
  ・-I オプション
    自分のマシンのGhostscriptのpathに合わせてください。日本語に関するpath(kanjiのところ)も
    忘れずに。
  ・-sDEVICE オプション
    ここでデバイス「mswinpr2」を選ぶことにより,Ghostscriptに入力されたデータがWindows用
    プリンタドライバ用のデータに変換されて出力されます。
  ・-sOutputFile オプション
    この行は,redmonのヘルプファイルredmon.hlpの記述とは異なります。これは,
      [fol] Re: gs driver for ESC/PageS?
      http://search.luky.org/fol.2000/msg02434.html
    の報告に従い付け加えたもので,redmonによるGhostscriptの実行と「canon_bjm70_ps」から
    「Canon MJ M70」へのデータ転送を「自動で」行うためのものです。これをしないと,データ転送
    時に,「印刷」というプリンタの選択の窓(下図↓)が出てきて,手で選んでやらないといけなくな
    ります。
     「\\spool\」の次に書くのは,redmonによるデータの転送先のプリンターの名前「Canon BJ M70」
    です。ダブルクォテーションも忘れずに。

     


4-6. Windows上の仮想PSプリンター「canon_bjm70_ps」のポート等の設定

 Windowsの「設定」→「プリンタ」で,仮想PSプリンター「canon_bjm70_ps」をクリックして選んでおいて,「ファイル」→「プロパティ」でを選びます。そこで「詳細」タブを選ぶと

  

という窓が開きます。ここで,「ポートの設定」をクリックし,開いた窓で次のように設定します。

  

 念のため以下に中身をテキストで記しておきます。

「Redirect this port to the program」の欄
c:\progra~1\gs\gs8.00\bin\gswin32c.exe

「Arguments for this program are」の欄(最後のスペース+ハイフンを忘れずに)
@c:\progra~1\gstools\bjm70.rsp -

 解説:
  ・Redirect this port to the program
    Ghostscriptの実行ファイル「gswin32c.exe」を自分の環境に合わせfull pathで書きます。
  ・Arguments for this program are:
    4-5で作ったファイル「bjm70.rsp」を使う設定になっています。
    この行は,redmonのヘルプファイルredmon.hlpの記述とは異なります。これは,
      [fol] Re: gs driver for ESC/PageS?
      http://search.luky.org/fol.2000/msg02434.html
    の報告に従い付け加えたもので,redmonによるGhostscriptの実行と「canon_bjm70_ps」から
    「Canon MJ M70」へのデータ転送を「自動で」行うためのものです。これをしないと,データ転送
    時に,「印刷」というプリンタの選択の窓が出てきて,手で選んでやらないといけなくなります。
  ・Printer
    redmonでデータを転送する転送先のプリンターである「Canon BJ M70」を指定します。
  ・Run
    ここで「Normal」を選ぶと,「gswin32c.exe」が実行されるときにそのDOS窓がWindowsマシン
    の画面に表示されてしまいます。それはうっとうしいので(笑),「Hidden」を選びます。

 さらに,この窓の「Log File」をクリックして,

  

のように設定しておけば,redmonのログがここで指定されたファイルに保存されます。このログファイルの設定は必須ではありませんが,設定しておくとエラーの原因究明に便利です。

 次に,「詳細」の窓に戻って「スプールの設定」をクリックして,

  

と設定します(僕の場合,これはデフォルト通りでした)。

 次に,「プロパティ」まで戻って「PostScript」タブを選びます。そこで,

  

と設定します(これもデフォルト通りでした)。さらにここで「詳細設定」を選び,

  

と設定します(僕の場合,「Ctrl+Dの送信」をいずれもチェックを外すところが,デフォルトとは異なっていました)。

 これで,ネットワーク上での共有の設定を除き,Windows上の仮想PSプリンター「canon_bjm70_ps」の設定は終わりです。

4-7. Windows上の仮想PSプリンター「canon_bjm70_ps」の印刷テスト

 ネットワーク上での共有の設定による前に,redmon+Ghostscriptによるデータ変換と転送がうまくいくか,テストしてみましょう。ここでテストをしておく方が,問題の切りわけが簡単になります。なんでもいいので,ソフトを立ち上げて(例えばNetscapeとかWordとか),プリンタとして「canon_bjm70_ps」を選び印刷します。これで,うまく印刷できれば成功です。「設定」→「プリンタ」で,「canon_bjm70_ps」と「Canon BJ M70」をダブルクリックして,それぞれの印刷jobを見えるようにしておくと,

  「canon_bjm70_ps」に印刷job → Ghostscriptのデータ変換プロセスの窓出現
  → 「Canon BJ M70」に印刷job,同時に印刷の進行具合の窓出現

のようにデータの流れが手にとるように見えて楽しめます(笑)。

 エラーが出る場合,ここまでの設定をいちいち見直してみましょう。僕の場合,redmonの「ポートの設定」(ポートRPT1の設定)での,pathの書き間違いで時間を潰しました(苦笑)。

4-8. Windows上の仮想PSプリンター「canon_bjm70_ps」の共有の設定

 次に,Windows上で,仮想PSプリンター「canon_bjm70_ps」のネットワーク上での共有の設定を行います。まず,Windowsの「設定」→「ネットワーク」で,

  

のように,「ネットワークの共有サービス」がリストに入っているかどうか確認します。入っていなければ,「追加」で追加しておきましょう。

 ここで,「ファイルとプリンタの共有」をクリックして,

  

のように「プリンタが共有できるようにする」にチェックを入れておきます(「ファイルの共有」は,今の場合は関係ありません)。

 次に,「ネットワーク」まで戻り,「識別情報」タブを選びます。そこで,例えば

  

のように設定します。ここで,「コンピュータ名」とは,SMBプロトコル上でのWindowsマシンのコンピュータ名(ホスト名)です。「ワークグループ」とは,SMBプロトコルによる「ファイルやプリンタの共有」を行うマシン群で共有するグループ名です(デフォルトは「WORKGROUP」という名前になっています)。

 次に「アクセスの制御」タブを選びます。この例では,

  

とデフォルトのままにしました。

 以上を設定して,「OK」を押すと,Windowsが再起動して設定が有効となります。

 次に,仮想PSプリンター「canon_bjm70_ps」を共有プリンターにする作業を行います。Wondowsの「設定」→「プリンタ」で「canon_bjm70_ps」をクリックして選んでおいて,「ファイル」→「プロパティ」を選び,「共有」タブを選びます。そこで,

  

と設定します。ここで,「共有名」とは,SMBプロトコルによりWindowsマシンとLinuxマシンで共有する時に使うプリンター名,「パスワード」はその共有時に使われるパスワードで,いずれもLinuxでのsmbclientの設定でも使用します。このパスワードは,プレーンテキスト(=暗号化されずに)ネットワーク上を流れるので,Linuxのアカウントのパスワードとは別のものを使いましょう。

 この設定を行うと,

  

のように,仮想PSプリンター「canon_bjm70_ps」に共有化のマーク(手の絵)が付きます。これで,仮想PSプリンター「canon_bjm70_ps」の共有化の設定は全て終わりです。


5. Linuxマシンの設定

5-1. Linuxマシンへのsambaのインストール

 僕のLinuxマシン(Vine Linux 2.1CR on alpha)には既にsambaがインストールされていたので,smbclientコマンド(/usr/bin/smbclient)も既にありました。自分のLinuxマシンにsmbclientコマンドない人は,sambaをインストールしておきましょう。僕のマシン(Vine Linux 2.1CR on alpha)の場合,sambaのrpmファイルは

  samba-2.0.7_ja_1.3-0vl1.alpha.rpm (← 注:CPUがintelでなくalphaなのでこういう名前になっています)

となっていました。

 なお,このページに示す構成の場合,Linuxはsambaサーバ(←LinuxのプリンターやファイルをWindowsマシンからも使う場合)ではなく,Windowsマシンがsambaサーバで,Linuxマシンはsambaクライアントです。従って,Linuxをsambaサーバとする場合に必要となる,

  ・smbd,nmdというデーモンの起動
  ・設定ファイルsmb.confの設定

は一切不要です。必要なのは,基本的にsmbclientコマンドのみです。

5-2. Linuxマシンのsmbclientコマンドによる,LinuxからWindowsへのアクセスのテスト

  Linuxでのプリンターの設定に行く前に,Linuxマシンからsmbclientコマンドを使って,Windowsマシンにアクセスできるか確認しておきましょう。これをしておくと,問題の切り分けが簡単になります。一般ユーザーで次のように実行して,

  smb: \>

というプロンプトが帰ってきたら成功です。

  % /usr/bin/smbclient \\\\seis_winpc\\CANON_BJM70 -P -I aaa.bbb.ccc.ddd
  added interface ip=aaa.bbb.ccc.eee bcast=aaa.bbb.ccc.255 nmask=255.255.255.0
  Password:  (← 共有のパスワード入力)
  smb: \>
  smb: \> quit
  %

 解説
  ・ここで登場する名前は,全てSMBプロトコル上のもの
  ・\\\\seis_winpc\\CANON_BJM70:ホスト「seis_winpc」の共有名「CANON_BJM70」というプリンター
  ・-P:(共有ファイルサービスではなく)共有プリンターサービスに対するアクセスであることを示す
  ・-I:sambaサーバであるWindowsマシン(=ホスト「seis_winpc」)のIPアドレスを指定

 また,こんなテストでもよいでしょう。

  % /usr/bin/smbclient -I aaa.bbb.ccc.ddd -L seis_winpc
  added interface ip=aaa.bbb.ccc.eee bcast=aaa.bbb.ccc.255 nmask=255.255.255.0
  Password:  (← 共有のパスワード入力)
  Sharename Type Comment
  --------- ---- -------
  PRINTER$ Disk
  CANON_BJM70 Printer
  IPC$ IPC リモート プロセス間通信
  Server Comment
  --------- -------
  SEIS_WINPC Unknown User
  Workgroup Master
  --------- -------

 解説
  ・-I:sambaサーバであるWindowsマシンのIPアドレスを指定
  ・-L:sambaサーバであるWindowsマシンのSMBプロトコル上のホスト名を指定

 このテスト結果を見ると,SMBプロトコル上の名前,「seis_winpc」,「CANON_BJM70」の大文字/小文字の区別に意味はなさそうですね(苦笑)。

 正しく設定しているのに,LinuxマシンからWindowsマシンへのアクセスが拒否される場合,Windowsマシンを再起動してみましょう。僕の場合,アクセスが拒否され,原因究明に悩んだ挙げ句,Windowsマシンを再起動してあっさり解決したという低調な目に2回ほどあいました(苦笑)。

5-3. LinuxマシンでのPSプリンター「smb_bjm70」の登録

 Vine Linux 2.1CRにはprinttool(/usr/bin/printtool)というGUIのプリンター設定ツールがあるので,それを使うことにします。printtoolを使うと,smbclientコマンドのオプションの使い方を知る必要がなく,またフィルターファイルを自作する必要もないので楽です。printtoolは,rootになってX上で

  % printtool  (← &をつけるとなぜかsuspendedになって起動してくれない)

として起動します。そこで「Add」を選び,printer typeとしては「SMB/Windows 95 /NT Printer」を選びます。そして,

  

と設定します。

 解説:
  ・Names
    このLinuxマシン上でのプリンター名(lprの-Pオプションで指定する名前)です。
  ・spool directory
    /var/spool/lpdの下に,プリンター名と同じ名前で作るのが普通です。
  ・Hostname of Printer Server
    この場合,プリンタサーバはWindowsマシンで,使っているネットワークプロトコルはSMBプロトコ
    ルなので,smbプロトコル上でのWindowsマシンのホスト名「seis_winp」(←4-8で,Windows
    の「ネットワーク」の「識別情報」の「コンピュータ名」で設定した名前)を書きます。
  ・IP number of Server (optional)
    プリンタサーバであるWindowsマシンのIPアドレスを書きます。「optional」とあるのは,上記の
    smbプロトコル上でのWindowsマシンのホスト名を,TCP/IP上でのホスト名と同じ「sc222」と
    しておけば(もちろんWindowsマシンの方の設定でも),このIPアドレスの指定は不要になるから
    です。
  ・Printer Name
    SMBプロトコルによりWindowsマシンとLinuxマシンで共有する時に使う名前,つまりSMBプロトコ
    ル上でのプリンター名「CANON_BJM70」(←4-8で,「canon_bjm70_ps」の「プロパティ」の
    「共有」で設定した「共有名」)を書きます。
  ・User
    Windowsの共有のユーザー名は,デフォルトでは「nobody」だそうです。
  ・Password
    4-8で,「canon_bjm70_ps」の「プロパティ」の「共有」で設定した「パスワード」を書きます。
    このパスワードは,プレーンテキスト(=暗号化されずに)ネットワーク上を流れるので,Linuxの
    アカウントのパスワードとは別のものを使いましょう。
  ・Workgroup
    SMBプロトコルによる「ファイルやプリンタの共有」を行うマシン群で共有するグループ名
    「SEIS」(←Windowsの「コントロールパネル」の「ネットワーク」の「識別情報」の「ワークグ
    ループ」で設定した名前)を書きます。
  ・Input Filter
    何も選ばなくてもよいです(printtoolが勝手に設定してくれます)。

 設定がすんで,「OK」をクリックすると

  

と,「smb_njm70」というプリンターが新たに登録されていることがわかります。ここで,「smb_njm70」を選んでおいて「Edit」をクリックして,もう一度設定画面を出してみると,

  

と,「Input Filter」の項が勝手に設定されていることがわかります。画面表示では隠れていますが,全部書くと,

  /usr/lib/rhs/rhs-printfilters//smbprint (←smbprintの前はバックスラッシュは2本)

となっています。/usr/lib/rhs/rhs-printfilters/smbprint(←ここではバックスラッシュは1本)というファイルの中身を見てみると,shell scriptであることがわかります。つまり,この/usr/lib/rhs/rhs-printfilters/smbprintというshell scriptが,ここでの入力事項を適切にsmbclientコマンドに渡してくれているということです。

 あとは,「printtool」のメニューの「lpd」で「restart lpd」を選んで,lpdデーモンを再起動して,新しく加えたプリンター「smb_bjm70」が使えるようにします。これで,

  % lpr -Psmb_bjm70 tiger.ps

などとプリンター「smb_bjm70」を使ってPSファイルを印刷すれば,Windowsマシンにつないだプリンターに出力されるはずです。

 これで,Linuxから,WindowsマシンにつないだプリンターにPSファイルを出力する全ての設定は終わりです。

5-4. 蛇足:データの流れを目で確かめて楽しみましょう

 Windowsの「設定」→「プリンタ」で,「canon_bjm70_ps」と「Canon BJ M70」をダブルクリックして,それぞれの印刷jobを見えるようにしておきます。そうしておいて,Linux上でプリンター「smb_bjm70」でPSファイルを印刷すると,以下のように印刷データの流れを目で追って楽しむことができます(笑)。

 ・まず,WindowsマシンのHDDアクセスランプが点滅して,Windowsにデータが送り込まれたことがわかります。

    ↓

 ・Windows上の仮想PSプリンター「canon_bjm70_ps」に印刷jobがspoolされます。
    

    ↓

 ・Ghostscriptのデータ変換プロセスの窓が現れます。
    

    ↓

 ・「Canon BJ M70」に印刷jobがスプールされます。
    

  同時に「Canon BJ M70」による印刷の進行具合の窓が現れます。
    

    ↓

 ・プリンターが動き始めて紙への印刷が始まります。


6. 補足:TCP/IPとSMBプロトコル上のWindowsのホスト名に同じ名前を使う場合

 以上の設定では,SMBプロトコル上のWindowsマシンのホスト名を「seis_winpc」としていました。これを,

  

のように,TCP/IPプロトコル上のWindowsマシンのホスト名と同じく「sc222」とした場合の,smbclient(とprinttool)の設定について説明しておきます。

 この場合,LinuxからのsmbclientコマンドによるWindowsマシンへのアクセスのテストは,次のようにすればよいです。

  % /usr/bin/smbclient \\\\sc222\\CANON_BJM70 -P

  % /usr/bin/smbclient -L sc222

要は,SMBプロトコルとTCP/IPプロトコルのいずにおいても,ホスト名「sc222」でWindowsマシンを認識できるので,TCP/IPプロトコル上での認識に必要であったIPアドレスの指定が不要になるわけです。

 また,Linuxでのprinttoolによるプリンター「smb_njm70」の登録内容は,

  

とすればよいです。ここでもIPアドレスの指定が不要になります。これが,項目「IP number of Server」に「(optional)」と書いてある理由です。


7. さらにMacから印刷するための設定

 以下は,Macからの印刷を考えていない人は必要ありません。

7-1. Linuxへのnetatalkのインストール

 netatalkは,LinuxとMac間でファイルやプリンターの共有を実現化するソフトです。要するに,netatalkは,Linuxマシンに(Macで使われるネットワークプロトコルである)AppleTalkをしゃべらせるソフトです。Vine2.1ではnetatalkのrpmファイルは(確か)VinePlus!のCD-ROMに入っています。それをインストールしました。インストールすると,

  ・/etc/atalk の下に設定ファイル(のひな形)
  ・/etc/rc.d/init.d/atalkd という起動スクリプト
  ・/usr/sbin/ntsysv(←Vineのデーモン設定用コマンド)中にatalkという選択肢

ができます。

7-2. Linuxでのnetatalkの設定:Linuxのプリンターsmb_bjm70をMacから使えるようにする

 Linuxのプリンターsmb_bjm70を,AppleTalkプロトコルを介して,Macから使えるようにするための設定を行います。下記の2つの設定ファイルを編集して設定を行います。

  ・/etc/atalk/atalkd.conf
    どうせネットワークカードは1枚しかないので何も書かなくてよいです。書くなら
      eth0
    とネットワークデバイス名を書けばよいらしいです。

  
・/etc/atalk/atalkd.conf
    次のように書きます。
      Seis. Canon BJM70 PS:\
       :pr=smb_bjm70:\
       :pd=/etc/atalk/LW_Col_12-600_PS-J.PPD:

    解説:
     ・Seis. Canon BJM70 PS
       AppleTalk上でのプリンター名(Macからはこの名前でPSプリンターとして見える)です。
     ・smb_bjm70
       Linuxでのプリンター名。このプリンターをMacと共有します。
     ・/etc/atalk/LW_Col_12-600_PS-J.PPD
       PPDファイル名(後述 → 7-3参照)

 次に,/etc/atalk にPPDファイル「LW_Col_12-600_PS-J.PPD」(後述 → 7-3参照)を置きます。

 次に,rootになって,デーモンの設定ツールntsysv(←Vineにはこういうツールがあります)を

  # ntsysv

と起動して,AppleTalkのデーモンである「atalkd」にチェックを入れ,boot時にatalkdが起動するようにしておきます。

 初めてのatalkdの起動のためにマシンをrebootするのはおおごとなので(笑),rootで

  # /etc/rc.d/init.d/atalk restart

として,atalkdデーモンを(再)起動してやります。

 こうすると,同じLAN上にあるMacから「Seis. Canon BJM70 PS」というPSプリンターが見えるようになります(でも,デーモン再起動後にMacから見えるようになるまで,1分弱ぐらいかかりました)。Macの「セレクタ」で,「LaseWriter 8」や「AdobePS」などのPSプリンタドライバを選び,「AppleTalk」を「使用」にしておくと,

  

のように,見事「Seis. Canon BJM70 PS」が見えます。これでわかるとおり,Macでは,PSプリンターとはネットワーク(AppleTalkプロトコル)でつないで使うもの,というのが普通の構成のようです。

7-3. Macでのプリンター「Seis. Canon BJM70 PS」の作成

(1) PPDファイルをMacとLinuxの然るべきところに置く

 まず,PPDファイル(プリンタ記述ファイル)なるものをとってきます。PPDファイル(PPDはPostScript Printer Descriptionの略)というのは,PSプリンタの情報を記述したファイルで,テキストファイルです(なのでエディタで中を覗くことができます)。PPDファイルは,プリンタメーカーのftpサイトか,Adobeのftpサイト

  ftp://ftp.adobe.com/pub/adobe/printerdrivers/mac/all/ppdfiles/

から入手できます。このAdobeのftpサイトには,各社ごとのPPDファイルのアーカイブファイルが,Mac用の形式(*.sit.hqx形式)で置いてありますので,Macでダウンロードしてくるのがよいでしょう。

 僕の場合,Apple社のカラーPSプリンター用のPPDファイルである,「LaserWriter Color 12/600 PS-J」を使うことにしました。これを

  MacのHDDの「システムフォルダ」の「機能拡張」の「プリンタ記述ファイル」

に置いてやります。もっとも,実はこのPPDファイルは,(Mac OS 9.2.1 日本語版の場合)はじめからこのフォルダにあったのですが(というか既にあるやつを使ったのが真相です)。

 次に,このPPDファイルをLinuxの/etc/atalkd にも置いてやります。ファイルの中身が同じであればよいので,Linuxでは半角スペースが入る名前は避けて,「LW_Col_12-600_PS-J.PPD」という名前にしました。日本語を含むテキストファイルですので,Linuxに置くときは,漢字コードはEUC,改行コードは「UNIXのLF」にする必要があります(って,日本語が書いてあるのはおそらくコメントのみなので漢字コードは関係ないか...)。それには,例えばLinux上で,漢字コード・改行コード変換ソフトであるnkfを使って,

  % nkf -e -Lu < LW_Col_12-600_PS-J.PPD.tmp > LW_Col_12-600_PS-J.PPD
    ※ここで変換前のファイル「LW_Col_12-600_PS-J.PPD.tmp」はMacから
     FetchのbinaryモードでLinuxに持っていきました。

などとすればよいでしょう。nkfはMac版もありますので,漢字コード・改行コード変換をMac上でやって,FetchのbinaryモードでLinuxに持っていくのでもよいです。

 注意しないといけないのは,netatalkで共有しようとしているプリンターがカラープリンターなら,カラーPSプリンターのPPDファイルを使わないといけないということです。モノクロPSプリンターのPPDを使うと,たとえカラープリンターからの出力といえどもモノクロになります。実際,カラーであるCanon LBP-2040を共有するのに,PPDファイルとしてモノクロPS用のCanon LASER SHOT LBP-730PS 2Fを使って,モノクロ出力を得るという悲しい体験をしたことがあります(苦笑)。

(2) Macの「セレクタ」でのプリンタの作成

 既に記したとおり,Macの「セレクタ」で「LaseWriter 8」や「AdobePS」などのPSプリンタドライバを選び,「AppleTalk」を「使用」にすると,

  

のように「Seis. Canon BJM70 PS」が見えます。そこで,「Seis. Canon BJM70 PS」をクリックすると

  

と「作成」ボタンが現れますので,これをクリックします。そうするとMacのデスクトップにプリンター「Seis. Canon BJM70 PS」が作られます。Macの方でもPPDファイルをきちんと選んでおいてやりましょう。再び「セレクタ」で「Seis. Canon BJM70 PS」を選んでおいて「再設定」クリックし,「PPDの選択」をクリックします。そうすると,

  

という窓が現れます。ここで,Linuxに置いたものと(中身が)同じ「LaserWriter Color 12/600 PS-J」を選んで「選択」をクリックします。これで設定終了です。

 設定ができたら,Macの適当なソフトからプリンター「Seis. Canon BJM70 PS」で印刷を行ってみましょう。

  MacのPSプリンター「Seis. Canon BJM70 PS」 → LinuxマシンのPSプリンター「smb_bjm70」
   → Windowsの仮想PSプリンター「canon_bjm70_ps」 → Windowsのプリンター「Canon BJ M70」
   → 物理的なプリンター Canon BJ M70

とデータが転送されて,印刷できるはずです。


Linux のページへ戻る

筧のホームへ戻る


※このページへのリンクはご自由にどうぞ

最終更新日:03/02/24