前回までの「Raspberry Piで使うサーマルプリンター基本動作編」のように、レシート印刷のサーマルプリンターを、Raspberry Pi Zero WHにRaspberry Pi OS lite上でプリントサーバーにしました。
サーマルプリンターを使うにあたり、スマホからも印刷できるようにしたかったからです。
※記事中のサーマルプリンターはSymcode製の58mm、USB接続のサーマルレシートプリンター
汎用のドライバソフトも入れて、CUPSを使い印刷させます。ネットワークプリンターとしてはsamba共有を使います。
- 汎用のドライバソフト
- CUPSで印刷
- samba共有
CUPSはWebUI画面から設定できるので楽でした。使用したサーマルプリンター以外でも、同じように設定できると思います。
ここでは、プリンターを繋いだRaspberry Piを、家庭内の他のPCやスマホからでも印刷できるプリントサーバーとして構築しています。
多くのジョブでなければ、メモリーが少ないRaspberry Pi Zero 系でも処理できます。
cupsのインストール
sudo apt install cups
設定をする
sudo nano /etc/cups/cupsd.conf
書き足した内容
Port 631
ServerAlias *
DefaultEncryption Never
Port 631は、Listen localhost:631をコメントアウトして追記します。
DefaultEncryption Neverは認証アップグレードを促すエラーを回避するためです。
更に、Locationで囲まれている箇所の、Order allow,deny以下に、Allow from @LOCAL
を追記します。ローカルから管理、設定、ログ閲覧ができるようにするためです。4箇所です。
<Location /> <Location /admin> <Location /admin/conf> <Location /admin/log> ・・・
ユーザーをCUPSのグループに追加
ユーザーpiを印刷制御するCUPSのグループに追加する。
sudo adduser pi lpadmin
サービスをリスタート
sudo systemctl restart cups
sudo service cups restart
もいけます。今はsystemctlが主流。
sambaのインストール
sudo apt install samba
smb.confに追記
ユーザーがデフォルトのpiの場合です。既存のセクションを書き換えずに最下部にセクションを設けて追記しました。
sudo nano /etc/samba/smb.conf
[zj-58]
comment=zj-58 thermal-printer
printer=zj58
path=/var/spool/samba
printing=cups
printable=yes
printer admin=@admin root pi
user client driver=yes
guest ok=no
writable=no
write list=@adm root pi
valid users=@adm root pi
ゲストはNOにしています。もしもYESにする場合は、最終行のvalid~は要りません。
sambaの変更を適用するコマンド
sudo smbcontrol all reload-config
デーモンをリスタートでも良いでしょう。
sudo service smbd restart
sudo service nmbd restart
これでプリンターの共有準備ができました。続いてプリンターを追加します。
プリンタードライバをインストールしておく
プリンタードライバーを先にインストールすることで、CUPSにプリンターの追加を行うことができます。
今回のサーマルプリンターのドライバは別の記事で詳しくご紹介しています。

Webインターフェイスで設定

ネットワーク内にある他のマシンのWebブラウザから設定できます。
http://(ラズパイのIPアドレスかホスト名):631/admin
固定IPアドレスに設定していない場合、WindowsもmacOSも名前解決できると思いますので、ホスト名が良いでしょう。(例:ホスト名ledpiの場合、http://ledpi.local:631/admin)
プリンターの追加手順
プリンターを選ぶのに、zj-58に限り「Unknown」を選ぶことになります。ここはご自分のプリンタードライバを選んでください。
CUPSでUSBに繋がっているデバイスを調べるコマンド
sudo /usr/lib/cups/backend/usb
DEBUG: Loading USB quirks from "/usr/share/cups/usb". DEBUG: Loaded 172 quirks. DEBUG: list_devices DEBUG: libusb_get_device_list=2 DEBUG2: Printer found with device ID: Device URI: usb://Unknown/Printer direct usb://Unknown/Printer "Unknown" "Unknown" " " ""
Unkownという名前になっていますが、これがUSBポートに直接繋がっているプリントデバイスです。
URIで指定するしかありません。
管理のプリンターの追加

今回はUnknownとしか出ませんので選んで続ける。

すべて埋める形で入力していきます。共有するにもチェックを入れます。

先にプリンタードライバをインストールしてあったので、メーカー名も出ています。

モデル名も出ました。プリンターの追加ボタンで次へ。

デフォルトの用紙サイズを選んで設定は終了です。


接続のURIがUnknownというのだけはいただけませんが、動作には支障ありません。ドライバの問題です。
テスト印刷
早速テスト印刷をしてみます。
macOSのテキストエディタから印刷をしてました。

結果はこんなです。狭くてあまり文字が入っていない。

iPhoneからも印刷してみましょう。
文字が潰れて汚いですね。

Webページは少し無理がありました。
これでネットワークプリンターとしては機能していることになります。
エラーを確認してみる
エラーログを覗いてみます。
[Job 16] /var/spool/cups/d00016-001 (object 6 0): object has offset 0
どうやら、PDFの印刷処理で起こるエラーのようです。
印刷はできていますが、これはまた調べないとなりませんね。qpdfやcups-filtersをアップグレードインストールしましたが変わりませんでした。
プリントサーバーとしてsamba+CUPS
sambaとCUPSの連携でプリントサーバーしました。
Raspberry Pi なら小さくて消費電力も少ないため、あまり気になりません。
サーマルプリンターではなく、一般的なプリンターも同じように共有させてみてください。