AirPrint非対応のプリンタをUbuntuサーバ経由でAirPrint対応に

avahi-daemon (Apple Bonjour互換) を使ってプリンタ名を広告してやることによって、AirPrint非対応の旧世代プリンタをAirPrint対応にできるらしいので、実験してみた。

そのためには、Linux プリンタサーバ上に、iOS デバイスへプリンタ情報を教えるための avahi 設定が必要になる。

前の記事の内容で、既にUbuntu環境でプリンタの設定はできているものとする。

1. インストール

必要なパッケージをUbuntuデスクトップにインストールする。

desktop$ sudo apt-get install avahi-discover

2. 情報の取得

端末から、avahi-discover コマンドを実行する。標準出力にダンプされる情報を利用するので、ログファイルを取っておく。

desktop$ avahi-discover > log

表示された GUI ウインドウ上で、「Internet Printer」→「EPSON EP-802A @ myserver1」を選択する。その後、×ボタンで GUI を閉じる。

logファイルの内容を確認すると、末尾近くに以下のような行がある。

Host myserver1.local (192.168.100.240), port 631, TXT data: ['printer-type=0xB01E', 'printer-state=3', 'Duplex=T', 'Color=T', 'TLS=1.2', 'UUID=3ae710a1-2d56-928f-4a19-394a152d3eca', 'URF=DM3', 'pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf', 'product=(Epson EP-902A Series)', 'priority=0', 'note=Home', 'adminurl=https://myserver1.local:631/printers/EPSON-EP-802A', 'ty=Epson EP-802A Series - epson-inkjet-printer 1.0.0-1lsb3.2 (Seiko Epson Corporation LSB 3.2)', 'rp=printers/EPSON-EP-802A', 'qtotal=1', 'txtvers=1']

3. 情報ファイルの作成

上記の情報をもとに、avahi のサービス情報ファイルを作成する。

myserver1$ sudo vi /etc/avahi/services/AirPrint-EPSON-EP-802A.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">AirPrint EPSON-EP-802A @ %h</name>
<service>
 <type>_ipp._tcp</type>
 <subtype>_universal._sub._ipp._tcp</subtype>
 <port>631</port>
 <txt-record>txtvers=1</txt-record>
 <txt-record>qtotal=1</txt-record>
 <txt-record>rp=printers/EPSON-EP-802A</txt-record>
 <txt-record>ty=Epson EP-802A Series - epson-inkjet-printer 1.0.0-1lsb3.2 (Seiko Epson Corporation LSB 3.2)</txt-record>
 <txt-record>adminurl=https://myserver1.local:631/printers/EPSON-EP-802A</txt-record>
 <txt-record>note=Home</txt-record>
 <txt-record>priority=0</txt-record>
 <txt-record>product=(Epson EP-902A Series)</txt-record>
 <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
 <txt-record>UUID=3ae710a1-2d56-928f-4a19-394a152d3eca</txt-record>
 <txt-record>TLS=1.2</txt-record>
 <txt-record>Color=T</txt-record>
 <txt-record>Duplex=T</txt-record>
 <txt-record>printer-state=3</txt-record>
 <txt-record>printer-type=0xB01E</txt-record>
 <txt-record>URF=none</txt-record>
</service>
</service-group>

ファイルができたら、サービスを再起動する。

myserver1$ sudo service avahi-daemon restart
myserver1$ sudo service cups restart

設定が終わったら、iOS デバイスのアプリケーション (例えばSafari) からテスト印刷する。「メニューボタン」→「プリント」を選択して、「プリンタ」に「EP-802A」が表示されたら選択して印刷してみる。自分の環境では、きちんと印刷できた。

参考URL: 今日はLinuxのCUPSプリントサーバをAirPrintサーバにして、iPhoneからAirPrintで印刷するとPDFファイルが生成されるようにしてみた