LPR/LPDプロトコルでプリンタを共有

事の経緯

PCを買い替えてOSをWindows 11にしたら、ubuntuでSamba共有されているプリンタに出力できなくなりました。

なので、Sambaは諦めて他のプロトコルでプリンタを共有しようとしたのですが、プリントサーバー構築の際に最短でSamba共有しかしていなかったので、他のプリンターの環境を全く整備していませんでした。

そこで、プリントサーバのubuntuにUnix系OSで標準的なlpdサービスを稼働させて、CUPS経由で印刷するように設定していきます。

CUPSのLPDデーモンの起動確認

netstatでLPDサービスが起動していて515ポートで待ち受けているか確認します。

$ sudo netstat -tuln | grep 515
tcp6       0      0 :::515                  :::*                    LISTEN

のように出てくれば待ち受けていますので、次の章は読み飛ばしてよいです。

冒頭で書いた通り、私の環境ではプリントサーバー構築の際に最短でSamba共有しかしていなかったのでLPDサービスの設定を一切行っていませんでしたので、コマンドの実行結果には何も表示されませんでした。

LPDサービスの有効化と設定

cups-bsdのインストール

cups-bsdは、CUPS (Common UNIX Printing System) の一部で、特にBSD(バークレー)形式のコマンドラインユーティリティ(lpr, lpq, lprmなど)を提供するパッケージで、LPDサービスも統合されています。

以下のコマンドでcups-bsdをインストールします。

$ sudo apt update
$ sudo apt install cups-bsd

サーバの外部からCUPSに接続できるように設定

/etc/cups/cupsd.conf ファイルを編集し、CUPSに外部からのLPR(ポート515)やHTTP(ポート631)接続できるように設定します。

$ sudo vi /etc/cups/cupsd.conf

Listen と書いてある行に移動します。( /^Listen で移動できます )

Listen /run/cups/cups.sock

という行のみなので、その下に Listen 0.0.0.0:631 の行を追加します。

Listen /run/cups/cups.sock
Listen 0.0.0.0:631

ファイルを書き込みしてviを終了します。( :wq )

CUPSを再起動します。

$ sudo systemctl restart cups

LPDデーモンのパスを確認

下記コマンドでパスを確認します。

$ find /usr/lib/cups -name "cups-lpd"
/usr/lib/cups/daemon/cups-lpd

LPDサービスの設定ファイル作成

LPDサービスの設定ファイルを /etc/systemd/system に作成します。

cups-lpd.socket

$ sudo vi /etc/systemd/system/cups-lpd.socket

ファイルの内容は以下の通り。

[Unit]
Description=CUPS LPD Server Socket

[Socket]
ListenStream=515
Accept=yes
BindIPv6Only=both

[Install]
WantedBy=sockets.target

cups-lpd@.service

$ sudo vi /etc/systemd/system/cups-lpd@.service

ファイルの内容は以下の通り。

[Unit]
Description=CUPS LPD Service

[Service]
ExecStart=/usr/lib/cups/daemon/cups-lpd -o log-error -o exit-timeout=60
User=lp
Group=sys
StandardInput=socket

ここで、ExecStartのパスは LPDデーモンのパスを確認 で確認したLPD デーモンの実際のパスに修正してください

LPDサービスを有効化して起動

下記コマンドで systemd に新しいソケットサービスを認識させ、有効化し、起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable cups-lpd.socket
$ sudo systemctl start cups-lpd.socket

LPRプロトコルの待ち受け確認

LPRプロトコルのポート 515 が待ち受けているか確認します。

$ sudo netstat -tuln | grep 515
tcp6       0      0 :::515                  :::*                    LISTEN

上記のように LISTENと出れば、LPRプロトコルのポート 515 を待ち受けています。

UFWでLPDポートの再開放

以下コマンドでLPRポート(515)にTCP/UDP接続、CUPS管理ポートにTCP接続を許可します。

LPRポート(515)

$ sudo ufw allow 515/tcp
$ sudo ufw allow 515/udp

CUPS管理ポート(631)

$ sudo ufw allow 631/tcp

ファイアウォールをリロード

$ sudo ufw reload

Windows 11からの疎通確認

Windows 11から疎通確認します。

スタートメニュー右クリックから「ターミナル」を選択してWindows PowerShellを開き、telnetを起動します。
(telnetはWindows 11ではデフォルト無効になっているので、有効にしてください)

PS C:\Users\username> telnet 192.168.1.30 515

192.168.1.30 の部分はLPDサービスを起動したサーバのIPアドレスを指定してください。

エラーにならずに画面がクリアされて入力待ちになれば、疎通OKです。

Windows側プリンタの追加

LPRポートの有効化

Windows 11ではデフォルトでLPD印刷用のポートがオフになっているため、有効にします。

  1. [スタート] メニューを開き、「Windows の機能の有効化または無効化」と入力して開きます。
  2. 「Windows機能」が開くので「印刷とドキュメント サービス」を探し、左側の「+」を展開します。
  3. 「LPR ポート モニター」にチェックを入れ、[OK] をクリックします。
  4. 注意: 必要に応じて「LPD 印刷サービス」も有効にしますが、通常、クライアントとして印刷するだけなら「LPR ポート モニター」のみで十分です。
  5. 指示に従ってPCを再起動します。

プリンタの追加

Windows 11でプリンタの追加を行います。

  1. ローカル プリンターまたはネットワーク プリンターを手動設定で追加するスタートメニュー から「設定」を開く
  2. Bluetoothとデバイス → プリンタとスキャナー
  3. 「デバイスの追加」を押下
  4. 「プリンタが一覧にない場合」の表示を待ち、「新しいデバイスの追加」を押下
    ⇒ 「プリンタが一覧にない場合」が表示される前に、CUPSの共有設定を検知してプリンタが表示されるかもしれませんが、それをインストールすると標準的なドライバのインストールとなり、プリンタの詳細な設定ができません
  5. 「IPアドレスまたはホスト名を使ってプリンタを追加する」を選択して「次へ」を押下
  6. 「新しいポートの作成」を選択し、ポートの種類から「LPR Port」を選び 「次へ」 を押下
  7. 表示されたダイアログに以下の情報を入力する
    • LPD を提供しているサーバーの名前またはアドレス
      ⇒ 例: 192.168.1.30
    • そのサーバー上のプリンターまたはプリント キューの名前
      ⇒ 例: Canon_iP2700_series
  8. 適切なプリンタードライバーを選択し、画面の指示に従ってインストールを完了させる

設定後の確認

追加後、テスト ページの印刷 を行い、正しく出力されるか確認してください。

コメント

タイトルとURLをコピーしました