Linux 印刷

LPIC 学習記録として

# CUPS
Common Unix Printing System、カップス

UNIX 系 OS で使用される印刷システムで、印刷ジョブの管理やプリンターの設定を行うためのサーバーソフトウェアのこと。

クライアントアプリケーション上で実行されたユーザの印刷操作は、`$ lpr` や GUI ツールを通じて `cupsd` [デーモン](https://qiita.com/AsahinaKei/items/e354a3814639aeac4138#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9--%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3) に [ジョブ](https://qiita.com/AsahinaKei/items/e354a3814639aeac4138#%E3%82%B8%E3%83%A7%E3%83%96) として送信され、CUPS はそれを適切なプリンタへ転送する。印刷ジョブは `cupsd` デーモンが **キュー** で管理する。

クライアントとサーバはネットワークを介して離れた場所にいても良い。

```console:cupsd デーモンを起動する（systemd）
$ systemctl start cups
```
※ [`systemd`](https://qiita.com/AsahinaKei/items/e354a3814639aeac4138#systemd)

```console:cupsd デーモンを起動する（SysVinit）
$ /etc/init.d/cups start
```
※ [`SysVinit`](https://qiita.com/AsahinaKei/items/e354a3814639aeac4138#sysvinit)


プリンタのドライバは、メーカから取得するか、もしくはフリーソフトとしてネット上で入手できる。

また、CUPS には Web ブラウザから設定を行うことのできるツールが内包されている。ツールには URL `http://localhost:631` でアクセスする。

![Screenshot 2025-05-21 at 20.39.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/4d61f003-3ff3-435b-be54-98f20c35e807.png)

macOS で起動する場合、以下のコマンドを実行してからブラウザで URL を入力する。

```console:
$ sudo cupsctl WebInterface=yes
```

## PostScript

Adobe 社が開発したページ記述言語（**PDL**: Page Description Language）。

テキストや図形の位置、サイズ、フォント、色などがコードで定義され、印刷データを表現するためのプログラミング言語として使用される。

プリンタは PostScript を読み取って、ページを描画する。正確で再現性の高い出力が可能。

## Ghostscript

PostScript を解釈、処理するソフトウェア。

プリンタのドライバが内包されている。

具体的には、`$ gs` によって PostScript ファイルを画面に表示したり（ビューア）、PDF、PNG、JPEG などに変換したりすることができる。

また PostScript の **インタプリタ** としての能力も持っている。多くのプリンタは PostScript を直接解釈できないが、 Ghostscript によって PostScript をレンダリングし、プリンタ向けの形式に変換することができる。

Linux では CUPS + Ghostscript の構成によって、PostScript 非対応のプリンタでも印刷が可能となっている。

## PPD
PostScript Printer Description

PostScript プリンタの機能、仕様を記述したファイル。

CUPS に対して「このプリンタは何ができるのか」を示すために使用される。

以下の情報が含まれる。

- プリンタ名
- メーカ / モデル情報
- 解像度
- 両面印刷対応
- 用紙サイズ
- カラーモード（モノクロ / カラー）

PPD ファイルは PostScript プリンタ以外でも利用されている。

最近の CUPS（特に macOS）では IPP Everywhere や AirPrint など、PPD を不要とする方式が増えている。これらの新しい方式では、プリンタ自身がどんな機能を持っているかを自己表現することができ、CUPS や OS がこれを自動で認識する。

# `/etc/cups/cupsd.conf`

CUPS の動作全体（ポート、アクセス制御、ログ、ディレクトリ設定など）を定義する設定ファイル。

編集後は CUPS を再起動する必要がある。

```console:systemd の場合
$ sudo systemctl restart cups
$ sudo systemctl restart cups.service
```

```console:SysVinit の場合
$ sudo /etc/init.d/cups restart
```

# `/etc/cups/printers.conf`

CUPS によって自動で生成・更新されるプリンタの設定ファイル。

プリンタ名、場所、デバイスURI、使用するドライバ（[PPD](#ppd)）などが設定でき、[デーモン](https://qiita.com/AsahinaKei/items/e354a3814639aeac4138#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9--%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3) の `cupsd` によって読み込まれる。

設定を変更したい場合は [`$ lpadmin`](#-lpadmin) コマンドや Webインターフェース（`http://localhost:631`）を使用する。

:::note alert
手動での編集は非推奨
:::

# `$ lp`
line printer

System V 系列で使用される。

ファイルや標準入力を印刷ジョブキューに送信する。

```console:標準入力から印刷ジョブキューに送信する
$ コマンド | lpr 
```

```console:ファイルから印刷ジョブキューに送信する
$ lpr ファイル
```

```console:プリンタ（destination）、部数を指定する
$ lpr -d プリンタ名 -n 部数 ファイル
```

出力先を指定しない場合は、デフォルトプリンタが出力先になる。


# `$ lpr`
line printer request

BSD 系列で使用される。

ファイルや標準入力を印刷ジョブキューに送信する。

```console:標準入力から印刷ジョブキューに送信する
$ コマンド | lpr 
```

```console:ファイルから印刷ジョブキューに送信する
$ lpr ファイル
```

```console:プリンタ、部数を指定する
$ lpr -P プリンタ名 -#部数 ファイル
```

出力先を指定しない場合は、デフォルトプリンタが出力先になる。


# `$ lpq`
line printer queue

印刷ジョブキューにあるジョブの状態を確認するためのコマンド。

```console:デフォルトプリンタのキューを確認する
$ lpq
```

```console:プリンタを指定する
$ lpq -P プリンタ名
```

```console:全てのプリンタのキューを確認する
$ lpq -a
```

# `$ lpstat`

```console:印刷ジョブキューを確認する
$ lpstat -o
```

```console:デフォルトプリンタを表示する
$ lpstat -d
```

```console:利用可能なプリンタを一覧表示する
$ lpstat -p
```

```console:CUPS デーモンの状態を確認する
$ lpstat -r
```

```console:プリンタや印刷ジョブなど全ての情報を表示する
$ lpstat -t
```

# `$ lprm`
line printer remove

```console:プリンタキューのジョブを削除する
$ lprm ジョブID
```
※ ジョブ ID は [`$ lpq`](#-lpq) で確認できる

```console:全ての印刷ジョブを削除する
$ lprm -
```

# `$ lpadmin`

```console:プリンタの追加・設定・削除を行う
$ lpadmin オプション
```

| オプション | 説明 |
|:-|:-|
| `-p プリンタ名` | プリンタ名を指定（printer） |
| `-d プリンタ名` | デフォルトプリンタとして設定（default） |
| `-x プリンタ名` | プリンタを削除 |
| `-v URI` | 接続先を指定 |
| `-P PPDファイル` | 使用する [PPD](#ppd) ファイルを指定 |
| `-E` | プリンタを有効化（印刷受付状態になる、enable） |