프린터 상태 변경 (예 : 용지 걸림, 일시 중지됨)을 수신하려고합니다. 다음 코드는 "잘못된 notify-recipient-uri"응답을 제공 한 다음 ippReadFile을 잠그고 프린터가 일시 중지/일시 중지 해제되었습니다. 프린터를 통해 선별 한 후CUPS 상태 변경 등록
int main()
{
http_t *http = httpConnectEncrypt(cupsServer(), ippPort(),
cupsEncryption());
ipp_t *request = ippNewRequest(IPP_CREATE_PRINTER_SUBSCRIPTION);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, "ipp://localhost:631/printers/Generic-text-only");
ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-recipient-uri",
NULL, "cups_test://");
ippAddString(request, IPP_TAG_SUBSCRIPTION, IPP_TAG_KEYWORD, "notify-events",
NULL, "printer-state-changed");
ipp_t *response = cupsDoRequest(http, request, "/");
while (1)
{
ipp_state_t state;
ipp_t *event = ippNew();
while ((state = ippReadFile(0, event)) != IPP_DATA)
{
printf("%s\n","Got Data");
}
printf("%s\n","Repeating");
ippDelete(event);
}
}
내가 "DBUS"로 설정 notify-schemes-supported
속성을 발견 속성. IPP_SET_PRINTER_ATTRIBUTES
으로 속성을 변경할 수 없습니다. 이 방법을 사용하는 방법에 대한 아이디어가 있습니까?
나는 cups에 익숙하지 않지만 'ippReadFile (int fd, ipp_t * ipp)'의 첫 번째 인수로 파일 설명자 0을 전달하는 것으로 나타났습니다. 파일 설명자 0은 표준 입력입니다. 프로그램의 표준 입력에 아무 것도 나타나지 않을 이유가 있습니까? 그렇지 않으면 당신이 묘사 한 것처럼 놀랄 일이 아닙니다. 'ippRead (http, event)'를 사용하면 어떨까요? – MassPikeMike
'ippRead (http, event)'는 잠기지 않으므로 무한 루프 만합니다. 이 코드가 https://github.com/apple/cups/blob/master/notifier/testnotify.c 및 https://github.com/apple/cups/blob/master/test/create- printer-subscription.test. 그것이 사실이라고 생각하지는 않지만 전 완전히 잘못 될 가능성이 있습니다. –
컵에있는 책에 따르면, CUPS : Michael Sweet의 Common UNIX Printing System "Notifier는 CUPS가 사용자, 프로그램에게 서버, 프린터 또는 작업의 상태 변화를 알리는 방법을 제공합니다 .Ippget 알림 스키마 다른 모든 CUPS 알림 기는 표준 입력 파일에서 이벤트를 수신하는 외부 프로그램 인 반면 CUPS 서버에서 내부적으로 구현됩니다. " –