【ITニュース解説】Linux Printing with CUPS
2025年09月29日に「Dev.to」が公開したITニュース「Linux Printing with CUPS」について初心者にもわかりやすく解説しています。
ITニュース概要
Linuxでの印刷管理はCUPS (Common UNIX Printing System)が標準だ。ネットワークプリンターのジョブキューやドライバーサポートを担い、Webインターフェースやコマンドで設定する。IPP Everywhereでドライバーレス印刷も可能。企業環境でも重要な基盤技術だ。
ITニュース解説
印刷は、普段は意識されることの少ない技術だが、ひとたび機能しなくなるとその重要性を痛感する。ペーパーレス化が進む現代においても、レシートや配送ラベル、契約書など、個人利用から企業活動まで、さまざまな場面で印刷は不可欠な存在である。特に企業環境では、請求書の発行、コンプライアンス関連文書の作成、物流における出荷ラベルなど、ビジネスの基幹となる多くの機能が印刷に依存している。
現代の印刷環境は、大きく分けてローカル接続されたプリンターとネットワーク経由で利用できるプリンターに分かれる。ネットワークプリンターとは、イーサネットやWi-Fiなどのインターフェースを通じてネットワークに接続され、IPアドレスによってアクセスできるプリンターのことである。これらのプリンターは、プリントサーバーを介して一元的に管理されることが多い。プリントサーバーは、クライアントコンピューターからの印刷ジョブを受け取り、プリンターの限られた内部バッファの代わりに、ジョブを一時的に保管(スプール)し、キューに並べ、順序立てて処理する役割を果たす。これにより、複数の印刷要求があっても適切に管理され、プリンターが効率的に稼働する。プリンター内部にはプリントコントローラーがあり、印刷ジョブをプリンターハードウェアが理解できる形式に変換し、印刷を制御している。
Linux環境において、この印刷システムを管理する標準的なシステムがCUPS(Common UNIX Printing System)である。多くのLinuxディストリビューションにはCUPSがデフォルトで含まれており、プリンターの管理、ジョブキューイング、ドライバーのサポート、クライアントからのアクセス機能など、印刷システム全体の基盤を提供している。
CUPSをRHEL、CentOS、Rocky Linuxのような環境にインストールする場合、まずsudo dnf install cupsコマンドを実行してパッケージを導入する。次に、CUPSが通信に利用するポート631(IPPプロトコルが使用)をファイアウォールで許可する必要がある。これはsudo firewall-cmd --permanent --add-port=631/tcpコマンドで永続的にポートを開放し、sudo firewall-cmd --reloadで設定を再読み込みすることで適用される。
CUPSサービスを起動する前に、Webインターフェースを有効化し、セキュリティを確保するための設定変更を行う。主な設定ファイルは/etc/cups/cupsd.confである。このファイルを編集し、CUPSがどのIPアドレスとポートでリッスンするかを設定する。例えば、Port 631でポートを指定し、Listen 192.168.35.125:631のようにサーバーの具体的なIPアドレスを指定することで、CUPSが特定のインターフェースからの接続を待ち受けるようになる。
Webインターフェースへのアクセスを制御することも重要である。<Location />セクションでOrder allow,denyを指定し、Allow localhostでローカルからのアクセスを許可し、さらにAllow 192.168.35.0/24やAllow 192.168.20.0/24のように特定のネットワークからのアクセスを許可することで、セキュリティを強化できる。これは、指定されたIPアドレス範囲内のコンピューターのみがCUPSのWebインターフェースにアクセスできるようになることを意味する。管理セクションへのアクセスはさらに厳しく制限するべきである。<Location /admin>セクションでAuthType DefaultとRequire user @SYSTEMを設定することで、システムに登録された特定のグループ(通常は/etc/cups/cups-files.confで定義され、sudoコマンドを使用できるwheelグループなどが含まれる)のユーザーのみが管理機能を操作できるようになる。ログ設定としてAccessLog syslogを設定すれば、CUPSのアクセスログがシステムジャーナル(journalctlで参照可能)に記録されるようになり、問題発生時の調査に役立つ。これらの設定が完了したら、sudo systemctl enable --now cupsコマンドでCUPSサービスを起動し、システムの起動時に自動的に実行されるように設定する。
CUPSは多種多様な印刷プロトコルに対応しており、これによりさまざまな種類のプリンターやクライアントと連携できる。主なプロトコルには、CUPSのネイティブプロトコルであり、ドライバーレス印刷をサポートするIPP(Internet Printing Protocol)がある。AppleがIPPをベースに開発したAirPrintも含まれ、Bonjourによるプリンター発見機能を持つ。LPD(Line Printer Daemon)は古くから存在するプロトコルだが、セキュリティ面で脆弱性があるため、可能であれば利用を避けるべきである。Windowsクライアントからの印刷にはSMB(Samba-based printing)が利用される。また、AppSocket、通称JetDirect(ポート9100)は、HP製プリンターやレガシーなプリンターでよく使われるプロトコルである。セキュリティの観点からは、IPPやAirPrintのように最新かつセキュアなプロトコルを使用することが推奨される。
コマンドラインからプリンターを追加することも可能である。lpadminコマンドを使用し、例えばsudo lpadmin -p HP_LaserJet -E -v ipp://192.168.35.126:631 -m everywhereのように実行する。このコマンドの各オプションには意味がある。-p HP_LaserJetはプリンターキューに「HP_LaserJet」という名前を付ける。-Eはプリンターをすぐに有効化し、利用可能にする。-v ipp://192.168.35.126:631は、プリンターのデバイスURI(Uniform Resource Identifier)を指定し、この場合はIPアドレス192.168.35.126のポート631でIPPプロトコルを使ってプリンターに接続することを意味する。-m everywhereは「IPP Everywhere」モデルを利用することを指定する。IPP Everywhereは、CUPSがプリンター自身からその機能(対応用紙サイズ、両面印刷機能など)を問い合わせて自動的に認識するため、特定のベンダー製ドライバーをインストールする手間を省き、高い互換性を実現する。
CUPSを運用する上で役立つコマンドは他にも多くある。例えば、systemctl status cupsでCUPSサービスの稼働状況を確認し、sudo systemctl start cupsやsudo systemctl stop cupsでサービスを開始・停止できる。登録されているプリンターの一覧とデフォルトプリンターを確認するにはlpstat -p -dを使う。プリンターを削除するにはlpadmin -x printername、デフォルトプリンターを設定するにはlpoptions -d printernameを使用する。テストファイルを印刷する際にはlp /path/to/file、現在の印刷キューを確認するにはlpq、特定の印刷ジョブをキャンセルするにはcancel job_idといったコマンドが利用できる。
ここまでの設定により、CUPSサーバーはWebインターフェースから特定のネットワーク経由でアクセス可能となり、管理者権限を持つユーザーがWebページを通じてプリンターを管理できる状態になる。プリンターキューの追加、削除、管理、ジョブや権限の設定が可能で、IPP Everywhereを用いることでモダンなドライバーレス印刷を実現している。しかし、デフォルトのCUPS設定は中小規模の環境には適しているものの、大規模な導入や厳格なセキュリティ要件が求められる環境では、さらなるセキュリティ強化のための追加設定が推奨される。
CUPSは、家庭での利用から企業環境まで幅広く活用できる、堅牢で信頼性の高いプリントサーバーソリューションである。集中管理により、複数のプリンターやクライアントを効率的に運用でき、拠点を超えたリモート印刷にも対応する。また、プリントサーバーとして機能することで、個々のデバイスがプリンターハードウェアに直接依存する度合いを減らし、柔軟な印刷環境の構築に貢献する。