[cups-devel] how to get supported media information for a particular printer

Philip Race philip.race at oracle.com
Sun Aug 20 11:15:18 PDT 2017


It seems that the problem with cupsCheckDestSupported was a long 
standing bug
that was fixed just 2 months ago .. not supporting a  NULL value !
https://github.com/apple/cups/commit/49b6c6af7674e4d37d5cb14385c19618d9c1b668
..

What would be the recommended way to workaround that in shipping  
versions of 2.X
found on current OSes like Ubuntu 16.10 ?


-phil

[1] https://www.cups.org/doc/cupspm.html#cupsCheckDestSupported

On 8/2/17, 11:18 PM, My Sadhukhan wrote:
> I also tried with cups 2.2.0 with ubuntu16.10 and there also the
> cupsCheckDestSupported returns false for all options.
>
> On Thu, Aug 3, 2017 at 11:41 AM, My Sadhukhan<psadhukhan at gmail.com>  wrote:
>
>> I am using cups 2.1.3 that comes with ubuntu16.04. It should support the
>> non-ppd APIs, I guess, as that was deprecated from 1.6 onwards.
>> Please let me know if this version has any problem regarding the APIs I am
>> using.
>>
>> Regards
>> Prasanta
>>
>> On Wed, Aug 2, 2017 at 6:45 PM, Michael Sweet<msweet at apple.com>  wrote:
>>
>>> What version of CUPS are you using?
>>>
>>> (there have been a number of bug fixes over the years...)
>>>
>>>> On Aug 2, 2017, at 1:17 AM, My Sadhukhan<psadhukhan at gmail.com>  wrote:
>>>>
>>>> I checked cupsCheckDestSupported() before calling
>>> cupsFIndDestSupported()
>>>> for options like CUPS_COPIES,CUPS_FINISHINGS,CU
>>> PS_MEDIA,CUPS_ORIENTATION,
>>>> CUPS_SIDES etc and all of them return false,
>>>> although the printer being queried is a MFP and supports duplex,
>>>> orientation etc and I can print a test-page out of it.
>>>> Is it a bug in cups or am I missing calling/initialising something?
>>>>
>>>> Regards
>>>> Prasanta
>>>>
>>>> On Tue, Aug 1, 2017 at 10:56 AM, My Sadhukhan<psadhukhan at gmail.com>
>>> wrote:
>>>>> Thanks Michael.
>>>>> I used cupsGetNamedDest to initialise cups_dest_t but it still fails in
>>>>> cupsFindDestSupported().
>>>>> ----------
>>>>> void getMedia(char *name)
>>>>> {
>>>>>     cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
>>> NULL);
>>>>>     if (dest == NULL) {
>>>>>         printf("cupsGetNamedDest failed %s\n", cupsLastErrorString());
>>>>>         return;
>>>>>     } else {
>>>>>         printf("dest name %s\n", dest->name);
>>>>>     }
>>>>>     cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT, dest);
>>>>>     if (info == NULL) {
>>>>>         printf("CopyDestInfo Request failed %s\n",
>>> cupsLastErrorString());
>>>>>     }
>>>>>     ipp_attribute_t *media = cupsFindDestSupported(CUPS_HTTP_DEFAULT,
>>>>>                               dest, info, CUPS_MEDIA);
>>>>>     if (media != NULL) {
>>>>>         int i, count = ippGetCount(media);
>>>>>         printf("count %d\n", count);
>>>>>         for (i = 0; i<  count; i++)
>>>>>             printf(" %s\n", ippGetString(media, i, NULL));
>>>>>     } else {
>>>>>         printf("FindDestSupported Request failed %s\n",
>>>>> cupsLastErrorString());
>>>>>     }
>>>>> }
>>>>>
>>>>> ----------------------------citing----------
>>>>> dest name Ricoh-Aficio-MP-5002
>>>>> CopyDestInfo Request failed successful-ok
>>>>> FindDestSupported Request failed Invalid argument
>>>>> ----------------
>>>>> I am not sure if cupsCopyDestInfo() failed or not . The manual does not
>>>>> say the return value if there is error. cupsGetLastErrorString()
>>> conveys
>>>>> there is no error yet "info" is NULL.
>>>>>
>>>>> Could you please suggest as to what else is going wrong?
>>>>> I could not find "_cups_dinfo_s" structure definition in
>>>>> https://www.cups.org/doc/cupspm.html#cups_dinfo_t.
>>>>> Also, cupsFindDestSupported() manual shows "Find the default value(s)
>>> for
>>>>> the given option." which is same as cupsFindDestDefault(). I think the
>>>>> former should be texted as "Find supported value(s) for the given
>>> option".
>>>>> Regards
>>>>> Prasanta
>>>>>
>>>>> On Mon, Jul 31, 2017 at 7:11 PM, Michael Sweet<msweet at apple.com>
>>> wrote:
>>>>>> You can't initialize a cups_dest_t structure directly like that and
>>> have
>>>>>> it work.
>>>>>>
>>>>>> Use:
>>>>>>
>>>>>>     cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
>>> NULL);
>>>>>> Then cupsCopyDestInfo will have the information it needs to get the
>>>>>> supported media for you...
>>>>>>
>>>>>>
>>>>>>> On Jul 31, 2017, at 6:01 AM, My Sadhukhan<psadhukhan at gmail.com>
>>> wrote:
>>>>>>> Hi All,
>>>>>>>
>>>>>>> I was trying to find the supported media for a particular printer
>>> using
>>>>>>> non-ppd based API but am encountering a problem.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *void getMedia(char *name){    cups_dest_t dest;    dest.name
>>>>>>> <http://dest.name>  = name;    dest.instance = name;
>>> dest.is_default
>>>>>> =
>>>>>>> 0;    cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT,
>>> &dest);;
>>>>>>> if (info == NULL) {        printf("CopyDestInfo Request failed %s\n",
>>>>>>> cupsLastErrorString());    }    ipp_attribute_t *media =
>>>>>>> cupsFindDestSupported(CUPS_HTTP_DEFAULT,
>>>>>>> &dest, info, CUPS_MEDIA);    if (media != NULL) {        int i,
>>> count =
>>>>>>> ippGetCount(media);        printf("count %d\n", count);        for
>>> (i =
>>>>>> 0;
>>>>>>> i<  count; i++)            printf(" %s\n", ippGetString(media, i,
>>>>>>> NULL));    } else {        printf("FindDestSupported Request failed
>>>>>> %s\n",
>>>>>>> cupsLastErrorString());    }}int main(void){
>>>>>>> getMedia("Ricoh-Aficio-MP-5002");*
>>>>>>> *}*
>>>>>>>
>>>>>>> I am getting
>>>>>>> -----------
>>>>>>> CopyDestInfo Request failed (null)
>>>>>>> FindDestSupported Request failed Invalid argument
>>>>>>> -----------
>>>>>>>
>>>>>>> Earlier, I was using
>>>>>>> char filename = cupsGetPPD("Ricoh-Aficio-MP-5002");
>>>>>>> ppd_file_t *ppd = ppdOpenFile(filename);
>>>>>>> ppd_option_t *optionPage = ppdFindOption(ppd, "PageSize") and get
>>>>>>> optionPage->choices->text
>>>>>>> to get the below supported media size information obtained from that
>>>>>>> printer ppd.
>>>>>>> That is, in* /etc/cups/ppd/Ricoh-Aficio-MP-5002.ppd*,
>>>>>>> I have this and I am interested in getting "A3", "A4", "A5", "A6",
>>> "B4",
>>>>>>> "B5"..."EngQuatro.FullBleed" etc.
>>>>>>>
>>>>>>> but now, since ppd API is deprecated, I want to use the new IPP-based
>>>>>> api.
>>>>>>> Could anyone suggest what I need to use in above code?
>>>>>>>
>>>>>>> *%========== Information About Media Sizes ==========
>>>>>>>
>>>>>>> *DefaultImageableArea: A4
>>>>>>> *ImageableArea A3/A3: "12 12 830 1179"
>>>>>>> *ImageableArea A4/A4: "12 12 583 830"
>>>>>>> *ImageableArea A5/A5: "12 12 408 583"
>>>>>>> *ImageableArea A6/A6: "12 12 285 408"
>>>>>>> *ImageableArea B4/B4 (JIS): "12 12 717 1020"
>>>>>>> *ImageableArea B5/B5 (JIS): "12 12 504 717"
>>>>>>> *ImageableArea B6/B6 (JIS): "12 12 351 504"
>>>>>>> *ImageableArea Legal/Legal: "12 12 600 996"
>>>>>>> *ImageableArea GovernmentLG/8.25x14: "12 12 582 996"
>>>>>>> *ImageableArea EngQuatro/8x10: "12 12 564 708"
>>>>>>> *ImageableArea GLT/8x10.5: "12 12 564 744"
>>>>>>> *ImageableArea Letter/Letter: "12 12 600 780"
>>>>>>> *ImageableArea Statement/5.5x8.5: "12 12 384 600"
>>>>>>> *ImageableArea F/8x13: "12 12 564 924"
>>>>>>> *ImageableArea Folio/8.25x13: "12 12 583 923"
>>>>>>> *ImageableArea FanFoldGermanLegal/8.5x13: "12 12 600 924"
>>>>>>> *ImageableArea Tabloid/11x17: "12 12 780 1212"
>>>>>>> *ImageableArea 12x18/12x18: "12 12 852 1284"
>>>>>>> *ImageableArea 11x15/11x15: "12 12 780 1068"
>>>>>>> *ImageableArea 10x14/10x14: "12 12 708 996"
>>>>>>> *ImageableArea 10x15/10x15: "12 12 708 1068"
>>>>>>> *ImageableArea 11x14/11x14: "12 12 780 996"
>>>>>>> *ImageableArea Executive/Executive: "12 12 510 744"
>>>>>>> *ImageableArea Env10/Com10 Env.: "12 12 285 672"
>>>>>>> *ImageableArea EnvMonarch/Monarch Env.: "12 12 267 528"
>>>>>>> *ImageableArea EnvC5/C5 Env.: "12 12 447 637"
>>>>>>> *ImageableArea EnvC6/C6 Env.: "12 12 311 447"
>>>>>>> *ImageableArea DLEnv/DL Env.: "12 12 299 611"
>>>>>>> *ImageableArea 8Kai/8K: "12 12 745 1094"
>>>>>>> *ImageableArea 16Kai/16K: "12 12 541 745"
>>>>>>> *ImageableArea A3.FullBleed/A3 (Full Bleed): "0 0 842 1190"
>>>>>>> *ImageableArea A4.FullBleed/A4 (Full Bleed): "0 0 595 841"
>>>>>>> *ImageableArea A5.FullBleed/A5 (Full Bleed): "0 0 420 594"
>>>>>>> *ImageableArea A6.FullBleed/A6 (Full Bleed): "0 0 297 419"
>>>>>>> *ImageableArea B4.FullBleed/B4 (JIS) (Full Bleed): "0 0 729 1031"
>>>>>>> *ImageableArea B5.FullBleed/B5 (JIS) (Full Bleed): "0 0 516 728"
>>>>>>> *ImageableArea B6.FullBleed/B6 (JIS) (Full Bleed): "0 0 363 515"
>>>>>>> *ImageableArea Legal.FullBleed/Legal (Full Bleed): "0 0 612 1007"
>>>>>>> *ImageableArea GovernmentLG.FullBleed/8.25x14 (Full Bleed): "0 0 594
>>>>>> 1007"
>>>>>>> *ImageableArea EngQuatro.FullBleed/8x10 (Full Bleed): "0 0 576 719"
>>>>>>> ...
>>>>>>> ..
>>>>>>>
>>>>>>> Thanks&  Regards
>>>>>>> Prasanta
>>>>>>> _______________________________________________
>>>>>>> cups-devel mailing list
>>>>>>> cups-devel at cups.org
>>>>>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>>>>> _________________________________________________________
>>>>>> Michael Sweet, Senior Printing System Engineer
>>>>>>
>>>>>> _______________________________________________
>>>>>> cups-devel mailing list
>>>>>> cups-devel at cups.org
>>>>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>>>>>
>>>>>
>>>> _______________________________________________
>>>> cups-devel mailing list
>>>> cups-devel at cups.org
>>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>> _________________________________________________________
>>> Michael Sweet, Senior Printing System Engineer
>>>
>>> _______________________________________________
>>> cups-devel mailing list
>>> cups-devel at cups.org
>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>>
>>
> _______________________________________________
> cups-devel mailing list
> cups-devel at cups.org
> https://lists.cups.org/mailman/listinfo/cups-devel


More information about the cups-devel mailing list