トップ それ ICA実験室 研究 Linux Perl リンク

Linux から Windows に接続されているプリンタを使う

Linux にドライバが存在しないプリンタ、Windows 専用プリンタをどうしても Linux から使いたいヒト、または Windows の詳細なプリンタ設定を使いたいヒトへ。

このやり方では Linux で sambaclient を使ってます。本当はこれを使わずに済みそうなのだけど上手く動かなかった。
PostScriptPrinter の場合 samba だけで上手く行くと思うので、その際の詳しい設定および samba 本体などは以下のサイトに行ったほうが良い。

Windows で rshd

まず Windows に接続されてるプリンタを使うには Windows のコマンドを Linux でリモート操作出来なければならないので、Windows で rshd を常駐させる。(多分これが一番簡単)

ダウンロードして来た rshd を Windows で動かすためには、Readme に書いてあるように <WINDIR> (Win95, 98 なら C:\WINDOWS)に .rhosts というファイルをつくる。 Windows のエクスプローラでは '.(ドット)'から始まるファイルを作れないので、MS-DOSプロンプト上で edit コマンドを使いファイルを作るか、一度別の名前でファイルを作り rename コマンドで名前を変更する。

このファイルの書式は Linux の .rhosts と同じで

ホスト名-hoge.com ユーザ名-hogehoge
ホスト名-HOGE.org

のように書く。この場合は ホスト名-hoge.com からの ユーザ名-hogehoge と、ホスト名-HOGE.org からの全てのユーザに実行許可が与えられる。 rshd -r と起動すると全てのホスト及びユーザからアクセスできるようになるので、何が起こっても後悔しないヒトはこちらでもOK。
毎回起動するのは面倒なので、スタートアップか、タスクに登録する。

Windows で Postscript

あとは Postscript を印刷するので Ghostscript + 日本語化キットが必要。

以下の Ghostscript の情報は古いので、最新情報は上のサイトで確認してください。

会津大学の CTAN および FTP ミラーサイトから以下の3つのファイルをダウンロード :

※以前のバージョンがインストールされている場合は必ずアンインストール及びフォルダの削除を行なう。

まず上の2つをインストールしたあと gs650w32.exe インストールフォルダ(デフォルトなら C:\gs)に直接日本語化キットを解凍する。
ghostscript に path を通す為 C:\autoexec.bat に以下の2行を追加する。以下はインストールフォルダがデフォルトの場合、変更した時は c:\gs を変更したフォルダに変える。(スペースを途中に挟むと正しく path が設定されない。)

SET PATH=%path%;C:\gs\gs6.50\bin
SET GS_LIB=C:\gs\gs6.50\lib;C:\gs\gs6.50\kanji;C:\gs\fonts

再起動をする。(しないと autoexec.bat が読み込まれないからで、手動で path を設定すれば再起動は必要ない。)
日本語設定は、c:\gs\gs6.50\kanji 内の article9.ps を GSview で表示して日本語が確認できればOK。

smbclient

Windows で postscript が印刷できるようになったら、次はファイルを Windows に移動する為、samba に含まれるsambaclientを使用する。sambaclient の簡単な使用法は、

smbclient "//ホスト名/共有フォルダ名" "共有フォルダのパスワード" -U "共有フォルダにアクセスするユーザ名" -c "ftp で使うようなコマンド"

である。詳しくはこちらへ
Windows のフォルダを書きこみ可で共有フォルダにする。下の例の場合名前が hoge というマシンで spool という名の共有フォルダを作る。

例 :

# /usr/bin/smbclient "//hoge/spool" "hogepasswd" -U "hogeuser" -c "lcd /tmp; put hogetest.ps; quit"

これで /tmp にある hoge.ps が Windows の共有フォルダに移動すれば成功である。

rsh で印刷

ファイルが移動後に、rsh コマンドを使う。(hoge.com は Windows 側のホスト名またはIPアドレス。C:\spool\hoge.ps には印刷するファイル。720はプリンタの解像度)

# rsh hoge.com gswin32c -q -dNOPAUSE -dSAFER -dBATCH -sDEVICE=mswinpr2 -r720 -sOutputFile=- "C:\spool\hoge.ps" -c quit

Windows で印刷のダイアログが出ていれば成功。あとは OK ボタンを押せば印刷される。

Windows で印刷の OK ボタンを押す

rsh だけでは、Windows で印刷のダイアログが出て印刷されないのでマシンが近くにある場合は押す。ソレをしたくないヒトはボタンを勝手に押すソフトを Windows で動かす。2種類ある。

ボタンを自動で押すソフト

ボタンを自動で押すソフトを探したら下の2つが見付かった。

これらのソフトを使って OK ボタンが出現したら自動的に押されるようにする。
このボタンを押す方法ではソフトを常駐させなければならない上に、他のプログラムがダイアログウィンドウを開いたときでもボタンを押してしまう副作用がある。

Windows のスクリプトを作れるソフト

Windows の GUI 操作などをスクリプトでかけるソフトを rsh で起動する。

UWSC ダウンロードして解凍する。以下の例では C:\uwsc\ に解凍している。
Windows 側に置くスクリプトファイル C:\uwsc\print.uws

Sleep(2)
for 回数 = 1 to 5          // 一回では失敗する可能性があるので数回繰り返す
    印刷ID = GETID("印刷")
    ifb 印刷ID >= 0 then
        ClkItem(印刷ID, "OK", CLK_BTN)
        Exit
    endif
 Sleep(2)
next

のように書く。(上は一例)
上のスクリプトを rsh で動かす。

rsh hoge.com '"C:\uwsc\uwsc.exe" "C:\uwsc\print.uws"'

このスクリプトで動かした場合は動作に多少のタイムラグがあるので誤動作する可能性がある。
スクリプトをもっと精巧に作ればよくなるかもしれない。詳しくは こちらへ

lpd での設定

いちいちコマンドを打つのが面倒なので、lpd でこの作業をやりたいヒトは以下の設定を行なう。
以下の太字のところは自分の環境に合わせる。この辺の詳しいところは上に挙げたサイトにいったほうがわかりやすい。
/usr/local/bin/hogeprint というファイルを作って

自動ボタン押しソフトを使う場合

#!/bin/sh
rm -f /tmp/hoge.tmp
cat > /tmp/hoge.ps
/usr/bin/smbclient "//hoge/spool" "hogepasswd" -U "hogeuser" -c "lcd /tmp; put hoge.ps; quit"
rsh hoge.com gswin32c -q -dNOPAUSE -dSAFER -dBATCH -sDEVICE=mswinpr2 -r720 -sOutputFile=- "C:\spool\hoge.ps" -c quit
rm -f /tmp/hoge.tmp

UWSC を使う場合

#!/bin/sh
rm -f /tmp/hoge.tmp
cat > /tmp/hoge.ps
rsh hoge.com '"C:\uwsc\uwsc.exe" "C:\uwsc\print.uws"'
/usr/bin/smbclient "//hoge/spool" "hogepasswd" -U "hogeuser" -c "lcd /tmp; put hoge.ps; quit"
rsh hoge.com gswin32c -q -dNOPAUSE -dSAFER -dBATCH -sDEVICE=mswinpr2 -r720 -sOutputFile=- "C:\spool\hoge.ps" -c quit
rm -f /tmp/hoge.tmp

と書く。
そして、/etc/printcap

hoge:\
        :cm=HogeHoge printer:\
        :lp=/dev/hoge:\
        :sd=/var/spool/lpd/hoge:\
        :af=/var/spool/lpd/hoge/acct:\
        :mx#0:\
        :if=/usr/local/bin/hogeprint:

を付け足す。この場合 touch /dev/hoge を行っておく必要がある。

とか書き、実行許可を与えておく。(chmod +x /usr/local/bin/hogeprint)

以上いろいろと調べた結果思いついたやり方を一応のせたけれど、明らかにセキュリティ上の問題があるので一般には止めたほうが良いと思う。