Skip to content
Snippets Groups Projects
guix.texi 828 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andy Wingo's avatar
    Andy Wingo committed
    fails, how much logging to do, and so on.  To actually add a printer,
    you have to visit the @url{http://localhost:631} URL, or use a tool such
    as GNOME's printer configuration services.  By default, configuring a
    CUPS service will generate a self-signed certificate if needed, for
    secure connections to the print server.
    
    
    Suppose you want to enable the Web interface of CUPS and also add
    
    support for Epson printers @i{via} the @code{escpr} package and for HP
    printers @i{via} the @code{hplip} package.  You can do that directly,
    like this (you need to use the @code{(gnu packages cups)} module):
    
    Andy Wingo's avatar
    Andy Wingo committed
    
    @example
    (service cups-service-type
             (cups-configuration
    
               (web-interface? #t)
               (extensions
    
                 (list cups-filters escpr hplip))))
    
    Andy Wingo's avatar
    Andy Wingo committed
    12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818
    @end example
    
    The available configuration parameters follow.  Each parameter
    definition is preceded by its type; for example, @samp{string-list foo}
    indicates that the @code{foo} parameter should be specified as a list of
    strings.  There is also a way to specify the configuration as a string,
    if you have an old @code{cupsd.conf} file that you want to port over
    from some other system; see the end for more details.
    
    @c The following documentation was initially generated by
    @c (generate-documentation) in (gnu services cups).  Manually maintained
    @c documentation is better, so we shouldn't hesitate to edit below as
    @c needed.  However if the change you want to make to this documentation
    @c can be done in an automated way, it's probably easier to change
    @c (generate-documentation) than to make it below and have to deal with
    @c the churn as CUPS updates.
    
    
    Available @code{cups-configuration} fields are:
    
    @deftypevr {@code{cups-configuration} parameter} package cups
    The CUPS package.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} package-list extensions
    Drivers and other extensions to the CUPS package.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
    Configuration of where to write logs, what directories to use for print
    spools, and related privileged configuration parameters.
    
    Available @code{files-configuration} fields are:
    
    @deftypevr {@code{files-configuration} parameter} log-location access-log
    Defines the access log filename.  Specifying a blank filename disables
    access log generation.  The value @code{stderr} causes log entries to be
    sent to the standard error file when the scheduler is running in the
    foreground, or to the system log daemon when run in the background.  The
    value @code{syslog} causes log entries to be sent to the system log
    daemon.  The server name may be included in filenames using the string
    @code{%s}, as in @code{/var/log/cups/%s-access_log}.
    
    Defaults to @samp{"/var/log/cups/access_log"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} file-name cache-dir
    Where CUPS should cache data.
    
    Defaults to @samp{"/var/cache/cups"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string config-file-perm
    Specifies the permissions for all configuration files that the scheduler
    writes.
    
    Note that the permissions for the printers.conf file are currently
    masked to only allow access from the scheduler user (typically root).
    This is done because printer device URIs sometimes contain sensitive
    authentication information that should not be generally known on the
    system.  There is no way to disable this security feature.
    
    Defaults to @samp{"0640"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} log-location error-log
    Defines the error log filename.  Specifying a blank filename disables
    access log generation.  The value @code{stderr} causes log entries to be
    sent to the standard error file when the scheduler is running in the
    foreground, or to the system log daemon when run in the background.  The
    value @code{syslog} causes log entries to be sent to the system log
    daemon.  The server name may be included in filenames using the string
    @code{%s}, as in @code{/var/log/cups/%s-error_log}.
    
    Defaults to @samp{"/var/log/cups/error_log"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string fatal-errors
    Specifies which errors are fatal, causing the scheduler to exit.  The
    kind strings are:
    
    @table @code
    @item none
    No errors are fatal.
    
    @item all
    All of the errors below are fatal.
    
    @item browse
    Browsing initialization errors are fatal, for example failed connections
    to the DNS-SD daemon.
    
    @item config
    Configuration file syntax errors are fatal.
    
    @item listen
    Listen or Port errors are fatal, except for IPv6 failures on the
    loopback or @code{any} addresses.
    
    @item log
    Log file creation or write errors are fatal.
    
    @item permissions
    Bad startup file permissions are fatal, for example shared TLS
    certificate and key files with world-read permissions.
    @end table
    
    Defaults to @samp{"all -browse"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} boolean file-device?
    Specifies whether the file pseudo-device can be used for new printer
    queues.  The URI @uref{file:///dev/null} is always allowed.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string group
    Specifies the group name or ID that will be used when executing external
    programs.
    
    Defaults to @samp{"lp"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string log-file-perm
    Specifies the permissions for all log files that the scheduler writes.
    
    Defaults to @samp{"0644"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} log-location page-log
    Defines the page log filename.  Specifying a blank filename disables
    access log generation.  The value @code{stderr} causes log entries to be
    sent to the standard error file when the scheduler is running in the
    foreground, or to the system log daemon when run in the background.  The
    value @code{syslog} causes log entries to be sent to the system log
    daemon.  The server name may be included in filenames using the string
    @code{%s}, as in @code{/var/log/cups/%s-page_log}.
    
    Defaults to @samp{"/var/log/cups/page_log"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string remote-root
    Specifies the username that is associated with unauthenticated accesses
    by clients claiming to be the root user.  The default is @code{remroot}.
    
    Defaults to @samp{"remroot"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} file-name request-root
    Specifies the directory that contains print jobs and other HTTP request
    data.
    
    Defaults to @samp{"/var/spool/cups"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
    Specifies the level of security sandboxing that is applied to print
    filters, backends, and other child processes of the scheduler; either
    @code{relaxed} or @code{strict}.  This directive is currently only
    used/supported on macOS.
    
    Defaults to @samp{strict}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} file-name server-keychain
    Specifies the location of TLS certificates and private keys.  CUPS will
    look for public and private keys in this directory: a @code{.crt} files
    for PEM-encoded certificates and corresponding @code{.key} files for
    PEM-encoded private keys.
    
    Defaults to @samp{"/etc/cups/ssl"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} file-name server-root
    Specifies the directory containing the server configuration files.
    
    Defaults to @samp{"/etc/cups"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
    Specifies whether the scheduler calls fsync(2) after writing
    configuration or state files.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
    Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} file-name temp-dir
    Specifies the directory where temporary files are stored.
    
    Defaults to @samp{"/var/spool/cups/tmp"}.
    @end deftypevr
    
    @deftypevr {@code{files-configuration} parameter} string user
    Specifies the user name or ID that is used when running external
    programs.
    
    Defaults to @samp{"lp"}.
    @end deftypevr
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
    Specifies the logging level for the AccessLog file.  The @code{config}
    level logs when printers and classes are added, deleted, or modified and
    when configuration files are accessed or updated.  The @code{actions}
    level logs when print jobs are submitted, held, released, modified, or
    canceled, and any of the conditions for @code{config}.  The @code{all}
    level logs all requests.
    
    Defaults to @samp{actions}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
    Specifies whether to purge job history data automatically when it is no
    longer required for quotas.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
    Specifies which protocols to use for local printer sharing.
    
    Defaults to @samp{dnssd}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
    Specifies whether the CUPS web interface is advertised.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean browsing?
    Specifies whether shared printers are advertised.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string classification
    Specifies the security classification of the server.  Any valid banner
    name can be used, including "classified", "confidential", "secret",
    "topsecret", and "unclassified", or the banner can be omitted to disable
    secure printing functions.
    
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean classify-override?
    Specifies whether users may override the classification (cover page) of
    individual print jobs using the @code{job-sheets} option.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
    Specifies the default type of authentication to use.
    
    Defaults to @samp{Basic}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
    Specifies whether encryption will be used for authenticated requests.
    
    Defaults to @samp{Required}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string default-language
    Specifies the default language to use for text and web content.
    
    Defaults to @samp{"en"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string default-paper-size
    Specifies the default paper size for new print queues.  @samp{"Auto"}
    uses a locale-specific default, while @samp{"None"} specifies there is
    no default paper size.  Specific size names are typically
    @samp{"Letter"} or @samp{"A4"}.
    
    Defaults to @samp{"Auto"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string default-policy
    Specifies the default access policy to use.
    
    Defaults to @samp{"default"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean default-shared?
    Specifies whether local printers are shared by default.
    
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
    Specifies the delay for updating of configuration and state files, in
    seconds.  A value of 0 causes the update to happen as soon as possible,
    typically within a few milliseconds.
    
    Defaults to @samp{30}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} error-policy error-policy
    Specifies what to do when an error occurs.  Possible values are
    @code{abort-job}, which will discard the failed print job;
    @code{retry-job}, which will retry the job at a later time;
    @code{retry-this-job}, which retries the failed job immediately; and
    @code{stop-printer}, which stops the printer.
    
    Defaults to @samp{stop-printer}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
    Specifies the maximum cost of filters that are run concurrently, which
    can be used to minimize disk, memory, and CPU resource problems.  A
    limit of 0 disables filter limiting.  An average print to a
    non-PostScript printer needs a filter limit of about 200.  A PostScript
    printer needs about half that (100).  Setting the limit below these
    thresholds will effectively limit the scheduler to printing a single job
    at any time.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
    Specifies the scheduling priority of filters that are run to print a
    job.  The nice value ranges from 0, the highest priority, to 19, the
    lowest priority.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
    Specifies whether to do reverse lookups on connecting clients.  The
    @code{double} setting causes @code{cupsd} to verify that the hostname
    resolved from the address matches one of the addresses returned for that
    hostname.  Double lookups also prevent clients with unregistered
    addresses from connecting to your server.  Only set this option to
    @code{#t} or @code{double} if absolutely required.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
    Specifies the number of seconds to wait before killing the filters and
    backend associated with a canceled or held job.
    
    Defaults to @samp{30}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
    Specifies the interval between retries of jobs in seconds.  This is
    typically used for fax queues but can also be used with normal print
    queues whose error policy is @code{retry-job} or
    @code{retry-current-job}.
    
    Defaults to @samp{30}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
    Specifies the number of retries that are done for jobs.  This is
    typically used for fax queues but can also be used with normal print
    queues whose error policy is @code{retry-job} or
    @code{retry-current-job}.
    
    Defaults to @samp{5}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
    Specifies whether to support HTTP keep-alive connections.
    
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
    Specifies how long an idle client connection remains open, in seconds.
    
    Defaults to @samp{30}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
    Specifies the maximum size of print files, IPP requests, and HTML form
    data.  A limit of 0 disables the limit check.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
    Listens on the specified interfaces for connections.  Valid values are
    of the form @var{address}:@var{port}, where @var{address} is either an
    IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to
    indicate all addresses.  Values can also be file names of local UNIX
    domain sockets.  The Listen directive is similar to the Port directive
    but allows you to restrict access to specific interfaces or networks.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
    Specifies the number of pending connections that will be allowed.  This
    normally only affects very busy servers that have reached the MaxClients
    limit, but can also be triggered by large numbers of simultaneous
    connections.  When the limit is reached, the operating system will
    refuse additional connections until the scheduler can accept the pending
    ones.
    
    Defaults to @samp{128}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
    Specifies a set of additional access controls.
    
    Available @code{location-access-controls} fields are:
    
    @deftypevr {@code{location-access-controls} parameter} file-name path
    Specifies the URI path to which the access control applies.
    @end deftypevr
    
    @deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
    Access controls for all access to this path, in the same format as the
    @code{access-controls} of @code{operation-access-control}.
    
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
    Access controls for method-specific access to this path.
    
    Defaults to @samp{()}.
    
    Available @code{method-access-controls} fields are:
    
    @deftypevr {@code{method-access-controls} parameter} boolean reverse?
    If @code{#t}, apply access controls to all methods except the listed
    methods.  Otherwise apply to only the listed methods.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{method-access-controls} parameter} method-list methods
    Methods to which this access control applies.
    
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
    Access control directives, as a list of strings.  Each string should be
    one directive, such as "Order allow,deny".
    
    Defaults to @samp{()}.
    @end deftypevr
    @end deftypevr
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
    Specifies the number of debugging messages that are retained for logging
    if an error occurs in a print job.  Debug messages are logged regardless
    of the LogLevel setting.
    
    Defaults to @samp{100}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} log-level log-level
    Specifies the level of logging for the ErrorLog file.  The value
    @code{none} stops all logging while @code{debug2} logs everything.
    
    Defaults to @samp{info}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
    Specifies the format of the date and time in the log files.  The value
    @code{standard} logs whole seconds while @code{usecs} logs microseconds.
    
    Defaults to @samp{standard}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
    Specifies the maximum number of simultaneous clients that are allowed by
    the scheduler.
    
    Defaults to @samp{100}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
    Specifies the maximum number of simultaneous clients that are allowed
    from a single address.
    
    Defaults to @samp{100}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
    Specifies the maximum number of copies that a user can print of each
    job.
    
    Defaults to @samp{9999}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
    Specifies the maximum time a job may remain in the @code{indefinite}
    hold state before it is canceled.  A value of 0 disables cancellation of
    held jobs.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
    Specifies the maximum number of simultaneous jobs that are allowed.  Set
    to 0 to allow an unlimited number of jobs.
    
    Defaults to @samp{500}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
    Specifies the maximum number of simultaneous jobs that are allowed per
    printer.  A value of 0 allows up to MaxJobs jobs per printer.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
    Specifies the maximum number of simultaneous jobs that are allowed per
    user.  A value of 0 allows up to MaxJobs jobs per user.
    
    Defaults to @samp{0}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
    Specifies the maximum time a job may take to print before it is
    canceled, in seconds.  Set to 0 to disable cancellation of "stuck" jobs.
    
    Defaults to @samp{10800}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
    Specifies the maximum size of the log files before they are rotated, in
    bytes.  The value 0 disables log rotation.
    
    Defaults to @samp{1048576}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
    Specifies the maximum amount of time to allow between files in a
    multiple file print job, in seconds.
    
    Defaults to @samp{300}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string page-log-format
    Specifies the format of PageLog lines.  Sequences beginning with percent
    (@samp{%}) characters are replaced with the corresponding information,
    while all other characters are copied literally.  The following percent
    sequences are recognized:
    
    @table @samp
    @item %%
    insert a single percent character
    
    @item %@{name@}
    insert the value of the specified IPP attribute
    
    @item %C
    insert the number of copies for the current page
    
    @item %P
    insert the current page number
    
    @item %T
    insert the current date and time in common log format
    
    @item %j
    insert the job ID
    
    @item %p
    insert the printer name
    
    @item %u
    insert the username
    @end table
    
    A value of the empty string disables page logging.  The string @code{%p
    %u %j %T %P %C %@{job-billing@} %@{job-originating-host-name@}
    %@{job-name@} %@{media@} %@{sides@}} creates a page log with the
    standard items.
    
    Defaults to @samp{""}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
    Passes the specified environment variable(s) to child processes; a list
    of strings.
    
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
    Specifies named access control policies.
    
    Available @code{policy-configuration} fields are:
    
    @deftypevr {@code{policy-configuration} parameter} string name
    Name of the policy.
    @end deftypevr
    
    @deftypevr {@code{policy-configuration} parameter} string job-private-access
    Specifies an access list for a job's private values.  @code{@@ACL} maps
    to the printer's requesting-user-name-allowed or
    requesting-user-name-denied values.  @code{@@OWNER} maps to the job's
    owner.  @code{@@SYSTEM} maps to the groups listed for the
    @code{system-group} field of the @code{files-config} configuration,
    which is reified into the @code{cups-files.conf(5)} file.  Other
    possible elements of the access list include specific user names, and
    @code{@@@var{group}} to indicate members of a specific group.  The
    access list may also be simply @code{all} or @code{default}.
    
    Defaults to @samp{"@@OWNER @@SYSTEM"}.
    @end deftypevr
    
    @deftypevr {@code{policy-configuration} parameter} string job-private-values
    Specifies the list of job values to make private, or @code{all},
    @code{default}, or @code{none}.
    
    Defaults to @samp{"job-name job-originating-host-name
    job-originating-user-name phone"}.
    @end deftypevr
    
    @deftypevr {@code{policy-configuration} parameter} string subscription-private-access
    Specifies an access list for a subscription's private values.
    @code{@@ACL} maps to the printer's requesting-user-name-allowed or
    requesting-user-name-denied values.  @code{@@OWNER} maps to the job's
    owner.  @code{@@SYSTEM} maps to the groups listed for the
    @code{system-group} field of the @code{files-config} configuration,
    which is reified into the @code{cups-files.conf(5)} file.  Other
    possible elements of the access list include specific user names, and
    @code{@@@var{group}} to indicate members of a specific group.  The
    access list may also be simply @code{all} or @code{default}.
    
    Defaults to @samp{"@@OWNER @@SYSTEM"}.
    @end deftypevr
    
    @deftypevr {@code{policy-configuration} parameter} string subscription-private-values
    Specifies the list of job values to make private, or @code{all},
    @code{default}, or @code{none}.
    
    Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
    notify-subscriber-user-name notify-user-data"}.
    @end deftypevr
    
    @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
    Access control by IPP operation.
    
    Defaults to @samp{()}.
    @end deftypevr
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
    Specifies whether job files (documents) are preserved after a job is
    printed.  If a numeric value is specified, job files are preserved for
    the indicated number of seconds after printing.  Otherwise a boolean
    value applies indefinitely.
    
    Defaults to @samp{86400}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
    Specifies whether the job history is preserved after a job is printed.
    If a numeric value is specified, the job history is preserved for the
    indicated number of seconds after printing.  If @code{#t}, the job
    history is preserved until the MaxJobs limit is reached.
    
    Defaults to @samp{#t}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
    Specifies the amount of time to wait for job completion before
    restarting the scheduler.
    
    Defaults to @samp{30}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string rip-cache
    Specifies the maximum amount of memory to use when converting documents
    into bitmaps for a printer.
    
    Defaults to @samp{"128m"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string server-admin
    Specifies the email address of the server administrator.
    
    Defaults to @samp{"root@@localhost.localdomain"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
    The ServerAlias directive is used for HTTP Host header validation when
    clients connect to the scheduler from external interfaces.  Using the
    special name @code{*} can expose your system to known browser-based DNS
    rebinding attacks, even when accessing sites through a firewall.  If the
    auto-discovery of alternate names does not work, we recommend listing
    each alternate name with a ServerAlias directive instead of using
    @code{*}.
    
    Defaults to @samp{*}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string server-name
    Specifies the fully-qualified host name of the server.
    
    Defaults to @samp{"localhost"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
    Specifies what information is included in the Server header of HTTP
    responses.  @code{None} disables the Server header.  @code{ProductOnly}
    reports @code{CUPS}.  @code{Major} reports @code{CUPS 2}.  @code{Minor}
    reports @code{CUPS 2.0}.  @code{Minimal} reports @code{CUPS 2.0.0}.
    @code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is
    the output of the @code{uname} command.  @code{Full} reports @code{CUPS
    2.0.0 (@var{uname}) IPP/2.0}.
    
    Defaults to @samp{Minimal}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} string set-env
    Set the specified environment variable to be passed to child processes.
    
    Defaults to @samp{"variable value"}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
    Listens on the specified interfaces for encrypted connections.  Valid
    values are of the form @var{address}:@var{port}, where @var{address} is
    either an IPv6 address enclosed in brackets, an IPv4 address, or
    @code{*} to indicate all addresses.
    
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
    Sets encryption options.  By default, CUPS only supports encryption
    using TLS v1.0 or higher using known secure cipher suites.  The
    @code{AllowRC4} option enables the 128-bit RC4 cipher suites, which are
    required for some older clients that do not implement newer ones.  The
    @code{AllowSSL3} option enables SSL v3.0, which is required for some
    older clients that do not support TLS v1.0.
    
    Defaults to @samp{()}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
    Specifies whether the scheduler requires clients to strictly adhere to
    the IPP specifications.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
    Specifies the HTTP request timeout, in seconds.
    
    Defaults to @samp{300}.
    
    @end deftypevr
    
    @deftypevr {@code{cups-configuration} parameter} boolean web-interface?
    Specifies whether the web interface is enabled.
    
    Defaults to @samp{#f}.
    @end deftypevr
    
    At this point you're probably thinking ``oh dear, Guix manual, I like
    you but you can stop already with the configuration options''.  Indeed.
    However, one more point: it could be that you have an existing
    @code{cupsd.conf} that you want to use.  In that case, you can pass an
    @code{opaque-cups-configuration} as the configuration of a
    @code{cups-service-type}.
    
    Available @code{opaque-cups-configuration} fields are:
    
    @deftypevr {@code{opaque-cups-configuration} parameter} package cups
    The CUPS package.
    @end deftypevr
    
    @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
    The contents of the @code{cupsd.conf}, as a string.
    @end deftypevr
    
    @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
    The contents of the @code{cups-files.conf} file, as a string.
    @end deftypevr
    
    For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
    strings of the same name, you could instantiate a CUPS service like
    this:
    
    @example
    (service cups-service-type
             (opaque-cups-configuration
               (cupsd.conf cupsd.conf)
               (cups-files.conf cups-files.conf)))
    @end example
    
    
    
    @node Desktop Services
    @subsubsection Desktop Services
    
    The @code{(gnu services desktop)} module provides services that are
    usually useful in the context of a ``desktop'' setup---that is, on a
    machine running a graphical display server, possibly with graphical user
    
    interfaces, etc.  It also defines services that provide specific desktop
    
    environments like GNOME, XFCE or MATE.
    
    To simplify things, the module defines a variable containing the set of
    services that users typically expect on a machine with a graphical
    environment and networking:
    
    @defvr {Scheme Variable} %desktop-services
    This is a list of services that builds upon @var{%base-services} and
    
    adds or adjusts services for a typical ``desktop'' setup.
    
    
    In particular, it adds a graphical login manager (@pxref{X Window,
    
    @code{slim-service}}), screen lockers, a network management tool
    
    (@pxref{Networking Services, @code{network-manager-service-type}}), energy and color
    
    management services, the @code{elogind} login and seat manager, the
    Polkit privilege service, the GeoClue location service, the
    AccountsService daemon that allows authorized users change system
    passwords, an NTP client (@pxref{Networking Services}), the Avahi
    daemon, and has the name service switch service configured to be able to
    use @code{nss-mdns} (@pxref{Name Service Switch, mDNS}).
    
    @end defvr
    
    The @var{%desktop-services} variable can be used as the @code{services}
    field of an @code{operating-system} declaration (@pxref{operating-system
    Reference, @code{services}}).
    
    
    Additionally, the @code{gnome-desktop-service},
    
    @code{xfce-desktop-service}, @code{mate-desktop-service} and
    @code{enlightenment-desktop-service-type} procedures can add GNOME, XFCE, MATE
    and/or Enlightenment to a system.  To ``add GNOME'' means that system-level
    services like the backlight adjustment helpers and the power management
    utilities are added to the system, extending @code{polkit} and @code{dbus}
    
    appropriately, allowing GNOME to operate with elevated privileges on a
    limited number of special-purpose system interfaces.  Additionally,
    adding a service made by @code{gnome-desktop-service} adds the GNOME
    metapackage to the system profile.  Likewise, adding the XFCE service
    not only adds the @code{xfce} metapackage to the system profile, but it
    also gives the Thunar file manager the ability to open a ``root-mode''
    file management window, if the user authenticates using the
    administrator's password via the standard polkit graphical interface.
    
    To ``add MATE'' means that @code{polkit} and @code{dbus} are extended
    appropriately, allowing MATE to operate with elevated privileges on a
    limited number of special-purpose system interfaces.  Additionally,
    adding a service made by @code{mate-desktop-service} adds the MATE
    
    metapackage to the system profile.  ``Adding ENLIGHTENMENT'' means that
    @code{dbus} is extended appropriately, and several of Enlightenment's binaries
    are set as setuid, allowing Enlightenment's screen locker and other
    functionality to work as expetected.
    
    The desktop environments in Guix use the Xorg display server by
    default.  If you'd like to use the newer display server protocol
    called Wayland, you need to use the @code{sddm-service} instead of the
    @code{slim-service} for the graphical login manager.  You should then
    
    select the ``GNOME (Wayland)'' session in SDDM.  Alternatively you can
    also try starting GNOME on Wayland manually from a TTY with the
    command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
    gnome-session``.  Currently only GNOME has support for Wayland.
    
    @deffn {Scheme Procedure} gnome-desktop-service
    Return a service that adds the @code{gnome} package to the system
    profile, and extends polkit with the actions from
    @code{gnome-settings-daemon}.
    @end deffn
    
    @deffn {Scheme Procedure} xfce-desktop-service
    Return a service that adds the @code{xfce} package to the system profile,
    
    Alex Kost's avatar
    Alex Kost committed
    and extends polkit with the ability for @code{thunar} to manipulate the
    
    file system as root from within a user session, after the user has
    authenticated with the administrator's password.
    @end deffn
    
    
    @deffn {Scheme Procedure} mate-desktop-service
    Return a service that adds the @code{mate} package to the system
    profile, and extends polkit with the actions from
    @code{mate-settings-daemon}.
    @end deffn
    
    
    @deffn {Scheme Procedure} enlightenment-desktop-service-type
    Return a service that adds the @code{enlightenment} package to the system
    profile, and extends dbus with actions from @code{efl}.
    @end deffn
    
    @deftp {Data Type} enlightenment-desktop-service-configuration
    @table @asis
    @item @code{enlightenment} (default @code{enlightenment})
    The enlightenment package to use.
    @end table
    @end deftp
    
    
    Because the GNOME, XFCE and MATE desktop services pull in so many packages,
    
    Efraim Flashner's avatar
    Efraim Flashner committed
    the default @code{%desktop-services} variable doesn't include any of
    
    Mark H Weaver's avatar
    Mark H Weaver committed
    them by default.  To add GNOME, XFCE or MATE, just @code{cons} them onto
    
    @code{%desktop-services} in the @code{services} field of your
    @code{operating-system}:
    
    @example
    (use-modules (gnu))
    (use-service-modules desktop)
    (operating-system
      ...
      ;; cons* adds items to the list given as its last argument.
      (services (cons* (gnome-desktop-service)
                       (xfce-desktop-service)
                       %desktop-services))
      ...)
    @end example
    
    These desktop environments will then be available as options in the
    graphical login window.
    
    The actual service definitions included in @code{%desktop-services} and
    provided by @code{(gnu services dbus)} and @code{(gnu services desktop)}
    are described below.
    
    @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
    
    Return a service that runs the ``system bus'', using @var{dbus}, with
    support for @var{services}.
    
    @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
    facility.  Its system bus is used to allow system services to communicate
    
    and to be notified of system-wide events.
    
    @var{services} must be a list of packages that provide an
    @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration
    and policy files.  For example, to allow avahi-daemon to use the system bus,
    @var{services} must be equal to @code{(list avahi)}.
    
    Alex Kost's avatar
    Alex Kost committed
    @end deffn
    
    
    @deffn {Scheme Procedure} elogind-service [#:config @var{config}]
    
    Return a service that runs the @code{elogind} login and
    
    seat management daemon.  @uref{https://github.com/elogind/elogind,
    
    Elogind} exposes a D-Bus interface that can be used to know which users
    are logged in, know what kind of sessions they have open, suspend the
    system, inhibit system suspend, reboot the system, and other tasks.
    
    Elogind handles most system-level power events for a computer, for
    example suspending the system when a lid is closed, or shutting it down
    when the power button is pressed.
    
    The @var{config} keyword argument specifies the configuration for
    
    elogind, and should be the result of an @code{(elogind-configuration
    
    (@var{parameter} @var{value})...)} invocation.  Available parameters and
    their default values are:
    
    @table @code
    @item kill-user-processes?
    @code{#f}
    @item kill-only-users
    @code{()}
    @item kill-exclude-users
    @code{("root")}
    @item inhibit-delay-max-seconds
    @code{5}
    @item handle-power-key
    @code{poweroff}
    @item handle-suspend-key
    @code{suspend}
    @item handle-hibernate-key
    @code{hibernate}
    @item handle-lid-switch
    @code{suspend}
    @item handle-lid-switch-docked
    @code{ignore}
    @item power-key-ignore-inhibited?
    @code{#f}
    @item suspend-key-ignore-inhibited?
    @code{#f}
    @item hibernate-key-ignore-inhibited?
    @code{#f}
    @item lid-switch-ignore-inhibited?
    @code{#t}
    @item holdoff-timeout-seconds
    @code{30}
    @item idle-action
    @code{ignore}
    @item idle-action-seconds