

・USBのみ搭載の格安プリンタをCUPSでネットワークプリンタ化します。
・さらにスマホにも対応できるようにavahiでAirPrintが使えるようにします。
開発環境
サーバー: AlmaLinux9.3
クライアント:Windows11、iOS 17.4.1(iPhoneSE 第二世代)
プリンター:Canon PIXUS TS203
参考にしたサイト
https://qiita.com/yyano/items/e0c27eda5d8e70de66e0
https://linuxwin.com/cups-airprint-on-raspberry-pi/
プリンタドライバーのインストール
Canonのサイトからプリンタドライバをダウンロードします。
wget -O cnijfilter2-5.50-1-rpm.tar.gz https://pdisp01.c-wss.com/gdl/WWUFORedirectTarget.do?id=MDEwMDAwOTEwOTAx&cmp=ACM&lang=JAダウンロードしたドライバを解凍して、インストーラーを実行します。
tar -zxvf cnijfilter2-5.50-1-rpm.tar.gz
cd cnijfilter2-5.50-1-rpm
./install.shcnijfilter2-5.50-1-rpm/install.sh
==================================================
Canon Inkjet Printer Driver
Version 5.50
Copyright CANON INC. 2001-2017
==================================================
実行コマンド = rpm -Uvh ./packages/cnijfilter2-5.50-1.x86_64.rpm
Verifying... ################################# [100%]
準備しています... ################################# [100%]
更新中 / インストール中...
1:cnijfilter2-5.50-1 ################################# [100%]
#=========================================================#
# プリンターの登録
#=========================================================#
続いて、プリンターの登録を行います。
プリンターを接続して、電源を入れてください。
ネットワーク接続で使用する場合は、プリンターをネットワークに接続してください。
準備が整ったら、Enterキーを押してください。
>
#=========================================================#
# 接続方法の選択
#=========================================================#
1) USB
2) ネットワーク
接続方法を選択してください。[1]
プリンターを検索しています...
#=========================================================#
# プリンターの選択
#=========================================================#
プリンターを選択してください。
使用したいプリンターが表示されていない場合は、再検索[0]を選択してもう一度プリンターを検索してください。
キャンセルする場合は、[Q]を入力してください。
-----------------------------------------------------------
0) 再検索
-----------------------------------------------------------
検出された対象プリンター
1) Canon TS200 series (//Canon/?port=usb&serial=141D03)
-----------------------------------------------------------
現在の選択値:[1] Canon TS200 series (//Canon/?port=usb&serial=141D03)
番号を入力してください。 [1]
#=========================================================#
# プリンターの登録
#=========================================================#
プリンターの名前を入力してください。[TS200USB]Canon_TS203
実行コマンド = /usr/sbin/lpadmin -p Canon_TS203 -P /usr/share/cups/model/canonts200.ppd -v cnijbe2://Canon/?port=usb&serial=141D03 -E
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
#=========================================================#
# 通常使うプリンターに設定
#=========================================================#
通常使うプリンターに設定しますか?
設定する場合は[y]を、しない場合は[n]を入力してください。[y]
#=========================================================#
インストールが完了しました。
プリンター名 : Canon_TS203
印刷時には、このプリンター名を選択してください。
#=========================================================#
後片付けをします。
cd ..
rm -f cnijfilter2-5.50-1-rpm.tar.gz
rm -rf cnijfilter2-5.50-1-rpmこの時点で【設定】ー【プリンター】に2つの項目が登録されています。両方とも必要なので消さないようにします。

プリンタの探索
Windows端末からプリンターを検索できるようにポートを開放します。
TCP/631(IPP)とUDP/5353(mDNS) を開けます。
#IPP CUPS
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.0/16 --dport 631 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/16 --dport 5353 -j ACCEPTプリンターが表示されないときは対象とするクライアントにudpのすべてのポートを開放することで検索できるようになります。
私の環境ではUDP/10004も使われるようで
iptables -A INPUT -p udp -s 192.168.0.0/16 –sport 10004 -j ACCEPT
を追加する必要がありました。
Windows端末でプリンターの追加を行います。

プリンタの設定
クライアント端末からCUPSの設定ができるように/etc/cups/cupsd.confを編集します。
IP範囲の192.168.0.0/16は環境により適宜変更して下さい。
cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.org
nano /etc/cups/cupsd.conf変更前
# Only listen for connections from the local machine.
Listen localhost:631
Listen /run/cups/cups.sock
# Restrict access to the server...
<Location />
Order allow,deny
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
</Location>
変更後
# Only listen for connections from the local machine. サーバーがリッスンするIPアドレスを変更します。
Listen 631
Listen /run/cups/cups.sock
# Restrict access to the server... CUPSにアクセスできるIP範囲を指定します。
<Location />
Allow from 192.168.0.0/16
Order allow,deny
</Location>
# Restrict access to the admin pages... 管理ページにアクセスできるIP範囲を指定します。
<Location /admin>
Allow from 192.168.0.0/16
Order allow,deny
</Location>
# Restrict access to configuration files... 設定ファイルにアクセスできるIP範囲を指定します。
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Allow from 192.168.0.0/16
Order allow,deny
</Location>
CUPSを再起動します。
systemctl restart cupshttp://[linuxサーバーのipアドレス]:631 にアクセスしてCUPSの設定画面を開きます。【プリンター】タブを選択します。

待機中の【Canon_TS203】を選択します。

【管理】と表示されているプルダウンをクリックします。

【デフォルトオプションの設定】を選択します。

用紙の種類を選択します。

モノクロ印刷の有効・無効を選択します。

この他、印刷ジョブの管理などを行うことができます。
AirPrintの設定
avahiにサービスを追加してAirPrintに対応させます。設定ファイルを自動生成するpythonプログラムが公開されていますのでダウンロードして実行します。生成した設定ファイルを/etc/avahi/servicesに移動してavahiを再起動します。
wget --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
chmod +x ./airprint-generate.py
python ./airprint-generate.py
rm ./airprint-generate.py
mv ./AirPrint*.service /etc/avahi/services
systemctl restart avahi-daemonスマホからプリンターを選択して印刷します。
①共有ボタンをタップします。

②プリントを選択します。

③ > をタップします。

④プリンタを選択します。

⑤プリントをタップします。

⑤の画面で写真が白黒で表示されますが、プリセットが「なし」に設定されていればカラー印刷されます。