System V フィルターがインストールされているカップにプリンターをプログラムで追加する必要があります。現在、次のコードを使用して、プリンターを追加する要求を作成しています。
pstRequest = ippNew();
pstRequest->request.op.operation_id = CUPS_ADD_PRINTER;
pstRequest->request.any.request_id = 1;
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "us-ascii");
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en");
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_URI, "device-uri", NULL, szUri);
ippAddString(pstRequest, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, szPrinterUri);
ippAddInteger(pstRequest, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE);
ippAddBoolean(pstRequest, IPP_TAG_PRINTER, "printer-is-accepting-jobs", true);
会話のために:
szUri = "serial:/dev/pts/12?baud=2400+bits=7+parity=none+flow=none";
szPrinterUri = "ipp://localhost/printers/myptr";
次のコマンドを使用してプリンターに印刷を送信できるため、これはプリンターを cups システムに正しく追加しているように見えます。
lp -d myptr test.print
私が最初に考えたのは、フィルターとして使用したいファイルをディレクトリにコピーして、/etc/cups/interfaces
それを呼び出すことでしたmyptr
。私はこれを行い、正しいユーザー、グループ、およびアクセス許可を与えましたが、機能していないようです。sleep 60
スクリプトの先頭にa を貼り付けてみましたが、 には表示されませんでしたps
。
次のように使用してプリンターを追加しようとしましたが、lpadmin
正しく動作します。
lpadmin -h localhost -p myptr2 -v "serial:/dev/pts/12?baud=2400+bits=7+parity=none+flow=none" -i /tmp/my.serial.filter
私は電話をしなければcupsaccept
なりませんcupsenable
が、プリンターは動作し、フィルターを通して印刷物を送ります。 私のプログラムで行ったのと同じように、からファイルをlpadmin
正しくコピーして名前を付けます。私の人生では、カップ構成ファイルのいずれにもフィルターへの参照が見つからないため、欠落していると思われます。ステップ。それにもかかわらず、私が追加したプリンターは正しく動作し、API を使用して追加したプリンターは印刷されますが、フィルターを介して印刷されません。my.serial.filter
/tmp
/etc/cups/interfaces
myptr2
myptr2
lpadmin
myptr
私が行ったさまざまな Google 検索の中で、CUPS の実装とHTTP および IPP API のドキュメントを読みましたが、最も近いものは、前者にCUPS-Add-Modifyのコメントがあることでした。 - 読み取るプリンター操作:
CUPS-Add-Modify-Printer 要求の後には、必要に応じて、プリンターに使用される PPD ファイルまたは System V インターフェイス スクリプトを続けることができます。「ppd-name」属性は、リクエストの最後に添付されたファイルをローカル CUPS PPD ファイルで上書きします。
これにより、使用してみました
ippAddString(pstRequest, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name", NULL, szFilter);
szFilter を と の両方"/tmp/my.serial.filter"
に設定して"/etc/cups/interfaces/myptr"
(もちろん別々のテストで)、しかし役に立ちません。
どこが間違っているのか誰か教えてもらえますか?