This is guix.de.info, produced by makeinfo version 6.7 from
guix.de.texi.

Copyright © 2012-2022 Ludovic Courtès
Copyright © 2013, 2014, 2016 Andreas Enge
Copyright © 2013 Nikita Karetnikov
Copyright © 2014, 2015, 2016 Alex Kost
Copyright © 2015, 2016 Mathieu Lirzin
Copyright © 2014 Pierre-Antoine Rault
Copyright © 2015 Taylan Ulrich Bayırlı/Kammer
Copyright © 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari
Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo
Wurmus
Copyright © 2016 Ben Woodcroft
Copyright © 2016, 2017, 2018, 2021 Chris Marusich
Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner
Copyright © 2016 John Darrington
Copyright © 2016, 2017 Nikita Gillmann
Copyright © 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen
Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Julien Lepiller
Copyright © 2016 Alex ter Weele
Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines
Copyright © 2017, 2018, 2019 Clément Lassieur
Copyright © 2017, 2018, 2020, 2021, 2022 Mathieu Othacehe
Copyright © 2017 Federico Beffa
Copyright © 2017, 2018 Carlo Zancanaro
Copyright © 2017 Thomas Danckaert
Copyright © 2017 humanitiesNerd
Copyright © 2017, 2021 Christine Lemmer-Webber
Copyright © 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke
Copyright © 2017, 2019, 2020, 2022 Hartmut Goebel
Copyright © 2017, 2019, 2020, 2021, 2022 Maxim Cournoyer
Copyright © 2017–2022 Tobias Geerinckx-Rice
Copyright © 2017 George Clemmer
Copyright © 2017 Andy Wingo
Copyright © 2017, 2018, 2019, 2020 Arun Isaac
Copyright © 2017 nee
Copyright © 2018 Rutger Helling
Copyright © 2018, 2021 Oleg Pykhalov
Copyright © 2018 Mike Gerwitz
Copyright © 2018 Pierre-Antoine Rouby
Copyright © 2018, 2019 Gábor Boskovits
Copyright © 2018, 2019, 2020, 2022 Florian Pelz
Copyright © 2018 Laura Lazzati
Copyright © 2018 Alex Vong
Copyright © 2019 Josh Holland
Copyright © 2019, 2020 Diego Nicola Barbato
Copyright © 2019 Ivan Petkov
Copyright © 2019 Jakob L. Kreuze
Copyright © 2019 Kyle Andrews
Copyright © 2019 Alex Griffin
Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant
Copyright © 2020 Liliana Marie Prikler
Copyright © 2019, 2020, 2021, 2022 Simon Tournier
Copyright © 2020 Wiktor Żelazny
Copyright © 2020 Damien Cassou
Copyright © 2020 Jakub Kądziołka
Copyright © 2020 Jack Hill
Copyright © 2020 Naga Malleswari
Copyright © 2020, 2021 Brice Waegeneire
Copyright © 2020 R Veera Kumar
Copyright © 2020, 2021 Pierre Langlois
Copyright © 2020 pinoaffe
Copyright © 2020 André Batista
Copyright © 2020, 2021 Alexandru-Sergiu Marton
Copyright © 2020 raingloom
Copyright © 2020 Daniel Brooks
Copyright © 2020 John Soo
Copyright © 2020 Jonathan Brielmaier
Copyright © 2020 Edgar Vincent
Copyright © 2021, 2022 Maxime Devos
Copyright © 2021 B. Wilson
Copyright © 2021 Xinglu Chen
Copyright © 2021 Raghav Gururajan
Copyright © 2021 Domagoj Stolfa
Copyright © 2021 Hui Lu
Copyright © 2021 pukkamustard
Copyright © 2021 Alice Brenon
Copyright © 2021, 2022 Josselin Poiret
Copyright © 2021 muradm
Copyright © 2021, 2022 Andrew Tropin
Copyright © 2021 Sarah Morgensen
Copyright © 2022 Remco van ’t Veer
Copyright © 2022 Aleksandr Vityazev
Copyright © 2022 Philip M^{c}Grath
Copyright © 2022 Karl Hallsby
Copyright © 2022 Justin Veilleux
Copyright © 2022 Reily Siegel
Copyright © 2022 Simon Streit
Copyright © 2022 (
Copyright © 2022 John Kehayias

   Es ist Ihnen gestattet, dieses Dokument zu vervielfältigen,
weiterzugeben und/oder zu verändern, unter den Bedingungen der GNU Free
Documentation License, entweder gemäß Version 1.3 der Lizenz oder (nach
Ihrer Option) einer späteren Version, die von der Free Software
Foundation veröffentlicht wurde, ohne unveränderliche Abschnitte, ohne
vorderen Umschlagtext und ohne hinteren Umschlagtext. Eine Kopie der
Lizenz finden Sie im Abschnitt mit dem Titel „GNU Free Documentation
License“.
INFO-DIR-SECTION Systemadministration
START-INFO-DIR-ENTRY
* Guix: (guix.de).           Installierte Software und Systemkonfigurationen
                               verwalten.
* guix package: (guix.de)guix package aufrufen.  Pakete installieren,
                                                   entfernen und
                                                   aktualisieren.
* guix gc: (guix.de)guix gc aufrufen.  Unbenutzten Plattenspeicher wieder
                                         freigeben.
* guix pull: (guix.de)guix pull aufrufen.  Die Liste verfügbarer Pakete
                                             aktualisieren.
* guix system: (guix.de)guix system aufrufen.  Die
                                                 Betriebssystemkonfiguration
                                                 verwalten.
* guix deploy: (guix.de)guix deploy aufrufen.  Betriebssystemkonfigurationen
                                                 entfernter Rechner verwalten.
END-INFO-DIR-ENTRY

INFO-DIR-SECTION Softwareentwicklung
START-INFO-DIR-ENTRY
* guix shell: (guix.de)guix shell aufrufen.  Software-Umgebungen erzeugen.
* guix environment: (guix.de)guix environment aufrufen.  Umgebungen für
                                                           Entwickler
                                                           erstellen
* guix build: (guix.de)guix build aufrufen.  Erstellen von Paketen.
* guix pack: (guix.de)guix pack aufrufen.  Bündel aus Binärdateien
                                             erstellen.
END-INFO-DIR-ENTRY


File: guix.de.info,  Node: Geplante Auftragsausführung,  Next: Log-Rotation,  Prev: Basisdienste,  Up: Dienste

12.9.2 Geplante Auftragsausführung
----------------------------------

Das Modul ‘(gnu services mcron)’ enthält eine Schnittstelle zu
GNU mcron, einem Daemon, der gemäß einem vorher festgelegten Zeitplan
Aufträge (sogenannte „Jobs“) ausführt (siehe *note (mcron)Top::).
GNU mcron ist ähnlich zum traditionellen ‘cron’-Daemon aus Unix; der
größte Unterschied ist, dass mcron in Guile Scheme implementiert ist,
wodurch einem viel Flexibilität bei der Spezifikation von Aufträgen und
ihren Aktionen offen steht.

   Das folgende Beispiel definiert ein Betriebssystem, das täglich die
Befehle ‘updatedb’ (siehe *note (find)Invoking updatedb::) und ‘guix gc’
(siehe *note Aufruf von guix gc::) ausführt sowie den Befehl ‘mkid’ im
Namen eines „unprivilegierten“ Nutzers ohne besondere Berechtigungen
laufen lässt (siehe *note (idutils)mkid invocation::). Zum Anlegen von
Auftragsdefinitionen benutzt es G-Ausdrücke, die dann an mcron übergeben
werden (siehe *note G-Ausdrücke::).

     (use-modules (guix) (gnu) (gnu services mcron))
     (use-package-modules base idutils)

     (define updatedb-job
       ;; Run 'updatedb' at 3AM every day.  Here we write the
       ;; job's action as a Scheme procedure.
       #~(job '(next-hour '(3))
              (lambda ()
                (execl (string-append #$findutils "/bin/updatedb")
                       "updatedb"
                       "--prunepaths=/tmp /var/tmp /gnu/store"))
              "updatedb"))

     (define garbage-collector-job
       ;; Jeden Tag 5 Minuten nach Mitternacht Müll sammeln gehen.
       ;; Die Aktion des Auftrags ist ein Shell-Befehl.
       #~(job "5 0 * * *"            ;Vixie-cron-Syntax
              "guix gc -F 1G"))

     (define idutils-job
       ;; Die Index-Datenbank des Benutzers "charlie" um 12:15 Uhr und
       ;; 19:15 Uhr aktualisieren. Dies wird aus seinem Persönlichen
       ;; Ordner heraus ausgeführt.
       #~(job '(next-minute-from (next-hour '(12 19)) '(15))
              (string-append #$idutils "/bin/mkid src")
              #:user "charlie"))

     (operating-system
       ;; …

       ;; In den %BASE-SERVICES kommt bereits eine Instanz des
       ;; 'mcron-service-type' vor. Wir erweitern sie um weitere
       ;; Aufträge mit einem 'simple-service'.
       (services (cons (simple-service 'my-cron-jobs
                                        mcron-service-type
                                        (list garbage-collector-job
                                              updatedb-job
                                              idutils-job))
                       %base-services)))

     Tipp: Wenn Sie die Aktion einer Auftragsspezifikation als eine
     Prozedur angeben, sollten Sie ausdrücklich einen Namen für den
     Auftrag im dritten Argument angeben, wie oben im Beispiel zum
     ‘updatedb-job’ gezeigt. Andernfalls wird für den Auftrag nur
     „Lambda function“ in der Ausgabe von ‘herd schedule mcron’
     angezeigt, was viel zu wenig Aussagekraft hat!

   Wenn Sie einen komplexeren Auftrag mit Scheme-Code auf oberster Ebene
festlegen möchten, um zum Beispiel eine ‘use-modules’-Form einzuführen,
können Sie Ihren Code in ein separates Programm verschieben, indem Sie
die Prozedur ‘program-file’ aus dem Modul ‘(guix gexp)’ benutzen (siehe
*note G-Ausdrücke::). Das folgende Beispiel veranschaulicht dies.

     (define %batterie-alarm-auftrag
       ;; Piepsen, wenn die Akkuladung in Prozent unter %MIN-NIVEAU fällt.
       #~(job
          '(next-minute (range 0 60 1))
          #$(program-file
             "batterie-alarm.scm"
             (with-imported-modules (source-module-closure
                                     '((guix build utils)))
               #~(begin
                   (use-modules (guix build utils)
                                (ice-9 popen)
                                (ice-9 regex)
                                (ice-9 textual-ports)
                                (srfi srfi-2))
                   (define %min-niveau 20)
                   (setenv "LC_ALL" "C")     ;Ausgabe auf Englisch
                   (and-let* ((input-pipe (open-pipe*
                                           OPEN_READ
                                           #$(file-append acpi "/bin/acpi")))
                              (ausgabe (get-string-all input-pipe))
                              (m (string-match "Discharging, ([0-9]+)%" ausgabe))
                              (niveau (string->number (match:substring m 1)))
                              ((< niveau %min-niveau)))
                     (format #t "Warnung: Batterieladung nur noch (~a%)~%" niveau)
                     (invoke #$(file-append beep "/bin/beep") "-r5")))))))

   Siehe *note mcron-Auftragsspezifikationen: (mcron)Guile Syntax. für
weitere Informationen zu mcron-Auftragsspezifikationen. Nun folgt die
Referenz des mcron-Dienstes.

   Wenn das System läuft, können Sie mit der Aktion ‘schedule’ des
Dienstes visualisieren lassen, welche mcron-Aufträge als Nächstes
ausgeführt werden:

     # herd schedule mcron

Das vorangehende Beispiel listet die nächsten fünf Aufgaben auf, die
ausgeführt werden, aber Sie können auch angeben, wie viele Aufgaben
angezeigt werden sollen:

     # herd schedule mcron 10

 -- Scheme-Variable: mcron-service-type
     Dies ist der Diensttyp des ‘mcron’-Dienstes. Als Wert verwendet er
     ein ‘mcron-configuration’-Objekt.

     Dieser Diensttyp kann als Ziel einer Diensterweiterung verwendet
     werden, die ihn mit zusätzlichen Auftragsspezifikationen versorgt
     (siehe *note Dienstkompositionen::). Mit anderen Worten ist es
     möglich, Dienste zu definieren, die weitere mcron-Aufträge
     ausführen lassen.

 -- Datentyp: mcron-configuration
     Verfügbare ‘mcron-configuration’-Felder sind:

     ‘mcron’ (Vorgabe: ‘mcron’) (Typ: dateiartig)
          Welches mcron-Paket benutzt werden soll.

     ‘jobs’ (Vorgabe: ‘()’) (Typ: Liste-von-G-Ausdrücken)
          Dies muss eine Liste von G-Ausdrücken sein (siehe *note
          G-Ausdrücke::), die jeweils einer mcron-Auftragsspezifikation
          (der Spezifikation eines „Jobs“) entsprechen (siehe *note
          mcron-Auftragsspezifikationen: (mcron)Syntax.).

     ‘log?’ (Vorgabe: ‘#t’) (Typ: Boolescher-Ausdruck)
          Lässt Protokolle auf die Standardausgabe schreiben.

     ‘log-format’ (Vorgabe: ‘"~1@*~a ~a: ~a~%"’) (Typ: Zeichenkette)
          Eine Formatzeichenkette gemäß ‘(ice-9 format)’ für die
          Protokollnachrichten. Mit dem Vorgabewert werden Nachrichten
          in der Form "‘PROZESSKENNUNG NAME: NACHRICHT"’ geschrieben
          (siehe *note Aufrufen von mcron: (mcron)Invoking mcron.).
          Außerdem schreibt GNU Shepherd vor jeder Nachricht einen
          Zeitstempel.


File: guix.de.info,  Node: Log-Rotation,  Next: Netzwerkeinrichtung,  Prev: Geplante Auftragsausführung,  Up: Dienste

12.9.3 Log-Rotation
-------------------

Protokolldateien wie die in ‘/var/log’ neigen dazu, bis ins Unendliche
zu wachsen, deshalb ist es eine gute Idee, sie von Zeit zu Zeit zu
“rotieren” – d.h. ihren Inhalt in separaten Dateien zu archivieren,
welche optional auch komprimiert werden. Das Modul ‘(gnu services
admin)’ stellt eine Schnittstelle zu GNU Rot[t]log bereit, einem
Werkzeug, um Protokolldateien („Log“-Dateien) zu rotieren (siehe *note
(rottlog)Top::).

   Dieser Dienst ist Teil der ‘%base-services’ und daher standardmäßig
mit seinen Vorgabeeinstellungen für übliche Log-Dateien aktiv. Das
Beispiel unten zeigt, wie Sie ihn um eine weitere “rotation” erweitern
können, wenn dies nötig wird (normalerweise kümmern sich darum schon die
Dienste, die die Log-Dateien erzeugen):

     (use-modules (guix) (gnu))
     (use-service-modules admin)

     (define my-log-files
       ;; Log-Dateien, die ich rotieren lassen will.
       '("/var/log/irgendein.log" "/var/log/noch-ein.log"))

     (operating-system
       ;; …
       (services (cons (simple-service 'meinen-kram-rotieren
                                       rottlog-service-type
                                       (list (log-rotation
                                              (frequency 'daily)
                                              (files my-log-files))))
                       %base-services)))

 -- Scheme-Variable: rottlog-service-type
     Dies ist der Typ des Rottlog-Dienstes, dessen Wert ein
     ‘rottlog-configuration’-Objekt ist.

     Andere Dienste können diesen Dienst um neue ‘log-rotation’-Objekte
     erweitern (siehe unten), wodurch die Auswahl an zu rotierenden
     Dateien ausgeweitet wird.

     Dieser Diensttyp kann mcron-Aufträge definieren (siehe *note
     Geplante Auftragsausführung::), die den rottlog-Dienst ausführen.

 -- Datentyp: rottlog-configuration
     Datentyp, der die Konfiguration von rottlog repräsentiert.

     ‘rottlog’ (Vorgabe: ‘rottlog’)
          Das Rottlog-Paket, das verwendet werden soll.

     ‘rc-file’ (Vorgabe: ‘(file-append rottlog "/etc/rc")’)
          Die zu benutzende Rottlog-Konfigurationsdatei (siehe *note
          (rottlog)Mandatory RC Variables::).

     ‘rotations’ (Vorgabe: ‘%default-rotations’)
          Eine Liste von ‘log-rotation’-Objekten, wie wir sie weiter
          unten definieren.

     ‘jobs’
          Dies ist eine Liste von G-Ausdrücken. Jeder G-Ausdruck darin
          entspricht einer mcron-Auftragsspezifikation (siehe *note
          Geplante Auftragsausführung::).

 -- Datentyp: log-rotation
     Datentyp, der die Rotation einer Gruppe von Protokolldateien
     repräsentiert.

     Um ein Beispiel aus dem Rottlog-Handbuch (siehe *note
     (rottlog)Period Related File Examples::) aufzugreifen: Eine
     Log-Rotation kann auf folgende Art definiert werden:

          (log-rotation
            (frequency 'daily) ;täglich
            (files '("/var/log/apache/*"))
            (options '("storedir apache-archives"
                       "rotate 6"
                       "notifempty"
                       "nocompress")))

     Die Liste der Felder ist folgendermaßen aufgebaut:

     ‘frequency’ (Vorgabe: ‘'weekly’)
          Die Häufigkeit der Log-Rotation, dargestellt als
          englischsprachiges Symbol.

     ‘files’
          Die Liste der Dateien oder Glob-Muster für Dateien, die
          rotiert werden sollen.

     ‘options’ (Vorgabe: ‘%default-log-rotation-options’)
          Die Liste der Rottlog-Optionen für diese Rotation (siehe *note
          (rottlog)Configuration parameters::).

     ‘post-rotate’ (Vorgabe: ‘#f’)
          Entweder ‘#f’ oder ein G-Ausdruck, der nach Abschluss der
          Rotation einmal ausgeführt wird.

 -- Scheme-Variable: %default-rotations
     Gibt wöchentliche Rotationen der ‘%rotated-files’ und von
     ‘/var/log/guix-daemon.log’ an.

 -- Scheme-Variable: %rotated-files
     Die Liste der von Syslog verwalteten Dateien, die rotiert werden
     sollen. Vorgegeben ist ‘'("/var/log/messages" "/var/log/secure"
     "/var/log/debug" "/var/log/maillog")’.

   Manche Protokolldateien müssen einfach nur regelmäßig gelöscht
werden, wenn sie alt geworden sind, ohne Sonderfälle und ohne
Archivierung. Das trifft auf Erstellungsprotokolle zu, die ‘guix-daemon’
unter ‘/var/log/guix/drvs’ vorhält (siehe *note Aufruf des
guix-daemon::). Der Dienst ‘log-cleanup’ kann diesen Anwendungsfall
übernehmen. Zum Beispiel ist Folgendes Teil der ‘%base-services’ (siehe
*note Basisdienste::):

     ;; Regelmäßig alte Erstellungsprotokolle löschen.
     (service log-cleanup-service-type
              (log-cleanup-configuration
               (directory "/var/log/guix/drvs")))

   Dadurch sammeln sich Erstellungsprotokolle _nicht_ bis in alle
Ewigkeit an.

 -- Scheme-Variable: log-cleanup-service-type
     Der Diensttyp des Dienstes, um alte Protokolldateien zu löschen.
     Sein Wert muss ein ‘log-cleanup-configuration’-Verbundsobjekt sein,
     wie im Folgenden beschrieben.

 -- Datentyp: log-cleanup-configuration
     Der Datentyp repräsentiert die Konfiguration, um Protokolldateien
     zu löschen.

     ‘directory’
          Der Name des Verzeichnisses mit den Protokolldateien.

     ‘expiry’ (Vorgabe: ‘(* 6 30 24 3600)’)
          Nach wie vielen Sekunden eine Datei für die Löschung
          vorgesehen ist (sechs Monate nach Vorgabe).

     ‘schedule’ (Vorgabe: ‘"30 12 01,08,15,22 * *"’)
          Eine Zeichenkette oder ein G-Ausdruck mit dem Zeitplan für
          mcron-Aufträge (siehe *note Geplante Auftragsausführung::).

Anonip-Dienst
-------------

Anonip ist ein Datenschutz-Filter, der IP-Adressen aus den Protokollen
von Web-Servern entfernt. Mit diesem Dienst wird eine FIFO erzeugt und
jede Zeile, die in diese hinein geschrieben wird, wird mit anonip
gefiltert und das gefilterte Protokoll in eine Zieldatei übertragen.

   Folgendes Beispiel zeigt, wie die FIFO
‘/var/run/anonip/https.access.log’ eingerichtet wird und die gefilterte
Protokolldatei ‘/var/log/anonip/https.access.log’ geschrieben wird.

     (service anonip-service-type
              (anonip-configuration
                (input  "/var/run/anonip/https.access.log")
                (output "/var/log/anonip/https.access.log")))

   Richten Sie Ihren Web-Server so ein, dass er seine Protokolle in die
FIFO unter ‘/var/run/anonip/https.access.log’ schreibt, und Sie finden
die anonymisierte Protokolldatei in ‘/var/web-logs/https.access.log’
vor.

 -- Datentyp: anonip-configuration
     Dieser Datentyp repräsentiert die Konfiguration von anonip. Zu ihm
     gehören folgende Parameter:

     ‘anonip’ (Vorgabe: ‘anonip’)
          Das anonip-Paket, das benutzt werden soll.

     ‘input’
          Der Dateiname der zu verarbeitenden Eingabeprotokolldatei.
          Durch den Dienst wird eine FIFO erzeugt, die diesen Namen
          trägt. Der Web-Server sollte seine Protokolle in diese FIFO
          hinein schreiben.

     ‘output’
          Der Dateiname der verarbeiteten Protokolldatei.

     Die folgenden optionalen Einstellungen können Sie angeben:

     ‘skip-private?’
          Wenn das auf ‘#true’ gesetzt ist, werden Adressen in privaten
          Adressbereichen _nicht_ verborgen.

     ‘column’
          Eine bei 1 beginnende Spaltennummer. Es werden IP-Adressen in
          der angegebenen Spalte verarbeitet (die Vorgabe ist Spalte 1).

     ‘replacement’
          Durch welche Zeichenkette ersetzt wird, wenn die IP-Adresse
          _nicht_ erkannt wird; zum Beispiel ‘"0.0.0.0"’.

     ‘ipv4mask’
          Anzahl der Bits, die in IPv4-Adressen verborgen werden.

     ‘ipv6mask’
          Anzahl der Bits, die in IPv6-Adressen verborgen werden.

     ‘increment’
          Die IP-Adresse wird um diese Zahl erhöht. Vorgegeben ist null.

     ‘delimiter’
          Welche Zeichenkette der Trenner im Protokoll ist.

     ‘regex’
          Ein regulärer Ausdruck zur Erkennung von IP-Adressen. Er kann
          statt ‘column’ benutzt werden.


File: guix.de.info,  Node: Netzwerkeinrichtung,  Next: Netzwerkdienste,  Prev: Log-Rotation,  Up: Dienste

12.9.4 Netzwerkeinrichtung
--------------------------

Durch das Modul ‘(gnu services networking)’ werden Dienste zum
Konfigurieren der Netzwerkschnittstellen und zum Einrichten der
Netzwerkverbindung Ihrer Maschine bereitgestellt. Die Dienste decken
unterschiedliche Arten ab, wie Sie Ihre Maschine einrichten können: Sie
können eine statische Netzwerkkonfiguration einrichten, einen Client für
das Dynamic Host Configuration Protocol (DHCP) benutzen oder Daemons wie
NetworkManager oder Connman einsetzen, mit denen der gesamte Vorgang
automatisch abläuft, automatisch auf Änderungen an der Verbindung
reagiert wird und eine abstrahierte Benutzerschnittstelle bereitgestellt
wird.

   Auf einem Laptop sind NetworkManager und Connman bei weitem die
komfortabelsten Optionen, darum enthalten die vorgegebenen Dienste für
Desktop-Arbeitsumgebungen NetworkManager (siehe *note
‘%desktop-services’: Desktop-Dienste.). Für einen Server, eine virtuelle
Maschine oder einen Container sind eine statische Netzwerkkonfiguration
oder ein schlichter DHCP-Client meist angemessener.

   Dieser Abschnitt beschreibt die verschiedenen Dienste zur
Netzwerkeinrichtung, die Ihnen zur Verfügung stehen, angefangen bei der
statischen Netzwerkkonfiguration.

 -- Scheme-Variable: static-networking-service-type
     Dies ist der Diensttyp für statisch konfigurierte
     Netzwerkschnittstellen. Sein Wert muss eine Liste von
     ‘static-networking’-Verbundsobjekten sein. Jedes deklariert eine
     Menge von Adressen, Routen und Links, wie im Folgenden gezeigt.

     Hier sehen Sie die einfachst mögliche Konfiguration, die nur über
     eine einzelne Netzwerkkarte („Network Interface Controller“, NIC)
     eine Verbindung nur für IPv4 herstellt.

          ;; Statische Netzwerkkonfiguration mit einer Netzwerkkarte, nur IPv4.
          (service static-networking-service-type
                   (list (static-networking
                          (addresses
                           (list (network-address
                                  (device "eno1")
                                  (value "10.0.2.15/24"))))
                          (routes
                           (list (network-route
                                  (destination "default")
                                  (gateway "10.0.2.2"))))
                          (name-servers '("10.0.2.3")))))

     Obiges Code-Schnipsel kann ins ‘services’-Feld Ihrer
     Betriebssystemkonfiguration eingetragen werden (siehe *note Das
     Konfigurationssystem nutzen::), um Ihre Maschine mit 10.0.2.15 als
     ihre IP-Adresse zu versorgen mit einer 24-Bit-Netzmaske für das
     lokale Netzwerk – also dass jede 10.0.2.X-Adresse im lokalen
     Netzwerk (LAN) ist. Kommunikation mit Adressen außerhalb des
     lokalen Netzwerks wird über 10.0.2.2 geleitet. Rechnernamen werden
     über Anfragen ans Domain Name System (DNS) an 10.0.2.3 aufgelöst.

 -- Datentyp: static-networking
     Dieser Datentyp repräsentiert eine statische Netzwerkkonfiguration.

     Folgendes Beispiel zeigt, wie Sie die Konfiguration einer Maschine
     deklarieren, die nur über eine einzelne Netzwerkkarte („Network
     Interface Controller“, NIC), die als ‘eno1’ verfügbar ist, über
     eine IPv4-Adresse und eine IPv6-Adresse verbunden ist:

          ;; Netzwerkkonfiguration mit einer Netzwerkkarte, IPv4 + IPv6.
          (static-networking
           (addresses (list (network-address
                             (device "eno1")
                             (value "10.0.2.15/24"))
                            (network-address
                             (device "eno1")
                             (value "2001:123:4567:101::1/64"))))
           (routes (list (network-route
                          (destination "default")
                          (gateway "10.0.2.2"))
                         (network-route
                          (destination "default")
                          (gateway "2020:321:4567:42::1"))))
           (name-servers '("10.0.2.3")))

     Wenn Sie mit dem Befehl ‘ip’ aus dem ‘iproute2’-Paket
     (https://wiki.linuxfoundation.org/networking/iproute2) von
     Linux-basierten Systemen vertraut sind, sei erwähnt, dass obige
     Deklaration gleichbedeutend damit ist, wenn Sie dies eingeben:

          ip address add 10.0.2.15/24 dev eno1
          ip address add 2001:123:4567:101::1/64 dev eno1
          ip route add default via inet 10.0.2.2
          ip route add default via inet6 2020:321:4567:42::1

     Führen Sie für mehr Informationen ‘man 8 ip’ aus. Alteingesessene
     GNU/Linux-Nutzer werden sicherlich wissen, wie sie das mit
     ‘ifconfig’ und ‘route’ machen, aber wir ersparen es Ihnen.

     Für den Datentyp stehen folgende Felder zur Verfügung:

     ‘addresses’
     ‘links’ (Vorgabe: ‘'()’)
     ‘routes’ (Vorgabe: ‘'()’)
          Die Liste der ‘network-address’-, ‘network-link’- und
          ‘network-route’-Verbundsobjekte für dieses Netzwerk (siehe
          unten).

     ‘name-servers’ (Vorgabe: ‘'()’)
          Die Liste der IP-Adressen (als Zeichenketten) der DNS-Server.
          Diese IP-Adressen werden in ‘/etc/resolv.conf’ geschrieben.

     ‘provision’ (Vorgabe: ‘'(networking)’)
          Wenn dies ein wahrer Wert ist, bezeichnet dies die Liste von
          Symbolen für den Shepherd-Dienst, der dieser
          Netzwerkkonfiguration entspricht.

     ‘requirement’ (Vorgabe: ‘'()’)
          Die Liste der Shepherd-Dienste, von denen dieser abhängt.

 -- Datentyp: network-address
     Dieser Datentyp repräsentiert die IP-Adresse einer
     Netzwerkschnittstelle.

     ‘device’
          Der Name der Netzwerkschnittstelle, die für diese Adresse
          benutzt wird – z.B. ‘"eno1"’.

     ‘value’
          Die eigentliche IP-Adresse und Netzwerkmaske in CIDR-Notation
          (https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
          als Zeichenkette.

          Zum Beispiel bezeichnet ‘"10.0.2.15/24"’ die IPv4-Adresse
          10.0.2.15 auf einem Subnetzwerk, dessen erste 24 Bit gleich
          sind – alle 10.0.2.X-Adressen befinden sich im selben lokalen
          Netzwerk

     ‘ipv6?’
          Ob mit ‘value’ eine IPv6-Adresse angegeben wird. Vorgegeben
          ist, dies automatisch festzustellen.

 -- Datentyp: network-route
     Dieser Datentyp steht für eine Netzwerkroute.

     ‘destination’
          Das Ziel der Route (als Zeichenkette) entweder mit einer
          IP-Adresse und Netzwerkmaske oder ‘"default"’ zum Einstellen
          der Vorgaberoute.

     ‘source’ (Vorgabe: ‘#f’)
          Die Quelle der Route.

     ‘device’ (Vorgabe: ‘#f’)
          Welches Gerät für diese Route benutzt wird – z.B. ‘"eno2"’.

     ‘ipv6?’ (Vorgabe: automatisch)
          Ob es sich um eine IPv6-Route handelt. Das vorgegebene
          Verhalten ist, dies automatisch anhand des Eintrags in
          ‘destination’ oder ‘gateway’ zu bestimmen.

     ‘gateway’ (Vorgabe: ‘#f’)
          Die IP-Adresse des Netzwerkzugangs (als Zeichenkette), über
          die der Netzwerkverkehr geleitet wird.

 -- Datentyp: network-link
     Der Datentyp für einen Netzwerk-Link (siehe *note
     (guile-netlink)Link::).

     ‘name’
          Der Name des Links – z.B. ‘"v0p0"’.

     ‘type’
          Eine Zeichenkette, die für den Typ des Links steht – z.B.
          ‘'veth’.

     ‘arguments’
          Eine Liste der Argumente für diesen Link-Typ.

 -- Scheme-Variable: %loopback-static-networking
     Dies ist das ‘static-networking’-Verbundsobjekt, das für das
     „Loopback-Gerät“ ‘lo’ steht, mit IP-Adressen 127.0.0.1 und ::1, was
     den Shepherd-Dienst ‘loopback’ zur Verfügung stellt.

 -- Scheme-Variable: %qemu-static-networking
     Dies ist das ‘static-networking’-Verbundsobjekt, das für eine
     Netzwerkeinrichtung mit QEMUs als Nutzer ausgeführtem
     Netzwerkstapel („User-Mode Network Stack“) auf dem Gerät ‘eth0’
     steht (siehe *note (QEMU)Using the user mode network stack::).

 -- Scheme-Variable: dhcp-client-service-type
     Dies ist der Diensttyp für den Dienst, der DHCP ausführt, einen
     Client für das „Dynamic Host Configuration Protocol“ (DHCP).

 -- Datentyp: dhcp-client-configuration
     Der Datentyp, der die Konfiguration des DHCP-Client-Dienstes
     repräsentiert.

     ‘package’ (Vorgabe: ‘isc-dhcp’)
          Das DHCP-Client-Paket, was benutzt werden soll.

     ‘interfaces’ (Vorgabe: ‘'all’)
          Geben Sie entweder ‘'all’ an oder die Liste der Namen der
          Schnittstellen, auf denen der DHCP-Client lauschen soll – z.B.
          ‘'("eno1")’.

          Wenn es auf ‘'all’ gesetzt ist, wird der DHCP-Client auf allen
          verfügbaren Netzwerkschnittstellen außer „loopback“, die
          aktiviert werden können, lauschen. Andernfalls lauscht der
          DHCP-Client nur auf den angegebenen Schnittstellen.

 -- Scheme-Variable: network-manager-service-type
     Dies ist der Diensttyp für den NetworkManager-Dienst
     (https://wiki.gnome.org/Projects/NetworkManager). Der Wert dieses
     Diensttyps ist ein ‘network-manager-configuration’-Verbundsobjekt.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: network-manager-configuration
     Datentyp, der die Konfiguration von NetworkManager repräsentiert.

     ‘network-manager’ (Vorgabe: ‘network-manager’)
          Das zu verwendende NetworkManager-Paket.

     ‘dns’ (Vorgabe: ‘"default"’)
          Der Verarbeitungsmodus für DNS-Anfragen. Er hat Einfluss
          darauf, wie NetworkManager mit der Konfigurationsdatei
          ‘resolv.conf’ verfährt.

          ‘default’
               NetworkManager aktualisiert ‘resolv.conf’, damit sie die
               Nameserver enthält, die von zurzeit aktiven Verbindungen
               benutzt werden.

          ‘dnsmasq’
               NetworkManager führt ‘dnsmasq’ als lokal
               zwischenspeichernden Nameserver aus und aktualisiert
               ‘resolv.conf’ so, dass es auf den lokalen Nameserver
               verweist. Falls Sie mit einem VPN verbunden sind, wird
               dafür eine getrennte DNS-Auflösung verwendet
               („Conditional Forwarding“).

               Mit dieser Einstellung können Sie Ihre Netzwerkverbindung
               teilen. Wenn Sie sie zum Beispiel mit einem anderen
               Laptop über ein Ethernet-Kabel teilen möchten, können Sie
               ‘nm-connection-editor’ öffnen und die Methode der
               Ethernet-Verbindung für IPv4 und IPv6 auf „Gemeinsam mit
               anderen Rechnern“ stellen und daraufhin die Verbindung
               neu herstellen (oder Ihren Rechner neu starten).

               Sie können so auch eine Verbindung vom Wirts- zum
               Gastsystem in virtuellen Maschinen mit QEMU (siehe *note
               Guix in einer VM installieren::) herstellen, d.h. eine
               „Host-to-Guest Connection“). Mit einer solchen
               Wirt-nach-Gast-Verbindung können Sie z.B. von einem
               Webbrowser auf Ihrem Wirtssystem auf einen Web-Server
               zugreifen, der auf der VM läuft (siehe *note
               Web-Dienste::). Sie können sich damit auch über SSH mit
               der virtuellen Maschine verbinden (siehe *note
               ‘openssh-service-type’: Netzwerkdienste.). Um eine
               Wirt-nach-Gast-Verbindung einzurichten, führen Sie einmal
               diesen Befehl aus:

                    nmcli connection add type tun \
                     connection.interface-name tap0 \
                     tun.mode tap tun.owner $(id -u) \
                     ipv4.method shared \
                     ipv4.addresses 172.28.112.1/24

               Danach geben Sie bei jedem Start Ihrer virtuellen
               QEMU-Maschine (siehe *note Guix in einer VM starten::)
               die Befehlszeilenoption ‘-nic
               tap,ifname=tap0,script=no,downscript=no’ an
               ‘qemu-system-…’ mit.

          ‘none’
               NetworkManager verändert ‘resolv.conf’ nicht.

     ‘vpn-plugins’ (Vorgabe: ‘'()’)
          Dies ist die Liste der verfügbaren Plugins für virtuelle
          private Netzwerke (VPN). Zum Beispiel kann das Paket
          ‘network-manager-openvpn’ angegeben werden, womit
          NetworkManager virtuelle private Netzwerke mit OpenVPN
          verwalten kann.

 -- Scheme-Variable: connman-service-type
     Mit diesem Diensttyp wird Connman (https://01.org/connman)
     ausgeführt, ein Programm zum Verwalten von Netzwerkverbindungen.

     Sein Wert muss ein ‘connman-configuration’-Verbundsobjekt wie im
     folgenden Beispiel sein:

          (service connman-service-type
                   (connman-configuration
                     (disable-vpn? #t)))

     Weiter unten werden Details der ‘connman-configuration’ erklärt.

 -- Datentyp: connman-configuration
     Datentyp, der die Konfiguration von Connman repräsentiert.

     ‘connman’ (Vorgabe: CONNMAN)
          Das zu verwendende Connman-Paket.

     ‘disable-vpn?’ (Vorgabe: ‘#f’)
          Falls dies auf wahr gesetzt ist, wird Connmans VPN-Plugin
          deaktiviert.

 -- Scheme-Variable: wpa-supplicant-service-type
     Dies ist der Diensttyp, um WPA Supplicant
     (https://w1.fi/wpa_supplicant/) auszuführen. Dabei handelt es sich
     um einen Authentisierungsdaemon, der notwendig ist, um sich
     gegenüber verschlüsselten WLAN- oder Ethernet-Netzwerken zu
     authentisieren.

 -- Datentyp: wpa-supplicant-configuration
     Repräsentiert die Konfiguration des WPA-Supplikanten.

     Sie hat folgende Parameter:

     ‘wpa-supplicant’ (Vorgabe: ‘wpa-supplicant’)
          Das WPA-Supplicant-Paket, was benutzt werden soll.

     ‘requirement’ (Vorgabe: ‘'(user-processes loopback syslogd)’
          Die Liste der Dienste, die vor dem WPA-Supplikanten bereits
          gestartet sein sollen.

     ‘dbus?’ (Vorgabe: ‘#t’)
          Ob auf Anfragen auf D-Bus gelauscht werden soll.

     ‘pid-file’ (Vorgabe: ‘"/var/run/wpa_supplicant.pid"’)
          Wo die PID-Datei abgelegt wird.

     ‘interface’ (Vorgabe: ‘#f’)
          Wenn dieses Feld gesetzt ist, muss es den Namen einer
          Netzwerkschnittstelle angeben, die von WPA Supplicant
          verwaltet werden soll.

     ‘config-file’ (Vorgabe: ‘#f’)
          Optionale Konfigurationsdatei.

     ‘extra-options’ (Vorgabe: ‘'()’)
          Liste zusätzlicher Befehlszeilenoptionen, die an den Daemon
          übergeben werden.

   Manche Netzwerkgeräte wie Modems brauchen eine besondere Behandlung,
worauf die folgenden Dienste abzielen.

 -- Scheme-Variable: modem-manager-service-type
     Dies ist der Diensttyp für den ModemManager-Dienst
     (https://wiki.gnome.org/Projects/ModemManager). Der Wert dieses
     Diensttyps ist ein ‘modem-manager-configuration’-Verbundsobjekt.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: modem-manager-configuration
     Repräsentiert die Konfiguration vom ModemManager.

     ‘modem-manager’ (Vorgabe: ‘modem-manager’)
          Das ModemManager-Paket, was benutzt werden soll.

 -- Scheme-Variable: usb-modeswitch-service-type
     Dies ist der Diensttyp für den USB_ModeSwitch-Dienst
     (https://www.draisberghof.de/usb_modeswitch/). Der Wert dieses
     Diensttyps ist ein ‘usb-modeswitch-configuration’-Verbundsobjekt.

     Wenn sie eingesteckt werden, geben sich manche USB-Modems (und
     andere USB-Geräte) zunächst als Nur-Lese-Speichermedien und nicht
     als Modem aus. Sie müssen erst einem Moduswechsel („Modeswitching“)
     unterzogen werden, bevor sie benutzt werden können. Der
     USB_ModeSwitch-Diensttyp installiert udev-Regeln, um bei diesen
     Geräten automatisch ein Modeswitching durchzuführen, wenn sie
     eingesteckt werden.

     Dieser Dienst gehört zu den ‘%desktop-services’ (siehe *note
     Desktop-Dienste::).

 -- Datentyp: usb-modeswitch-configuration
     Der Datentyp, der die Konfiguration von USB_ModeSwitch
     repräsentiert.

     ‘usb-modeswitch’ (Vorgabe: ‘usb-modeswitch’)
          Das USB_ModeSwitch-Paket, das die Programmdateien für das
          Modeswitching enthält.

     ‘usb-modeswitch-data’ (Vorgabe: ‘usb-modeswitch-data’)
          Das Paket, in dem die Gerätedaten und die udev-Regeldatei
          stehen, die USB_ModeSwitch benutzt.

     ‘config-file’ (Vorgabe: ‘#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")’)
          Welche Konfigurationsdatei das USB_ModeSwitch-Aufrufprogramm
          („Dispatcher“) benutzt. Nach Vorgabe wird die mit
          USB_ModeSwitch ausgelieferte Konfigurationsdatei benutzt, die
          neben anderen Voreinstellungen die Protokollierung nach
          ‘/var/log’ abschaltet. Wenn ‘#f’ festgelegt wird, wird keine
          Konfigurationsdatei benutzt.


File: guix.de.info,  Node: Netzwerkdienste,  Next: Unbeaufsichtigte Aktualisierungen,  Prev: Netzwerkeinrichtung,  Up: Dienste

12.9.5 Netzwerkdienste
----------------------

Das im vorherigen Abschnitt besprochene Modul ‘(gnu services
networking)’ stellt auch Dienste für fortgeschrittene
Netzwerkeinrichtungen zur Verfügung, etwa um einen DHCP-Dienst für
andere anzubieten, Pakete mit iptables oder nftables zu filtern, einen
WLAN-Zugangspunkt mit ‘hostapd’ verfügbar zu machen, den „Superdaemon“
‘inetd’ auszuführen und noch mehr. In diesem Abschnitt werden sie
beschrieben.

 -- Scheme-Prozedur: dhcpd-service-type
     Dieser Diensttyp definiert einen Dienst, der einen DHCP-Daemon
     ausführt. Um einen Dienst zu diesem Typ anzugeben, müssen Sie eine
     ‘<dhcpd-configuration>’ bereitstellen. Zum Beispiel so:

          (service dhcpd-service-type
                   (dhcpd-configuration
                    (config-file (local-file "my-dhcpd.conf"))
                    (interfaces '("enp0s25"))))

 -- Datentyp: dhcpd-configuration
     ‘package’ (Vorgabe: ‘isc-dhcp’)
          Das Paket, das den DHCP-Daemon zur Verfügung stellt. Von
          diesem Paket wird erwartet, dass es den Daemon unter dem Pfad
          ‘sbin/dhcpd’ relativ zum Verzeichnis der Paketausgabe
          bereitstellt. Das vorgegebene Paket ist der DHCP-Server vom
          ISC (https://www.isc.org/dhcp/).
     ‘config-file’ (Vorgabe: ‘#f’)
          Die Konfigurationsdatei, die benutzt werden soll. Sie _muss_
          angegeben werden und wird an ‘dhcpd’ mittels seiner
          Befehlszeilenoption ‘-cf’ übergeben. Ein beliebiges
          „dateiartiges“ Objekt kann dafür angegeben werden (siehe *note
          dateiartige Objekte: G-Ausdrücke.). Siehe ‘man dhcpd.conf’ für
          Details, welcher Syntax die Konfigurationsdatei genügen muss.
     ‘version’ (Vorgabe: ‘"4"’)
          Die DHCP-Version, die benutzt werden soll. Der ISC-DHCP-Server
          unterstützt die Werte „4“, „6“ und „4o6“. Das Feld entspricht
          den Befehlszeilenoptionen ‘-4’, ‘-6’ und ‘-4o6’ von ‘dhcpd’.
          Siehe ‘man dhcpd’ für Details.
     ‘run-directory’ (Vorgabe: ‘"/run/dhcpd"’)
          Das zu benutzende Laufzeit-Verzeichnis („run“-Verzeichnis).
          Wenn der Dienst aktiviert wird, wird dieses Verzeichnis
          erzeugt, wenn es noch nicht existiert.
     ‘pid-file’ (Vorgabe: ‘"/run/dhcpd/dhcpd.pid"’)
          Die zu benutzende PID-Datei. Dieses Feld entspricht der
          Befehlszeilenoption ‘-pf’ von ‘dhcpd’. Siehe ‘man dhcpd’ für
          Details.
     ‘interfaces’ (Vorgabe: ‘'()’)
          Die Namen der Netzwerkschnittstelle, auf der dhcpd auf
          Broadcast-Nachrichten lauscht. Wenn diese Liste nicht leer
          ist, werden ihre Elemente (diese müssen Zeichenketten sein) an
          den ‘dhcpd’-Aufruf beim Starten des Daemons angehängt. Es ist
          unter Umständen _nicht_ nötig, hier Schnittstellen
          ausdrücklich anzugeben; siehe ‘man dhcpd’ für Details.

 -- Scheme-Variable: hostapd-service-type
     Dies ist der Diensttyp für den hostapd-Daemon
     (https://w1.fi/hostapd/), mit dem ein WLAN-Zugangspunkt (ein
     „Access Point“ gemäß IEEE 802.11) und Authentifizierungsserver
     eingerichtet werden kann. Sein zugewiesener Wert muss eine
     ‘hostapd-configuration’ sein wie im folgenden Beispiel:

          ;; Mit wlan1 den Zugangspunkt für "Mein Netzwerk" betreiben.
          (service hostapd-service-type
                   (hostapd-configuration
                    (interface "wlan1")
                    (ssid "Mein Netzwerk")
                    (channel 12)))

 -- Datentyp: hostapd-configuration
     Dieser Datentyp repräsentiert die Konfiguration des
     hostapd-Dienstes. Er hat folgende Felder:

     ‘package’ (Vorgabe: ‘hostapd’)
          Das zu benutzende hostapd-Paket.

     ‘interface’ (Vorgabe: ‘"wlan0"’)
          Die Netzwerkschnittstelle, auf der der WLAN-Zugangspunkt
          betrieben wird.

     ‘ssid’
          Die SSID (“Service Set Identifier”), eine das Netzwerk
          identifizierende Zeichenkette.

     ‘broadcast-ssid?’ (Vorgabe: ‘#t’)
          Ob diese SSID allgemein sichtbar sein soll.

     ‘channel’ (Vorlage: ‘1’)
          Der zu verwendende WLAN-Kanal.

     ‘driver’ (Vorgabe: ‘"nl80211"’)
          Über welchen Schnittstellentyp der Treiber angesprochen wird.
          ‘"nl80211"’ wird von allen Linux-mac80211-Treibern benutzt.
          Schreiben Sie ‘"none"’, wenn hostapd für einen eigenständigen
          RADIUS-Server erstellt wird, der keine Draht- oder
          Drahtlosverbindung steuert.

     ‘extra-settings’ (Vorgabe: ‘""’)
          Weitere Einstellungen, die wie sie sind an die
          Konfigurationsdatei von hostapd angehängt werden. Siehe
          <https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf> für
          eine Referenz der Konfigurationsdatei.

 -- Scheme-Variable: simulated-wifi-service-type
     Dies ist der Diensttyp für einen Dienst, um ein WLAN-Netzwerk zu
     simulieren. Das kann auf virtuellen Maschinen zu Testzwecken
     eingesetzt werden. Der Dienst lädt das ‘mac80211_hwsim’-Modul
     (https://www.kernel.org/doc/html/latest/networking/mac80211_hwsim/mac80211_hwsim.html)
     in den Linux-Kernel und startet hostapd, um ein
     Pseudo-WLAN-Netzwerk vorzutäuschen, das nach Vorgabe als ‘wlan0’
     sichtbar ist.

     Der Wert des Dienstes ist ein
     ‘hostapd-configuration’-Verbundsobjekt.

 -- Scheme-Variable: iptables-service-type
     Mit diesem Diensttyp wird eine iptables-Konfiguration eingerichtet.
     iptables ist ein Rahmen für Netzwerkpaketfilter, der vom
     Linux-Kernel unterstützt wird. Der Dienst unterstützt die
     Konfiguration von iptables für sowohl IPv4 als auch IPv6. Eine
     einfache Beispielkonfiguration, die alle eingehenden Verbindungen
     verweigert, die nicht an den SSH-Port 22 gehen, können Sie hier
     sehen:

          (service iptables-service-type
                   (iptables-configuration
                    (ipv4-rules (plain-file "iptables.rules" "*filter
          :INPUT ACCEPT
          :FORWARD ACCEPT
          :OUTPUT ACCEPT
          -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
          -A INPUT -p tcp --dport 22 -j ACCEPT
          -A INPUT -j REJECT --reject-with icmp-port-unreachable
          COMMIT
          "))
                    (ipv6-rules (plain-file "ip6tables.rules" "*filter
          :INPUT ACCEPT
          :FORWARD ACCEPT
          :OUTPUT ACCEPT
          -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
          -A INPUT -p tcp --dport 22 -j ACCEPT
          -A INPUT -j REJECT --reject-with icmp6-port-unreachable
          COMMIT
          "))))

 -- Datentyp: iptables-configuration
     Repräsentiert die iptables-Konfiguration.

     ‘iptables’ (Vorgabe: ‘iptables’)
          Das zu benutzende iptables-Paket, das ‘iptables-restore’ und
          ‘ip6tables-restore’ zur Verfügung stellt.
     ‘ipv4-rules’ (Vorgabe: ‘%iptables-accept-all-rules’)
          Die zu benutzenden iptables-Regeln. Diese werden an
          ‘iptables-restore’ übergeben. Als Regeln kann jedes
          „dateiartige“ Objekt angegeben werden (siehe *note dateiartige
          Objekte: G-Ausdrücke.).
     ‘ipv6-rules’ (Vorgabe: ‘%iptables-accept-all-rules’)
          Die zu benutzenden ip6tables-Regeln. Diese werden an
          ‘ip6tables-restore’ übergeben. Als Regeln kann jedes
          „dateiartige“ Objekt angegeben werden (siehe *note dateiartige
          Objekte: G-Ausdrücke.).

 -- Scheme-Variable: nftables-service-type
     Dieser Dienst richtet eine Konfiguration von nftables ein. nftables
     ist als Projekt ein Teil von Netfilter mit dem Ziel, den
     bestehenden Aufbau aus iptables, ip6tables, arptables und ebtables
     zu ersetzen. Es stellt einen neuen Rahmen für Netzwerkpaketfilter
     bereit sowie ein neues Werkzeug ‘nft’ auf Anwendungsebene und eine
     Kompatibilitätsschicht für iptables. Dieser Dienst wird zusammen
     mit ‘%default-nftables-ruleset’ ausgeliefert, einem vorgegebenen
     Satz von Regeln, der alle eingehenden Verbindungen außer auf dem
     SSH-Port 22 ablehnt. Um ihn zu benutzen, schreiben Sie einfach:

          (service nftables-service-type)

 -- Datentyp: nftables-configuration
     Datentyp, der die nftables-Konfiguration repräsentiert.

     ‘package’ (Vorgabe: ‘nftables’)
          Das nftables-Paket, das ‘nft’ zur Verfügung stellt.
     ‘ruleset’ (Vorgabe: ‘%default-nftables-ruleset’)
          Die zu benutzenden nftables-Regeln. Als Regeln kann jedes
          „dateiartige“ Objekt angegeben werden (siehe *note dateiartige
          Objekte: G-Ausdrücke.).

 -- Scheme-Variable: ntp-service-type
     Dies ist der Typ des Dienstes, der den ‘ntpd’-Daemon für das
     Network Time Protocol (https://www.ntp.org), kurz NTP, ausführt.
     Mit diesem Daemon wird die Systemuhr mit der Uhr auf den
     angegebenen NTP-Servern synchronisiert.

     Der Wert dieses Dienstes ist ein ‘ntpd-configuration’-Objekt, wie
     im Folgenden beschrieben.

 -- Datentyp: ntp-configuration
     Der Datentyp für die Dienstkonfiguration des NTP-Dienstes.

     ‘servers’ (Vorgabe: ‘%ntp-servers’)
          Dies ist die Liste der Server
          (‘<ntp-server>’-Verbundsobjekte), mit denen ‘ntpd’
          synchronisiert wird. Siehe die Definition des
          ‘ntp-server’-Datentyps weiter unten.

     ‘allow-large-adjustment?’ (Vorgabe: ‘#t’)
          Hiermit wird festgelegt, ob ‘ntpd’ die Uhr beim ersten
          Umstellen um mehr als 1.000 Sekunden ändern darf.

     ‘ntp’ (Vorgabe: ‘ntp’)
          Das NTP-Paket, was benutzt werden soll.

 -- Scheme-Variable: %ntp-servers
     Liste der Rechnernamen („Host“-Namen), die als vorgegebene
     NTP-Server benutzt werden. Dabei handelt es sich um die Server des
     NTP Pool Project (https://www.ntppool.org/en/).

 -- Datentyp: ntp-server
     Der Datentyp, der die Konfiguration eines NTP-Servers
     repräsentiert.

     ‘type’ (Vorgabe: ‘'server’)
          Die Art des NTP-Servers als Symbol, entweder ‘'pool’,
          ‘'server’, ‘'peer’, ‘'broadcast’ oder ‘'manycastclient’.

     ‘address’
          Die Adresse des Servers als Zeichenkette.

     ‘options’
          NTPD-Optionen, die für diesen bestimmten Server gelten sollen,
          angegeben als Liste von Optionsnamen und/oder Tupeln aus je
          Optionsname und -wert. Im folgenden Beispiel wird ein Server
          definiert, der die Optionen ‘iburst’ und ‘prefer’ sowie
          ‘version’ 3 und eine ‘maxpoll’-Zeit von 16 Sekunden benutzen
          soll.

               (ntp-server
                (type 'server)
                (address "ein.ntp.server.org")
                (options `(iburst (version 3) (maxpoll 16) prefer))))

 -- Scheme-Prozedur: openntpd-service-type
     Hiermit wird ‘ntpd’, der Network-Time-Protocol-Daemon (NTP-Daemon),
     ausgeführt, in seiner OpenNTPD-Implementierung
     (http://www.openntpd.org). Der Daemon sorgt dafür, dass die
     Systemuhr mit den Uhren der eingestellten Server synchron bleibt.

          (service
           openntpd-service-type
           (openntpd-configuration
            (listen-on '("127.0.0.1" "::1"))
            (sensor '("udcf0 correction 70000"))
            (constraint-from '("www.gnu.org"))
            (constraints-from '("https://www.google.com/"))))


 -- Scheme-Variable: %openntpd-servers
     Diese Variable bezeichnet eine Liste von Serveradressen, die in
     ‘%ntp-servers’ definiert sind.

 -- Datentyp: openntpd-configuration
     ‘openntpd’ (Vorgabe: ‘(file-append openntpd "/sbin/ntpd")’)
          Das openntpd-Programm, das benutzt werden soll.
     ‘listen-on’ (Vorgabe: ‘'("127.0.0.1" "::1")’)
          Eine Liste von lokalen IP-Adressen oder Rechnernamen
          („Host“-Namen), auf denen der ntpd-Daemon lauschen soll.
     ‘query-from’ (Vorgabe: ‘'()’)
          Eine Liste von lokalen IP-Adressen, die der ntpd-Daemon für
          ausgehende Anfragen benutzen soll.
     ‘sensor’ (Vorgabe: ‘'()’)
          Hiermit geben Sie eine Liste von Zeitdifferenz-Sensorgeräten
          an, die ntpd benutzen soll. ‘ntpd’ wird auf jeden Sensor
          lauschen, der auch tatsächlich existiert, und solche, die
          nicht existieren, ignorieren. Siehe die Dokumentation beim
          Anbieter (https://man.openbsd.org/ntpd.conf) für weitere
          Informationen.
     ‘server’ (Vorgabe: ‘'()’)
          Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen
          von NTP-Servern an, mit denen synchronisiert werden soll.
     ‘servers’ (Vorgabe: ‘%openntp-servers’)
          Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen
          von NTP-Pools an, mit denen synchronisiert werden soll.
     ‘constraint-from’ (Vorgabe: ‘'()’)
          ‘ntpd’ kann so eingestellt werden, dass es das Datum aus der
          „Date“-Kopfzeile bei mit TLS übermittelten Anfragen an
          HTTPS-Server, denen vertraut wird, ausliest. Diese
          Zeitinformation wird nicht für Genauigkeit benutzt, sondern um
          mit authentifizierten Informationen die Auswirkungen eines
          Man-in-the-Middle-Angriffs auf unauthentifizierte
          NTP-Kommunikation einzuschränken. Geben Sie hierzu eine Liste
          von URLs, IP-Adressen oder Rechnernamen („Host“-Namen) von
          HTTPS-Servern an, um eine solche Beschränkung („Constraint“)
          einzurichten.
     ‘constraints-from’ (Vorgabe: ‘'()’)
          Wie bei ‘constraint-from’ geben Sie auch hier eine Liste von
          URLs, IP-Adressen oder Rechnernamen von HTTPS-Servern an, um
          eine Beschränkung einzurichten. Falls der Rechnername zu
          mehreren IP-Adressen aufgelöst wird, berechnet ‘ntpd’ den
          Median von allen als Beschränkung.

 -- Scheme-Variable: inetd-service-type
     Dieser Dienst führt den ‘inetd’-Daemon aus (siehe *note
     (inetutils)inetd invocation::). ‘inetd’ lauscht auf Verbindungen
     mit Internet-Sockets und startet bei Bedarf das entsprechende
     Server-Programm, sobald eine Verbindung mit einem dieser Sockets
     hergestellt wird.

     Der Wert dieses Dienstes ist ein ‘inetd-configuration’-Objekt. Im
     folgenden Beispiel wird der ‘inetd’-Daemon konfiguriert, um den
     eingebauten ‘echo’-Dienst sowie einen SMTP-Dienst anzubieten, wobei
     letzterer SMTP-Kommunikation über SSH an einen Server ‘smtp-server’
     über einen vom ‘rechnername’n bezeichneten Zugang („Gateway“)
     weiterleitet:

          (service
           inetd-service-type
           (inetd-configuration
            (entries (list
                      (inetd-entry
                       (name "echo")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root"))
                      (inetd-entry
                       (node "127.0.0.1")
                       (name "smtp")
                       (socket-type 'stream)
                       (protocol "tcp")
                       (wait? #f)
                       (user "root")
                       (program (file-append openssh "/bin/ssh"))
                       (arguments
                        '("ssh" "-qT" "-i" "/pfad/zum/ssh_schlüssel"
                          "-W" "smtp-server:25" "benutzer@rechnername")))))))

     Siehe unten für mehr Details über ‘inetd-configuration’.

 -- Datentyp: inetd-configuration
     Datentyp, der die Konfiguration von ‘inetd’ repräsentiert.

     ‘program’ (Vorgabe: ‘(file-append inetutils "/libexec/inetd")’)
          Das ‘inetd’-Programm, das benutzt werden soll.

     ‘entries’ (Vorgabe: ‘'()’)
          Eine Liste von ‘inetd’-Diensteinträgen. Jeder Eintrag sollte
          von einem ‘inetd-entry’-Konstruktor erzeugt werden.

 -- Datentyp: inetd-entry
     Datentyp, der einen Eintrag in der ‘inetd’-Konfiguration
     repräsentiert. Jeder Eintrag entspricht einem Socket, auf dem
     ‘inetd’ auf Anfragen lauscht.

     ‘node’ (Vorgabe: ‘#f’)
          Optional sollte hier als Zeichenkette eine kommagetrennte
          Liste lokaler Adressen angegeben werden, die ‘inetd’ benutzen
          soll, wenn er stellvertretend für den angegebenen Dienst
          lauscht. Siehe *note (inetutils)Configuration file:: für eine
          vollständige Beschreibung aller Optionen.
     ‘name’
          Eine Zeichenkette. Dieser Name muss einem Eintrag in
          ‘/etc/services’ entsprechen.
     ‘socket-type’
          Entweder ‘'stream’, ‘'dgram’, ‘'raw’, ‘'rdm’ oder
          ‘'seqpacket’.
     ‘protocol’
          Eine Zeichenkette, die einem Eintrag in ‘/etc/protocols’
          entsprechen muss.
     ‘wait?’ (Vorgabe: ‘#t’)
          Ob ‘inetd’ warten soll, bis der Server beendet ist, bevor es
          wieder auf neue Anfragen an den Dienst lauscht.
     ‘user’
          Eine Zeichenkette mit dem Benutzernamen (und optional dem
          Gruppennamen) des Benutzers, als der dieser Server ausgeführt
          werden soll. Der Gruppenname kann als Suffix angegeben werden,
          getrennt durch einen Doppelpunkt oder Punkt, d.h.
          ‘"benutzer"’, ‘"benutzer:gruppe"’ oder ‘"benutzer.gruppe"’.
     ‘program’ (Vorgabe: ‘"internal"’)
          Das Serverprogramm, das die Anfragen bedienen soll, oder
          ‘"internal"’, wenn ‘inetd’ einen eingebauten Dienst verwenden
          soll.
     ‘arguments’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten oder dateiartigen Objekten, die
          dem Serverprogramm als Argumente übergeben werden, angefangen
          mit dem nullten Argument, d.h. dem Namen selbigen
          Serverprogramms. Bei in ‘inetd’ eingebauten Diensten muss
          dieser Eintrag auf ‘'()’ oder ‘'("internal")’ gesetzt sein.

     Siehe *note (inetutils)Configuration file:: für eine mehr ins
     Detail gehende Erörterung jedes Konfigurationsfeldes.

 -- Scheme-Variable: opendht-service-type
     Dieser Diensttyp dient dazu, einen OpenDHT-Knoten
     (https://opendht.net), ‘dhtnode’, zu betreiben. Mit dem Daemon kann
     ein eigener Proxy-Dienst für die verteilte Hashtabelle (Distributed
     Hash Table, DHT) angeboten werden, den man in Jami und anderen
     Anwendungen angeben kann, damit sie sich darüber verbinden.

          Wichtig: Wenn Sie den OpenDHT-Proxy-Server nutzen, sollten die
          für ihn „sichtbaren“ IP-Adressen der Clients auch anderen
          Netzwerkteilnehmern gegenüber erreichbar sein. In der Praxis
          ist es am besten, den Proxy-Server auf einem Rechner mit
          öffentlich zugänglicher IP-Adresse außerhalb Ihres privaten
          Netzwerks zu betreiben. Wenn Sie den Proxy-Server zum Beispiel
          im privaten lokalen Netzwerk mit IPv4 zugänglich machen würden
          und dann mittels Portweiterleitung für die Außenwelt
          zugänglich machten, funktioniert das vielleicht bei externen
          Netzwerkteilnehmern, aber für die Geräte im lokalen Netzwerk
          des Proxys würde anderen OpenDHT-Knoten nur deren private
          Adresse mitgeteilt, womit sie keine Verbindung aufbauen
          können.

     Der Wert dieses Dienstes ist ein ‘opendht-configuration’-Objekt,
     wie im Folgenden beschrieben.

 -- Datentyp: opendht-configuration
     Verfügbare ‘opendht-configuration’-Felder sind:

     ‘opendht’ (Vorgabe: ‘opendht’) (Typ: dateiartig)
          Zu benutzendes ‘opendht’-Paket.

     ‘peer-discovery?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob sich der Knoten am Multicast-Mechanismus zum Finden lokaler
          Netzwerkteilnehmer beteiligen soll.

     ‘enable-logging?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Protokollnachrichten über syslog geschrieben werden sollen.
          Weil es so ausführlich ist, ist es nach Vorgabe deaktiviert.

     ‘debug?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob Protokollnachrichten der Fehlersuch-Ausführlichkeitsstufe
          aktiviert werden sollen. Diese Option wirkt sich _nicht_ aus,
          wenn Protokollierung ganz abgeschaltet ist.

     ‘bootstrap-host’ (Vorgabe: ‘"bootstrap.jami.net:4222"’) (Typ: Vielleicht-Zeichenkette)
          Der Rechnername des Knotens, über den eine erste Verbindung
          ins OpenDHT-Netzwerk aufgebaut wird. Es kann eine bestimmte
          Portnummer angegeben werden, indem als Suffix ‘:PORT’
          angehängt wird. Vorgegeben ist, den Bootstrap-Knoten von Jami
          zu benutzen, aber man kann jeden Rechnernamen eines Knotens
          angeben. Es ist auch möglich, Bootstrapping zu deaktivieren,
          indem man dies ausdrücklich auf den Wert ‘%unset-value’
          festlegt.

     ‘port’ (Vorgabe: ‘4222’) (Typ: Vielleicht-Zahl)
          An welchen UDP-Port sich der OpenDHT-Knoten binden soll. Wird
          er _nicht_ angegeben, wird ein verfügbarer Port automatisch
          ausgewählt.

     ‘proxy-server-port’ (Typ: Vielleicht-Zahl)
          Einen Proxy-Server auf dem angegebenen Port lauschen lassen.

     ‘proxy-server-port-tls’ (Typ: Vielleicht-Zahl)
          Einen Proxy-Server auf dem angegebenen Port auf
          TLS-Verbindungen lauschen lassen.

 -- Scheme-Variable: tor-service-type
     Dies ist der Diensttyp für den Dienst, der den Tor-Daemon
     (https://torproject.org) für anonyme Netzwerkrouten ausführt. Der
     Dienst benutzt für seine Konfiguration ein
     ‘<tor-configuration>’-Verbundsobjekt. Vorgegeben ist, dass der
     Tor-Daemon als „unprivilegierter“ Nutzer ‘tor’ ausgeführt wird,
     einem Mitglied der ‘tor’-Benutzergruppe ohne besondere
     Berechtigungen.

 -- Datentyp: tor-configuration
     ‘tor’ (Vorgabe: ‘tor’)
          Das Paket, das den Tor-Daemon zur Verfügung stellt. Von diesem
          Paket wird erwartet, dass es den Daemon unter dem Pfad
          ‘bin/tor’ relativ zum Ausgabeverzeichnis verfügbar macht. Das
          vorgegebene Paket ist die Implementierung des Tor-Projekts
          (https://www.torproject.org).

     ‘config-file’ (Vorgabe: ‘(plain-file "empty" "")’)
          Die Konfigurationsdatei, die benutzt werden soll. Sie wird an
          eine vorgegebene Konfigurationsdatei angehängt und die sich
          daraus ergebende Konfigurationsdatei wird dann an ‘tor’ über
          dessen Befehlszeilenoption ‘-f’ übergeben. Hier kann jedes
          „dateiartige“ Objekt (siehe *note dateiartige Objekte:
          G-Ausdrücke.) angegeben werden. Siehe ‘man tor’ für Details
          zur Syntax der Konfigurationsdatei.

     ‘hidden-services’ (Vorgabe: ‘'()’)
          Die Liste der zu benutzenden „versteckten Dienste“ als
          ‘<hidden-service>’-Verbundsobjekte. Für jeden versteckten
          Dienst, den Sie in dieser Liste eintragen, werden automatisch
          entsprechende Einstellungen zur vorgefertigten
          Konfigurationsdatei hinzugefügt. Sie können
          ‘<hidden-service>’-Verbundsobjekte bequem mit der unten
          beschriebenen Prozedur ‘tor-hidden-service’ erzeugen lassen.

     ‘socks-socket-type’ (Vorgabe: ‘'tcp’)
          Welche Art von Socket Tor für seinen SOCKS-Socket in der
          Voreinstellung benutzen soll. Dafür muss entweder ‘'tcp’ oder
          ‘'unix’ angegeben werden. Für ‘'tcp’ wird Tor nach
          Voreinstellung auf dem TCP-Port 9050 auf der
          loopback-Schnittstelle (d.h. localhost) lauschen. Für ‘'unix’
          wird Tor auf dem UNIX-Socket ‘/var/run/tor/socks-sock’
          lauschen, auf den Mitglieder der ‘tor’-Benutzergruppe
          Schreibberechtigung erhalten.

          Wenn Sie detailliertere Anpassungen am SOCKS-Socket vornehmen
          wollen, belassen Sie ‘socks-socket-type’ bei seinem
          vorgegebenen Wert ‘'tcp’ und benutzen Sie ‘config-file’, um
          diese Voreinstellung mit Ihrer eigenen ‘SocksPort’-Option zu
          überspielen.

     ‘control-socket?’ (Vorgabe: ‘#f’)
          Ob ein „Steuerungs-Socket“ bereitgestellt werden soll, über
          den Tor angesteuert werden kann, um zum Beispiel Onion-Dienste
          zur Laufzeit zu instanziieren. Wird hier ‘#t’ angegeben, nimmt
          Tor Steuerungsbefehle auf dem Unix-Socket
          ‘/var/run/tor/control-sock’ entgegen, auf den Mitglieder der
          ‘tor’-Benutzergruppe Schreibzugriff bekommen.

 -- Scheme-Prozedur: tor-hidden-service NAME ZUORDNUNG
     Hiermit wird ein neuer “versteckter Dienst” von Tor mit diesem
     NAMEn definiert, der die ZUORDNUNG herstellt. Die ZUORDNUNG ist
     eine Liste von Port-/Rechner-Tupeln wie hier:

           '((22 "127.0.0.1:22")
             (80 "127.0.0.1:8080"))

     In diesem Beispiel wird Port 22 des versteckten Dienstes an den ihm
     zugeordneten lokalen Port 22 weitergeleitet und Port 80 wird an den
     lokalen Port 8080 weitergeleitet.

     Dadurch wird ein Verzeichnis ‘/var/lib/tor/hidden-services/NAME’
     erstellt, worin sich in der Datei ‘hostname’ der
     ‘.onion’-Rechnername („Host“-Name) des versteckten Dienstes
     befindet.

     Siehe die Dokumentation des Tor-Projekts
     (https://www.torproject.org/docs/tor-hidden-service.html.en) für
     weitere Informationen.

   Das Modul ‘(gnu services rsync)’ bietet die folgenden Dienste an:

   Sie könnten einen rsync-Daemon einsetzen wollen, um Dateien verfügbar
zu machen, damit jeder (oder nur Sie) bestehende Dateien herunterladen
oder neue Dateien hochladen kann.

 -- Scheme-Variable: rsync-service-type
     Dies ist der Diensttyp für den rsync-Daemon
     (https://rsync.samba.org), er benutzt ein
     ‘rsync-configuration’-Verbundsobjekt wie in diesem Beispiel:

          ;; Zwei Verzeichnisse über rsync exportieren.  Wie vorgegeben
          ;; lauscht rsync auf allen Netzwerkschnittstellen.
          (service rsync-service-type
                   (rsync-configuration
                     (modules (list (rsync-module
                                      (name "musik")
                                      (file-name "/srv/zik")
                                      (read-only? #f))
                                    (rsync-module
                                      (name "filme")
                                      (file-name "/home/charlie/filme"))))))

     Siehe unten für Details zur ‘rsync-configuration’.

 -- Datentyp: rsync-configuration
     Datentyp, der die Konfiguration für den ‘rsync-service’
     repräsentiert.

     ‘package’ (Vorgabe: RSYNC)
          Zu benutzendes ‘rsync’-Paket.

     ‘address’ (Vorgabe: ‘#f’)
          Auf welcher IP-Adresse ‘rsync’ auf eingehende Verbindungen
          lauscht. Wird nichts angegeben, wird auf allen verfügbaren
          Adressen gelauscht.

     ‘port-number’ (Vorgabe: ‘873’)
          Der TCP-Port, auf dem ‘rsync’ auf eingehende Verbindungen
          lauscht. Wenn die Portnummer kleiner als ‘1024’ ist, muss
          ‘rsync’ als Administratornutzer ‘root’ und auch mit dieser
          Benutzergruppe gestartet werden.

     ‘pid-file’ (Vorgabe: ‘"/var/run/rsyncd/rsyncd.pid"’)
          Der Name der Datei, in die ‘rsync’ seine PID schreibt.

     ‘lock-file’ (Vorgabe: ‘"/var/run/rsyncd/rsyncd.lock"’)
          Der Name der Datei, die ‘rsync’ als seine Sperrdatei
          verwendet.

     ‘log-file’ (Vorgabe: ‘"/var/log/rsyncd.log"’)
          Der Name der Datei, in die ‘rsync’ seine Protokolle schreibt.

     ‘user’ (Vorgabe: ‘"root"’)
          Das Benutzerkonto, dem der ‘rsync’-Prozess gehören soll.

     ‘group’ (Vorgabe: ‘"root"’)
          Die Benutzergruppe des ‘rsync’-Prozesses.

     ‘uid’ (Vorgabe: ‘"rsyncd"’)
          Der Benutzername oder der Benutzeridentifikator (d.h. die
          „User-ID“), mit dem Dateiübertragungen zum und vom Modul
          stattfinden sollen, wenn der Daemon als Administratornutzer
          ‘root’ läuft.

     ‘gid’ (Vorgabe: ‘"rsyncd"’)
          Benutzergruppenname oder Gruppenidentifikator („Group-ID“),
          mit dem auf das Modul zugegriffen wird.

     ‘modules’ (Vorgabe: ‘%default-modules’)
          Liste von „Modulen“ – d.h. Verzeichnissen, die mit rsync
          exportiert werden. Jedes Element muss ein
          ‘rsync-module’-Verbund sein, wie nun beschrieben wird.

 -- Datentyp: rsync-module
     Dies ist der Datentyp für rsync-„Module“. Ein Modul ist ein
     Verzeichnis, das über das rsync-Protokoll exportiert wird. Die
     verfügbaren Felder sind wie folgt:

     ‘name’
          Der Modulname. Dieser ist der Name, der in URLs benutzt wird.
          Zum Beispiel, wenn das Modul ‘musik’ heißt, wird die
          entsprechende URL ‘rsync://host.example.org/musik’ sein.

     ‘file-name’
          Der Name des Verzeichnisses, das exportiert wird.

     ‘comment’ (Vorgabe: ‘""’)
          Kommentar, der mit dem Modul verbunden ist.
          Clientbenutzerschnittstellen dürfen das anzeigen, wenn sie die
          Liste der verfügbaren Module bekommen.

     ‘read-only?’ (Vorgabe: ‘#t’)
          Ob der Client Dateien hochladen können soll. Wenn dies falsch
          ist, wird das Hochladen autorisiert werden, wenn die
          Berechtigungen dort, wo der Daemon läuft, es erlauben.

     ‘chroot?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr steht, wechselt der rsync-Daemon das
          Wurzelverzeichnis in das Verzeichnis des Moduls, bevor er
          Dateiübertragungen mit dem Client unternimmt. Das ist besser
          für die Sicherheit, aber es geht nur, wenn rsync als
          Administratornutzer root läuft.

     ‘timeout’ (Vorgabe: ‘300’)
          Wie viele Sekunden ein Prozess untätig bleiben darf, bis eine
          Verbindung zum Client getrennt wird.

   Das Modul ‘(gnu services syncthing)’ bietet die folgenden Dienste an:

   Sie könnten einen syncthing-Daemon benutzen wollen, wenn Sie Dateien
auf zwei oder mehr Rechnern haben und diese in Echtzeit synchronisieren
wollen, geschützt vor neugierigen Blicken.

 -- Scheme-Variable: syncthing-service-type
     Dies ist der Diensttyp für den syncthing-Daemon
     (https://syncthing.net/), er benutzt ein
     ‘syncthing-configuration’-Verbundsobjekt wie in diesem Beispiel:

          (service syncthing-service-type
                   (syncthing-configuration (user "alice")))

     Siehe unten für Details zur ‘syncthing-configuration’.

      -- Datentyp: syncthing-configuration
          Datentyp, der die Konfiguration für den
          ‘syncthing-service-type’ repräsentiert.

          ‘syncthing’ (Vorgabe: SYNCTHING)
               Zu benutzendes ‘syncthing’-Paket.

          ‘arguments’ (Vorgabe: ’())
               Liste der Befehlszeilenoptionen, die an das
               ‘syncthing’-Programm übergeben werden.

          ‘logflags’ (Vorgabe: 0)
               Die Summe aus den Protokollierungsoptionen, siehe die
               Dokumentation von Syncthing zu logflags
               (https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags).

          ‘user’ (Vorgabe: #F)
               Das Benutzerkonto, mit dem der Syncthing-Dienst
               ausgeführt wird. Es wird vorausgesetzt, dass der
               angegebene Benutzer existiert.

          ‘group’ (Vorgabe: "USERS")
               Die Gruppe, mit der der Syncthing-Dienst ausgeführt wird.
               Es wird vorausgesetzt, dass die angegebene Gruppe
               existiert.

          ‘home’ (Vorgabe: #F)
               Das gemeinsame Verzeichnis für sowohl Konfiguration als
               auch Daten. In der Vorgabeeinstellung würde das in
               ‘$HOME’ gespeicherte Verzeichnis das
               Konfigurationsverzeichnis des mit ‘user’ festgelegten
               Syncthing-Nutzers.

   Des Weiteren bietet das Modul ‘(gnu services ssh)’ die folgenden
Dienste an.

 -- Scheme-Prozedur: lsh-service [#:host-key "/etc/lsh/host-key"]
          [#:daemonic? #t] [#:interfaces '()] [#:port-number 22]
          [#:allow-empty-passwords? #f] [#:root-login? #f]
           [#:syslog-output? #t]
     [#:x11-forwarding? #t]  [#:tcp/ip-forwarding? #t]
     [#:password-authentication? #t]  [#:public-key-authentication? #t]
     [#:initialize? #t] Das ‘lshd’-Programm auf dem LSH-Paket so
     ausführen, dass es auf dem Port mit Portnummer PORT-NUMBER lauscht.
     HOST-KEY muss eine Datei angeben, die den Rechnerschlüssel enthält,
     die nur für den Administratornutzer lesbar sein darf.

     Wenn DAEMONIC? wahr ist, entkoppelt sich ‘lshd’ vom Terminal, auf
     dem er läuft, und schickt seine Protokolle an syslogd, außer
     SYSLOG-OUTPUT? ist auf falsch gesetzt. Selbstverständlich hängt der
     lsh-service dann auch von der Existenz eines syslogd-Dienstes ab.
     Wenn PID-FILE? wahr ist, schreibt ‘lshd’ seine PID in die Datei
     namens PID-FILE.

     Wenn INITIALIZE? wahr ist, wird der Startwert zur Verschlüsselung
     ebenso wie der Rechnerschlüssel bei der Dienstaktivierung erstellt,
     falls sie noch nicht existieren. Das kann lange dauern und
     Anwenderinteraktion kann dabei erforderlich sein.

     Wenn INITIALIZE? falsch ist, bleibt es dem Nutzer überlassen, den
     Zufallsgenerator zu initialisieren (siehe *note
     (lsh)lsh-make-seed::) und ein Schlüsselpaar zu erzeugen, dessen
     privater Schlüssel in der mit HOST-KEY angegebenen Datei steht
     (siehe *note (lsh)lshd basics::).

     Wenn INTERFACES leer ist, lauscht lshd an allen
     Netzwerkschnittstellen auf Verbindungen, andernfalls muss
     INTERFACES eine Liste von Rechnernamen („Host“-Namen) oder Adressen
     bezeichnen.

     ALLOW-EMPTY-PASSWORDS? gibt an, ob Anmeldungen mit leeren
     Passwörtern akzeptiert werden sollen, und ROOT-LOGIN? gibt an, ob
     Anmeldungen als Administratornutzer „root“ akzeptiert werden
     sollen.

     Die anderen Felder sollten selbsterklärend sein.

 -- Scheme-Variable: openssh-service-type
     Dies ist der Diensttyp für den OpenSSH-Secure-Shell-Daemon
     (http://www.openssh.org), ‘sshd’. Sein Wert muss ein
     ‘openssh-configuration’-Verbundsobjekt wie in diesem Beispiel sein:

          (service openssh-service-type
                   (openssh-configuration
                     (x11-forwarding? #t)
                     (permit-root-login 'prohibit-password)
                     (authorized-keys
                       `(("alice" ,(local-file "alice.pub"))
                         ("bob" ,(local-file "bob.pub"))))))

     Siehe unten für Details zur ‘openssh-configuration’.

     Dieser Dienst kann mit weiteren autorisierten Schlüsseln erweitert
     werden, wie in diesem Beispiel:

          (service-extension openssh-service-type
                             (const `(("charlie"
                                       ,(local-file "charlie.pub")))))

 -- Datentyp: openssh-configuration
     Dies ist der Verbundstyp für die Konfiguration von OpenSSHs ‘sshd’.

     ‘openssh’ (Vorgabe: OPENSSH)
          Das zu benutzende OpenSSH-Paket.

     ‘pid-file’ (Vorgabe: ‘"/var/run/sshd.pid"’)
          Der Name der Datei, in die ‘sshd’ seine PID schreibt.

     ‘port-number’ (Vorgabe: ‘22’)
          Der TCP-Port, auf dem ‘sshd’ auf eingehende Verbindungen
          lauscht.

     ‘max-connections’ (Vorgabe: ‘200’)
          Harte Grenze, wie viele Client-Verbindungen gleichzeitig
          möglich sind, durchgesetzt durch den im inetd-Stil startenden
          Shepherd-Dienst (siehe *note ‘make-inetd-constructor’:
          (shepherd)Service De- and Constructors.).

     ‘permit-root-login’ (Vorgabe: ‘#f’)
          Dieses Feld bestimmt, ob und wann Anmeldungen als
          Administratornutzer „root“ erlaubt sind. Wenn es ‘#f’ ist,
          sind Anmeldungen als Administrator gesperrt, bei ‘#t’ sind sie
          erlaubt. Wird hier das Symbol ‘'prohibit-password’ angegeben,
          dann sind Anmeldungen als Administrator erlaubt, aber nur,
          wenn keine passwortbasierte Authentifizierung verwendet wird.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, können sich Nutzer, deren
          Passwort leer ist, anmelden. Ist es falsch, können sie es
          nicht.

     ‘password-authentication?’ (Vorgabe: ‘#t’)
          Wenn dies wahr ist, können sich Benutzer mit ihrem Passwort
          anmelden. Wenn es falsch ist, müssen sie andere
          Authentisierungsmethoden benutzen.

     ‘public-key-authentication?’ (Vorgabe: ‘#t’)
          Wenn dies wahr ist, können Benutzer zur Anmeldung mit ihrem
          öffentlichen Schlüssel authentifiziert werden. Wenn es falsch
          ist, müssen sie andere Authentisierungsmethoden benutzen.

          Autorisierte öffentliche Schlüssel werden in
          ‘~/.ssh/authorized_keys’ gespeichert. Dies wird nur für
          Protokollversion 2 benutzt.

     ‘x11-forwarding?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, ist das Weiterleiten von
          Verbindungen an grafische X11-Clients erlaubt – mit anderen
          Worten funktionieren dann die ‘ssh’-Befehlszeilenoptionen ‘-X’
          und ‘-Y’.

     ‘allow-agent-forwarding?’ (Vorgabe: ‘#t’)
          Ob Weiterleitung an den SSH-Agenten zugelassen werden soll.

     ‘allow-tcp-forwarding?’ (Vorgabe: ‘#t’)
          Ob Weiterleitung von TCP-Kommunikation zugelassen werden soll.

     ‘gateway-ports?’ (Vorgabe: ‘#f’)
          Ob Ports als Zugang für eingehende Verbindungen
          („Gateway-Ports“) weitergeleitet werden dürfen.

     ‘challenge-response-authentication?’ (Vorgabe: ‘#f’)
          Gibt an, ob „Challenge-Response“-Authentifizierung zugelassen
          wird (z.B. über PAM).

     ‘use-pam?’ (Vorgabe: ‘#t’)
          Aktiviert die Pluggable-Authentication-Module-Schnittstelle.
          Wenn es auf ‘#t’ gesetzt ist, wird dadurch PAM-Authentisierung
          über ‘challenge-response-authentication?’ und
          ‘password-authentication?’ aktiviert, zusätzlich zur
          Verarbeitung von PAM-Konten und Sitzungsmodulen für alle
          Authentisierungsarten.

          Weil PAM-Challenge-Response-Authentisierung oft für dieselben
          Zwecke wie Passwortauthentisierung eingesetzt wird, sollten
          Sie entweder ‘challenge-response-authentication?’ oder
          ‘password-authentication?’ deaktivieren.

     ‘print-last-log?’ (Vorgabe: ‘#t’)
          Hiermit wird angegeben, ob ‘sshd’ Datum und Uhrzeit der
          letzten Anmeldung anzeigen soll, wenn sich ein Benutzer
          interaktiv anmeldet.

     ‘subsystems’ (Vorgabe: ‘'(("sftp" "internal-sftp"))’)
          Hiermit werden externe Subsysteme konfiguriert (z.B. ein
          Dateiübertragungsdaemon).

          Diese werden als Liste von zweielementigen Listen angegeben,
          von denen jede den Namen des Subsystems und einen Befehl (mit
          optionalen Befehlszeilenargumenten) benennt, der bei einer
          Anfrage an das Subsystem ausgeführt werden soll.

          Der Befehl ‘internal-sftp’ implementiert einen SFTP-Server im
          selben Prozess. Alternativ kann man den ‘sftp-server’-Befehl
          angeben:
               (service openssh-service-type
                        (openssh-configuration
                         (subsystems
                          `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))

     ‘accepted-environment’ (Vorgabe: ‘'()’)
          Eine Liste von Zeichenketten, die die Umgebungsvariablen
          benennen, die exportiert werden dürfen.

          Jede Zeichenkette wird zu einer eigenen Zeile in der
          Konfigurationsdatei. Siehe die Option ‘AcceptEnv’ in ‘man
          sshd_config’.

          Mit diesem Beispiel können SSH-Clients die Umgebungsvariable
          ‘COLORTERM’ exportieren. Sie wird von Terminal-Emulatoren
          gesetzt, die Farben unterstützen. Sie können Sie in der
          Ressourcendatei Ihrer Shell benutzen, um Farben in der
          Eingabeaufforderung und in Befehlen zu aktivieren, wenn diese
          Variable gesetzt ist.

               (service openssh-service-type
                        (openssh-configuration
                          (accepted-environment '("COLORTERM"))))

     ‘authorized-keys’ (Vorgabe: ‘'()’)
          Dies ist die Liste der autorisierten Schlüssel. Jedes Element
          der Liste ist ein Benutzername gefolgt von einem oder mehr
          dateiartigen Objekten, die öffentliche SSH-Schlüssel
          repräsentieren. Zum Beispiel werden mit

               (openssh-configuration
                 (authorized-keys
                   `(("rekado" ,(local-file "rekado.pub"))
                     ("chris" ,(local-file "chris.pub"))
                     ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))

          die angegebenen öffentlichen Schlüssel für die Benutzerkonten
          ‘rekado’, ‘chris’ und ‘root’ registriert.

          Weitere autorisierte Schlüssel können als ‘service-extension’
          hinzugefügt werden.

          Beachten Sie, dass das hier neben ‘~/.ssh/authorized_keys’
          _ohne_ sich zu stören benutzt werden kann.

     ‘generate-host-keys?’ (Vorgabe: ‘#t’)
          Ob Schlüsselpaare für den Rechner mit ‘ssh-keygen -A’ unter
          ‘/etc/ssh’ erzeugt werden sollen, wenn es noch keine gibt.

          Das Erzeugen von Schlüsselpaaren dauert nur ein paar Sekunden,
          wenn genug Entropie vorrätig ist, und findet nur einmal statt.
          Wenn Sie es z.B. auf einer virtuellen Maschine _nicht_
          brauchen, etwa weil Sie die Rechnerschlüssel schon von
          anderswo bekommen und die zusätzliche Zeit beim Systemstart
          ein Problem ist, schalten Sie es vielleicht lieber aus.

     ‘log-level’ (Vorgabe: ‘'info’)
          Dieses Symbol gibt die Stufe der Protokollierung an: ‘quiet’
          (schweigsam), ‘fatal’, ‘error’, ‘info’, ‘verbose’
          (ausführlich), ‘debug’ (Fehlersuche) etc. Siehe die
          Handbuchseite für ‘sshd_config’ für die vollständige Liste der
          Stufenbezeichnungen.

     ‘extra-content’ (Vorgabe: ‘""’)
          Dieses Feld kann benutzt werden, um beliebigen Text an die
          Konfigurationsdatei anzuhängen. Es ist besonders bei
          ausgeklügelten Konfigurationen nützlich, die anders nicht
          ausgedrückt werden können. Zum Beispiel würden mit dieser
          Konfiguration Anmeldungen als Administratornutzer „root“
          grundsätzlich untersagt, lediglich für eine bestimmte
          IP-Adresse wären sie zugelassen:

               (openssh-configuration
                 (extra-content "\
               Match Address 192.168.0.1
                 PermitRootLogin yes"))

 -- Scheme-Prozedur: dropbear-service [KONFIGURATION]
     Den Dropbear-SSH-Daemon
     (https://matt.ucc.asn.au/dropbear/dropbear.html) mit der
     angegebenen KONFIGURATION ausführen, einem
     ‘<dropbear-configuration>’-Objekt.

     Wenn Sie zum Beispiel einen Dropbear-Dienst angeben möchten, der
     auf Port 1234 lauscht, dann fügen Sie diesen Aufruf ins
     ‘services’-Feld des Betriebssystems ein:

          (dropbear-service (dropbear-configuration
                              (port-number 1234)))

 -- Datentyp: dropbear-configuration
     Dieser Datentyp repräsentiert die Konfiguration eines
     Dropbear-SSH-Daemons.

     ‘dropbear’ (Vorgabe: DROPBEAR)
          Das zu benutzende Dropbear-Paket.

     ‘port-number’ (Vorgabe: 22)
          Die Portnummer des TCP-Ports, auf dem der Daemon auf
          eingehende Verbindungen wartet.

     ‘syslog-output?’ (Vorgabe: ‘#t’)
          Ob eine Ausgabe für Syslog aktiviert sein soll.

     ‘pid-file’ (Vorgabe: ‘"/var/run/dropbear.pid"’)
          Der Dateiname der PID-Datei des Daemons.

     ‘root-login?’ (Vorgabe: ‘#f’)
          Ob Anmeldungen als Administratornutzer ‘root’ möglich sein
          sollen.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’)
          Ob leere Passwörter zugelassen sein sollen.

     ‘password-authentication?’ (Vorgabe: ‘#t’)
          Ob passwortbasierte Authentisierung zugelassen sein soll.

 -- Scheme-Variable: autossh-service-type
     Dies ist der Diensttyp für das AutoSSH-Programm
     (https://www.harding.motd.ca/autossh), das eine Kopie von ‘ssh’
     ausführt und diese überwacht. Bei Bedarf wird sie neugestartet, für
     den Fall, dass sie abstürzt oder keine Kommunikation mehr
     verarbeitet. AutoSSH kann von Hand aus der Befehlszeile heraus
     aufgerufen werden, indem man Argumente an die Binärdatei ‘autossh’
     aus dem Paket ‘autossh’ übergibt, aber es kann auch als ein
     Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

     AutoSSH kann benutzt werden, um an den lokalen Rechner gerichtete
     Kommunikation an eine entfernte Maschine über einen SSH-Tunnel
     weiterzuleiten. Dabei gilt die ‘~/.ssh/config’-Datei des AutoSSH
     ausführenden Benutzers.

     Um zum Beispiel einen Dienst anzugeben, der autossh mit dem
     Benutzerkonto ‘pino’ ausführt und alle lokalen Verbindungen auf
     Port ‘8081’ an ‘entfernt:8081’ über einen SSH-Tunnel
     durchzureichen, fügen Sie folgenden Aufruf in das ‘services’-Feld
     des Betriebssystems ein:

          (service autossh-service-type
                   (autossh-configuration
                    (user "pino")
                    (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "entfernt.net"))))

 -- Datentyp: autossh-configuration
     Dieser Datentyp repräsentiert die Konfiguration des
     AutoSSH-Dienstes.

     ‘user’ (Vorgabe: ‘"autossh"’)
          Das Benutzerkonto, mit dem der AutoSSH-Dienst ausgeführt wird.
          Es wird vorausgesetzt, dass der angegebene Benutzer existiert.

     ‘poll’ (Vorgabe: ‘600’)
          Gibt an, wie oft die Verbindung geprüft wird („Poll Time“), in
          Sekunden.

     ‘first-poll’ (Vorgabe: ‘#f’)
          Gibt an, wie viele Sekunden AutoSSH vor der ersten
          Verbindungsprüfung abwartet. Nach dieser ersten Prüfung werden
          weitere Prüfungen mit der in ‘poll’ angegebenen Regelmäßigkeit
          durchgeführt. Wenn dies auf ‘#f’ gesetzt ist, erfährt die
          erste Verbindungsprüfung keine Sonderbehandlung, sondern
          benutzt die gleichen Zeitabstände, die auch mit ‘poll’
          festgelegt wurden.

     ‘gate-time’ (Vorgabe: ‘30’)
          Gibt an, wie viele Sekunden lang eine SSH-Verbindung aktiv
          sein muss, bis sie als erfolgreich angesehen wird.

     ‘log-level’ (Vorgabe: ‘1’)
          Die Protokollierungsstufe. Sie entspricht den bei Syslog
          verwendeten Stufen, d.h. ‘0’ verschweigt die meisten Ausgaben,
          während ‘7’ die gesprächigste Stufe ist.

     ‘max-start’ (Vorgabe: ‘#f’)
          Wie oft SSH (neu) gestartet werden darf, bevor AutoSSH aufgibt
          und sich beendet. Steht dies auf ‘#f’, gibt es keine
          Begrenzung und AutoSSH kann endlos neu starten.

     ‘message’ (Vorgabe: ‘""’)
          Welche Nachricht beim Prüfen von Verbindungen an die
          zurückkommende Echo-Nachricht angehängt werden soll.

     ‘port’ (Vorgabe: ‘"0"’)
          Welche Ports zum Überprüfen der Verbindung benutzt werden.
          Steht dies auf ‘"0"’, werden keine Überprüfungen durchgeführt.
          Steht es auf ‘"N"’ für eine positive ganze Zahl N, werden die
          Ports N und N+1 zum Überwachen der Verbindung eingesetzt,
          wobei auf Port N Daten dafür gesendet werden und Port ‘n+1’
          deren Echo empfangen soll. Steht es auf ‘"N:M"’ für positive
          ganze Zahlen N und M, werden Ports N und M zur Überprüfung
          eingesetzt, wozu Port N zum Senden der Prüfdaten eingesetzt
          wird und Port M das Echo empfängt.

     ‘ssh-options’ (Vorgabe: ‘'()’)
          Die Liste der Befehlszeilenargumente, die an ‘ssh’
          weitergegeben werden sollen, wenn es ausgeführt wird. Die
          Befehlszeilenoptionen ‘-f’ und ‘-M’ sind AutoSSH vorbehalten;
          sie anzugeben, führt zu undefiniertem Verhalten.

 -- Scheme-Variable: webssh-service-type
     Dies ist der Diensttyp für das Programm WebSSH
     (https://webssh.huashengdun.org/), das einen webbasierten
     SSH-Client ausführt. WebSSH kann von Hand aus der Befehlszeile
     heraus aufgerufen werden, indem man Argumente an die Binärdatei
     ‘wssh’ aus dem Paket ‘webssh’ übergibt, aber es kann auch als ein
     Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

     Um zum Beispiel einen Dienst anzugeben, der WebSSH an der
     Loopback-Schnittstelle auf Port ‘8888’ ausführt, wobei die
     Richtlinie ist, dass Verbindungen abgelehnt werden außer zu einer
     Liste von erlaubten Rechnern, und eine auf HTTPS-Verbindungen
     lauschende NGINX als inversen Proxy dafür fungieren zu lassen,
     fügen Sie folgende Aufrufe in das ‘services’-Feld des
     Betriebssystems ein:

          (service webssh-service-type
            (webssh-configuration (address "127.0.0.1")
                                  (port 8888)
                                  (policy 'reject)
                                  (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
                                                 "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))

          (service nginx-service-type
                   (nginx-configuration
                    (server-blocks
                     (list
                      (nginx-server-configuration
                       (inherit %webssh-configuration-nginx)
                       (server-name '("webssh.example.com"))
                       (listen '("443 ssl"))
                       (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
                       (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
                       (locations
                        (cons (nginx-location-configuration
                               (uri "/.well-known")
                               (body '("root /var/www;")))
                              (nginx-server-configuration-locations %webssh-configuration-nginx))))))))

 -- Datentyp: webssh-configuration
     Repräsentiert die Konfiguration für den Dienst ‘webssh-service’.

     ‘package’ (Vorgabe: ‘webssh’)
          Zu benutzendes ‘webssh’-Paket.

     ‘user-name’ (Vorgabe: ‘"webssh"’)
          Der Benutzername oder der Benutzeridentifikator (d.h. die
          „User-ID“), mit dem Dateiübertragungen zum und vom Modul
          stattfinden sollen.

     ‘group-name’ (Vorgabe: ‘"webssh"’)
          Benutzergruppenname oder Gruppenidentifikator („Group-ID“),
          mit dem auf das Modul zugegriffen wird.

     ‘address’ (Vorgabe: ‘#f’)
          Die IP-Adresse, auf der ‘webssh’ auf eingehende Verbindungen
          lauscht.

     ‘port’ (Vorgabe: ‘8888’)
          Der TCP-Port, auf dem ‘webssh’ auf eingehende Verbindungen
          lauscht.

     ‘policy’ (Vorgabe: ‘#f’)
          Die Verbindungsrichtlinie ‘reject’ setzt voraus, dass erlaubte
          Rechner in KNOWN-HOSTS eingetragen werden.

     ‘known-hosts’ (Vorgabe: ‘'()’)
          Eine Liste der Rechner, die für eine SSH-Verbindung aus
          ‘webssh’ zugelassen sind.

     ‘log-file’ (Vorgabe: ‘"/var/log/webssh.log"’)
          Der Name der Datei, in die ‘webssh’ seine Protokolle schreibt.

     ‘log-level’ (Vorgabe: ‘#f’)
          Das Protokollierungsniveau.

 -- Scheme-Variable: %facebook-host-aliases
     Diese Variable enthält eine Zeichenkette, die Sie für ‘/etc/hosts’
     benutzen können (siehe *note (libc)Host Names::). Jede Zeile
     enthält einen Eintrag, der einen bekannten Servernamen des
     Facebook-Online-Dienstes – z.B. ‘www.facebook.com’ – an den lokalen
     Rechner umleitet – also an ‘127.0.0.1’ oder dessen IPv6-Gegenstück
     ‘::1’.

     Normalerweise wird diese Variable im Feld ‘hosts-file’ einer
     ‘operating-system’-Betriebssystemdeklaration benutzt (siehe *note
     ‘/etc/hosts’: „operating-system“-Referenz.):

          (use-modules (gnu) (guix))

          (operating-system
            (host-name "mymachine")
            ;; …
            (hosts-file
              ;; Eine /etc/hosts-Datei, mit der "localhost" und
              ;; "mymachine" als Alias-Namen eingerichtet werden
              ;; und für die Facebook-Servernamen stattdessen
              ;; Alias-Namen benutzt werden.
              (plain-file "hosts"
                          (string-append (local-host-aliases host-name)
                                         %facebook-host-aliases))))

     Dieser Mechanismus kann verhindern, dass lokal laufende Programme,
     wie z.B. Web-Browser, auf Facebook zugreifen.

   Das Modul ‘(gnu services avahi)’ stellt die folgende Definition zur
Verfügung.

 -- Scheme-Variable: avahi-service-type
     Dieser Dienst führt den ‘avahi-daemon’ aus, einen systemweiten
     mDNS-/DNS-SD-Anbieter, mit dem im lokalen Netzwerk befindliche
     Geräte erkannt werden können („Service Discovery“) und Rechnernamen
     selbstständig aufgelöst werden können („Zero-Configuration“) (siehe
     <https://avahi.org/>). Sein Wert muss ein
     ‘avahi-configuration’-Verbundsobjekt sein – siehe unten.

     Dieser Dienst erweitert den Name Service Cache Daemon (nscd), damit
     er ‘.local’-Rechnernamen mit nss-mdns
     (https://0pointer.de/lennart/projects/nss-mdns/) auflösen kann.
     Siehe *note Name Service Switch:: für Informationen zur Auflösung
     von Rechnernamen.

     Des Weiteren wird das AVAHI-Paket zum Systemprofil hinzugefügt,
     damit Befehle wie ‘avahi-browse’ einfach benutzt werden können.

 -- Datentyp: avahi-configuration
     Dieser Datentyp repräsentiert die Konfiguration von Avahi.

     ‘host-name’ (Vorgabe: ‘#f’)
          Wenn dies auf etwas anderes als ‘#f’ gesetzt ist, wird es
          anderen als Rechnername für diese Maschine mitgeteilt,
          andernfalls wird der tatsächliche Rechnername anderen
          mitgeteilt.

     ‘publish?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr gesetzt ist, dürfen Rechnernamen und
          Avahi-Dienste über das Netzwerk mitgeteilt werden (als
          Broadcast).

     ‘publish-workstation?’ (Vorgabe: ‘#t’)
          Wenn es auf wahr gesetzt ist, teilt ‘avahi-daemon’ den
          Rechnernamen dieser Maschine und die IP-Adresse über mDNS auf
          dem lokalen Netzwerk öffentlich mit. Um die auf Ihrem lokalen
          Netzwerk mitgeteilten Rechnernamen zu sehen, können Sie das
          hier ausführen:

               avahi-browse _workstation._tcp

     ‘wide-area?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, ist DNS-SD über „Unicast DNS“
          aktiviert.

     ‘ipv4?’ (Vorgabe: ‘#t’)
     ‘ipv6?’ (Vorgabe: ‘#t’)
          Mit diesen Feldern wird festgelegt, ob IPv4-/IPv6-Sockets
          verwendet werden.

     ‘domains-to-browse’ (Vorgabe: ‘'()’)
          Dies ist eine Liste von Domänen, die durchsucht werden.

 -- Scheme-Variable: openvswitch-service-type
     Dies ist der Diensttyp des Open-vSwitch-Dienstes
     (https://www.openvswitch.org), der als Wert ein
     ‘openvswitch-configuration’-Objekt hat.

 -- Datentyp: openvswitch-configuration
     Der Datentyp, der die Konfiguration von Open vSwitch repräsentiert,
     einem auf mehreren Schichten arbeitenden („multilayer“) virtuellen
     Switch, der für massenhafte Netzwerkautomatisierung durch
     programmatische Erweiterungen eingesetzt werden kann.

     ‘package’ (Vorgabe: OPENVSWITCH)
          Das Paketobjekt vom Open vSwitch.

 -- Scheme-Variable: pagekite-service-type
     Dies ist der Diensttyp für den PageKite-Dienst
     (https://memcached.org/), einem Angebot zur getunnelten
     Netzwerkumleitung, womit bloß auf localhost lauschende Server
     öffentlich erreichbar gemacht werden können. Mit PageKite werden
     die Server für andere erreichbar, selbst wenn Ihre Maschine nur
     über eine restriktive Firewall oder eine Netzwerkadressübersetzung
     („Network Address Translation“, NAT) ohne Portweiterleitung mit dem
     Internet verbunden ist. Der Wert dieses Dienstes ist ein
     ‘pagekite-configuration’-Verbundsobjekt.

     Hier ist ein Beispiel, wodurch die lokal laufenden HTTP- und
     SSH-Daemons zugänglich gemacht werden:

          (service pagekite-service-type
                   (pagekite-configuration
                     (kites '("http:@kitename:localhost:80:@kitesecret"
                              "raw/22:@kitename:localhost:22:@kitesecret"))
                     (extra-file "/etc/pagekite.rc")))

 -- Datentyp: pagekite-configuration
     Der Datentyp, der die Konfiguration von PageKite repräsentiert.

     ‘package’ (Vorgabe: PAGEKITE)
          Paketobjekt von PageKite.

     ‘kitename’ (Vorgabe: ‘#f’)
          PageKite-Name, um sich gegenüber dem Vordergrundserver zu
          authentisieren.

     ‘kitesecret’ (Vorgabe: ‘#f’)
          Das gemeinsame Geheimnis, das eine Authentisierung gegenüber
          dem Vordergrundserver ermöglicht. Wahrscheinlich sollten Sie
          es besser als Teil von ‘extra-file’ angeben.

     ‘frontend’ (Vorgabe: ‘#f’)
          Eine Verbindung zum angegebenen PageKite-Vordergrundserver
          herstellen statt zu dem Dienst von pagekite.net.

     ‘kites’ (Vorgabe: ‘'("http:@kitename:localhost:80:@kitesecret")’)
          Die Liste der zu benutzenden „Kites“ für Dienste. Nach Vorgabe
          wird der HTTP-Server auf Port 80 nach außen hin zugänglich
          gemacht. Dienste sind im Format
          ‘protokoll:kitename:rechnername:port:geheimnis’ anzugeben.

     ‘extra-file’ (Vorgabe: ‘#f’)
          Eine Konfigurationsdatei, die zusätzlich eingelesen werden
          soll. Es wird erwartet, dass Sie diese manuell erstellen.
          Benutzen Sie sie, wenn Sie zusätzliche Optionen angeben
          möchten und um gemeinsame Geheimnisse abseits von Guix’
          Zuständigkeitsbereich zu verwalten.

 -- Scheme-Variable: yggdrasil-service-type
     Der Diensttyp, um eine Verbindung mit dem Yggdrasil-Netzwerk
     (https://yggdrasil-network.github.io/) herzustellen, einer frühen
     Implementierungsstufe eines völlig Ende-zu-Ende-verschlüsselten
     IPv6-Netzwerks.

          Die Wegfindung im Yggdrasil-Netzwerk verläuft unabhängig vom
          Namen der Netzwerkknoten („Name-independent Routing“) und
          verwendet kryptografisch erzeugte Adressen. Durch die
          statische Adressierung können Sie dieselbe Adresse so lange
          weiterbenutzen, wie Sie möchten, selbst wenn Sie sich an einem
          anderen Ort befinden als vorher, und Sie können auch, wann
          immer Sie möchten, eine neue Adresse erzeugen (durch Erzeugung
          neuer Schlüssel). Siehe
          <https://yggdrasil-network.github.io/2018/07/28/addressing.html>

     Übergeben Sie einen Wert vom Typ ‘yggdrasil-configuration’, um ihn
     eine Verbindung zu öffentlichen und/oder lokalen
     Netzwerkteilnehmern („Peers“) herstellen zu lassen.

     Hier ist ein Beispiel für die Nutzung mit öffentlichen Peers und
     einer statischen Adresse. Die statischen Schlüssel zum Signieren
     und Verschlüsseln werden in ‘/etc/yggdrasil-private.conf’ definiert
     (dies ist die Vorgabe für ‘config-file’).

          ;; Teil des operating-system in der Betriebssystemdeklaration
          (service yggdrasil-service-type
                        (yggdrasil-configuration
                         (autoconf? #f) ;nur öffentliche Peers benutzen
                         (json-config
                         ;; nehmen Sie eine von
                         ;; https://github.com/yggdrasil-network/public-peers
                          '((peers . #("tcp://1.2.3.4:1337"))))
                         ;; /etc/yggdrasil-private.conf ist der Vorgabewert von config-file
                         ))
          # Beispielinhalt für /etc/yggdrasil-private.conf
          {
            # Ihr öffentlicher Schlüssel. Ihre Peers können Sie um
            # den Schlüssel bitten, um ihn in deren Konfiguration der
            # AllowedPublicKeys einzutragen.
            PublicKey: 64277…

            # Ihr privater Signierschlüssel. Geben Sie ihn NICHT weiter!
            PrivateKey: 5c750…
          }

 -- Datentyp: yggdrasil-configuration
     Repräsentiert die Konfiguration von Yggdrasil.

     ‘package’ (Vorgabe: ‘yggdrasil’)
          Paketobjekt von Yggdrasil.

     ‘json-config’ (Vorgabe: ‘'()’)
          Der Inhalt von ‘/etc/yggdrasil.conf’. Er wird mit
          ‘/etc/yggdrasil-private.conf’ zusammengelegt. Beachten Sie,
          dass diese Einstellungen im Guix-Store gespeichert werden, auf
          den alle Nutzer Zugriff haben. *Speichern Sie dort nicht Ihre
          privaten Schlüssel*. Siehe die Ausgabe von ‘yggdrasil
          -genconf’ für eine kurze Übersicht über gültige Schlüssel und
          ihre Vorgabewerte.

     ‘autoconf?’ (Vorgabe: ‘#f’)
          Ob der automatische Modus benutzt werden soll. Ihn zu
          aktivieren, bedeutet, dass Yggdrasil eine dynamische
          IP-Adresse benutzt und sich mit IPv6-Nachbarn verbindet.

     ‘log-level’ (Vorgabe: ‘'info’)
          Wie detailliert die Protokolle sein sollen. Schreiben Sie
          ‘'debug’ für einen höheren Detailgrad.

     ‘log-to’ (Vorgabe: ‘'stdout’)
          Wohin Protokolle geschickt werden. Die Vorgabe ist, dass der
          Dienst ein Protokoll seiner Standardausgabe in
          ‘/var/log/yggdrasil.log’ schreibt. Die Alternative ist
          ‘'syslog’, wodurch die Ausgabe an den laufenden syslog-Dienst
          geschickt wird.

     ‘config-file’ (Vorgabe: ‘"/etc/yggdrasil-private.conf"’)
          Wo die HJSON-Datei liegt, aus der sensible Daten geladen
          werden. Hier sollten private Schlüssel gespeichert werden,
          wodurch nicht nach jedem Neustart eine zufällige Adresse
          benutzt wird. Verwenden Sie ‘#f’ zum Deaktivieren. In dieser
          Datei festgelegte Optionen haben Vorrang vor ‘json-config’.
          Tragen Sie anfangs die Ausgabe von ‘yggdrasil -genconf’ ein.
          Um eine statische Adresse zu benutzen, löschen Sie alles außer
          den folgenden Optionen:

             • ‘EncryptionPublicKey’
             • ‘EncryptionPrivateKey’
             • ‘SigningPublicKey’
             • ‘SigningPrivateKey’

 -- Scheme-Variable: ipfs-service-type
     Der Diensttyp, um sich mit dem IPFS-Netzwerk (https://ipfs.io) zu
     verbinden, einem weltweiten, versionierten, von einem
     Netzwerkteilnehmer zum anderen („peer-to-peer“) verteilten
     Dateisystem. Geben Sie ein ‘ipfs-configuration’-Verbundsobjekt an,
     um die für den Netzwerkzugang (Gateway) und die
     Anwendungsschnittstelle (API) verwendeten Ports zu ändern.

     Hier ist eine Beispielkonfiguration, um nicht standardmäßige Ports
     einzusetzen:

          (service ipfs-service-type
                   (ipfs-configuration
                    (gateway "/ip4/127.0.0.1/tcp/8880")
                    (api "/ip4/127.0.0.1/tcp/8881")))

 -- Datentyp: ipfs-configuration
     Repräsentiert die Konfiguration des IPFS.

     ‘package’ (Vorgabe: ‘go-ipfs’)
          Paketobjekt von IPFS.

     ‘gateway’ (Vorgabe: ‘"/ip4/127.0.0.1/tcp/8082"’)
          Die Adresse des Netzwerkzugangs im Format einer Multiadresse
          („multiaddress“).

     ‘api’ (Vorgabe: ‘"/ip4/127.0.0.1/tcp/5001"’)
          Die Adresse des API-Endpunkts im Format einer Multiadresse
          („multiaddress“).

 -- Scheme-Variable: keepalived-service-type
     Dies ist der Diensttyp für die Software Keepalived
     (https://www.keepalived.org/) für virtuelle Router, ‘keepalived’.
     Sein Wert muss ein ‘keepalived-configuration’-Verbundsobjekt sein,
     wie in diesem Beispiel für die Maschine erster Wahl (Master):

          (service keepalived-service-type
                   (keepalived-configuration
                     (config-file (local-file "keepalived-master.conf"))))

     Dabei enthält ‘keepalived-master.conf’:

          vrrp_instance meine-gruppe {
            state MASTER
            interface enp9s0
            virtual_router_id 100
            priority 100
            unicast_peer { 10.0.0.2 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }

     Für die Ersatzmaschine (Backup):

          (service keepalived-service-type
                   (keepalived-configuration
                    (config-file (local-file "keepalived-backup.conf"))))

     Dort enthält ‘keepalived-backup.conf’:

          vrrp_instance meine-gruppe {
            state BACKUP
            interface enp9s0
            virtual_router_id 100
            priority 99
            unicast_peer { 10.0.0.3 }
            virtual_ipaddress {
              10.0.0.4/24
            }
          }


File: guix.de.info,  Node: Unbeaufsichtigte Aktualisierungen,  Next: X Window,  Prev: Netzwerkdienste,  Up: Dienste

12.9.6 Unbeaufsichtigte Aktualisierungen
----------------------------------------

Guix stellt einen Dienst zum Durchführen _unbeaufsichtigter
Aktualisierungen_ zur Verfügung: Das System rekonfiguriert sich selbst
in regelmäßigen Abständen mit der neuesten Version von Guix. Guix System
verfügt über mehrere Eigenschaften, durch die unbeaufsichtigtes
Aktualisieren zu einer sicheren Angelegenheit wird:

   • Aktualisierungen sind transaktionell: Entweder ist die
     Aktualisierung erfolgreich oder sie schlägt fehl, aber Sie können
     sich nicht in einem Systemzustand „dazwischen“ wiederfinden.
   • Ein Protokoll über die Aktualisierungen liegt vor – Sie können es
     mit ‘guix system list-generations’ einsehen – und Rücksetzungen auf
     vorherige Generationen sind möglich, für den Fall, dass das System
     nach der Aktualisierung nicht mehr funktioniert oder sich nicht wie
     gewollt verhält.
   • Der Code für Kanäle wird authentifiziert, wodurch Sie sich sicher
     sein können, dass Sie nur unverfälschten Code ausführen (siehe
     *note Kanäle::).
   • ‘guix system reconfigure’ verweigert ein Herabstufen auf alte
     Versionen; das macht “Herabstufungsangriffe” („Downgrade Attacks“)
     unmöglich.

   Um unbeaufsichtigte Aktualisierungen einzurichten, fügen Sie eine
Instanz des Diensttyps ‘unattended-upgrade-service-type’ wie im
folgenden Beispiel zur Liste Ihrer Betriebssystemdienste hinzu:

     (service unattended-upgrade-service-type)

   Durch die Vorgabeeinstellungen hat dies wöchentliche Aktualisierungen
zur Folge, jeden Sonntag um Mitternacht. Sie müssen keine
Betriebssystemkonfigurationsdatei angeben:
‘/run/current-system/configuration.scm’ wird benutzt, wodurch immer Ihre
letzte Konfiguration weiter verwendet wird – siehe den *note
provenance-service-type:: für mehr Informationen über diese Datei.

   Mehrere Dinge können konfiguriert werden, insbesondere die
Zeitabstände zwischen Aktualisierungen und die Dienste (also die
Daemons), die nach Abschluss neu gestartet werden sollen. Wenn die
Aktualisierung erfolgreich ist, dann stellt das System sicher, dass
Systemgenerationen mit einem Alter größer als ein festgelegter
Schwellwert gelöscht werden, wie bei ‘guix system delete-generations’.
Siehe die folgende Referenz der Konfigurationsmöglichkeiten für Näheres.

   Um sicherzugehen, dass unbeaufsichtigte Aktualisierungen auch
tatsächlich durchgeführt werden, können Sie ‘guix system describe’
ausführen. Um Fehlschläge zu untersuchen, schauen Sie in die
Protokolldatei für unbeaufsichtigte Aktualisierungen (siehe unten).

 -- Scheme-Variable: unattended-upgrade-service-type
     Dies ist der Diensttyp für unbeaufsichtigte Aktualisierungen. Damit
     wird ein mcron-Auftrag eingerichtet (siehe *note Geplante
     Auftragsausführung::), der ‘guix system reconfigure’ mit der
     neuesten Version der angegebenen Kanäle ausführt.

     Sein Wert muss ein
     ‘unattended-upgrade-configuration’-Verbundsobjekt sein (siehe
     unten).

 -- Datentyp: unattended-upgrade-configuration
     Dieser Datentyp repräsentiert die Konfiguration des Dienstes für
     unbeaufsichtigte Aktualisierungen. Folgende Felder stehen zur
     Verfügung:

     ‘schedule’ (Vorgabe: ‘"30 01 * * 0"’)
          Dies ist der Aktualisierungsplan, ausgedrückt als ein
          G-Ausdruck mit einem mcron-Auftragsplan (siehe *note
          mcron-Auftragsspezifikationen: (mcron)Guile Syntax.).

     ‘channels’ (Vorgabe: ‘#~%default-channels’)
          Dieser G-Ausdruck gibt an, welche Kanäle für die
          Aktualisierung benutzt werden sollen (siehe *note Kanäle::).
          Nach Vorgabe wird die Spitze des offiziellen ‘guix’-Kanals
          benutzt.

     ‘operating-system-file’ (Vorgabe: ‘"/run/current-system/configuration.scm"’)
          Dieses Feld gibt an, welche Betriebssystemkonfigurationsdatei
          verwendet werden soll. Nach Vorgabe wird die
          Konfigurationsdatei der aktuellen Konfiguration
          wiederverwendet.

          Es gibt jedoch Fälle, wo es nicht ausreicht, auf
          ‘/run/current-system/configuration.scm’ zu verweisen, zum
          Beispiel weil sich diese mit ‘local-file’ oder Ähnlichem auf
          weitere Dateien wie öffentliche SSH-Schlüssel, andere
          Konfigurationsdateien usw. bezieht. Dann empfehlen wir, etwas
          wie hier zu schreiben:

               (unattended-upgrade-configuration
                 (operating-system-file
                   (file-append (local-file "." "config-dir" #:recursive? #t)
                                "/config.scm")))

          Das bewirkt, dass das ganze aktuelle Verzeichnis in den Store
          importiert wird und Bezug auf die ‘config.scm’ darin genommen
          wird. So funktioniert die Nutzung von ‘local-file’ in
          ‘config.scm’ wie erwartet. Siehe *note G-Ausdrücke:: für
          Informationen zu ‘local-file’ und ‘file-append’.

     ‘services-to-restart’ (Vorgabe: ‘'(mcron)’)
          Dieses Feld gibt die Shepherd-Dienste an, die nach Abschluss
          der Aktualisierung neu gestartet werden sollen.

          Die Dienste werden direkt nach Abschluss neu gestartet, so wie
          es ‘herd restart’ tun würde. Dadurch wird sichergestellt, dass
          die neueste Version läuft – bedenken Sie, dass ‘guix system
          reconfigure’ nach Vorgabe nur diejenigen Dienste neu startet,
          die zurzeit nicht laufen, was einem konservativen Verhalten
          entspricht: Störungen werden minimiert, aber veraltete Dienste
          laufen weiter.

          Führen Sie ‘herd status’ aus, um herauszufinden, welche
          Dienste Sie neu starten lassen können. Siehe *note Dienste::
          für allgemeine Informationen über Dienste. Oft würde man
          Dienste wie unter anderem ‘ntpd’ und ‘ssh-daemon’ neu starten
          lassen.

          Nach Vorgabe wird nur der ‘mcron’-Dienst neu gestartet.
          Dadurch wird beim nächsten Mal sicherlich die neueste Version
          des Auftrags für unbeaufsichtigte Aktualisierungen benutzt.

     ‘system-expiration’ (Vorgabe: ‘(* 3 30 24 3600)’)
          Nach wie vielen Sekunden Systemgenerationen auslaufen.
          Systemgenerationen, die dieses Alter überschritten haben,
          werden über ‘guix system delete-generations’ gelöscht, nachdem
          eine Aktualisierung abgeschlossen wurde.

               Anmerkung: Der Dienst für unbeaufsichtigte
               Aktualisierungen lässt jedoch den Müllsammler nicht
               laufen. Sie möchten wahrscheinlich Ihren eigenen
               mcron-Auftrag einrichten, der regelmäßig ‘guix gc’
               ausführt.

     ‘maximum-duration’ (Vorgabe: ‘3600’)
          Wie viele Sekunden eine Aktualisierung höchstens dauern darf.
          Nach dieser Zeit wird die Aktualisierung abgebrochen.

          Diese Begrenzung dient vor allem dazu, zu verhindern, dass
          „die ganze Welt“ neu erstellt oder neu heruntergeladen wird.

     ‘log-file’ (Vorgabe: ‘"/var/log/unattended-upgrade.log"’)
          Die Datei, in die über unbeaufsichtigte Aktualisierungen
          Protokoll geführt wird.


File: guix.de.info,  Node: X Window,  Next: Druckdienste,  Prev: Unbeaufsichtigte Aktualisierungen,  Up: Dienste

12.9.7 X Window
---------------

Unterstützung für das grafische Anzeigesystem X Window – insbesondere
Xorg – wird vom Modul ‘(gnu services xorg)’ zur Verfügung gestellt.
Beachten Sie, dass es _keine_ ‘xorg-service’-Prozedur gibt, sondern der
X-Server durch eine Software zur “Anmeldeverwaltung” gestartet wird (ein
„Login Manager“). Vorgegeben ist, dass zur Anzeigenverwaltung der GNOME
Display Manager (GDM) benutzt wird.

   GDM ermöglicht es seinen Nutzern natürlich auch, sich bei anderen
Fensterverwaltungssystemen und Arbeitsumgebungen als GNOME anzumelden.
Wer GNOME benutzt, kann Funktionalitäten wie eine automatische
Bildschirmsperre nur verwenden, wenn die Anmeldung über GDM läuft.

   Um X11 zu benutzen, müssen Sie ein Programme zur “Fensterverwaltung”
(„Window-Manager“) oder mehrere davon installieren – zum Beispiel die
Pakete ‘windowmaker’ oder ‘openbox’ –, vorzugsweise indem Sie sie in das
‘packages’-Feld Ihrer Betriebssystemdefinition eintragen (siehe *note
global sichtbare Pakete: „operating-system“-Referenz.).

   GDM hat auch Unterstützung für Wayland: Es kann selbst als
Wayland-Client gestartet werden und Wayland-Sitzungen starten. Ersteres
ist auch die Voraussetzung für Letzteres. Um den Wayland-Modus zu
aktivieren, setzen Sie ‘wayland?’ auf ‘#t’ in der ‘gdm-configuration’.

 -- Scheme-Variable: gdm-service-type
     Dies ist der Diensttyp für den GNOME Desktop Manager
     (https://wiki.gnome.org/Projects/GDM/), GDM, ein Programm zur
     Verwaltung grafischer Anzeigeserver, das grafische
     Benutzeranmeldungen durchführt. Sein Wert muss eine
     ‘gdm-configuration’ sein (siehe unten).

     GDM liest die in den ‘.desktop’-Dateien in
     ‘/run/current-system/profile/share/xsessions’ (bei X11-Sitzungen)
     und nach ‘/run/current-system/profile/share/wayland-sessions’ (bei
     Wayland-Sitzungen) befindlichen “Sitzungstypen” ein und stellt
     diese seinen Nutzern zur Auswahl auf dem Anmeldebildschirm. Pakete
     wie ‘gnome’, ‘xfce’, ‘i3’ und ‘sway’ stellen ‘.desktop’-Dateien
     bereit; wenn diese Pakete zu den systemweit verfügbaren Paketen
     hinzugefügt werden, werden diese automatisch auf dem
     Anmeldebildschirm angezeigt.

     Des Weiteren werden ‘~/.xsession’-Dateien berücksichtigt. Wenn es
     vorhanden ist, muss ‘~/.xsession’ eine ausführbare Datei sein, die
     ein Programm zur Fensterverwaltung und/oder andere X-Clients
     startet.

 -- Datentyp: gdm-configuration
     ‘auto-login?’ (Vorgabe: ‘#f’)
     ‘default-user’ (Vorgabe: ‘#f’)
          Wenn ‘auto-login?’ falsch ist, zeigt GDM einen
          Anmeldebildschirm an.

          Wenn ‘auto-login?’ wahr ist, meldet GDM automatisch den in
          ‘default-user’ angegebenen voreingestellten Benutzer an.

     ‘auto-suspend?’ (Vorgabe: ‘#t’)
          Wenn es wahr ist, wird GDM automatisch das System in den
          Bereitschaftsmodus schalten, bis wieder jemand persönlich
          anwesend ist und es aus dem Arbeitsspeicher (RAM) wieder
          aufwecken kann. Wenn geplant ist, die Maschine für entfernte
          Sitzungen oder SSH zu benutzen, sollte es auf falsch gesetzt
          werden, damit GDM nicht entfernte Sitzungen unterbricht oder
          die Verfügbarkeit der Maschine stört.

     ‘debug?’ (Vorgabe: ‘#f’)
          Wenn es wahr ist, schreibt GDM Informationen zur Fehlersuche
          in sein Protokoll.

     ‘gnome-shell-assets’ (Vorgabe: …)
          Liste der GNOME-Shell-„Assets“, die GDM benötigt, d.h.
          Symbolthema, Schriftarten etc.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘x-session’ (Vorgabe: ‘(xinitrc)’)
          Das Skript, das vor dem Starten einer X-Sitzung ausgeführt
          werden soll.

     ‘xdmcp?’ (Vorgabe: ‘#f’)
          Wenn dies auf wahr gesetzt ist, wird das X Display Manager
          Control Protocol (XDMCP) aktiviert. Sie sollten es nur in
          vertrauenswürdigen Umgebungen aktivieren, denn das Protokoll
          ist _nicht_ sicher. Wenn es aktiviert ist, lauscht GDM auf
          XDMCP-Anfragen auf UDP-Port 177.

     ‘dbus-daemon’ (Vorgabe: ‘dbus-daemon-wrapper’)
          Der Dateiname der ausführbaren Datei des
          ‘dbus-daemon’-Programms.

     ‘gdm’ (Vorgabe: ‘gdm’)
          Das GDM-Paket, was benutzt werden soll.

     ‘wayland?’ (Vorgabe: ‘#f’)
          Wenn es wahr ist, wird Wayland in GDM aktiviert. Das ist
          nötig, um Wayland-Sitzungen zu benutzen.

     ‘wayland-session’ (Vorgabe: ‘gdm-wayland-session-wrapper’)
          Das Wrapper-Skript für Wayland-Sitzungen, was benutzt werden
          soll. Es ist notwendig, um die Umgebung zu starten.

 -- Scheme-Variable: slim-service-type
     Dies ist der Diensttyp für die schlanke grafische
     Anmeldungsverwaltung SLiM für X11.

     Wie GDM liest SLiM die in ‘.desktop’-Dateien beschriebenen
     Sitzungstypen aus und ermöglicht es Nutzern, eine Sitzung darunter
     im Anmeldebildschirm durch Drücken von ‘F1’ auszuwählen. Auch
     ‘~/.xsession’-Dateien können benutzt werden.

     Anders als GDM wird durch SLiM die Benutzersitzung nicht auf einem
     anderen virtuellen Terminal gestartet, nachdem man sich anmeldet.
     Die Folge davon ist, dass man nur eine einzige grafische Sitzung
     starten kann. Wenn Sie mehrere, gleichzeitig laufende grafische
     Sitzungen starten können möchten, müssen Sie mehrere SLiM-Dienste
     zu ihren Systemdiensten hinzufügen. Das folgende Beispiel zeigt,
     wie Sie den vorgegebenen GDM-Dienst durch zwei SLiM-Dienste auf
     tty7 und tty8 ersetzen.

          (use-modules (gnu services)
                       (gnu services desktop)
                       (gnu services xorg))

          (operating-system
            ;; …
            (services (cons* (service slim-service-type (slim-configuration
                                                         (display ":0")
                                                         (vt "vt7")))
                             (service slim-service-type (slim-configuration
                                                         (display ":1")
                                                         (vt "vt8")))
                             (modify-services %desktop-services
                               (delete gdm-service-type)))))

 -- Datentyp: slim-configuration
     Datentyp, der die Konfiguration des ‘slim-service-type’
     repräsentiert.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#t’)
          Ob Anmeldungen mit leeren Passwörtern möglich sein sollen.

     ‘gnupg?’ (Vorgabe: ‘#f’)
          Wenn dies aktiviert ist, wird durch ‘pam-gnupg’ automatisch
          versucht, die GPG-Schlüssel des Nutzers über ‘gpg-agent’ mit
          dem Anmeldepasswort zu entsperren. Für jeden Schlüssel, der
          entsperrt werden soll, müssen Sie den Keygrip, der den
          Schlüssel bezeichnet, in ‘~/.pam-gnupg’ schreiben; er kann mit
          ‘gpg -K --with-keygrip’ erfragt werden. Damit das
          funktioniert, müssen Sie Presetting von Passphrasen
          aktivieren, indem Sie ‘allow-preset-passphrase’ in
          ‘~/.gnupg/gpg-agent.conf’ hinzufügen.

     ‘auto-login?’ (Vorgabe: ‘#f’)
     ‘default-user’ (Vorgabe: ‘""’)
          Wenn ‘auto-login?’ falsch ist, zeigt SLiM einen
          Anmeldebildschirm an.

          Wenn ‘auto-login?’ wahr ist, meldet SLiM automatisch den in
          ‘default-user’ angegebenen voreingestellten Benutzer an.

     ‘theme’ (Vorgabe: ‘%default-slim-theme’)
     ‘theme-name’ (Vorgabe: ‘%default-slim-theme-name’)
          Das grafische Thema, was benutzt werden soll, mit seinem
          Namen.

     ‘auto-login-session’ (Vorgabe: ‘#f’)
          Wenn es wahr ist, muss es den Namen der ausführbaren Datei
          angeben, die als voreingestellte Sitzung gestartet werden
          soll – z.B. ‘(file-append windowmaker "/bin/windowmaker")’.

          Wenn es falsch ist, wird eine von einer der ‘.desktop’-Dateien
          in ‘/run/current-system/profile’ und ‘~/.guix-profile’
          beschriebenen Sitzungen benutzt.

               Anmerkung: Sie müssen mindestens ein
               Fensterverwaltungsprogramm in das Systemprofil oder Ihr
               Benutzerprofil installieren, ansonsten können Sie sich,
               sofern ‘auto-login-session’ falsch ist, nicht anmelden.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘display’ (Vorgabe: ‘":0"’)
          Die Anzeige, auf welcher der Xorg-Server für grafische
          Oberflächen gestartet werden soll.

     ‘vt’ (Vorgabe: ‘"vt7"’)
          Das virtuelle Terminal, auf dem der Xorg-Server für grafische
          Oberflächen gestartet werden soll.

     ‘xauth’ (Vorgabe: ‘xauth’)
          Das XAuth-Paket, das benutzt werden soll.

     ‘shepherd’ (Vorgabe: ‘shepherd’)
          Das Shepherd-Paket, das benutzt wird, wenn ‘halt’ und ‘reboot’
          aufgerufen werden.

     ‘sessreg’ (Vorgabe: ‘sessreg’)
          Das sessreg-Paket, das zum Registrieren der Sitzung benutzt
          werden soll.

     ‘slim’ (Vorgabe: ‘slim’)
          Das zu benutzende SLiM-Paket.

 -- Scheme-Variable: %default-theme
 -- Scheme-Variable: %default-theme-name
     Das vorgegebene Thema für das Aussehen von SLiM mit seinem Namen.

 -- Scheme-Variable: sddm-service-type
     Dies ist der Typ des Dienstes, mit dem die SDDM-Anzeigenverwaltung
     (https://github.com/sddm/sddm) gestartet wird. Sein Wert muss ein
     ‘sddm-configuration’-Verbundsobjekt sein (siehe unten).

     Hier ist ein Beispiel für seine Verwendung:

          (service sddm-service-type
                   (sddm-configuration
                     (auto-login-user "alice")
                     (auto-login-session "xfce.desktop")))

 -- Datentyp: sddm-configuration
     Dieser Datentyp repräsentiert die Konfiguration der
     SDDM-Anmeldeverwaltung. Die verfügbaren Felder sind:

     ‘sddm’ (Vorgabe: ‘sddm’)
          Das SDDM-Paket, was benutzt werden soll.

     ‘display-server’ (Vorgabe: "x11")
          Einen Anzeigeserver auswählen, der für den Anmeldebildschirm
          verwendet werden soll. Zulässige Werte sind ‘"x11"’ oder
          ‘"wayland"’.

     ‘numlock’ (Vorgabe: "on")
          Gültige Werte sind ‘"on"’, ‘"off"’ oder ‘"none"’.

     ‘halt-command’ (Vorgabe: ‘#~(string-append #$shepherd "/sbin/halt")’)
          Der Befehl, der zum Anhalten des Systems ausgeführt wird.

     ‘reboot-command’ (Vorgabe: ‘#~(string-append #$shepherd "/sbin/reboot")’)
          Der Befehl, der zum Neustarten des Systems ausgeführt wird.

     ‘theme’ (Vorgabe: "maldives")
          Welches Thema für das Aussehen benutzt werden soll. Mit SDDM
          mitgelieferte Themen sind ‘"elarun"’, ‘"maldives"’ und
          ‘"maya"’.

     ‘themes-directory’ (Vorgabe: "/run/current-system/profile/share/sddm/themes")
          Verzeichnis, wo Themen gefunden werden können.

     ‘faces-directory’ (Vorgabe: "/run/current-system/profile/share/sddm/faces")
          Verzeichnis, wo Avatarbilder gefunden werden können.<

     ‘default-path’ (Vorgabe: "/run/current-system/profile/bin")
          Welcher PATH voreingestellt sein soll.

     ‘minimum-uid’ (Vorgabe: 1000)
          Der kleinste Benutzeridentifikator (UID), mit dem Benutzer in
          SDDM angezeigt werden und sich anmelden können.

     ‘maximum-uid’ (Vorgabe: 2000)
          Der größte Benutzeridentifikator (UID), mit dem Benutzer in
          SDDM angezeigt werden.<

     ‘remember-last-user?’ (Vorgabe: #t)
          Den zuletzt ausgewählten Benutzer voreinstellen.

     ‘remember-last-session?’ (Vorgabe: #t)
          Die zuletzt ausgewählte Sitzung voreinstellen.

     ‘hide-users’ (Vorgabe: "")
          Benutzernamen, die in SDDM _nicht_ sichtbar sein sollen.

     ‘hide-shells’ (Vorgabe: ‘#~(string-append #$shadow "/sbin/nologin")’)
          Benutzerkonten, für die als Shell eine davon eingestellt ist,
          wird SDDM _nicht_ anzeigen.

     ‘session-command’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/wayland-session")’)
          Das Skript, das vor dem Starten einer Wayland-Sitzung
          ausgeführt werden soll.

     ‘sessions-directory’ (Vorgabe: "/run/current-system/profile/share/wayland-sessions")
          Verzeichnis, das nach .desktop-Dateien zum Starten von
          Wayland-Sitzungen durchsucht wird.

     ‘xorg-configuration’ (Vorgabe: ‘(xorg-configuration)’)
          Xorg-Server für grafische Oberflächen konfigurieren.

     ‘xauth-path’ (Vorgabe: ‘#~(string-append #$xauth "/bin/xauth")’)
          Pfad von xauth.

     ‘xephyr-path’ (Vorgabe: ‘#~(string-append #$xorg-server "/bin/Xephyr")’)
          Pfad von Xephyr.

     ‘xdisplay-start’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/Xsetup")’)
          Skript, das nach dem Starten vom Xorg-Server ausgeführt wird.

     ‘xdisplay-stop’ (Vorgabe: ‘#~(string-append #$sddm "/share/sddm/scripts/Xstop")’)
          Skript, das vor dem Stoppen vom Xorg-Server ausgeführt wird.

     ‘xsession-command’ (Vorgabe: ‘xinitrc’)
          Das Skript, das vor dem Starten einer X-Sitzung ausgeführt
          werden soll.

     ‘xsessions-directory’ (Vorgabe: "/run/current-system/profile/share/xsessions")
          Verzeichnis, das nach .desktop-Dateien zum Starten von
          X-Sitzungen durchsucht wird.<

     ‘minimum-vt’ (Vorgabe: 7)
          Das kleinste virtuelle Terminal, das benutzt werden darf.

     ‘auto-login-user’ (Vorgabe: "")
          Das Benutzerkonto, mit dem man automatisch angemeldet wird.
          Wenn es leer ist, gibt es keine automatische Anmeldung.

     ‘auto-login-session’ (Vorgabe: "")
          Gibt den Namen der ‘.desktop’-Datei an, die bei automatischer
          Anmeldung für die Sitzung verwendet wird, oder eine leere
          Zeichenkette.

     ‘relogin?’ (Vorgabe: #f)
          Ob nach dem Abmelden neu angemeldet werden soll.

 -- Scheme-Variable: lightdm-service-type
     Dies ist der Typ des Dienstes, mit dem die
     LightDM-Anzeigenverwaltung (https://github.com/canonical/lightdm)
     ausgeführt wird. Sein Wert muss ein
     ‘lightdm-configuration’-Verbundsobjekt sein. Dieses wird weiter
     unten beschrieben. LightDM zeichnet sich dadurch aus, dass er mit
     TigerVNC integriert ist und man so leichten Fernzugriff über das
     XDMCP-Protokoll einrichten kann, so dass man von außen mit einem
     entfernten Rechner eine Sitzung anmelden kann.

     Für die Grundeinstellung geben Sie einfach an:

          (service lightdm-service-type)

     Ein zielgerichteteres Beispiel wäre etwa, die VNC-Fähigkeit und
     weitere Funktionalitäten zusammen mit ausführlicher Protokollierung
     zu aktivieren. Das ginge so:

          (service lightdm-service-type
                   (lightdm-configuration
                    (allow-empty-passwords? #t)
                    (xdmcp? #t)
                    (vnc-server? #t)
                    (vnc-server-command
                     (file-append tigervnc-server "/bin/Xvnc"
                                  "  -SecurityTypes None"))
                    (seats
                     (list (lightdm-seat-configuration
                            (name "*")
                            (user-session "ratpoison"))))))

 -- Datentyp: lightdm-configuration
     Verfügbare ‘lightdm-configuration’-Felder sind:

     ‘lightdm’ (Vorgabe: ‘lightdm’) (Typ: dateiartig)
          Das zu benutzende lightdm-Paket.

     ‘allow-empty-passwords?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob man sich auch bei Benutzerkonten, die ein leeres Passwort
          haben, anmelden kann.

     ‘debug?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ausführliche Ausgaben schreiben.

     ‘xorg-configuration’ (Typ: xorg-configuration)
          Eine Konfiguration des Xorg-Servers, aus der das Start-Skript
          für den Xorg-Server erzeugt wird. Sie können für jeden Seat
          mit dem Feld ‘xserver-command’ des
          ‘<lightdm-seat-configuration>’-Verbunds genauere Einstellungen
          vornehmen, wenn Sie möchten.

     ‘greeters’ (Typ: Liste-von-„greeter-configuration“)
          Die LightDM-Greeter-Konfigurationen, welche die zu benutzenden
          Greeter festlegen.

     ‘seats’ (Typ: Liste-von-„seat-configuration“)
          Die Konfigurationen der „Seats“. Ein Seat in LightDM
          entspricht ungefähr einem Benutzer.

     ‘xdmcp?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob ein XDMCP-Server auf UDP-Port 177 lauschen soll.

     ‘xdmcp-listen-address’ (Typ: Vielleicht-Zeichenkette)
          Der Rechnername oder die IP-Adresse, wofür der XDMCP-Server
          auf eingehende Verbindungen lauscht. Wird nichts angegeben,
          wird auf allen verfügbaren Rechnernamen bzw. IP-Adressen
          gelauscht.

     ‘vnc-server?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Ob ein VNC-Server gestartet werden soll.

     ‘vnc-server-command’ (Typ: dateiartig)
          Welcher Xvnc-Befehl für den VNC-Server benutzt werden soll. So
          können zusätzliche, anderweitig unerreichbare Optionen dem
          Befehl mitgegeben werden. Zum Beispiel können Sie dessen
          Sicherheitsmaßnahmen abschalten:

               (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
                                                " -SecurityTypes None" ))

          Oder Sie können eine Passwortdatei für den klassischen
          (unsicheren) Authentifizierungsmechanismus VncAuth festlegen:

               (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
                                                " -PasswordFile /var/lib/lightdm/.vnc/passwd"))

          Die Passwortdatei sollte man manuell erzeugen mit dem Befehl
          ‘vncpasswd’. Beachten Sie, dass LightDM neue Sitzungen für
          VNC-Nutzer anlegt, deshalb müssen sich diese genauso
          authentisieren wie lokale Benutzer.

     ‘vnc-server-listen-address’ (Typ: Vielleicht-Zeichenkette)
          Auf welchem Rechnernamen oder welcher IP-Adresse der
          VNC-Server auf eingehende Verbindungen lauscht. Wird nichts
          angegeben, wird auf allen Rechnernamen und Adressen gelauscht.

     ‘vnc-server-port’ (Vorgabe: ‘5900’) (Typ: Zahl)
          Die TCP-Portnummer, auf der der VNC-Server lauschen soll.

     ‘extra-config’ (Vorgabe: ‘()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an LightDMs
          Konfigurationsdatei angehängt werden.

 -- Datentyp: lightdm-gtk-greeter-configuration
     Verfügbare ‘lightdm-gtk-greeter-configuration’-Felder sind:

     ‘lightdm-gtk-greeter’ (Vorgabe: ‘lightdm-gtk-greeter’) (Typ: dateiartig)
          Das „lightdm-gtk-greeter“-Paket, was benutzt werden soll.

     ‘assets’  
          (Vorgabe: ‘(adwaita-icon-theme
          gnome-themes-extrahicolor-icon-theme)’)  (Typ:
          Liste-von-Dateiartigen) Die Liste von Paketen, die zum Greeter
          dazugehören, z.B. Pakete mit Symbolthemen, die deren Aussehen
          bestimmen.

     ‘theme-name’ (Vorgabe: ‘"Adwaita"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Themas.

     ‘icon-theme-name’ (Vorgabe: ‘\"Adwaita\"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Symbolthemas.

     ‘cursor-theme-name’ (Vorgabe: ‘\"Adwaita\"’) (Typ: Zeichenkette)
          Der Name des zu benutzenden Zeigerthemas.

     ‘cursor-theme-size’ (Vorgabe: ‘16’) (Typ: Zahl)
          Die Größe, die für das Zeigerthema benutzt wird.

     ‘allow-debugging?’ (Typ: Vielleicht-Boolescher-Ausdruck)
          Setzen Sie es auf #t, wenn Sie die
          Fehlersuch-Ausführlichkeitsstufe aktivieren möchten.

     ‘background’ (Typ: dateiartig)
          Welches Hintergrundbild benutzt werden soll.

     ‘at-spi-enabled?’ (Vorgabe: ‘#f’) (Typ: Boolescher-Ausdruck)
          Funktionen zur Barrierefreiheit aktivieren. Dazu wird AT-SPI
          bereitgestellt, eine Schnittstelle für Assistenzprogramme
          (Assistive Technology Service Provider Interface).

     ‘a11y-states’  
          (Vorgabe: ‘(contrast font keyboard reader)’) (Typ:
          Liste-von-Barrierefreiheiten) Welche Funktionen zur
          Barrierefreiheit aktiviert sein sollen. Erwartet wird eine
          Liste von Symbolen.

     ‘reader’ (Typ: Vielleicht-dateiartig)
          Der Befehl, um einen Bildschirmleser zu starten.

     ‘extra-config’ (Vorgabe: ‘()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an die
          Konfigurationsdatei des LightDM GTK Greeter angehängt werden.

 -- Datentyp: lightdm-seat-configuration
     Verfügbare ‘lightdm-seat-configuration’-Felder sind:

     ‘name’ (Typ: Seat-Name)
          Der Name des Seats. Wenn ein Sternchen (*) im Namen des Seats
          angegeben wird, wirkt sich die Seat-Konfiguration auf alle
          passenden Seat-Namen aus.

     ‘user-session’ (Typ: Vielleicht-Zeichenkette)
          Welche Sitzung voreingestellt wird. Der Name der Sitzung muss
          eine in Kleinbuchstaben geschriebene Zeichenkette sein wie
          ‘"gnome"’, ‘"ratpoison"’ und so weiter.

     ‘type’ (Vorgabe: ‘local’) (Typ: Seat-Typ)
          Um welchen Typ von Seat es sich handelt, entweder lokal
          (‘local’) oder als Fernverbindung (‘xremote’).

     ‘autologin-user’ (Typ: Vielleicht-Zeichenkette)
          Der Name des Benutzers, als der man automatisch angemeldet
          wird.

     ‘greeter-session’  
          (Vorgabe: ‘lightdm-gtk-greeter’) (Typ: Greeter-Sitzung) Welche
          Greeter-Sitzung geöffnet werden soll, angegeben als Symbol.
          Derzeit wird nur ‘lightdm-gtk-greeter’ unterstützt.

     ‘xserver-command’ (Typ: Vielleicht-dateiartig)
          Welcher Xorg-Server-Befehl ausgeführt wird.

     ‘session-wrapper’ (Typ: dateiartig)
          Der xinitrc-Wrapper für die Sitzung.

     ‘extra-config’ (Vorgabe: ‘()’) (Typ: Liste-von-Zeichenketten)
          Zusätzliche Konfigurationswerte, die an den Abschnitt zur
          Konfiguration des Seats angehängt werden.

 -- Datentyp: xorg-configuration
     Dieser Datentyp repräsentiert die Konfiguration des grafischen
     Anzeigeservers Xorg. Beachten Sie, dass es keinen Xorg-Dienst gibt,
     sondern der X-Server von einer „Anzeigenverwaltung“ wie GDM, SDDM,
     LightDM oder SLiM gestartet wird. Deswegen wird aus der
     Konfiguration dieser Anzeigenverwaltungen ein
     ‘xorg-configuration’-Verbundsobjekt konstruiert.

     ‘modules’ (Vorgabe: ‘%default-xorg-modules’)
          Dies ist eine Liste von “Modulpaketen”, die vom Xorg-Server
          geladen werden – z.B. ‘xf86-video-vesa’, ‘xf86-input-keyboard’
          und so weiter.

     ‘fonts’ (Vorgabe: ‘%default-xorg-fonts’)
          Dies ist eine Liste von Verzeichnissen mit Schriftarten, die
          zum Schriftartensuchpfad („Font Path“) des Servers hinzugefügt
          werden.

     ‘drivers’ (Vorgabe: ‘'()’)
          Dies muss entweder die leere Liste sein – in diesem Fall wird
          durch Xorg automatisch ein Grafiktreiber ausgewählt – oder
          eine Liste von Treibernamen, die in dieser Reihenfolge
          durchprobiert werden – z.B. ‘("modesetting" "vesa")’.

     ‘resolutions’ (Vorgabe: ‘'()’)
          Wenn ‘resolutions’ die leere Liste ist, wird automatisch durch
          Xorg eine passende Bildschirmauflösung gewählt. Andernfalls
          muss hier eine Liste von Bildschirmauflösungen angegeben
          werden – z.B. ‘((1024 768) (640 480))’.

     ‘keyboard-layout’ (Vorgabe: ‘#f’)
          Wenn es auf ‘#f’ gesetzt ist, benutzt Xorg die voreingestellte
          Tastaturbelegung, also normalerweise US English („QWERTY“) für
          eine PC-Tastatur mit 105 Tasten.

          Andernfalls muss hier ein ‘keyboard-layout’-Objekt stehen, das
          angibt, welche Tastaturbelegung aktiv sein soll, während Xorg
          läuft. Siehe *note Tastaturbelegung:: für mehr Informationen,
          wie die Tastaturbelegung angegeben werden kann.

     ‘extra-config’ (Vorgabe: ‘'()’)
          Dies ist eine Liste von Zeichenketten oder Objekten, die an
          die Konfigurationsdatei angehängt werden. Mit ihnen wird
          zusätzlicher Text wortwörtlich zur Konfigurationsdatei
          hinzugefügt.

     ‘server’ (Vorgabe: ‘xorg-server’)
          Dieses Paket stellt den Xorg-Server zur Verfügung.

     ‘server-arguments’ (Vorgabe: ‘%default-xorg-server-arguments’)
          Dies ist die Liste der Befehlszeilenargumente, die an den
          X-Server übergeben werden. Die Vorgabe ist ‘-nolisten tcp’.

 -- Scheme-Prozedur: set-xorg-configuration KONFIGURATION
          [LOGIN-MANAGER-SERVICE-TYPE] Benennt, welche KONFIGURATION die
     Anmeldeverwaltung (vom Typ LOGIN-MANAGER-SERVICE-TYPE) benutzen
     soll, als ein ‘<xorg-configuration>’-Verbundsobjekt.

     Da die Xorg-Konfiguration in die Konfiguration der
     Anmeldeverwaltung eingebettet ist – z.B. in einer
     ‘gdm-configuration’ –, bietet diese Prozedur eine Kurzschreibweise
     zum Ändern der Xorg-Konfiguration.

 -- Scheme-Prozedur: xorg-start-command [KONFIGURATION]
     Hier wird ein ‘startx’-Skript geliefert, in welchem die Module,
     Schriftarten usw. verfügbar sind, die in der KONFIGURATION
     angegeben wurden. Das Ergebnis soll anstelle von ‘startx’ benutzt
     werden.

     Normalerweise wird der X-Server von der Anmeldeverwaltung
     gestartet.

 -- Scheme-Prozedur: screen-locker-service PAKET [PROGRAMM]
     Das PAKET zur Menge der setuid-Programme hinzufügen, worin sich ein
     Programm zum Sperren des Bildschirms oder ein Bildschirmschoner
     befinden muss, der mit dem Befehl PROGRAMM gestartet wird, und
     einen PAM-Eintrag dafür hinzufügen. Zum Beispiel macht

          (screen-locker-service xlockmore "xlock")

     das gute alte XlockMore benutzbar.


File: guix.de.info,  Node: Druckdienste,  Next: Desktop-Dienste,  Prev: X Window,  Up: Dienste

12.9.8 Druckdienste
-------------------

Das Modul ‘(gnu services cups)’ stellt eine Guix-Dienstdefinition für
den CUPS-Druckdienst zur Verfügung. Wenn Sie Druckerunterstützung zu
einem Guix-System hinzufügen möchten, dann fügen Sie einen
‘cups-service’-Dienst in die Betriebssystemdefinition ein.

 -- Scheme-Variable: cups-service-type
     Der Diensttyp für den CUPS-Druckserver. Als Wert muss eine gültige
     CUPS-Konfiguration angegeben werden (siehe unten). Um die
     Voreinstellungen zu verwenden, schreiben Sie einfach nur:
          (service cups-service-type)

   Mit der CUPS-Konfiguration stellen Sie die grundlegenden Merkmale
Ihrer CUPS-Installation ein: Auf welcher Schnittstelle sie lauscht, wie
mit einem fehlgeschlagenen Druckauftrag umzugehen ist, wie viel in
Protokolle geschrieben werden soll und so weiter. Um einen Drucker
hinzuzufügen, müssen Sie jedoch die URL <http://localhost:631> besuchen
oder ein Werkzeug wie die Druckereinstellungsdienste von GNOME benutzen.
Die Vorgabe ist, dass beim Konfigurieren eines CUPS-Dienstes ein
selbstsigniertes Zertifikat erzeugt wird, um sichere Verbindungen mit
dem Druckserver zu ermöglichen.

   Nehmen wir an, Sie wollen die Weboberfläche von CUPS aktivieren und
Unterstützung für Epson-Drucker über das
‘epson-inkjet-printer-escpr’-Paket und für HP-Drucker über das
‘hplip-minimal’-Paket aktivieren. Sie können das auf diese Weise gleich
machen (dazu müssen Sie vorher angeben, dass das Modul ‘(gnu packages
cups)’ benutzt werden soll):

     (service cups-service-type
              (cups-configuration
                (web-interface? #t)
                (extensions
                  (list cups-filters epson-inkjet-printer-escpr hplip-minimal))))

     Anmerkung: Wenn Sie die Qt5-basierte grafische Benutzeroberfläche
     benutzen möchten, die dem hplip-Paket beiliegt, sollten Sie das
     ‘hplip’-Paket installieren, entweder in die Konfigurationsdatei
     Ihres Betriebssystems oder für Ihr Benutzerkonto.

   Im Folgenden sehen Sie die verfügbaren Konfigurationsparameter. Vor
jeder Parameterdefinition wird ihr Typ angegeben, zum Beispiel steht
‘Zeichenketten-Liste foo’ für einen Parameter ‘foo’, der als Liste von
Zeichenketten angegeben werden muss. Sie können die Konfiguration aber
auch in einer einzigen Zeichenkette angeben, wenn Sie eine alte
‘cupsd.conf’-Datei von einem anderen System weiterbenutzen möchten;
siehe das Abschnittsende für mehr Details.

   Die verfügbaren ‘cups-configuration’-Felder sind:

 -- ‘cups-configuration’-Parameter: „package“ cups
     Das CUPS-Paket.

 -- ‘cups-configuration’-Parameter: „package“-Liste extensions (Vorgabe:
          ‘(list brlaser cups-filters epson-inkjet-printer-escpr
          foomatic-filters hplip-minimal splix)’)
     Treiber und andere Erweiterungen für das CUPS-Paket.

 -- ‘cups-configuration’-Parameter: „files-configuration“
          files-configuration
     Konfiguration, wo Protokolle abgelegt werden sollen, welche
     Verzeichnisse für Druckspoolerwarteschlangen benutzt werden sollen
     und ähnliche Berechtigungen erfordernde Konfigurationsparameter.

     Verfügbare Felder einer ‘files-configuration’ sind:

      -- ‘files-configuration’-Parameter: Protokollpfad access-log
          Hiermit wird der Dateiname des Zugriffsprotokolls („Access
          Log“) festgelegt. Wenn ein leerer Name angegeben wird, wird
          kein Protokoll erzeugt. Der Wert ‘stderr’ lässt
          Protokolleinträge in die Standardfehlerdatei schreiben, wenn
          das Druckplanungsprogramm im Vordergrund läuft, oder an den
          Systemprotokolldaemon (also Syslog), wenn es im Hintergrund
          läuft. Der Wert ‘syslog’ bewirkt, dass Protokolleinträge an
          den Systemprotokolldaemon geschickt werden. Der Servername
          darf in Dateinamen als die Zeichenkette ‘%s’ angegeben werden,
          so kann etwa ‘/var/log/cups/%s-access_log’ angegeben werden.

          Die Vorgabe ist ‘"/var/log/cups/access_log"’.

      -- ‘files-configuration’-Parameter: Dateiname cache-dir
          Wo CUPS zwischengespeicherte Daten ablegen soll.

          Die Vorgabe ist ‘"/var/cache/cups"’.

      -- ‘files-configuration’-Parameter: Zeichenkette config-file-perm
          Gibt die Berechtigungen für alle Konfigurationsdateien an, die
          das Planungsprogramm schreibt.

          Beachten Sie, dass auf die Berechtigungen der Datei
          printers.conf eine Maske gelegt wird, wodurch Zugriffe nur
          durch das planende Benutzerkonto erlaubt werden (in der Regel
          der Administratornutzer „root“). Der Grund dafür ist, dass
          Druckergeräte-URIs manchmal sensible Authentisierungsdaten
          enthalten, die nicht allgemein auf dem System bekannt sein
          sollten. Es gibt keine Möglichkeit, diese Sicherheitsmaßnahme
          abzuschalten.

          Die Vorgabe ist ‘"0640"’.

      -- ‘files-configuration’-Parameter: Protokollpfad error-log
          Hiermit wird der Dateiname des Fehlerprotokolls („Error Log“)
          festgelegt. Wenn ein leerer Name angegeben wird, wird kein
          Fehlerprotokoll erzeugt. Der Wert ‘stderr’ lässt
          Protokolleinträge in die Standardfehlerdatei schreiben, wenn
          das Planungsprogramm im Vordergrund läuft, oder an den
          Systemprotokolldaemon (also Syslog), wenn es im Hintergrund
          läuft. Der Wert ‘syslog’ bewirkt, dass Protokolleinträge an
          den Systemprotokolldaemon geschickt werden. Der Servername
          darf in Dateinamen als die Zeichenkette ‘%s’ angegeben werden,
          so kann etwa ‘/var/log/cups/%s-error_log’ angegeben werden.

          Die Vorgabe ist ‘"/var/log/cups/error_log"’.

      -- ‘files-configuration’-Parameter: Zeichenkette fatal-errors
          Gibt an, bei welchen Fehlern das Druckplanungsprogramm
          terminieren soll. Die Zeichenketten für die Arten sind:

          ‘none’
               Keine Fehler führen zur Beendigung.

          ‘all’
               Jeder der im Folgenden aufgeführten Fehler terminiert den
               Druckplaner.

          ‘browse’
               Fehler bei der Suche während der Initialisierung
               terminieren den Druckplaner, zum Beispiel wenn keine
               Verbindung zum DNS-SD-Daemon aufgebaut werden kann.

          ‘config’
               Syntaxfehler in der Konfigurationsdatei terminieren den
               Druckplaner.

          ‘listen’
               Fehler beim Lauschen oder Portfehler (entsprechend der
               Direktiven „Listen“ oder „Port“) terminieren den
               Druckplaner; ausgenommen sind Fehler bei IPv6 auf
               Loopback- oder ‘any’-Adressen.

          ‘log’
               Fehler beim Erzeugen von Protokolldateien terminieren den
               Druckplaner.

          ‘permissions’
               Falsche Zugriffsberechtigungen auf zum Starten benötigten
               Dateien terminieren den Druckplaner, zum Beispiel wenn
               auf gemeinsame TLS-Zertifikats- und Schlüsseldateien von
               allen lesend zugegriffen werden kann.

          Die Vorgabe ist ‘"all -browse"’.

      -- ‘files-configuration’-Parameter: Boolescher-Ausdruck
               file-device?
          Gibt an, welches Pseudogerät für neue Druckerwarteschlangen
          benutzt werden kann. Die URI <file:///dev/null> wird immer
          zugelassen.

          Vorgegeben ist ‘#f’.

      -- ‘files-configuration’-Parameter: Zeichenkette group
          Gibt Namen oder Identifikator der Benutzergruppe an, die zum
          Ausführen von externen Programmen verwendet wird.

          Die Vorgabe ist ‘"lp"’.

      -- ‘files-configuration’-Parameter: Zeichenkette log-file-group
          Gibt Namen oder Identifikator der Benutzergruppe an, mit der
          Protokolldateien gespeichert werden.

          Die Vorgabe ist ‘"lpadmin"’.

      -- ‘files-configuration’-Parameter: Zeichenkette log-file-perm
          Gibt die Berechtigungen für alle Protokolldateien an, die das
          Planungsprogramm schreibt.

          Die Vorgabe ist ‘"0644"’.

      -- ‘files-configuration’-Parameter: log-location page-log
          Hiermit wird der Dateiname des Seitenprotokolls („Page Log“)
          festgelegt. Wenn ein leerer Name angegeben wird, wird kein
          Seitenprotokoll erzeugt. Der Wert ‘stderr’ lässt
          Protokolleinträge in die Standardfehlerdatei schreiben, wenn
          das Planungsprogramm im Vordergrund läuft, oder an den
          Systemprotokolldaemon (also Syslog), wenn es im Hintergrund
          läuft. Der Wert ‘syslog’ bewirkt, dass Protokolleinträge an
          den Systemprotokolldaemon geschickt werden. Der Servername
          darf in Dateinamen als die Zeichenkette ‘%s’ angegeben werden,
          so kann etwa ‘/var/log/cups/%s-page_log’ angegeben werden.

          Die Vorgabe ist ‘"/var/log/cups/page_log"’.

      -- ‘files-configuration’-Parameter: Zeichenkette remote-root
          Gibt den Benutzernamen an, der für unauthentifizierte Zugriffe
          durch Clients verwendet wird, die sich als der
          Administratornutzer „root“ anmelden. Vorgegeben ist ‘remroot’.

          Die Vorgabe ist ‘"remroot"’.

      -- ‘files-configuration’-Parameter: Dateiname request-root
          Gibt das Verzeichnis an, in dem Druckaufträge und andere Daten
          zu HTTP-Anfragen abgelegt werden.

          Die Vorgabe ist ‘"/var/spool/cups"’.

      -- ‘files-configuration’-Parameter: Isolierung sandboxing
          Gibt die Stufe der Sicherheitsisolierung („Sandboxing“) an,
          die auf Druckfilter, Hintergrundsysteme (Backends) und andere
          Kindprozesse des Planungsprogramms angewandt wird; entweder
          ‘relaxed’ („locker“) oder ‘strict’ („strikt“). Diese Direktive
          wird zurzeit nur auf macOS benutzt/unterstützt.

          Die Vorgabe ist ‘strict’.

      -- ‘files-configuration’-Parameter: Dateiname server-keychain
          Gibt an, wo TLS-Zertifikate und private Schlüssel gespeichert
          sind. CUPS wird in diesem Verzeichnis öffentliche und private
          Schlüssel suchen: ‘.crt’-Dateien für PEM-kodierte Zertifikate
          und zugehörige ‘.key’-Dateien für PEM-kodierte private
          Schlüssel.

          Die Vorgabe ist ‘"/etc/cups/ssl"’.

      -- ‘files-configuration’-Parameter: Dateiname server-root
          Gibt das Verzeichnis an, das die Serverkonfigurationsdateien
          enthält.

          Die Vorgabe ist ‘"/etc/cups"’.

      -- ‘files-configuration’-Parameter: Boolescher-Ausdruck
               sync-on-close?
          Gibt an, ob das Planungsprogramm fsync(2) aufrufen soll,
          nachdem es in Konfigurations- oder Zustandsdateien geschrieben
          hat.

          Vorgegeben ist ‘#f’.

      -- ‘files-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste system-group
          Gibt die Benutzergruppe(n) an, die als die ‘@SYSTEM’-Gruppen
          für die Authentisierung benutzt werden können.

      -- ‘files-configuration’-Parameter: Dateiname temp-dir
          Gibt das Verzeichnis an, in das temporäre Dateien gespeichert
          werden.

          Die Vorgabe ist ‘"/var/spool/cups/tmp"’.

      -- ‘files-configuration’-Parameter: Zeichenkette user
          Gibt den Benutzernamen oder -identifikator an, mit dessen
          Benutzerkonto externe Programme ausgeführt werden.

          Die Vorgabe ist ‘"lp"’.

      -- ‘files-configuration’-Parameter: Zeichenkette set-env
          Legt die angegebene Umgebungsvariable auf einen Wert (englisch
          „Value“) fest, die an Kindprozesse übergeben wird.

          Die Vorgabe ist ‘"variable value"’.

 -- ‘cups-configuration’-Parameter: Zugriffsprotokollstufe
          access-log-level
     Gibt an, mit welcher Detailstufe das Protokoll in der
     AccessLog-Datei geführt wird. Bei der Stufe ‘config’ wird
     protokolliert, wenn Drucker und Klassen hinzugefügt, entfernt oder
     verändert werden, und wenn auf Konfigurationsdateien zugegriffen
     oder sie aktualisiert werden. Bei der Stufe ‘actions’ wird
     protokolliert, wenn Druckaufträge eingereicht, gehalten,
     freigegeben, geändert oder abgebrochen werden sowie alles, was bei
     ‘config’ Protokollierung auslöst. Bei der Stufe ‘all’ wird jede
     Anfrage protokolliert.

     Die Vorgabe ist ‘actions’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck auto-purge-jobs?
     Gibt an, ob Daten über den Auftragsverlauf automatisch gelöscht
     werden sollen, wenn Sie nicht mehr zur Berechnung von
     Druckkontingenten benötigt werden.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Kommagetrennte-Zeichenketten-Liste
          browse-dns-sd-sub-types
     Gibt eine Liste von DNS-SD-Subtypen an, die anderen für jeden
     geteilten Drucker mitgeteilt werden sollen. Zum Beispiel wird bei
     ‘"_cups" "_print"’ den Netzwerk-Clients mitgeteilt, dass sowohl
     Teilen zwischen CUPS als auch IPP Everywhere unterstützt werden.

     Die Vorgabe ist ‘"_cups"’.

 -- ‘cups-configuration’-Parameter: Protokolle-zur-lokalen-Suche
          browse-local-protocols
     Gibt an, welche Protokolle zum lokalen Teilen („Freigeben“) von
     Druckern benutzt werden sollen.

     Die Vorgabe ist ‘dnssd’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck browse-web-if?
     Gibt an, ob die Weboberfläche von CUPS anderen mitgeteilt wird.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck browsing?
     Gibt an, ob geteilte Drucker bei Druckersuchen mitgeteilt werden.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Zeichenkette classification
     Gibt die Geheimhaltungsstufe des Servers an. Jeder gültige
     Deckblattname („Banner“-Name) kann benutzt werden, einschließlich
     ‘"classified"’, ‘"confidential"’, ‘"secret"’, ‘"topsecret"’ und
     ‘"unclassified"’. Wird kein Deckblatt angegeben, werden Funktionen
     für sicheres Drucken abgeschaltet.

     Die Vorgabe ist ‘""’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck
          classify-override?
     Gibt an, ob Nutzer bei einzelnen Druckaufträgen eine andere als die
     voreingestellte Geheimhaltungsstufe (für das Deckblatt) vorgeben
     können, indem sie die Option ‘job-sheets’ einstellen.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Voreingestelle-Authentifizierungsart
          default-auth-type
     Gibt an, wie man nach Voreinstellung authentifiziert wird.

     Die Vorgabe ist ‘Basic’.

 -- ‘cups-configuration’-Parameter: Voreingestellte-Verschlüsselung
          default-encryption
     Gibt an, ob für authentifizierte Anfragen Verschlüsselung benutzt
     wird.

     Die Vorgabe ist ‘Required’.

 -- ‘cups-configuration’-Parameter: Zeichenkette default-language
     Gibt an, welche Sprache für Text und Weboberfläche voreingestellt
     benutzt werden soll.

     Die Vorgabe ist ‘"en"’.

 -- ‘cups-configuration’-Parameter: Zeichenkette default-paper-size
     Gibt das voreingestellte Papierformat für neue Druckwarteschlangen
     an. Bei ‘"Auto"’ wird eine der Locale entsprechende Voreinstellung
     gewählt, während bei ‘"None"’ kein Papierformat voreingestellt ist.
     Verfügbare Formatbezeichnungen sind typischerweise ‘"Letter"’ oder
     ‘"A4"’.

     Die Vorgabe ist ‘"Auto"’.

 -- ‘cups-configuration’-Parameter: Zeichenkette default-policy
     Gibt die voreingestellte Zugriffsrichtlinie an, die benutzt werden
     soll.

     Die Vorgabe ist ‘"default"’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck default-shared?
     Gibt an, ob lokale Drucker nach Voreinstellung geteilt werden
     sollen.

     Die Vorgabe ist ‘#t’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          dirty-clean-interval
     Gibt an, mit welcher Verzögerung Konfigurations- und
     Zustandsdateien aktualisiert werden sollen. Der Wert 0 lässt die
     Aktualisierung so bald wie möglich stattfinden, in der Regel nach
     ein paar Millisekunden.

     Die Vorgabe ist ‘30’.

 -- ‘cups-configuration’-Parameter: Fehlerrichtlinie error-policy
     Gibt an, wie beim Auftreten eines Fehlers verfahren werden soll.
     Mögliche Werte sind ‘abort-job’, wodurch der fehlgeschlagene
     Druckauftrag verworfen wird, ‘retry-job’, wodurch der Druckauftrag
     später erneut versucht wird, ‘retry-current-job’, wodurch der
     fehlgeschlagene Druckauftrag sofort erneut versucht wird, und
     ‘stop-printer’, wodurch der Drucker angehalten wird.

     Die Vorgabe ist ‘stop-printer’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          filter-limit
     Gibt die Maximalkosten von Filtern an, die nebenläufig ausgeführt
     werden, wodurch Probleme durch Platten-, Arbeitsspeicher- und
     Prozessorressourcennutzung minimiert werden können. Eine
     Beschränkung von 0 deaktiviert die Filterbeschränkung. Ein
     durchschnittlicher Druck mit einem Nicht-PostScript-Drucker
     erfordert eine Filterbeschränkung von mindestens ungefähr 200. Ein
     PostScript-Drucker erfordert eine halb so hohe Filterbeschränkung
     (100). Wird die Beschränkung unterhalb dieser Schwellwerte
     angesetzt, kann das Planungsprogramm effektiv nur noch einen
     einzelnen Druckauftrag gleichzeitig abarbeiten.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl filter-nice
     Gibt die Planungspriorität von Filtern an, die zum Drucken eines
     Druckauftrags ausgeführt werden. Der nice-Wert kann zwischen 0, der
     höchsten Priorität, und 19, der niedrigsten Priorität, liegen.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Rechnernamensauflösungen
          host-name-lookups
     Gibt an, ob inverse Namensauflösungen („Reverse Lookups“) bei sich
     verbindenden Clients durchgeführt werden sollen. Die Einstellung
     ‘double’ lässt ‘cupsd’ verifizieren, dass der anhand der Adresse
     aufgelöste Rechnername zu einer der für den Rechnernamen
     zurückgelieferten Adressen passt. „Double“-Namensauflösungen
     verhindern auch, dass sich Clients mit unregistrierten Adressen mit
     Ihrem Server verbinden können. Setzen Sie diese Option nur dann auf
     ‘#t’ oder ‘double’, wenn es unbedingt notwendig ist.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          job-kill-delay
     Gibt die Anzahl an Sekunden an, wie lange vor dem Abwürgen der mit
     einem abgebrochenen oder gehaltenen Druckauftrag assoziierten
     Filter- und Hintergrundprozesse (dem „Backend“) gewartet wird.

     Die Vorgabe ist ‘30’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          job-retry-interval
     Gibt das Zeitintervall zwischen erneuten Versuchen von
     Druckaufträgen in Sekunden an. Dies wird in der Regel für
     Fax-Warteschlangen benutzt, kann aber auch für normale
     Druckwarteschlangen benutzt werden, deren Fehlerrichtlinie
     ‘retry-job’ oder ‘retry-current-job’ ist.

     Die Vorgabe ist ‘30’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          job-retry-limit
     Gibt die Anzahl an, wie oft ein Druckauftrag erneut versucht wird.
     Dies wird in der Regel für Fax-Warteschlangen benutzt, kann aber
     auch für normale Druckwarteschlangen benutzt werden, deren
     Fehlerrichtlinie ‘retry-job’ oder ‘retry-current-job’ ist.

     Die Vorgabe ist ‘5’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck keep-alive?
     Gibt an, ob HTTP-„keep-alive“ für Verbindungen unterstützt wird.

     Die Vorgabe ist ‘#t’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          limit-request-body
     Gibt die Maximalgröße von zu druckenden Dateien, IPP-Anfragen und
     HTML-Formulardaten an. Eine Beschränkung von 0 deaktiviert die
     Beschränkung.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Mehrzeilige-Zeichenketten-Liste
          listen
     Lauscht auf den angegebenen Schnittstellen auf Verbindungen.
     Gültige Werte haben die Form ADRESSE:PORT, wobei die ADRESSE
     entweder eine von eckigen Klammern umschlossene IPv6-Adresse, eine
     IPv4-Adresse oder ‘*’ ist; letztere steht für alle Adressen. Werte
     können auch Dateinamen lokaler UNIX-Sockets sein. Die
     Listen-Direktive ähnelt der Port-Direktive, macht es aber möglich,
     den Zugriff für bestimmte Schnittstellen oder Netzwerke
     einzuschränken.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          listen-back-log
     Gibt die Anzahl ausstehender Verbindungen an, die möglich sein
     soll. Normalerweise betrifft dies nur sehr ausgelastete Server, die
     die MaxClients-Beschränkung erreicht haben. Es kann aber auch eine
     Rolle spielen, wenn versucht wird, gleichzeitig sehr viele
     Verbindungen herzustellen. Wenn die Beschränkung erreicht wird,
     sperrt das Betriebssystem den Aufbau weiterer Verbindungen, bis das
     Druckplanungsprogramm die ausstehenden akzeptieren konnte.

     Die Vorgabe ist ‘128’.

 -- ‘cups-configuration’-Parameter: „location-access-controls“-Liste
          location-access-controls
     Gibt eine Liste zusätzlicher Zugriffssteuerungen („Access
     Controls“) an.

     Verfügbare ‘location-access-controls’-Felder sind:

      -- ‘location-access-controls’-Parameter: Dateiname path
          Gibt den URI-Pfad an, für den die Zugriffssteuerung gilt.

      -- ‘location-access-controls’-Parameter: Zugriffssteuerungs-Liste
               access-controls
          Zugriffssteuerungen für jeden Zugriff auf diesen Pfad, im
          selben Format wie die ‘access-controls’ bei
          ‘operation-access-control’.

          Die Vorgabe ist ‘()’.

      -- ‘location-access-controls’-Parameter:
               „method-access-controls“-Liste method-access-controls
          Zugriffssteuerungen für methodenspezifische Zugriffe auf
          diesen Pfad.

          Die Vorgabe ist ‘()’.

          Verfügbare ‘method-access-controls’-Felder sind:

           -- ‘method-access-controls’-Parameter: Boolescher-Ausdruck
                    reverse?
               Falls dies ‘#t’ ist, gelten die Zugriffssteuerungen für
               alle Methoden außer den aufgelisteten Methoden.
               Andernfalls gelten sie nur für die aufgelisteten
               Methoden.

               Vorgegeben ist ‘#f’.

           -- ‘method-access-controls’-Parameter: Methoden-Liste methods
               Methoden, für die diese Zugriffssteuerung gilt.

               Die Vorgabe ist ‘()’.

           -- ‘method-access-controls’-Parameter:
                    Zugriffssteuerungs-Liste access-controls
               Zugriffssteuerungsdirektiven als eine Liste von
               Zeichenketten. Jede Zeichenkette steht für eine Direktive
               wie z.B. ‘"Order allow,deny"’.

               Die Vorgabe ist ‘()’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          log-debug-history
     Gibt die Anzahl der Nachrichten zur Fehlersuche an, die für
     Protokolle vorgehalten werden, wenn ein Fehler in einem
     Druckauftrag auftritt. Nachrichten zur Fehlersuche werden
     unabhängig von der LogLevel-Einstellung protokolliert.

     Die Vorgabe ist ‘100’.

 -- ‘cups-configuration’-Parameter: Protokollstufe log-level
     Gibt die Stufe der Protokollierung in die ErrorLog-Datei an. Der
     Wert ‘none’ stoppt alle Protokollierung, während ‘debug2’ alles
     protokollieren lässt.

     Die Vorgabe ist ‘info’.

 -- ‘cups-configuration’-Parameter: Protokollzeitformat log-time-format
     Gibt das Format von Datum und Uhrzeit in Protokolldateien an. Der
     Wert ‘standard’ lässt ganze Sekunden ins Protokoll schreiben,
     während bei ‘usecs’ Mikrosekunden protokolliert werden.

     Die Vorgabe ist ‘standard’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl max-clients
     Gibt die Maximalzahl gleichzeitig bedienter Clients an, die vom
     Planer zugelassen werden.

     Die Vorgabe ist ‘100’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-clients-per-host
     Gibt die Maximalzahl gleichzeitiger Clients von derselben Adresse
     an, die zugelassen werden.

     Die Vorgabe ist ‘100’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl max-copies
     Gibt die Maximalzahl der Kopien an, die ein Nutzer vom selben
     Druckauftrag ausdrucken lassen kann.

     Die Vorgabe ist ‘9999’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-hold-time
     Gibt die maximale Zeitdauer an, die ein Druckauftrag im
     Haltezustand ‘indefinite’ bleiben darf, bevor er abgebrochen wird.
     Ein Wert von 0 deaktiviert ein Abbrechen gehaltener Druckaufträge.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl max-jobs
     Gibt die Maximalzahl gleichzeitiger Druckaufträge an, die noch
     zugelassen wird. Wenn Sie es auf 0 setzen, wird die Anzahl
     Druckaufträge _nicht_ beschränkt.

     Die Vorgabe ist ‘500’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-jobs-per-printer
     Gibt die Maximalzahl gleichzeitiger Druckaufträge an, die pro
     Drucker zugelassen werden. Ein Wert von 0 lässt bis zu
     MaxJobs-viele Druckaufträge pro Drucker zu.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-jobs-per-user
     Gibt die Maximalzahl gleichzeitiger Druckaufträge an, die pro
     Benutzer zugelassen werden. Ein Wert von 0 lässt bis zu
     MaxJobs-viele Druckaufträge pro Benutzer zu.

     Die Vorgabe ist ‘0’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-job-time
     Gibt die maximale Anzahl an, wie oft das Drucken eines
     Druckauftrags versucht werden kann, bis er abgebrochen wird, in
     Sekunden. Wenn Sie es auf 0 setzen, wird das Abbrechen
     „feststeckender“ Druckaufträge deaktiviert.

     Die Vorgabe ist ‘10800’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          max-log-size
     Gibt die Maximalgröße der Protokolldateien an, bevor sie rotiert
     werden, in Bytes. Beim Wert 0 wird Protokollrotation deaktiviert.

     Die Vorgabe ist ‘1048576’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          multiple-operation-timeout
     Gibt die maximale Zeitdauer an, wie lange es zwischen Dateien in
     einem Druckauftrag mit mehreren Dateien dauern darf, in Sekunden.

     Die Vorgabe ist ‘900’.

 -- ‘cups-configuration’-Parameter: Zeichenkette page-log-format
     Gibt das Format der Zeilen im PageLog-Seitenprotokoll an. Folgen,
     die mit Prozentzeichen (‘%’) beginnen, werden durch die jeweils
     zugehörigen Informationen ersetzt, während alle anderen Zeichen
     wortwörtlich übernommen werden. Die folgenden Prozentfolgen werden
     erkannt:

     ‘%%’
          ein einzelnes Prozentzeichen einfügen

     ‘%{name}’
          den Wert des angegebenen IPP-Attributs einfügen

     ‘%C’
          die Anzahl der Kopien der aktuellen Seite einfügen

     ‘%P’
          die aktuelle Seitenzahl einfügen

     ‘%T’
          das aktuelle Datum und Uhrzeit im allgemeinen Protokollformat
          einfügen

     ‘%j’
          den Druckauftragsidentifikator („Job-ID“) einfügen

     ‘%p’
          den Druckernamen einfügen

     ‘%u’
          den Benutzernamen einfügen

     Wird die leere Zeichenkette als Wert angegeben, wird
     Seitenprotokollierung abgeschaltet. Die Zeichenkette ‘%p %u %j %T
     %P %C %{job-billing} %{job-originating-host-name} %{job-name}
     %{media} %{sides}’ erzeugt ein Seitenprotokoll mit den üblichen
     Elementen.

     Die Vorgabe ist ‘""’.

 -- ‘cups-configuration’-Parameter: Umgebungsvariable
          environment-variables
     Übergibt die angegebene(n) Umgebungsvariable(n) an Kindprozesse,
     als Liste von Zeichenketten.

     Die Vorgabe ist ‘()’.

 -- ‘cups-configuration’-Parameter: „policy-configuration“-Liste
          policies
     Gibt die benannten Zugriffssteuerungsrichtlinien an.

     Verfügbare ‘policy-configuration’-Felder sind:

      -- ‘policy-configuration’-Parameter: Zeichenkette name
          Der Name der Richtlinie.

      -- ‘policy-configuration’-Parameter: Zeichenkette
               job-private-access
          Gibt eine Zugriffsliste der privaten Werte eines Druckauftrags
          an. ‘@ACL’ wird auf die Werte von requesting-user-name-allowed
          oder requesting-user-name-denied des Druckers abgebildet.
          ‘@OWNER’ wird auf den Besitzer des Druckauftrags abgebildet.
          ‘@SYSTEM’ wird auf die Gruppen abgebildet, die im
          ‘system-group’-Feld der ‘files-configuration’ aufgelistet
          sind, aus der die Datei ‘cups-files.conf(5)’ erzeugt wird. Zu
          den anderen möglichen Elementen der Zugriffsliste gehören
          Namen bestimmer Benutzerkonten und ‘@BENUTZERGRUPPE’, was für
          Mitglieder einer bestimmten Benutzergruppe steht. Die
          Zugriffsliste kann auch einfach als ‘all’ oder ‘default’
          festgelegt werden.

          Die Vorgabe ist ‘"@OWNER @SYSTEM"’.

      -- ‘policy-configuration’-Parameter: Zeichenkette
               job-private-values
          Gibt die Liste der Druckauftragswerte an, die geschützt werden
          sollten, oder ‘all’, ‘default’ oder ‘none’.

          Die Vorgabe ist ‘"job-name job-originating-host-name
          job-originating-user-name phone"’.

      -- ‘policy-configuration’-Parameter: Zeichenkette
               subscription-private-access
          Gibt eine Zugriffsliste für die privaten Werte eines
          Abonnements an. ‘@ACL’ wird auf die Werte von
          requesting-user-name-allowed oder requesting-user-name-denied
          des Druckers abgebildet. ‘@OWNER’ wird auf den Besitzer des
          Druckauftrags abgebildet. ‘@SYSTEM’ wird auf die Gruppen
          abgebildet, die im ‘system-group’-Feld der
          ‘files-configuration’ aufgelistet sind, aus der die Datei
          ‘cups-files.conf(5)’ erzeugt wird. Zu den anderen möglichen
          Elementen der Zugriffsliste gehören Namen bestimmer
          Benutzerkonten und ‘@BENUTZERGRUPPE’, was für Mitglieder einer
          bestimmten Benutzergruppe steht. Die Zugriffsliste kann auch
          einfach als ‘all’ oder ‘default’ festgelegt werden.

          Die Vorgabe ist ‘"@OWNER @SYSTEM"’.

      -- ‘policy-configuration’-Parameter: Zeichenkette
               subscription-private-values
          Gibt die Liste der Druckauftragswerte an, die geschützt werden
          sollten, oder ‘all’, ‘default’ oder ‘none’.

          Die Vorgabe ist ‘"notify-events notify-pull-method
          notify-recipient-uri notify-subscriber-user-name
          notify-user-data"’.

      -- ‘policy-configuration’-Parameter:
               „operation-access-controls“-Liste access-controls
          Zugriffssteuerung durch IPP-Betrieb.

          Die Vorgabe ist ‘()’.

 -- ‘cups-configuration’-Parameter:
          Boolescher-Ausdruck-oder-Nichtnegative-ganze-Zahl
          preserve-job-files
     Gibt an, ob die Dateien eines Druckauftrags (Dokumente) erhalten
     bleiben, nachdem ein Druckauftrag ausgedruckt wurde. Wenn eine Zahl
     angegeben wird, bleiben die Dateien des Druckauftrags für die
     angegebene Zahl von Sekunden nach dem Drucken erhalten. Ein
     boolescher Wert bestimmt ansonsten, ob sie auf unbestimmte Zeit
     erhalten bleiben.

     Die Vorgabe ist ‘86400’.

 -- ‘cups-configuration’-Parameter:
          Boolescher-Ausdruck-oder-Nichtnegative-ganze-Zahl
          preserve-job-history
     Gibt an, ob der Druckauftragsverlauf nach dem Drucken eines
     Druckauftrags erhalten bleibt. Wenn eine Zahl angegeben wird,
     bleibt der Druckauftragsverlauf für die angegebene Zahl von
     Sekunden nach dem Drucken erhalten. Bei ‘#t’ bleibt der
     Druckauftragsverlauf so lange erhalten, bis die
     MaxJobs-Beschränkung erreicht wurde.

     Die Vorgabe ist ‘#t’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl
          reload-timeout
     Gibt an, wie lange vor dem Neustart des Planungsprogramms auf den
     Abschluss eines Druckauftrages gewartet wird.

     Die Vorgabe ist ‘30’.

 -- ‘cups-configuration’-Parameter: Zeichenkette rip-cache
     Gibt die maximale Menge an genutztem Arbeitsspeicher für das
     Konvertieren von Dokumenten in eine Rastergrafik (eine „Bitmap“)
     für einen Drucker an.

     Die Vorgabe ist ‘"128m"’.

 -- ‘cups-configuration’-Parameter: Zeichenkette server-admin
     Gibt die E-Mail-Adresse des Serveradministrators an.

     Die Vorgabe ist ‘"root@localhost.localdomain"’.

 -- ‘cups-configuration’-Parameter: Rechnernamens-Liste-oder-*
          server-alias
     Die ServerAlias-Direktive wird zur Prüfung der HTTP-Host-Kopfzeile
     benutzt, wenn sich Clients mit dem Planungsprogramm über externe
     Schnittstellen verbinden. Wenn der besondere Name ‘*’ benutzt wird,
     könnte Ihr System möglicherweise bekannten browserbasierten
     DNS-Rebinding-Angriffen ausgesetzt werden, selbst wenn auf die
     Angebote nur über eine Firewall zugegriffen wird. Wenn alternative
     Namen nicht automatisch erkannt werden, empfehlen wir, jeden
     alternativen Namen in der ServerAlias-Direktive aufzulisten, statt
     ‘*’ zu benutzen.

     Die Vorgabe ist ‘*’.

 -- ‘cups-configuration’-Parameter: Zeichenkette server-name
     Gibt den vollständigen Rechnernamen („Fully-Qualified Host Name“)
     des Servers an.

     Die Vorgabe ist ‘"localhost"’.

 -- ‘cups-configuration’-Parameter: Server-Tokens server-tokens
     Gibt an, welche Informationen in der Server-Kopfzeile von
     HTTP-Antworten vorkommen. ‘None’ deaktiviert die Server-Kopfzeile.
     ‘ProductOnly’ liefert ‘CUPS’. ‘Major’ liefert ‘CUPS 2’. ‘Minor’
     liefert ‘CUPS 2.0’. ‘Minimal’ liefert ‘CUPS 2.0.0’. ‘OS’ liefert
     ‘CUPS 2.0.0 (UNAME)’, wobei UNAME die Ausgabe des Befehls ‘uname’
     ist. ‘Full’ liefert ‘CUPS 2.0.0 (UNAME) IPP/2.0’.

     Die Vorgabe ist ‘Minimal’.

 -- ‘cups-configuration’-Parameter: Mehrzeilige-Zeichenketten-Liste
          ssl-listen
     Lauscht auf den angegebenen Schnittstellen auf verschlüsselte
     Verbindungen. Gültige Werte haben die Form ADRESSE:PORT, wobei die
     ADRESSE entweder eine von eckigen Klammern umschlossene
     IPv6-Adresse, eine IPv4-Adresse oder ‘*’ ist; letztere steht für
     alle Adressen.

     Die Vorgabe ist ‘()’.

 -- ‘cups-configuration’-Parameter: SSL-Optionen ssl-options
     Legt Verschlüsselungsoptionen fest. Nach Vorgabe unterstützt CUPS
     nur Verschlüsselung mit TLS v1.0 oder höher mit bekannten, sicheren
     „Cipher Suites“. Es ist weniger sicher, Optionen mit ‘Allow’
     („erlauben“) zu verwenden, und es erhöht die Sicherheit, Optionen
     mit ‘Deny’ („verweigern“) zu benutzen. Die Option ‘AllowRC4’
     aktiviert die 128-Bit-RC4-Cipher-Suites, die manche alten Clients
     brauchen. Die Option ‘AllowSSL3’ aktiviert SSL v3.0, das manche
     alte Clients brauchen, die TLS v1.0 nicht implementieren. Die
     Option ‘DenyCBC’ deaktiviert alle CBC-Cipher-Suites. Die Option
     ‘DenyTLS1.0’ deaktiviert Unterstützung für TLS v1.0 – dadurch wird
     TLS v1.1 zur kleinsten noch unterstützten Protokollversion.

     Die Vorgabe ist ‘()’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck
          strict-conformance?
     Gibt an, ob das Druckplanungsprogramm von Clients fordert, dass sie
     sich strikt an die IPP-Spezifikationen halten.

     Vorgegeben ist ‘#f’.

 -- ‘cups-configuration’-Parameter: Nichtnegative-ganze-Zahl timeout
     Gibt die Zeitbeschränkung für HTTP-Anfragen an, in Sekunden.

     Die Vorgabe ist ‘900’.

 -- ‘cups-configuration’-Parameter: Boolescher-Ausdruck web-interface?
     Gibt an, ob die Weboberfläche zur Verfügung gestellt wird.

     Vorgegeben ist ‘#f’.

   Mittlerweile denken Sie wahrscheinlich: „Ich bitte dich,
Guix-Handbuch, ich mag dich, aber kannst du jetzt bitte mit den
Konfigurationsoptionen aufhören?“ Damit hätten Sie recht. Allerdings
sollte ein weitere Punkt noch erwähnt werden: Vielleicht haben Sie eine
bestehende ‘cupsd.conf’, die Sie verwenden möchten. In diesem Fall
können Sie eine ‘opaque-cups-configuration’ als die Konfiguration eines
‘cups-service-type’ übergeben.

   Verfügbare ‘opaque-cups-configuration’-Felder sind:

 -- ‘opaque-cups-configuration’-Parameter: „package“ cups
     Das CUPS-Paket.

 -- ‘opaque-cups-configuration’-Parameter: Zeichenkette cupsd.conf
     Der Inhalt der Datei ‘cupsd.conf’ als eine Zeichenkette.

 -- ‘opaque-cups-configuration’-Parameter: Zeichenkette cups-files.conf
     Der Inhalt der Datei ‘cups-files.conf’ als eine Zeichenkette.

   Wenn Ihre ‘cupsd.conf’ und ‘cups-files.conf’ zum Beispiel in
Zeichenketten mit dem entsprechenden Namen definiert sind, könnten Sie
auf diese Weise einen CUPS-Dienst instanziieren:

     (service cups-service-type
              (opaque-cups-configuration
                (cupsd.conf cupsd.conf)
                (cups-files.conf cups-files.conf)))


File: guix.de.info,  Node: Desktop-Dienste,  Next: Tondienste,  Prev: Druckdienste,  Up: Dienste

12.9.9 Desktop-Dienste
----------------------

Das Modul ‘(gnu services desktop)’ stellt Dienste zur Verfügung, die
meistens bei „Desktop“-Einrichtungen für grafische Nutzung praktisch
sind – also auf einer Maschine mit einem grafischem Anzeigeserver,
vielleicht mit einer grafischen Benutzeroberfläche, usw. Im Modul werden
auch Dienste definiert, die bestimmte Arbeitsumgebungen wie GNOME, Xfce
oder MATE bereitstellen.

   Um es einfacher zu machen, definiert das Modul auch eine Variable mit
denjenigen Diensten, die man auf einer Maschine mit einer grafischen
Umgebung und Netzwerkunterstützung erwarten würde:

 -- Scheme-Variable: %desktop-services
     Dies ist eine Liste von Diensten, die ‘%base-services’ ergänzt und
     weitere Dienste hinzufügt oder bestehende anpasst, um für eine
     normale „Desktop“-Nutzung geeignet zu sein.

     Insbesondere wird eine grafische Anmeldeverwaltung hinzugefügt
     (siehe *note ‘gdm-service-type’: X Window.), ebenso Programme zur
     Bildschirmsperre, ein Werkzeug zur Netzwerkverwaltung (siehe *note
     ‘network-manager-service-type’: Netzwerkdienste.) mit Unterstützung
     für Modems (siehe *note ‘modem-manager-service-type’:
     Netzwerkdienste.), Energieverbrauchs- und Farbverwaltungsdienste,
     Anmeldungs- und Sitzungsverwaltung über ‘elogind’, der
     Berechtigungsdienst Polkit, der Ortungsdienst GeoClue, der
     AccountsService-Daemon, mit dem autorisierte Benutzer
     Systempasswörter ändern können, ein NTP-Client (siehe *note
     Netzwerkdienste::) und der Avahi-Daemon. Außerdem wird der Name
     Service Switch konfiguriert, damit er ‘nss-mdns’ benutzt (siehe
     *note mDNS: Name Service Switch.).

   Die ‘%desktop-services’-Variable kann als das ‘services’-Feld einer
‘operating-system’-Deklaration genutzt werden (siehe *note ‘services’:
„operating-system“-Referenz.).

   Daneben können die Prozeduren ‘gnome-desktop-service-type’,
‘xfce-desktop-service’, ‘mate-desktop-service-type’,
‘lxqt-desktop-service-type’ und ‘enlightenment-desktop-service-type’
jeweils GNOME, Xfce, MATE und/oder Enlightenment zu einem System
hinzufügen. „GNOME hinzufügen“ bedeutet, dass Dienste auf Systemebene
wie z.B. Hilfsprogramme zur Anpassung der Hintergrundbeleuchtung und des
Energieverbrauchs zum System hinzugefügt werden und ‘polkit’ und ‘dbus’
entsprechend erweitert werden, wodurch GNOME mit erhöhten Berechtigungen
auf eine begrenzte Zahl von speziellen Systemschnittstellen zugreifen
kann. Zusätzlich bedeutet das Hinzufügen eines durch
‘gnome-desktop-service-type’ erzeugten Dienstes, dass das
GNOME-Metapaket ins Systemprofil eingefügt wird. Genauso wird beim
Einfügen des Xfce-Dienstes nicht nur das ‘xfce’-Metapaket zum
Systemprofil hinzugefügt, sondern dem Thunar-Dateiverwaltungsprogramm
wird auch die Berechtigung gegeben, ein Fenster mit Administratorrechten
zu öffnen, wenn der Benutzer sich mit dem Administratorpasswort über die
standardmäßige grafische Oberfläche von Polkit authentisiert. „MATE
hinzufügen“ bedeutet, dass ‘polkit’ und ‘dbus’ entsprechend erweitert
werden, wodurch MATE mit erhöhten Berechtigungen auf eine begrenzte Zahl
von speziellen Systemschnittstellen zugreifen kann. Zusätzlich bedeutet
das Hinzufügen eines durch ‘mate-desktop-service-type’ erzeugten
Dienstes, dass das MATE-Metapaket ins Systemprofil eingefügt wird.
„Enlightenment hinzufügen“ bedeutet, dass ‘dbus’ entsprechend erweitert
wird und mehrere Binärdateien von Enlightenment als setuid eingerichtet
werden, wodurch das Programm zum Sperren des Bildschirms und andere
Funktionen von Enlightenment wie erwartet funktionieren.

   Die Arbeitsumgebungen in Guix benutzen standardmäßig den
Xorg-Anzeigeserver. Falls Sie das neuere Anzeigeserverprotokoll namens
Wayland benutzen möchten, müssen Sie die Wayland-Unterstützung in GDM
aktivieren (siehe *note wayland-gdm::). Alternativ können Sie den Dienst
‘sddm-service’ anstelle von GDM für die grafische Anmeldeverwaltung
einrichten. Dann sollten Sie in SDDM die Sitzung „GNOME (Wayland)“
auswählen. Alternativ können Sie auch versuchen, GNOME mit Wayland
manuell aus einer Konsole (TTY) mit dem Befehl „XDG_SESSION_TYPE=wayland
exec dbus-run-session gnome-session“ zu starten. Derzeit wird Wayland
nur von GNOME unterstützt.

 -- Scheme-Variable: gnome-desktop-service-type
     Dies ist der Typ des Dienstes, der die GNOME-Arbeitsumgebung
     (https://www.gnome.org) bereitstellt. Sein Wert ist ein
     ‘gnome-desktop-configuration’-Objekt (siehe unten).

     Dieser Dienst fügt das ‘gnome’-Paket zum Systemprofil hinzu und
     erweitert Polkit um die von ‘gnome-settings-daemon’ benötigten
     Aktionen.

 -- Datentyp: gnome-desktop-configuration
     Verbundsobjekt für die Konfiguration der GNOME-Arbeitsumgebung.

     ‘gnome’ (Vorgabe: ‘gnome’)
          Welches GNOME-Paket benutzt werden soll.

 -- Scheme-Variable: xfce-desktop-service-type
     Der Typ des Dienstes, um die Xfce-Arbeitsumgebung
     (https://xfce.org/) auszuführen. Sein Wert ist ein
     ‘xfce-desktop-configuration’-Objekt (siehe unten).

     Dieser Dienst fügt das Paket ‘xfce’ zum Systemprofil hinzu und
     erweitert Polkit, damit ‘thunar’ befähigt wird, das Dateisystem aus
     einer Benutzersitzung heraus mit Administratorrechten zu
     bearbeiten, nachdem sich der Benutzer mit dem Administratorpasswort
     authentisiert hat.

     Bedenken Sie, dass ‘xfce4-panel’ und seine Plugin-Pakete in
     dasselbe Profil installiert werden sollten, um sicherzugehen, dass
     sie kompatibel sind. Wenn Sie diesen Dienst benutzen, sollten Sie
     zusätzliche Plugins (‘xfce4-whiskermenu-plugin’,
     ‘xfce4-weather-plugin’ usw.) ins ‘packages’-Feld Ihres
     ‘operating-system’ eintragen.

 -- Datentyp: xfce-desktop-configuration
     Verbundstyp für Einstellungen zur Xfce-Arbeitsumgebung.

     ‘xfce’ (Vorgabe: ‘xfce’)
          Das Xfce-Paket, was benutzt werden soll.

 -- Scheme-Variable: mate-desktop-service-type
     Dies ist der Typ des Dienstes, um die MATE-Arbeitsumgebung
     (https://mate-desktop.org/) auszuführen. Sein Wert ist ein
     ‘mate-desktop-configuration’-Objekt (siehe unten).

     Dieser Dienst fügt das Paket ‘mate’ ins Systemprofil ein und
     erweitert Polkit um die Aktionen aus dem ‘mate-settings-daemon’.

 -- Datentyp: mate-desktop-configuration
     Verbundstyp für die Einstellungen der MATE-Arbeitsumgebung.

     ‘mate’ (Vorgabe: ‘mate’)
          Das MATE-Paket, was benutzt werden soll.

 -- Scheme-Variable: lxqt-desktop-service-type
     Dies ist der Typ des Dienstes, um die LXQt-Arbeitsumgebung
     (https://lxqt-project.org) auszuführen. Sein Wert ist ein
     ‘lxqt-desktop-configuration’-Objekt (siehe unten).

     Dieser Dienst fügt das Paket ‘lxqt’ ins Systemprofil ein.

 -- Datentyp: lxqt-desktop-configuration
     Verbundstyp für Einstellungen zur LXQt-Arbeitsumgebung.

     ‘lxqt’ (Vorgabe: ‘lxqt’)
          Das LXQT-Paket, was benutzt werden soll.

 -- Scheme-Variable: enlightenment-desktop-service-type
     Liefert einen Dienst, der das ‘enlightenment’-Paket zum
     Systemprofil hinzufügt und D-Bus mit den Aktionen aus ‘efl’
     erweitert.

 -- Datentyp: enlightenment-desktop-service-configuration
     ‘enlightenment’ (Vorgabe: ‘enlightenment’)
          Das Enlightenment-Paket, was benutzt werden soll.

   Weil die Desktopdienste GNOME, Xfce und MATE so viele Pakete ins
System mitnehmen, gehören diese nicht zu den Vorgaben in der
‘%desktop-services’-Variablen. Um GNOME, Xfce oder MATE hinzuzufügen,
benutzen Sie einfach ‘cons’ zum Anhängen an die ‘%desktop-services’ im
‘services’-Feld Ihrer ‘operating-system’-Deklaration:

     (use-modules (gnu))
     (use-service-modules desktop)
     (operating-system
       …
       ;; cons* adds items to the list given as its last argument.
       (services (cons* (service gnome-desktop-service-type)
                        (service xfce-desktop-service)
                        %desktop-services))
       …)

   Diese Arbeitsumgebungen stehen dann im grafischen Anmeldefenster zur
Auswahl.

   Die eigentlichen Dienstdefinitionen, die in ‘%desktop-services’
stehen und durch ‘(gnu services dbus)’ und ‘(gnu services desktop)’ zur
Verfügung gestellt werden, werden im Folgenden beschrieben.

 -- Scheme-Prozedur: dbus-service [#:dbus DBUS] [#:services '()]
          [#:verbose?] Liefert einen Dienst, der den „Systembus“ mit
          DBUS
     ausführt, mit Unterstützung für die als SERVICES übergebenen
     Dienste. Wenn VERBOSE? auf wahr gesetzt ist, wird die
     Umgebungsvariable ‘DBUS_VERBOSE’ für ausführliche Protokollierung
     auf ‘1’ gesetzt. Damit das auch etwas bewirkt, muss für DBUS ein
     D-Bus-Paket mit Unterstützung dafür angegeben werden, etwa
     ‘dbus-verbose’. Das ausführliche Protokoll finden Sie in
     ‘/var/log/dbus-daemon.log’.

     D-Bus (https://dbus.freedesktop.org/) ist eine Einrichtung zur
     Interprozesskommunikation. Deren Systembus wird benutzt, damit
     Systemdienste miteinander kommunizieren können und damit sie bei
     systemweiten Ereignissen benachrichtigt werden können.

     Als SERVICES muss eine Liste von Paketen übergeben werden, die ein
     Verzeichnis ‘etc/dbus-1/system.d’ mit zusätzlichen
     D-Bus-Konfigurations- und Richtliniendateien enthalten. Damit zum
     Beispiel der Avahi-Daemon den Systembus benutzen kann, muss
     SERVICES gleich ‘(list avahi)’ sein.

 -- Scheme-Prozedur: elogind-service [#:config KONFIGURATION]
     Liefert einen Dienst, der den Anmelde- und Sitzungsdaemon ‘elogind’
     ausführt. Elogind (https://github.com/elogind/elogind) stellt eine
     D-Bus-Schnittstelle bereit, über die ausgelesen werden kann, welche
     Benutzer angemeldet sind und welche Sitzungen sie geöffnet haben,
     und außerdem das System in Bereitschaft versetzt werden kann, der
     Bereitschaftsmodus unterdrückt werden kann, das System neu
     gestartet werden kann und anderes.

     Die meisten Energieereignisse auf Systemebene in einem Rechner
     werden von elogind behandelt, wie etwa ein Versetzen des Systems in
     Bereitschaft, wenn der Rechner zugeklappt wird, oder ein
     Herunterfahren beim Drücken des Stromschalters.

     Das CONFIG-Schlüsselwort gibt die Konfiguration für elogind an und
     sollte das Ergebnis eines Aufrufs von ‘(elogind-configuration
     (PARAMETER WERT)...)’ sein. Verfügbare Parameter und ihre
     Vorgabewerte sind:

     ‘kill-user-processes?’
          ‘#f’
     ‘kill-only-users’
          ‘()’
     ‘kill-exclude-users’
          ‘("root")’
     ‘inhibit-delay-max-seconds’
          ‘5’
     ‘handle-power-key’
          ‘poweroff’
     ‘handle-suspend-key’
          ‘suspend’
     ‘handle-hibernate-key’
          ‘hibernate’
     ‘handle-lid-switch’
          ‘suspend’
     ‘handle-lid-switch-docked’
          ‘ignore’
     ‘handle-lid-switch-external-power’
          ‘*unspecified*’
     ‘power-key-ignore-inhibited?’
          ‘#f’
     ‘suspend-key-ignore-inhibited?’
          ‘#f’
     ‘hibernate-key-ignore-inhibited?’
          ‘#f’
     ‘lid-switch-ignore-inhibited?’
          ‘#t’
     ‘holdoff-timeout-seconds’
          ‘30’
     ‘idle-action’
          ‘ignore’
     ‘idle-action-seconds’
          ‘(* 30 60)’
     ‘runtime-directory-size-percent’
          ‘10’
     ‘runtime-directory-size’
          ‘#f’
     ‘remove-ipc?’
          ‘#t’
     ‘suspend-state’
          ‘("mem" "standby" "freeze")’
     ‘suspend-mode’
          ‘()’
     ‘hibernate-state’
          ‘("disk")’
     ‘hibernate-mode’
          ‘("platform" "shutdown")’
     ‘hybrid-sleep-state’
          ‘("disk")’
     ‘hybrid-sleep-mode’
          ‘("suspend" "platform" "shutdown")’

 -- Scheme-Prozedur: accountsservice-service [#:accountsservice
          ACCOUNTSSERVICE] Liefert einen Dienst, der
     AccountsService ausführt. Dabei handelt es sich um einen
     Systemdienst, mit dem verfügbare Benutzerkonten aufgelistet und
     deren Passwörter geändert werden können, und Ähnliches.
     AccountsService arbeitet mit PolicyKit zusammen, um es Benutzern
     ohne besondere Berechtigungen zu ermöglichen, ihre
     Systemkonfiguration zu ändern. Siehe den Webauftritt von
     AccountsService
     (https://www.freedesktop.org/wiki/Software/AccountsService/) für
     weitere Informationen.

     Das Schlüsselwortargument ACCOUNTSSERVICE gibt das
     ‘accountsservice’-Paket an, das als Dienst verfügbar gemacht wird.

 -- Scheme-Prozedur: polkit-service [#:polkit POLKIT] Liefert einen
          Dienst, der
     Polkit als Dienst zur Verwaltung von Berechtigungen
     (https://www.freedesktop.org/wiki/Software/polkit/) ausführt,
     wodurch Systemadministratoren auf strukturierte Weise den Zugang zu
     „privilegierten“ Operationen gewähren können, die erweiterte
     Berechtigungen erfordern. Indem der Polkit-Dienst angefragt wird,
     kann eine mit Berechtigungen ausgestattete Systemkomponente die
     Information erhalten, ob normalen Benutzern Berechtigungen gewährt
     werden dürfen. Zum Beispiel kann einer normalen Nutzerin die
     Berechtigung gegeben werden, das System in den Bereitschaftsmodus
     zu versetzen, unter der Voraussetzung, dass sie lokal vor Ort
     angemeldet ist.

 -- Scheme-Variable: polkit-wheel-service
     Dieser Dienst richtet die ‘wheel’-Benutzergruppe als
     Administratoren für den Polkit-Dienst ein. Der Zweck davon ist,
     dass Benutzer in der ‘wheel’-Benutzergruppe nach ihren eigenen
     Passwörtern gefragt werden statt dem Passwort des
     Administratornutzers ‘root’, wenn sie administrative Tätigkeiten
     durchführen, ähnlich dem, wie sich ‘sudo’ verhält.

 -- Scheme-Variable: upower-service-type
     Typ des Dienstes, der ‘upowerd’ (https://upower.freedesktop.org/)
     ausführt, ein Programm zur systemweiten Überwachung des
     Energieverbrauchs und der Akkuladung. Er hat die angegebenen
     Konfigurationseinstellungen.

     Er implementiert die D-Bus-Schnittstelle ‘org.freedesktop.UPower’.
     Insbesondere wird UPower auch von GNOME benutzt.

 -- Datentyp: upower-configuration
     Repräsentiert die Konfiguration von UPower.

     ‘upower’ (Vorgabe: UPOWER)
          Das Paket, das für ‘upower’ benutzt werden soll.

     ‘watts-up-pro?’ (Vorgabe: ‘#f’)
          Aktiviert das Watts-Up-Pro-Gerät.

     ‘poll-batteries?’ (Vorgabe: ‘#t’)
          Aktiviert das regelmäßige Abfragen des Kernels bezüglich
          Änderungen am Stand der Akku-Ladung.

     ‘ignore-lid?’ (Vorgabe: ‘#f’)
          Ignorieren, ob der Rechner zugeklappt ist. Das kann gewünscht
          sein, wenn Auf- und Zuklappen nicht richtig erkannt werden.

     ‘use-percentage-for-policy?’ (Vorgabe: ‘#t’)
          Ob sich die Richtlinie am Akku-Ladestand in Prozent statt an
          der verbleibenden Zeit orientieren soll. Eine Richtlinie, die
          den Prozentstand als Orientierung nimmt, ist in der Regel
          zuverlässiger.

     ‘percentage-low’ (Vorgabe: ‘20’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#t’ gesetzt ist, wird
          hiermit der Prozentstand festgelegt, ab dem der Akku-Ladestand
          als niedrig gilt.

     ‘percentage-critical’ (Vorgabe: ‘5’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#t’ gesetzt ist, wird
          hiermit der Prozentstand festgelegt, ab dem der Akku-Ladestand
          als kritisch gilt.

     ‘percentage-action’ (Vorgabe: ‘2’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#t’ gesetzt ist, wird
          hiermit der Prozentstand festgelegt, ab dem Maßnahmen
          eingeleitet werden.

     ‘time-low’ (Vorgabe: ‘1200’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#f’ gesetzt ist, wird
          hiermit die verbleibende Zeit in Sekunden festgelegt, ab der
          der Akku-Ladestand als niedrig gilt.

     ‘time-critical’ (Vorgabe: ‘300’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#f’ gesetzt ist, wird
          hiermit die verbleibende Zeit in Sekunden festgelegt, ab der
          der Akku-Ladestand als kritisch gilt.

     ‘time-action’ (Vorgabe: ‘120’)
          Wenn ‘use-percentage-for-policy?’ auf ‘#f’ gesetzt ist, wird
          hiermit die verbleibende Zeit in Sekunden festgelegt, ab der
          Maßnahmen eingeleitet werden.

     ‘critical-power-action’ (Vorgabe: ‘'hybrid-sleep’)
          Welche Maßnahme eingeleitet wird, wenn die ‘percentage-action’
          oder ‘time-action’ erreicht wurde (je nachdem, wie
          ‘use-percentage-for-policy?’ eingestellt wurde).

          Mögliche Werte sind:

             • ‘'power-off’

             • ‘'hibernate’

             • ‘'hybrid-sleep’.

 -- Scheme-Prozedur: udisks-service [#:udisks UDISKS]
     Liefert einen Dienst für UDisks
     (https://udisks.freedesktop.org/docs/latest/), einen Daemon zur
     “Datenträgerverwaltung”, der Benutzeroberflächen mit
     Benachrichtigungen und Möglichkeiten zum Einbinden und Aushängen
     von Datenträgern versorgt. Zu den Programmen, die mit UDisks
     kommunizieren, gehört der Befehl ‘udisksctl’, der Teil von UDisks
     ist, sowie GNOME Disks. Beachten Sie, dass Udisks über den Befehl
     ‘mount’ funktioniert; man kann damit also nur die
     Dateisystemwerkzeuge benutzen, die ins Systemprofil installiert
     sind. Wenn Sie also NTFS-Dateisysteme zum Lesen und Schreiben
     öffnen können möchten, müssen Sie ‘ntfs-3g’ systemweit installiert
     haben.

 -- Scheme-Variable: colord-service-type
     Dies ist der Typ des Dienstes, der ‘colord’ ausführt. Dabei handelt
     es sich um einen Systemdienst mit einer D-Bus-Schnittstelle, um die
     Farbprofile von Ein- und Ausgabegeräten wie Bildschirmen oder
     Scannern zu verwalten. Insbesondere wird colord vom grafischen
     GNOME-Farbverwaltungswerkzeug benutzt. Siehe den Webauftritt von
     colord (https://www.freedesktop.org/software/colord/) für weitere
     Informationen.

 -- Scheme-Variable: sane-service-type
     Mit diesem Dienst wird Zugriff auf Scanner über SANE
     (http://www.sane-project.org) möglich, indem er die nötigen
     udev-Regeln installiert. Er ist Teil von ‘%desktop-services’ (siehe
     *note Desktop-Dienste::) und verwendet in den Vorgabeeinstellungen
     das Paket ‘sane-backends-minimal’ (siehe unten) für die
     Hardwareunterstützung.

 -- Scheme-Variable: sane-backends-minimal
     Das vorgegebene Paket, das durch den ‘sane-service-type’
     installiert wird. Es unterstützt viele aktuelle Scanner.

 -- Scheme-Variable: sane-backends
     Dieses Paket bietet Unterstützung für alle Scanner, die
     ‘sane-backends-minimal’ unterstützt, und außerdem für ältere
     Hewlett-Packard-Scanner, die das Paket ‘hplip’ unterstützt. Um es
     auf einem System zu benutzen, das auf den ‘%desktop-services’
     aufbaut, können Sie ‘modify-services’ benutzen (siehe *note
     ‘modify-services’: Service-Referenz.), etwa so:

          (use-modules (gnu))
          (use-service-modules
            …
            desktop)
          (use-package-modules
            …
            scanner)

          (define %my-desktop-services
            ;; Alternative Diensteliste wie %desktop-services mit Unterstützung
            ;; für mehr Scanner.
            (modify-services %desktop-services
              (sane-service-type _ => sane-backends)))

          (operating-system
            …
            (services %my-desktop-services))

 -- Scheme-Prozedur: geoclue-application Name [#:allowed? #t] [#:system?
          #f] [#:users '()]
     Liefert eine Konfiguration, mit der eine Anwendung auf Ortungsdaten
     von GeoClue zugreifen kann. Als NAME wird die Desktop-ID der
     Anwendung angegeben, ohne die Pfadkomponente mit ‘.desktop’-Endung.
     Wenn ALLOWED? wahr ist, hat die Anwendung standardmäßig Zugriff auf
     Ortungsinformationen. Der boolesche Wert SYSTEM? zeigt an, ob die
     Anwendung eine Systemkomponente ist oder nicht. Zum Schluss wird
     für USERS eine Liste von Benutzeridentifikatoren (UIDs) aller
     Benutzerkonten angegeben, für die diese Anwendung Zugriff auf
     Ortungsinformationen gewährt bekommt. Eine leere Benutzerliste
     bedeutet, dass dies für alle Benutzer gewährt wird.

 -- Scheme-Variable: %standard-geoclue-applications
     Die Standardliste wohlbekannter GeoClue-Anwendungskonfigurationen,
     mit der das GNOME-Werkzeug für Datum und Uhrzeit die Berechtigung
     bekommt, den aktuellen Ort abzufragen, um die Zeitzone festzulegen,
     und die Webbrowser IceCat und Epiphany Ortsinformationen abfragen
     dürfen. IceCat und Epiphany fragen beide zuerst beim Benutzer nach,
     bevor sie einer Webseite gestatten, den Ort des Benutzer
     abzufragen.

 -- Scheme-Prozedur: geoclue-service [#:colord COLORD] [#:whitelist '()]
           [#:wifi-geolocation-url
     "https://location.services.mozilla.com/v1/geolocate?key=geoclue"]
      [#:submit-data? #f] [#:wifi-submission-url
     "https://location.services.mozilla.com/v1/submit?key=geoclue"]
      [#:submission-nick "geoclue"]  [#:applications
     %standard-geoclue-applications] Liefert einen Dienst, der den
     Ortungsdienst GeoClue ausführt. Dieser Dienst bietet eine
     D-Bus-Schnittstelle an, mit der Anwendungen Zugriff auf den
     physischen Ort eines Benutzers anfragen können, und optional
     Informationen in Online-Ortsdatenbanken eintragen können. Siehe den
     Webauftritt von GeoClue
     (https://wiki.freedesktop.org/www/Software/GeoClue/) für weitere
     Informationen.

 -- Scheme-Prozedur: bluetooth-service [#:bluez BLUEZ]
          [#:auto-enable? #f] Liefert einen Dienst, der den
     ‘bluetoothd’-Daemon ausführt, welcher alle Bluetooth-Geräte
     verwaltet, und eine Reihe von D-Bus-Schnittstellen zur Verfügung
     stellt. Wenn AUTO-ENABLE? wahr ist, wird die Bluetooth-Steuerung
     automatisch beim Hochfahren gestartet, was sich als nützlich
     erweisen kann, wenn man eine Bluetooth-Tastatur oder -Maus benutzt.

     Benutzer müssen zur ‘lp’-Benutzergruppe gehören, damit sie Zugriff
     auf den D-Bus-Dienst bekommen.

 -- Scheme-Variable: bluetooth-service-type
     Dies ist der Diensttyp für das System zum
     Linux-Bluetooth-Protokollstapel (https://bluez.org/) (BlueZ), das
     die Konfigurationsdatei ‘/etc/bluetooth/main.conf’ erzeugt. Der
     Wert für diesen Diensttyp ist ein
     ‘bluetooth-configuration’-Verbundsobjekt wie in diesem Beispiel:

          (service bluetooth-service-type)

     Siehe unten für Details zur ‘bluetooth-configuration’.

 -- Datentyp: bluetooth-configuration
     Repräsentiert die Konfiguration für den ‘bluetooth-service-type’.

     ‘bluez’ (Vorgabe: ‘bluez’)
          Zu benutzendes ‘bluez’-Paket.

     ‘name’ (Vorgabe: ‘"BlueZ"’)
          Welchen Namen Sie für den Adapter als Voreinstellung geben.

     ‘class’ (Vorgabe: ‘#x000000’)
          Welche Geräteklasse Sie als Voreinstellung geben. Nur die Bits
          für „major device class“ und „minor device class“ werden
          beachtet.

     ‘discoverable-timeout’ (Vorgabe: ‘180’)
          Wie lange der Adapter erkennbar bleiben soll („discoverable
          mode“), bevor die Erkennbarkeit endet. Der Wert wird in
          Sekunden angegeben.

     ‘always-pairable?’ (Vorgabe: ‘#f’)
          Koppeln von Geräten immer zulassen, so dass kein Agent
          registriert sein muss.

     ‘pairable-timeout’ (Vorgabe: ‘0’)
          Wie lange Koppeln möglich sein soll („pairable mode“), bevor
          die Erkennbarkeit endet. Der Wert wird in Sekunden angegeben.

     ‘device-id’ (Vorgabe: ‘#f’)
          Dieses Gerät mit dieser Geräteidentifikatorbezugsquelle
          („vendor id source“, d.h. Assigner), Geräteidentifikator,
          Produkt- sowie Versionsinformationen im Device-ID-Profil
          ausweisen. Die Werte für ASSIGNER, VID, PID und VERSION werden
          durch ":" getrennt.

          Mögliche Werte sind:

             • ‘#f’, um nichts festzulegen.

             • ‘"assigner:1234:5678:abcd"’, wobei ASSIGNER entweder
               ‘usb’ ist (die Voreinstellung) oder ‘bluetooth’.

     ‘reverse-service-discovery?’ (Vorgabe: ‘#t’)
          Bluetooth-Dienste auf Geräten erkennen, die sich mit unserem
          Gerät verbinden. Bei BR/EDR braucht man diese Option
          eigentlich nur für den Qualifizierungsprozess, weil der
          BITE-Tester in manchen Testfällen etwas gegen inverses SDP
          hat; bei LE wird hiermit die Funktion als GATT-Client
          deaktiviert, was sinnvoll ist, wenn unser System nur als
          Peripheriegerät eingesetzt wird.

     ‘name-resolving?’ (Vorgabe: ‘#t’)
          Namensauflösung bei Gerätesuche („Inquiry“) aktivieren. Legen
          Sie es auf ‘#f’ fest, wenn Sie die Namen der entfernten Geräte
          nicht brauchen und Erkennungszyklen beschleunigen möchten.

     ‘debug-keys?’ (Vorgabe: ‘#f’)
          Ob „debug link keys“ für die Laufzeit persistent gespeichert
          werden. Vorgegeben ist ‘#f’; sie bleiben also nur gültig,
          solange die Verbindung mit ihnen anhält.

     ‘controller-mode’ (Vorgabe: ‘'dual’)
          Schränkt die Controller auf das angegebene Transportprotokoll
          ein. Bei ‘'dual’ werden sowohl BR/EDR als auch LE benutzt
          (wenn die Hardware sie unterstützt).

          Mögliche Werte sind:

             • ‘'dual’

             • ‘'bredr’

             • ‘'le’

     ‘multi-profile’ (Vorgabe: ‘'off’)
          Unterstützung für Multi Profile Specification aktivieren.
          Hiermit kann eingestellt werden, ob ein System nur in
          Konfigurationen von Multiple Profiles Single Device (MPSD)
          laufen kann oder sowohl mit Konfigurationen in Multiple
          Profiles Single Device (MPSD) als auch Konfigurationen in
          Multiple Profiles Multiple Devices (MPMD) umgehen kann.

          Mögliche Werte sind:

             • ‘'off’

             • ‘'single’

             • ‘'multiple’

     ‘fast-connectable?’ (Vorgabe: ‘#f’)
          Dauerhaft eine beschleunigte Verbindung („Fast Connectable“)
          bei Adaptern, die sie unterstützen, ermöglichen. Ist dies
          aktiviert, können sich andere Geräte schneller mit unserem
          verbinden, jedoch steigt der Stromverbrauch. Diese Funktion
          steht nur auf Kernel-Version 4.1 und neuer vollständig zur
          Verfügung.

     ‘privacy’ (Vorgabe: ‘'off’)
          Die Voreinstellung zur Verfolgbarkeit.

             • ‘'off’: Nicht privat stellen.

             • ‘'network/on’: Ein Gerät nimmt nur Mitteilungen
               („advertising packets“) von anderen Geräten an, die
               private Adressen enthalten. Mit manchen alten Geräten
               funktioniert das vielleicht nicht, weil es voraussetzt,
               dass für alles RPA(s) benutzt werden.

             • ‘'device’: Auf „device privacy mode“ gestellte Geräte
               schützen nur vor Nachverfolgbarkeit des jeweiligen
               Geräts, aber wenn Mitteilungen von anderen Geräten deren
               Identity Address preisgeben, werden sie genauso
               akzeptiert wie eine private Adresse. Das gilt auch bei
               anderen Geräten, die in der Vergangenheit ihre IRK
               mitgeteilt hatten.

          Des Weiteren gibt es folgende Möglichkeiten, wenn
          CONTROLLER-MODE auf ‘'dual’ gesetzt ist:

             • ‘'limited-network’: Limited Discoverable Mode für
               Mitteilungen einsetzen, wodurch wie bei BR/EDR die
               Identity Address mitgeteilt wird, wenn das Gerät
               erkennbar ist, aber Network Privacy Mode beim Scannen
               nach Geräten gilt.

             • ‘'limited-network’: Limited Discoverable Mode für
               Mitteilungen einsetzen, wodurch wie bei BR/EDR die
               Identity Address mitgeteilt wird, wenn das Gerät
               erkennbar ist, aber Device Privacy Mode beim Scannen nach
               Geräten gilt.

     ‘just-works-repairing’ (Vorgabe: ‘'never’)
          Wie auf einen vom anderen Gerät ausgelösten JUST-WORKS-Vorgang
          reagiert werden soll. Bei ‘'always’ wird das andere Gerät
          akzeptiert, bei ‘'never’ abgelehnt und bei ‘'confirm’
          nachgefragt.

          Mögliche Werte sind:
             • ‘'never’

             • ‘'confirm’

             • ‘'always’

     ‘temporary-timeout’ (Vorgabe: ‘30’)
          Wie lange ein temporäres Gerät koppelbar bleibt. Der Wert wird
          in Sekunden angegeben. Bei ‘0’ läuft die Zeit nie aus.

     ‘refresh-discovery?’ (Vorgabe: ‘#t’)
          Zulassen, dass das Gerät eine SDP-Anfrage schickt, um bekannte
          Dienste zu ermitteln, sobald eine Verbindung hergestellt
          wurde.

     ‘experimental’ (Vorgabe: ‘#f’)
          Experimentelle Funktionen und Schnittstellen bereitstellen.
          Sie können auch als Liste von UUIDs angegeben werden.

          Mögliche Werte sind:

             • ‘#t’

             • ‘#f’

             • ‘(list (uuid <uuid-1>) (uuid <uuid-2>) …)’.

          Die Liste der möglichen UUIDs:
             • ‘d4992530-b9ec-469f-ab01-6c481c47da1c’: BlueZ
               Experimental Debug,

             • ‘671b10b5-42c0-4696-9227-eb28d1b049d6’: BlueZ
               Experimental Simultaneous Central and Peripheral,

             • ‘"15c0a148-c273-11ea-b3de-0242ac130004’: BlueZ
               Experimental LL privacy,

             • ‘330859bc-7506-492d-9370-9a6f0614037f’: BlueZ
               Experimental Bluetooth Quality Report,

             • ‘a6695ace-ee7f-4fb9-881a-5fac66c629af’: BlueZ
               Experimental Offload Codecs.

     ‘remote-name-request-retry-delay’ (Vorgabe: ‘300’)
          Wie lange nach einer fehlgeschlagenen Namensauflösung _keine_
          erneute Auflösung des Namens des anderen Geräts versucht
          werden soll.

     ‘page-scan-type’ (Vorgabe: ‘#f’)
          Auf welche Art die Erkennung („Scan“) von Verbindungsversuchen
          („Paging“) bei BR/EDR durchgeführt wird.

     ‘page-scan-interval’ (Vorgabe: ‘#f’)
          Aktivitätsintervall zwischen Anfängen von Erkennungsphasen von
          Verbindungsversuchen bei BR/EDR.

     ‘page-scan-window’ (Vorgabe: ‘#f’)
          Aktivitätsfenster jeder Erkennungsphase von
          Verbindungsversuchen bei BR/EDR.

     ‘inquiry-scan-type’ (Vorgabe: ‘#f’)
          Auf welche Art die Erkennung von Gerätesuchen („Inquiry“) bei
          BR/EDR durchgeführt wird.

     ‘inquiry-scan-interval’ (Vorgabe: ‘#f’)
          Aktivitätsintervall zwischen Anfängen von Erkennungsphasen von
          Gerätesuchen bei BR/EDR.

     ‘inquiry-scan-window’ (Vorgabe: ‘#f’)
          Aktivitätsfenster jeder Erkennungsphase von Gerätesuchen bei
          BR/EDR.

     ‘link-supervision-timeout’ (Vorgabe: ‘#f’)
          Zeitbegrenzung, ab der eine inaktive Verbindung bei BR/EDR als
          getrennt gilt.

     ‘page-timeout’ (Vorgabe: ‘#f’)
          Zeitbegrenzung, ab der ein unbeantworteter Verbindungsversuch
          bei BR/EDR als gescheitert gilt.

     ‘min-sniff-interval’ (Vorgabe: ‘#f’)
          Minimale Intervalllänge im Sniff-Modus bei BR/EDR.

     ‘max-sniff-interval’ (Vorgabe: ‘#f’)
          Maximale Intervalllänge im Sniff-Modus bei BR/EDR.

     ‘min-advertisement-interval’ (Vorgabe: ‘#f’)
          Minimale Intervalllänge zwischen Mitteilungen bei LE (nur für
          Legacy Advertisement).

     ‘max-advertisement-interval’ (Vorgabe: ‘#f’)
          Maximale Intervalllänge zwischen Mitteilungen bei LE (nur für
          Legacy Advertisement).

     ‘multi-advertisement-rotation-interval’ (Vorgabe: ‘#f’)
          Wenn verschiedene Mitteilungen ausgegeben werden, mit welchem
          Intervall dazwischen rotiert wird, bei LE.

     ‘scan-interval-auto-connect’ (Vorgabe: ‘#f’)
          Intervall zwischen Anfängen von Erkennungsphasen bei passiven
          Erkennungen zur Unterstützung für autonome Verbindung, bei LE.

     ‘scan-window-auto-connect’ (Vorgabe: ‘#f’)
          Länge jedes Erkennungsfensters bei passiven Erkennungen zur
          Unterstützung für autonome Verbindung, bei LE.

     ‘scan-interval-suspend’ (Vorgabe: ‘#f’)
          Intervall zwischen Anfängen von Erkennungsphasen bei aktiven
          Erkennungen zur Unterstützung für Wake-from-Suspend, bei LE.

     ‘scan-window-suspend’ (Vorgabe: ‘#f’)
          Länge jedes Erkennungsfensters bei aktiven Erkennungen zur
          Unterstützung für Wake-from-Suspend, bei LE.

     ‘scan-interval-discovery’ (Vorgabe: ‘#f’)
          Intervall zwischen Anfängen von Erkennungsphasen bei aktiven
          Erkennungen von sich mitteilenden Geräten, bei LE.

     ‘scan-window-discovery’ (Vorgabe: ‘#f’)
          Länge jedes Erkennungsfensters bei aktiven Erkennungen von
          sich mitteilenden Geräten, bei LE.

     ‘scan-interval-adv-monitor’ (Vorgabe: ‘#f’)
          Intervall zwischen Anfängen von Erkennungsphasen bei passiven
          Erkennungen zur Unterstützung der
          Advertisement-Monitor-Programmschnittstellen, bei LE.

     ‘scan-window-adv-monitor’ (Vorgabe: ‘#f’)
          Länge jedes Erkennungsfensters bei passiven Erkennungen zur
          Unterstützung der
          Advertisement-Monitor-Programmschnittstellen, bei LE.

     ‘scan-interval-connect’ (Vorgabe: ‘#f’)
          Intervall zwischen Anfängen von Erkennungsphasen beim
          Verbindungsaufbau.

     ‘scan-window-connect’ (Vorgabe: ‘#f’)
          Länge jedes Erkennungsfensters beim Verbindungsaufbau.

     ‘min-connection-interval’ (Vorgabe: ‘#f’)
          Kleinstes gewünschtes Intervall für eine Verbindung, bei LE.
          Demgegenüber hat Vorrang, wenn ein Wert über die Schnittstelle
          Load Connection Parameters bestimmt wird.

     ‘max-connection-interval’ (Vorgabe: ‘#f’)
          Größtes gewünschtes Intervall für eine Verbindung, bei LE.
          Demgegenüber hat Vorrang, wenn ein Wert über die Schnittstelle
          Load Connection Parameters bestimmt wird.

     ‘connection-latency’ (Vorgabe: ‘#f’)
          Gewünschte Latenz für eine Verbindung, bei LE. Demgegenüber
          hat Vorrang, wenn ein Wert über die Schnittstelle Load
          Connection Parameters bestimmt wird.

     ‘connection-supervision-timeout’ (Vorgabe: ‘#f’)
          Gewünschte Zeitbegrenzung, ab der eine inaktive Verbindung als
          getrennt gilt, bei LE. Demgegenüber hat Vorrang, wenn ein Wert
          über die Schnittstelle Load Connection Parameters bestimmt
          wird.

     ‘autoconnect-timeout’ (Vorgabe: ‘#f’)
          Gewünschte Zeitbegrenzung für autonome Verbindungsversuche,
          bei LE. Demgegenüber hat Vorrang, wenn ein Wert über die
          Schnittstelle Load Connection Parameters bestimmt wird.

     ‘adv-mon-allowlist-scan-duration’ (Vorgabe: ‘300’)
          Dauer der Erkennungsphasen für Geräte auf der Liste erlaubter
          Geräte bei verzahnten Arten der Erkennungsphase („Interleaving
          Scan“). Wird nur bei Erkennungsphasen für Advertisement
          Monitors benutzt. Gemessen in Millisekunden.

     ‘adv-mon-no-filter-scan-duration’ (Vorgabe: ‘500’)
          Dauer der Erkennungsphasen für ungefiltert alle Geräte bei
          verzahnten Arten der Erkennungsphase („Interleaving Scan“).
          Wird nur bei Erkennungsphasen für Advertisement Monitors
          benutzt. Gemessen in Millisekunden.

     ‘enable-adv-mon-interleave-scan?’ (Vorgabe: ‘#t’)
          Verzahnte Arten der Erkennungsphasen für Advertisement
          Monitors benutzen, was beim Energiesparen hilft.

     ‘cache’ (Vorgabe: ‘'always’)
          GATT-Attribute-Zwischenspeicher.

          Mögliche Werte sind:
             • ‘'always’: Immer Attribute zwischenspeichern, selbst von
               nicht gekoppelten Geräten. So klappt die Zusammenarbeit
               mit Geräten am besten, die Dauer für eine erneute
               Verbindung bleibt konsistent und man kann
               Benachrichtigungen für alle Geräte nachvollziehen.

             • ‘'yes’: Nur für gekoppelte Geräte deren Attribute
               speichern.

             • ‘'no’: Niemals Attribute zwischenspeichern.

     ‘key-size’ (Vorgabe: ‘0’)
          Kleinste von diesem Gerät eingeforderte Schlüsselgröße
          („Encryption Key Size“), um auf die gesicherten
          Charakteristika zuzugreifen.

          Mögliche Werte sind:
             • ‘0’: Keine Anforderungen.

             • ‘7 <= N <= 16’

     ‘exchange-mtu’ (Vorgabe: ‘517’)
          Wie groß die „Exchange MTU“ für GATT sein soll. Mögliche Werte
          sind:

             • ‘23 <= N <= 517’

     ‘att-channels’ (Vorgabe: ‘3’)
          Anzahl der ATT-Kanäle. Mögliche Werte sind:

             • ‘1’: EATT ist deaktiviert.

             • ‘2 <= N <= 5’

     ‘session-mode’ (Vorgabe: ‘'basic’)
          Für AVDTP der Modus des L2CAP-Signaling-Kanals.

          Mögliche Werte sind:

             • ‘'basic’: L2CAP Basic Mode benutzen.

             • ‘'ertm’: L2CAP Enhanced Retransmission Mode benutzen.

     ‘stream-mode’ (Vorgabe: ‘'basic’)
          Für AVDTP der Modus des L2CAP Transport Channel.

          Mögliche Werte sind:

             • ‘'basic’: L2CAP Basic Mode benutzen.

             • ‘'streaming’: L2CAP Streaming Mode benutzen.

     ‘reconnect-uuids’ (Vorgabe: ‘'()’)
          Als die ReconnectUUIDs definieren Sie diejenigen Dienste
          entfernter Geräte, mit denen eine neue Verbindung aufgebaut
          werden soll, wenn die Verbindung abreißt (durch „link
          supervision timeout“, d.h. die Zeitbegrenzung, ab der eine
          inaktive Verbindung als getrennt gilt). Im Policy-Plugin
          sollte eine vernünftige Voreinstellung zu finden sein. Die
          Liste hier hat Vorrang. Wenn Sie die leere Liste angeben,
          werden Verbindungen _nicht_ neu aufgebaut.

          Mögliche Werte sind:

             • ‘'()’

             • ‘(list (uuid <uuid-1>) (uuid <uuid-2>) …)’.

     ‘reconnect-attempts’ (Vorgabe: ‘7’)
          Wie oft bei einem Verbindungsverlust versucht werden soll,
          eine neue Verbindung aufzubauen. Für den Wert 0 wird
          Neuverbinden deaktiviert.

     ‘reconnect-intervals’ (Vorgabe: ‘'(1 2 4 8 16 32 64)’)
          Definiert eine Liste von Zeitintervallen in Sekunden, wie
          lange nach jedem Versuch gewartet wird. Wenn die in
          RECONNECT-ATTEMPTS festgelegte Anzahl Versuche größer ist als
          die Liste der Zeitintervalle lang ist, wird das letzte
          Intervall wiederholt, bis alle Versuche ausgeschöpft sind.

     ‘auto-enable?’ (Vorgabe: ‘#f’)
          Ob alle erkannten Controller sofort aktiviert werden sollen.
          Dazu zählen Adapter, die beim Hochfahren schon verfügbar sind,
          wie auch Adapter, die später erst eingesteckt werden.

     ‘resume-delay’ (Vorgabe: ‘2’)
          Audio-Geräte, die durch einen Ruhezustand getrennt wurden,
          werden beim Aufwecken neu verbunden. Mit RESUME-DELAY wird
          festgelegt, wie lange nach dem Aufwecken des Controllers mit
          einem Neuverbindungsversuch gewartet wird. Wenn mit der
          Neuverbindung länger gewartet wird, gibt es weniger Probleme
          mit gleichzeitig genutztem WLAN. Der Wert wird in Sekunden
          angegeben.

     ‘rssi-sampling-period’ (Vorgabe: ‘#xFF’)
          Voreinstellung für die RSSI-Abtastperiode. Sie wird benutzt,
          wenn ein Client einen Advertisement Monitor registriert und
          die RSSISamplingPeriod _nicht_ vorgibt.

          Mögliche Werte sind:
             • ‘#x0’: Alle Mitteilungen melden.

             • ‘N = #xXX’: Mitteilungen alle N x 100 msec melden (aus
               dem Bereich: #x01 to #xFE)

             • ‘#xFF’: In der Beobachtungsphase nur eine Mitteilung pro
               Gerät melden.

 -- Scheme-Variable: gnome-keyring-service-type
     Dies ist der Typ des Dienstes, der den GNOME-Schlüsselbund
     (https://wiki.gnome.org/Projects/GnomeKeyring) bereitstellt. Sein
     Wert ist ein ‘gnome-keyring-configuration’-Objekt (siehe unten).

     Dieser Dienst fügt das ‘gnome-keyring’-Paket zum Systemprofil hinzu
     und erweitert PAM um Einträge zur Nutzung von
     ‘pam_gnome_keyring.so’, wodurch der Schlüsselbund von Nutzern
     entsperrt wird, wenn sie sich anmelden, und passwd auch das
     Passwort des Schlüsselbunds festlegt.

 -- Datentyp: gnome-keyring-configuration
     Verbundsobjekt für die Konfiguration des
     GNOME-Schlüsselbunddienstes.

     ‘keyring’ (Vorgabe: ‘gnome-keyring’)
          Welches GNOME-Schlüsselbund-Paket benutzt werden soll.

     ‘pam-services’
          Eine Liste von Paaren aus ‘(DIENST . TYP)’, die zu erweiternde
          PAM-Dienste bezeichnen. Dabei steht DIENST für den Namen eines
          bestehenden Dienstes, der erweitert werden soll, und als TYP
          kann ‘login’ oder ‘passwd’ angegeben werden.

          Wenn ‘login’ angegeben wird, wird ein optionales
          ‘pam_gnome_keyring.so’ zum Auth-Block ohne Argumente und zum
          Session-Block mit ‘auto_start’ hinzugefügt. Wenn ‘passwd’
          angegeben wird, wird ein optionales ‘pam_gnome_keyring.so’ zum
          Password-Block ohne Argumente hinzugefügt.

          Der vorgegebene Inhalt ist „gdm-password“ mit dem Wert ‘login’
          und „passwd“ mit dem Wert ‘passwd’.

 -- Scheme-Variable: seatd-service-type
     seatd (https://sr.ht/~kennylevinsen/seatd/) ist ein minimaler
     Daemon zur Sitzungsverwaltung.

     Sitzungsverwaltung bedeutet, dass der Zugriff auf gemeinsame Geräte
     (Grafik, Eingabegeräte) vermittelt wird, ohne dass die Anwendungen,
     die zugreifen wollen, Administratorrechte brauchen.

          (append
            (list
             ;; damit seatd läuft
             (service seatd-service-type))

            ;; normalerweise zusammen mit %base-services
            %base-services)


     ‘seatd’ funktioniert über einen Unix-Socket. Dabei stellt ‘libseat’
     den clientseitigen Teil des Protokolls bereit. Wenn Anwendungen
     über ‘seatd’ Zugriff auf die gemeinsamen Ressourcen brauchen (z.B.
     ‘sway’), dann müssen sie Zugriff auf diesen Socket haben. Um das zu
     bewerkstelligen, kann man das Benutzerkonto, mit dem sie laufen,
     zur Gruppe hinzufügen, der der Socket von ‘seatd’ gehört (in der
     Regel die Gruppe „seat“). Das geht so:

          (user-account
            (name "alice")
            (group "users")
            (supplementary-groups '("wheel"   ;zur sudo-Nutzung usw. berechtigen
                                    "seat"    ;Sitzungsverwaltung
                                    "audio"   ;Soundkarte
                                    "video"   ;Videogeräte wie Webcams
                                    "cdrom")) ;die gute alte CD-ROM
            (comment "Bobs Schwester"))

     Je nachdem, wie Sie das System einrichten, müssen Sie nicht nur
     normale Benutzer, sondern auch Systembenutzerkonten, zu dieser
     Gruppe hinzufügen. Zum Beispiel verlangen manche greetd-Greeter,
     dass Grafik zur Verfügung steht, also müssen auch diese
     Benutzerkonten das mit seatd aushandeln können.

 -- Datentyp: seatd-configuration
     Verbundsobjekt für die Konfiguration des seatd-Daemon-Dienstes.

     ‘seatd’ (Vorgabe: ‘seatd’)
          Das zu benutzende seatd-Paket.

     ‘group’ (Vorgabe: ‘"seat"’)
          Die Gruppe, die den seatd-Socket besitzt.

     ‘socket’ (Vorgabe: ‘"/run/seatd.sock"’)
          Wo der seatd-Socket erzeugt wird.

     ‘logfile’ (Vorgabe: ‘"/var/log/seatd.log"’)
          In welche Protokolldatei geschrieben wird.

     ‘loglevel’ (Vorgabe: ‘"error"’)
          Die Protokollierungsstufe, wie ausführlich die Ausgaben ins
          Protokoll sind. Mögliche Werte: ‘"silent"’ (keine Ausgaben),
          ‘"error"’ (nur Fehler), ‘"info"’ und ‘"debug"’ (zur
          Fehlersuche).


File: guix.de.info,  Node: Tondienste,  Next: Datenbankdienste,  Prev: Desktop-Dienste,  Up: Dienste

12.9.10 Tondienste
------------------

Das Modul ‘(gnu services sound)’ stellt einen Dienst zur Verfügung, um
das Advanced-Linux-Sound-Architecture-System (ALSA) zu konfigurieren, so
dass PulseAudio als bevorzugter ALSA-Ausgabetreiber benutzt wird.

 -- Scheme-Variable: alsa-service-type
     Dies ist der Typ des Dienstes für das als Advanced Linux Sound
     Architecture (ALSA) (https://alsa-project.org/) bekannte System,
     das die Konfigurationsdatei ‘/etc/asound.conf’ erzeugt. Der Wert
     für diesen Diensttyp ist ein ‘alsa-configuration’-Verbundsobjekt
     wie in diesem Beispiel:

          (service alsa-service-type)

     Siehe die folgenden Details zur ‘alsa-configuration’.

 -- Datentyp: alsa-configuration
     Repräsentiert die Konfiguration für den Dienst ‘alsa-service’.

     ‘alsa-plugins’ (Vorgabe: ALSA-PLUGINS)
          ‘alsa-plugins’-Paket, was benutzt werden soll.

     ‘pulseaudio?’ (Vorgabe: #T)
          Ob ALSA-Anwendungen transparent den PulseAudio-Audioserver
          (https://www.pulseaudio.org/) benutzen sollen.

          Wenn PulseAudio benutzt wird, können Sie gleichzeitig mehrere
          Anwendungen mit Tonausgabe ausführen und sie unter anderem mit
          ‘pavucontrol’ einzeln einstellen.

     ‘extra-options’ (Vorgabe: "")
          Die Zeichenkette, die an die Datei ‘/etc/asound.conf’
          angehängt werden soll.

   Wenn einzelne Benutzer von ALSAs Systemkonfiguration abweichende
Einstellungen vornehmen möchten, können Sie das mit der
Konfigurationsdatei ‘~/.asoundrc’ tun:

     # In Guix müssen wir den absoluten Pfad von Plugins angeben.
     pcm_type.jack {
       lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
     }

     # ALSA an jack weiterleiten:
     # <http://jackaudio.org/faq/routing_alsa.html>.
     pcm.rawjack {
       type jack
       playback_ports {
         0 system:playback_1
         1 system:playback_2
       }

       capture_ports {
         0 system:capture_1
         1 system:capture_2
       }
     }

     pcm.!default {
       type plug
       slave {
         pcm "rawjack"
       }
     }

   Siehe <https://www.alsa-project.org/main/index.php/Asoundrc> für die
Details.

 -- Scheme-Variable: pulseaudio-service-type
     Dies ist der Diensttyp für den PulseAudio-Soundserver
     (https://www.pulseaudio.org/). Mit ihm können die Voreinstellungen
     systemweit abgeändert werden. Dazu benutzen Sie eine
     ‘pulseaudio-configuration’, siehe unten.

          Warnung: Durch diesen Dienst werden Einstellungen vorgenommen,
          die Vorrang vor den Konfigurationsdateien des Benutzers haben.
          Wenn PulseAudio Konfigurationsdateien in ‘~/.config/pulse’
          beachten soll, müssen Sie die Umgebungsvariablen
          ‘PULSE_CONFIG’ und ‘PULSE_CLIENTCONFIG’ in Ihrer
          ‘~/.bash_profile’ deaktivieren.

          Warnung: Dieser Dienst sorgt alleine noch nicht dafür, dass
          auf ihrer Maschine das ‘pulseaudio’-Paket vorliegt. Er fügt
          bloß Konfigurationsdateien dafür hinzu, wie im Folgenden
          beschrieben. Für den (zugegebenermaßen unwahrscheinlichen)
          Fall, dass Ihnen ein ‘pulseaudio’-Paket fehlt, möchten Sie es
          vielleicht durch den oben genannten ‘alsa-service-type’
          aktivieren.

 -- Datentyp: pulseaudio-configuration
     Repräsentiert die Konfiguration für den Dienst
     ‘pulseaudio-service’.

     ‘client-conf’ (Vorgabe: ‘'()’)
          Eine Liste der Einstellungen, die in ‘client.conf’ vorgenommen
          werden. Hierfür wird eine Liste von entweder Zeichenketten
          oder Symbol-Wert-Paaren akzeptiert. Eine Zeichenkette wird so,
          wie sie ist, eingefügt, mit einem Zeilenumbruch danach. Ein
          Paar wird als „Schlüssel = Wert“ formatiert, auch hier gefolgt
          von einem Zeilenumbruch.

     ‘daemon-conf’ (Vorgabe: ‘'((flat-volumes . no))’)
          Eine Liste der Einstellungen, die in ‘daemon.conf’ vorgenommen
          werden, im gleichen Format wie CLIENT-CONF.

     ‘script-file’ (Vorgabe: ‘(file-append pulseaudio "/etc/pulse/default.pa")’)
          Eine Datei mit dem als ‘default.pa’ zu nutzenden Skript. Wenn
          Sie das Feld ‘extra-script-files’ von weiter unten benutzen,
          wird ans Ende des angegebenen Skripts eine
          ‘.include’-Direktive angehängt, die auf
          ‘/etc/pulse/default.pa.d’ zeigt.

     ‘extra-script-files’ (Vorgabe: ‘'()’)
          Eine Liste dateiartiger Objekte, die zusätzliche
          PulseAudio-Skripte definieren, die bei der Initialisierung des
          ‘pulseaudio’-Daemons ausgeführt werden, nachdem das
          Hauptskript aus ‘script-file’ durchgelaufen ist. Die Skripte
          werden im Verzeichnis ‘/etc/pulse/default.pa.d’ abgelegt und
          sollten als Dateinamenserweiterung ebenso ‘.pa’ haben. Eine
          Referenz der verfügbaren Befehle bekommen Sie durch Ausführen
          von ‘man pulse-cli-syntax’.

     ‘system-script-file’ (Vorgabe: ‘(file-append pulseaudio "/etc/pulse/system.pa")’)
          Welche Skriptdatei als ‘system.pa’ verwendet werden soll.

     Im folgenden Beispiel werden das Standard-PulseAudio-Kartenprofil,
     das Standard-Ziel und die Standard-Quelle für eine alte
     SoundBlaster-Audigy-Soundkarte eingerichtet:
          (pulseaudio-configuration
           (extra-script-files
            (list (plain-file "audigy.pa"
                              (string-append "\
          set-card-profile alsa_card.pci-0000_01_01.0 \
            output:analog-surround-40+input:analog-mono
          set-default-source alsa_input.pci-0000_01_01.0.analog-mono
          set-default-sink alsa_output.pci-0000_01_01.0.analog-surround-40\n")))))

     Wir merken an, dass ‘pulseaudio-service-type’ zu
     ‘%desktop-services’ dazugehört. Wenn Ihre Betriebssystemdeklaration
     also von einer der „Desktop“-Vorlagen abstammt, dann werden Sie das
     obige Beispiel anpassen wollen, damit stattdessen der in
     ‘%desktop-services’ bestehende ‘pulseaudio-service-type’-Dienst
     modifiziert wird mit ‘modify-services’ (siehe *note
     ‘modify-services’: Service-Referenz.) und kein neuer Dienst
     angelegt wird.

 -- Scheme-Variable: ladspa-service-type
     Der Diensttyp für den Dienst, der die LADSPA_PATH-Variable
     festlegt, damit sie beachtende Programme, z.B. PulseAudio,
     LADSPA-Plugins laden können.

     Das folgende Beispiel wird den Dienst so einrichten, dass Module
     aus dem ‘swh-plugins’-Paket aktiviert werden:

          (service ladspa-service-type
                   (ladspa-configuration (plugins (list swh-plugins))))

     Siehe <http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html> für
     die Details.


File: guix.de.info,  Node: Datenbankdienste,  Next: Mail-Dienste,  Prev: Tondienste,  Up: Dienste

12.9.11 Datenbankdienste
------------------------

Das Modul ‘(gnu services databases)’ stellt die folgenden Dienste zur
Verfügung.

PostgreSQL
..........

Das folgende Beispiel zeigt einen PostgreSQL-Dienst in seiner
Vorgabekonfiguration.

     (service postgresql-service-type
              (postgresql-configuration
               (postgresql postgresql-10)))

   Wenn diese Dienste nicht starten können, ist vielleicht bereits ein
inkompatibler Datenbankverbund („Cluster“) in DATA-DIRECTORY vorhanden.
Ändern Sie dann den Wert dafür (oder falls Sie den Verbund nicht mehr
brauchen, löschen Sie DATA-DIRECTORY einfach) und starten Sie den Dienst
neu.

   Nach Voreinstellung müssen sich normale Benutzerkonten des
Guix-Systems, die mit PostgreSQL kommunizieren, sogenannte „Peers“,
zunächst authentifizieren. Allerdings ist für das
‘postgres’-Benutzerkonto keine Shell eingestellt, wodurch keine
‘psql’-Befehle durch diesen Benutzer ausgeführt werden können. Um ‘psql’
benutzen zu können, können Sie sich vorläufig als der ‘postgres’-Nutzer
unter Angabe einer Shell anmelden, ein Konto für einen
PostgreSQL-Administrator (einen „Superuser“) mit demselben Namen wie
einer der Benutzer des Systems einrichten und dann die zugehörige
Datenbank erstellen.

     sudo -u postgres -s /bin/sh
     createuser --interactive
     createdb $BENUTZER_ANMELDENAME  # muss angepasst werden

 -- Datentyp: postgresql-configuration
     Der Datentyp repräsentiert die Konfiguration für den
     ‘postgresql-service-type’.

     ‘postgresql’
          Das PostgreSQL-Paket, was für diesen Dienst benutzt werden
          soll.

     ‘port’ (Vorgabe: ‘5432’)
          Der Port, auf dem PostgreSQL lauschen soll.

     ‘locale’ (Vorgabe: ‘"en_US.utf8"’)
          Welche Regions- und Spracheinstellung („Locale“) beim
          Erstellen des Datenbankverbunds voreingestellt werden soll.

     ‘config-file’ (Vorgabe: ‘(postgresql-config-file)’)
          Aus welcher Konfigurationsdatei die Laufzeitkonfiguration von
          PostgreSQL geladen werden soll. Vorgegeben ist, die
          Einstellungen aus einem postgresql-config-file-Verbundsobjekt
          mit Vorgabewerten zu nehmen.

     ‘log-directory’ (Vorgabe: ‘"/var/log/postgresql"’)
          In welchem Verzeichnis die Ausgabe von ‘pg_ctl’ in eine Datei
          namens ‘"pg_ctl.log"’ geschrieben wird. Diese Datei kann zum
          Beispiel dabei helfen, Fehler in der Konfiguration von
          PostgreSQL zu finden.

     ‘data-directory’ (Vorgabe: ‘"/var/lib/postgresql/data"’)
          Das Verzeichnis, in dem die Daten gespeichert werden sollen.

     ‘extension-packages’ (Vorgabe: ‘'()’)
          Zusätzliche Erweiterungen werden aus den unter
          EXTENSION-PACKAGES aufgeführten Paketen geladen. Erweiterungen
          sind zur Laufzeit verfügbar. Zum Beispiel kann ein Nutzer den
          postgresql-service-Dienst wie in diesem Beispiel
          konfigurieren, um eine geografische Datenbank mit Hilfe der
          ‘postgis’-Erweiterung zu erzeugen:

               (use-package-modules databases geo)

               (operating-system
                 …
                 ;; postgresql wird benötigt, um „psql“ auszuführen, aber postgis ist
                 ;; für den Betrieb nicht unbedingt notwendig.
                 (packages (cons* postgresql %base-packages))
                 (services
                   (cons*
                     (service postgresql-service-type
                              (postgresql-configuration
                               (postgresql postgresql-10)
                               (extension-packages (list postgis))))
                     %base-services)))

          Dann wird die Erweiterung sichtbar und Sie können eine leere
          geografische Datenbak auf diese Weise initialisieren:

               psql -U postgres
               > create database postgistest;
               > \connect postgistest;
               > create extension postgis;
               > create extension postgis_topology;

          Es ist nicht notwendig, dieses Feld für contrib-Erweiterungen
          wie hstore oder dblink hinzuzufügen, weil sie bereits durch
          postgresql geladen werden können. Dieses Feld wird nur
          benötigt, um Erweiterungen hinzuzufügen, die von anderen
          Paketen zur Verfügung gestellt werden.

 -- Datentyp: postgresql-config-file
     Der Datentyp, der die Konfigurationsdatei von PostgreSQL
     repräsentiert. Wie im folgenden Beispiel gezeigt, kann er benutzt
     werden, um die Konfiguration von PostgreSQL anzupassen. Es sei
     darauf hingewiesen, dass Sie jeden beliebigen G-Ausdruck oder
     Dateinamen anstelle dieses Verbunds angeben können, etwa wenn Sie
     lieber eine bestehende Konfigurationsdatei benutzen möchten.

          (service postgresql-service-type
                   (postgresql-configuration
                    (config-file
                     (postgresql-config-file
                      (log-destination "stderr")
                      (hba-file
                       (plain-file "pg_hba.conf"
                                   "
          local	all	all			trust
          host	all	all	127.0.0.1/32 	md5
          host	all	all	::1/128 	md5"))
                      (extra-config
                       '(("session_preload_libraries"     "auto_explain")
                         ("random_page_cost"              2)
                         ("auto_explain.log_min_duration" "100 ms")
                         ("work_mem"                      "500 MB")
                         ("logging_collector"             #t)
                         ("log_directory"                 "/var/log/postgresql")))))))

     ‘log-destination’ (Vorgabe: ‘"syslog"’)
          Welche Protokollierungsmethode für PostgreSQL benutzt werden
          soll. Hier können mehrere Werte kommagetrennt angegeben
          werden.

     ‘hba-file’ (Vorgabe: ‘%default-postgres-hba’)
          Ein Dateiname oder G-Ausdruck für die Konfiguration der
          Authentifizierung durch den Server („Host-based
          Authentication“).

     ‘ident-file’ (Vorgabe: ‘%default-postgres-ident’)
          Ein Dateiname oder G-Ausdruck für die Konfiguration der
          Benutzernamensabbildung („User name mapping“).

     ‘socket-directory’ (Vorgabe: ‘"/var/run/postgresql"’)
          Gibt an, in welchem Verzeichnis der oder die Unix-Socket(s) zu
          finden sind, auf denen PostgreSQL auf Verbindungen von
          Client-Anwendungen lauscht. Ist dies auf ‘""’ gesetzt, so
          lauscht PostgreSQL auf gar keinem Unix-Socket, so dass
          Verbindungen zum Server nur mit TCP/IP-Sockets aufgebaut
          werden können.

          Der Vorgabewert ‘#false’ bedeutet, dass der voreingestellte
          Wert von PostgreSQL benutzt wird. Derzeit ist die
          Voreinstellung ‘/tmp’.

     ‘extra-config’ (Vorgabe: ‘'()’)
          Eine Liste zusätzlicher Schlüssel-Wert-Kombinationen, die in
          die PostgreSQL-Konfigurationsdatei aufgenommen werden sollen.
          Jeder Eintrag in der Liste muss eine Liste von Listen sein,
          deren erstes Element dem Schlüssel entspricht und deren übrige
          Elemente die Werte angeben.

          Als Werte können Zahlen, Boolesche Ausdrücke oder
          Zeichenketten dienen. Sie werden auf die Parametertypen von
          PostgreSQL, ‘Boolean’, ‘String’, ‘Numeric’, ‘Numeric with
          Unit’ und ‘Enumerated’, abgebildet, die hier
          (https://www.postgresql.org/docs/current/config-setting.html)
          beschrieben werden.

 -- Scheme-Variable: postgresql-role-service-type
     Mit diesem Dienst können PostgreSQL-Rollen und -Datenbanken erzeugt
     werden, nachdem der PostgreSQL-Dienst gestartet worden ist. Hier
     ist ein Beispiel, wie man ihn benutzt.

          (service postgresql-role-service-type
                      (postgresql-role-configuration
                       (roles
                        (list (postgresql-role
                               (name "test")
                               (create-database? #t))))))

     Dieser Dienst kann mit weiteren Rollen erweitert werden, wie in
     diesem Beispiel:

          (service-extension postgresql-role-service-type
                             (const (postgresql-role
                                     (name "alice")
                                     (create-database? #t))))

 -- Datentyp: postgresql-role
     PostgreSQL verwaltet Zugriffsrechte auf Datenbanken mit dem
     Rollenkonzept. Eine Rolle kann als entweder ein Datenbanknutzer
     oder eine Gruppe von Datenbanknutzern verstanden werden, je
     nachdem, wie die Rolle eingerichtet wurde. Rollen können Eigentümer
     von Datenbankobjekten sein (zum Beispiel von Tabellen) und sie
     können anderen Rollen Berechtigungen auf diese Objekte zuweisen
     oder steuern, wer auf welche Objekte Zugriff hat.

     ‘name’
          Der Rollenname.

     ‘permissions’ (Vorgabe: ‘'(createdb login)’)
          Die Liste der Berechtigungen der Rolle. Unterstützte
          Berechtigungen sind ‘bypassrls’, ‘createdb’, ‘createrole’,
          ‘login’, ‘replication’ und ‘superuser’.

     ‘create-database?’ (Vorgabe: ‘#f’)
          Ob eine Datenbank mit demselben Namen wie die Rolle erzeugt
          werden soll.

 -- Datentyp: postgresql-role-configuration
     Der Datentyp, der die Konfiguration des
     POSTGRESQL-ROLE-SERVICE-TYPE repräsentiert.

     ‘host’ (Vorgabe: ‘"/var/run/postgresql"’)
          Mit welchem PostgreSQL-Host eine Verbindung hergestellt werden
          soll.

     ‘log’ (Vorgabe: ‘"/var/log/postgresql_roles.log"’)
          Der Dateiname der Protokolldatei.

     ‘roles’ (Vorgabe: ‘'()’)
          Welche PostgreSQL-Rollen von Anfang an erzeugt werden sollen.

MariaDB/MySQL
.............

 -- Scheme-Variable: mysql-service-type
     Dies ist der Diensttyp für einen Datenbankserver zu MySQL oder
     MariaDB. Sein Wert ist ein ‘mysql-configuration’-Objekt, das das zu
     nutzende Paket sowie verschiedene Einstellungen für den
     ‘mysqld’-Daemon festlegt.

 -- Datentyp: mysql-configuration
     Der Datentyp, der die Konfiguration des MYSQL-SERVICE-TYPE
     repräsentiert.

     ‘mysql’ (Vorgabe: MARIADB)
          Das Paketobjekt des MySQL-Datenbankservers; es kann entweder
          MARIADB oder MYSQL sein.

          Für MySQL wird bei der Aktivierung des Dienstes ein temporäres
          Administratorpasswort („root“-Passwort) angezeigt. Für MariaDB
          ist das „root“-Passwort leer.

     ‘bind-address’ (Vorgabe: ‘"127.0.0.1"’)
          Auf welcher IP-Adresse auf Verbindungen gelauscht wird.
          Benutzen Sie ‘"0.0.0.0"’, wenn sich der Server an alle
          verfügbaren Netzwerkschnittstellen binden soll.

     ‘port’ (Vorgabe: ‘3306’)
          Der TCP-Port, auf dem der Datenbankserver auf eingehende
          Verbindungen lauscht.

     ‘socket’ (Vorgabe: ‘"/run/mysqld/mysqld.sock"’)
          Welche Socket-Datei für lokale Verbindungen (die also nicht
          über ein Netzwerk laufen) benutzt wird.

     ‘extra-content’ (Vorgabe: ‘""’)
          Weitere Einstellungen für die Konfigurationsdatei ‘my.cnf’.

     ‘extra-environment’ (Vorgabe: ‘#~'()’)
          Welche Liste von Umgebungsvariablen dem ‘mysqld’-Prozess
          mitgegeben wird.

     ‘auto-upgrade?’ (Vorgabe: ‘#t’)
          Ob nach dem Starten des Dienstes ‘mysql_upgrade’ automatisch
          ausgeführt werden soll. Das ist nötig, um das “Systemschema”
          nach „großen“ Aktualisierungen auf den neuen Stand zu bringen
          (etwa beim Umstieg von MariaDB 10.4 auf 10.5), aber Sie können
          es abschalten, wenn Sie das lieber manuell vornehmen.

Memcached
.........

 -- Scheme-Variable: memcached-service-type
     Dies ist der Diensttyp für den Memcached-Dienst
     (https://memcached.org/), der einen verteilten Zwischenspeicher im
     Arbeitsspeicher (einen „In-Memory-Cache“) zur Verfügung stellt. Der
     Wert dieses Dienstes ist ein ‘memcached-configuration’-Objekt.

     (service memcached-service-type)

 -- Datentyp: memcached-configuration
     Der Datentyp, der die Konfiguration von memcached repräsentiert.

     ‘memcached’ (Vorgabe: ‘memcached’)
          Das Memcached-Paket, das benutzt werden soll.

     ‘interfaces’ (Vorgabe: ‘'("0.0.0.0")’)
          Auf welchen Netzwerkschnittstellen gelauscht werden soll.

     ‘tcp-port’ (Vorgabe: ‘11211’)
          Der Port, auf dem Verbindungen akzeptiert werden.

     ‘udp-port’ (Vorgabe: ‘11211’)
          Der Port, auf dem UDP-Verbindungen akzeptiert werden. Ist der
          Wert 0, wird _nicht_ auf einem UDP-Socket gelauscht.

     ‘additional-options’ (Vorgabe: ‘'()’)
          Zusätzliche Befehlszeilenoptionen, die an ‘memcached’
          übergeben werden.

Redis
.....

 -- Scheme-Variable: redis-service-type
     Dies ist der Diensttyp für den Schlüssel-/Wert-Speicher Redis
     (https://redis.io/), dessen Wert ein ‘redis-configuration’-Objekt
     ist.

 -- Datentyp: redis-configuration
     Der Datentyp, der die Konfiguration von redis repräsentiert.

     ‘redis’ (Vorgabe: ‘redis’)
          Das zu benutzende Redis-Paket.

     ‘bind’ (Vorgabe: ‘"127.0.0.1"’)
          Die Netzwerkschnittstelle, auf der gelauscht wird.

     ‘port’ (Vorgabe: ‘6379’)
          Der Port, auf dem Verbindungen akzeptiert werden. Ist der Wert
          0, wird das Lauschen auf einem TCP-Socket deaktiviert.

     ‘working-directory’ (Vorgabe: ‘"/var/lib/redis"’)
          Das Verzeichnis, in dem die Datenbank und damit zu tun habende
          Dateien gespeichert werden.


File: guix.de.info,  Node: Mail-Dienste,  Next: Kurznachrichtendienste,  Prev: Datenbankdienste,  Up: Dienste

12.9.12 Mail-Dienste
--------------------

Das Modul ‘(gnu services mail)’ stellt Guix-Dienstdefinitionen für
E-Mail-Dienste zur Verfügung: IMAP-, POP3- und LMTP-Server sowie Mail
Transport Agents (MTAs). Jede Menge Akronyme! Auf diese Dienste wird in
den folgenden Unterabschnitten im Detail eingegangen.

Dovecot-Dienst
..............

 -- Scheme-Prozedur: dovecot-service [#:config (dovecot-configuration)]
     Liefert einen Dienst, der den IMAP-/POP3-/LMTP-Mailserver Dovecot
     ausführt.

   Normalerweise muss für Dovecot nicht viel eingestellt werden; das
vorgegebene Konfigurationsobjekt, das mit ‘(dovecot-configuration)’
erzeugt wird, wird genügen, wenn Ihre Mails in ‘~/Maildir’ gespeichert
werden. Ein selbstsigniertes Zertifikat wird für durch TLS geschützte
Verbindungen generiert, aber Dovecot lauscht nach Vorgabe auch auf
unverschlüsselten Ports. Es gibt jedoch eine Reihe von Optionen, die
Mail-Administratoren unter Umständen ändern müssen, was Guix – wie auch
bei anderen Diensten – mit einer einheitlichen Scheme-Schnittstelle
möglich macht.

   Um zum Beispiel anzugeben, dass sich Mails in ‘maildir~/.mail’
befinden, würde man den Dovecot-Dienst wie folgt instanziieren:

     (dovecot-service #:config
                      (dovecot-configuration
                       (mail-location "maildir:~/.mail")))

   Im Folgenden sehen Sie die verfügbaren Konfigurationsparameter. Jeder
Parameterdefinition ist ihr Typ vorangestellt; zum Beispiel bedeutet
‘Zeichenketten-Liste foo’, dass der Parameter ‘foo’ als eine Liste von
Zeichenketten angegeben werden sollte. Es ist auch möglich, die
Konfiguration als Zeichenkette anzugeben, wenn Sie eine alte
‘dovecot.conf’-Datei haben, die Sie von einem anderen System übernehmen
möchten; am Ende finden Sie mehr Details dazu.

   Verfügbare ‘dovecot-configuration’-Felder sind:

 -- ‘dovecot-configuration’-Parameter: „package“ dovecot
     Das Dovecot-Paket.

 -- ‘dovecot-configuration’-Parameter:
          Kommagetrennte-Zeichenketten-Liste listen
     Eine Liste der IPs oder der Rechnernamen („Hosts“), auf denen auf
     Verbindungen gelauscht wird. ‘*’ bedeutet, auf allen
     IPv4-Schnittstellen zu lauschen; ‘::’ lässt auf allen
     IPv6-Schnittstellen lauschen. Wenn Sie nicht der Vorgabe
     entsprechende Ports oder komplexere Einstellungen festlegen
     möchten, sollten Sie die Adress- und Portfelder des ‘inet-listener’
     beim jeweiligen Dienst anpassen, für den Sie sich interessieren.

 -- ‘dovecot-configuration’-Parameter: „protocol-configuration“-Liste
          protocols
     Die Liste der Protokolle, die angeboten werden sollen. Zu den
     verfügbaren Protokollen gehören ‘imap’, ‘pop3’ und ‘lmtp’.

     Verfügbare ‘protocol-configuration’-Felder sind:

      -- ‘protocol-configuration’-Parameter: Zeichenkette name
          Der Name des Protokolls.

      -- ‘protocol-configuration’-Parameter: Zeichenkette
               auth-socket-path
          Der Pfad des UNIX-Sockets zum Hauptauthentifizierungsserver,
          um Benutzer zu finden. Er wird von imap (für geteilte
          Benutzer) und lda benutzt. Die Vorgabe ist
          ‘"/var/run/dovecot/auth-userdb"’.

      -- ‘protocol-configuration’-Parameter: Boolescher-Ausdruck
               imap-metadata?
          Ob die Erweiterung ‘IMAP METADATA’, definiert in RFC 5464
          (https://tools.ietf.org/html/rfc5464), aktiviert werden soll,
          mit der Clients einem Postfach („Mailbox“) Metadaten und
          Annotationen über IMAP zuweisen und sie abfragen können.

          Wenn dies ‘#t’ ist, müssen Sie auch über das Feld
          ‘mail-attribute-dict’ das zu nutzende Dictionary (eine
          Schlüssel-Wert-Datenbank) angeben.

          Vorgegeben ist ‘#f’.

      -- ‘protocol-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste
               managesieve-notify-capabilities
          Welche NOTIFY-Capabilitys an Clients gemeldet werden, die sich
          mit dem ManageSieve-Dienst verbinden, bevor sie sich
          authentisiert haben. Sie dürfen sich von den Capabilitys
          unterscheiden, die angemeldeten Nutzern angeboten werden. Wenn
          dieses Feld leer gelassen wird, wird nach Vorgabe alles
          angegeben, was der Sieve-Interpretierer unterstützt.

          Die Vorgabe ist ‘()’.

      -- ‘protocol-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste
               managesieve-sieve-capability
          Welche SIEVE-Capabilitys an Clients gemeldet werden, die sich
          mit dem ManageSieve-Dienst verbinden, bevor sie sich
          authentisiert haben. Sie dürfen sich von den Capabilitys
          unterscheiden, die angemeldeten Nutzern angeboten werden. Wenn
          dieses Feld leer gelassen wird, wird nach Vorgabe alles
          angegeben, was der Sieve-Interpretierer unterstützt.

          Die Vorgabe ist ‘()’.

      -- ‘protocol-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste mail-plugins
          Leerzeichengetrennte Liste der zu ladenden Plugins.

      -- ‘protocol-configuration’-Parameter: Nichtnegative-ganze-Zahl
               mail-max-userip-connections
          Die Maximalzahl der IMAP-Verbindungen, die jeder Nutzer von
          derselben IP-Adresse aus benutzen kann. _Anmerkung_: Beim
          Vergleichen des Benutzernamens wird Groß- und Kleinschreibung
          unterschieden. Die Vorgabe ist ‘10’.

 -- ‘dovecot-configuration’-Parameter: „service-configuration“-Liste
          services
     Die Liste der zu aktivierenden Dienste. Zu den verfügbaren Diensten
     gehören ‘imap’, ‘imap-login’, ‘pop3’, ‘pop3-login’, ‘auth’ und
     ‘lmtp’.

     Verfügbare ‘service-configuration’-Felder sind:

      -- ‘service-configuration’-Parameter: Zeichenkette kind
          Die Dienstart (englisch „kind“). Zu den gültigen Werten
          gehören ‘director’, ‘imap-login’, ‘pop3-login’, ‘lmtp’,
          ‘imap’, ‘pop3’, ‘auth’, ‘auth-worker’, ‘dict’, ‘tcpwrap’,
          ‘quota-warning’ oder alles andere.

      -- ‘service-configuration’-Parameter:
               „listener-configuration“-Liste listeners
          „Listener“ für den Dienst, also Lauscher auf neue
          Verbindungen. Als Listener kann entweder eine
          ‘unix-listener-configuration’, eine
          ‘fifo-listener-configuration’ oder eine
          ‘inet-listener-configuration’ angegeben werden. Die Vorgabe
          ist ‘()’.

          Verfügbare ‘unix-listener-configuration’-Felder sind:

           -- ‘unix-listener-configuration’-Parameter: Zeichenkette path
               Der Pfad zur Datei, relativ zum Feld ‘base-dir’. Er wird
               auch als der Abschnittsname verwendet.

           -- ‘unix-listener-configuration’-Parameter: Zeichenkette mode
               Der Zugriffsmodus des Sockets. Die Vorgabe ist ‘"0600"’.

           -- ‘unix-listener-configuration’-Parameter: Zeichenkette user
               Der Benutzer, dem der Socket gehört. Die Vorgabe ist
               ‘""’.

           -- ‘unix-listener-configuration’-Parameter: Zeichenkette
                    group
               Die Gruppe, der der Socket gehört. Die Vorgabe ist ‘""’.

          Verfügbare ‘fifo-listener-configuration’-Felder sind:

           -- ‘fifo-listener-configuration’-Parameter: Zeichenkette path
               Der Pfad zur Datei, relativ zum Feld ‘base-dir’. Er wird
               auch als der Abschnittsname verwendet.

           -- ‘fifo-listener-configuration’-Parameter: Zeichenkette mode
               Der Zugriffsmodus des Sockets. Die Vorgabe ist ‘"0600"’.

           -- ‘fifo-listener-configuration’-Parameter: Zeichenkette user
               Der Benutzer, dem der Socket gehört. Die Vorgabe ist
               ‘""’.

           -- ‘fifo-listener-configuration’-Parameter: Zeichenkette
                    group
               Die Gruppe, der der Socket gehört. Die Vorgabe ist ‘""’.

          Verfügbare ‘inet-listener-configuration’-Felder sind:

           -- ‘inet-listener-configuration’-Parameter: Zeichenkette
                    protocol
               Das Protokoll, auf das gelauscht wird.

           -- ‘inet-listener-configuration’-Parameter: Zeichenkette
                    address
               Die Adresse, auf der gelauscht wird. Bleibt das Feld
               leer, wird auf allen Adressen gelauscht. Die Vorgabe ist
               ‘""’.

           -- ‘inet-listener-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl port
               Der Port, auf dem gelauscht werden soll.

           -- ‘inet-listener-configuration’-Parameter:
                    Boolescher-Ausdruck ssl?
               Ob für diesen Dienst SSL benutzt werden kann: ‘yes’ für
               ja, ‘no’ für nein oder ‘required’ für „verpflichtend“.
               Die Vorgabe ist ‘#t’.

      -- ‘service-configuration’-Parameter: Nichtnegative-ganze-Zahl
               client-limit
          Die maximale Anzahl gleichzeitiger Verbindungen mit Clients
          pro Prozess. Sobald diese Anzahl von Verbindungen eingegangen
          ist, bewirkt das Eingehen der nächsten Verbindung, dass
          Dovecot einen weiteren Prozess startet. Ist sie auf 0 gesetzt,
          benutzt Dovecot stattdessen ‘default-client-limit’.

          Die Vorgabe ist ‘0’.

      -- ‘service-configuration’-Parameter: Nichtnegative-ganze-Zahl
               service-count
          Die Anzahl Verbindungen, die behandelt werden, bevor ein neuer
          Prozess gestartet wird. Typischerweise sind die einzig
          sinnvollen Werte 0 (unbeschränkt) oder 1. 1 ist sicherer, aber
          0 ist schneller. Siehe <doc/wiki/LoginProcess.txt>. Die
          Vorgabe ist ‘1’.

      -- ‘service-configuration’-Parameter: Nichtnegative-ganze-Zahl
               process-limit
          Die maximale Anzahl von Prozessen, die für diesen Dienst
          existieren können. Wenn sie auf 0 gesetzt ist, benutzt Dovecot
          stattdessen ‘default-process-limit’.

          Die Vorgabe ist ‘0’.

      -- ‘service-configuration’-Parameter: Nichtnegative-ganze-Zahl
               process-min-avail
          Die Anzahl der Prozesse, mit denen immer auf neue Verbindungen
          gewartet wird. Die Vorgabe ist ‘0’.

      -- ‘service-configuration’-Parameter: Nichtnegative-ganze-Zahl
               vsz-limit
          Wenn Sie ‘service-count 0’ festlegen, müssen Sie hierfür
          wahrscheinlich eine größere Zahl wählen. Die Vorgabe ist
          ‘256000000’.

 -- ‘dovecot-configuration’-Parameter: dict-configuration dict
     Die Wörterbuchkonfiguration, wie sie der
     ‘dict-configuration’-Konstruktor erzeugt.

     Verfügbare ‘dict-configuration’-Felder sind:

      -- ‘dict-configuration’-Parameter: Formlose-Felder entries
          Eine Liste von Schlüssel-Wert-Paaren, die in diesem Wörterbuch
          enthalten sein sollen. Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: „passdb-configuration“-Liste
          passdbs
     Eine Liste von Passwortdatenbankkonfigurationen, die jeweils mit
     dem ‘passdb-configuration’-Konstruktor erzeugt werden.

     Verfügbare ‘passdb-configuration’-Felder sind:

      -- ‘passdb-configuration’-Parameter: Zeichenkette driver
          Der Treiber, den die Passwortdatenbank benutzen soll. Zu den
          gültigen Werten gehören ‘pam’, ‘passwd’, ‘shadow’, ‘bsdauth’
          und ‘static’. Die Vorgabe ist ‘"pam"’.

      -- ‘passdb-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste args
          Leerzeichengetrennte Liste der Argumente an den
          Passwortdatenbanktreiber. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: „userdb-configuration“-Liste
          userdbs
     Liste der Benutzerdatenbankkonfigurationen, die jeweils mit dem
     ‘userdb-configuration’-Konstruktor erzeugt werden.

     Verfügbare ‘userdb-configuration’-Felder sind:

      -- ‘userdb-configuration’-Parameter: Zeichenkette driver
          Der Treiber, den die Benutzerdatenbank benutzen soll. Zu den
          gültigen Werten gehören ‘passwd’ und ‘static’. Die Vorgabe ist
          ‘"passwd"’.

      -- ‘userdb-configuration’-Parameter:
               Leerzeichengetrennte-Zeichenketten-Liste args
          Leerzeichengetrennte Liste der Argumente an den
          Benutzerdatenbanktreiber. Die Vorgabe ist ‘""’.

      -- ‘userdb-configuration’-Parameter: Formlose-Argumente
               override-fields
          Einträge, die Vorrang vor den Feldern aus passwd haben. Die
          Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: „plugin-configuration“
          plugin-configuration
     Die Plugin-Konfiguration, die vom
     ‘plugin-configuration’-Konstruktor erzeugt wird.

 -- ‘dovecot-configuration’-Parameter: „namespace-configuration“-Liste
          namespaces
     Liste der Namensräume. Jedes Objekt in der Liste wird durch den
     ‘namespace-configuration’-Konstruktor erzeugt.

     Verfügbare ‘namespace-configuration’-Felder sind:

      -- ‘namespace-configuration’-Parameter: Zeichenkette name
          Der Name dieses Namensraums.

      -- ‘namespace-configuration’-Parameter: Zeichenkette type
          Namensraum-Typ: ‘private’, ‘shared’ oder ‘public’. Die Vorgabe
          ist ‘"private"’.

      -- ‘namespace-configuration’-Parameter: Zeichenkette separator
          Welche Trennzeichen in der Hierarchie von Namensräumen benutzt
          werden sollen. Sie sollten denselben Trenner für alle
          Namensräume benutzen, sonst führt es zu Verwirrung bei manchen
          Clients. Meistens ist ‘/’ eine gute Wahl, die Voreinstellung
          ist allerdings abhängig vom darunterliegenden
          Mail-Speicher-Format. Die Vorgabe ist ‘""’.

      -- ‘namespace-configuration’-Parameter: Zeichenkette prefix
          Das Präfix, das für Zugang auf diesen Namensraum angegeben
          werden muss. Es muss für jeden Namensraum ein anderes gewählt
          werden. Ein Beispiel ist ‘Public/’. Die Vorgabe ist ‘""’.

      -- ‘namespace-configuration’-Parameter: Zeichenkette location
          Der physische Ort, an dem sich dieses Postfach („Mailbox“)
          befindet. Das Format ist dasselbe wie beim Mail-Ort („mail
          location“), der auch als Voreinstellung hierfür benutzt wird.
          Die Vorgabe ist ‘""’.

      -- ‘namespace-configuration’-Parameter: Boolescher-Ausdruck inbox?
          Es kann nur eine INBOX geben; hiermit wird festgelegt, zu
          welchem Namensraum sie gehört. Die Vorgabe ist ‘#f’.

      -- ‘namespace-configuration’-Parameter: Boolescher-Ausdruck
               hidden?
          Wenn der Namensraum versteckt ist, wird er Clients gegenüber
          _nicht_ über die NAMESPACE-Erweiterung mitgeteilt.
          Wahrscheinlich möchten Sie auch ‘list? #f’ festlegen. Das ist
          in erster Linie dann nützlich, wenn Sie von einem anderen
          Server mit anderen Namensräumen umziehen, die Sie ersetzen
          möchten, die aber trotzdem noch weiterhin funktionieren
          sollen. Zum Beispiel können Sie versteckte Namensräume mit
          Präfixen ‘~/mail/’, ‘~%u/mail/’ und ‘mail/’ anlegen. Die
          Vorgabe ist ‘#f’.

      -- ‘namespace-configuration’-Parameter: Boolescher-Ausdruck list?
          Ob die Postfächer („Mailboxes“) unter diesem Namensraum mit
          dem LIST-Befehl angezeigt werden können. Dadurch wird der
          Namensraum für Clients sichtbar, die die NAMESPACE-Erweiterung
          nicht unterstützen. Mit dem besonderen Wert ‘children’ werden
          auch Kind-Postfächer aufgelistet, aber das Namensraumpräfix
          verborgen. Die Vorgabe ist ‘#t’.

      -- ‘namespace-configuration’-Parameter: Boolescher-Ausdruck
               subscriptions?
          Die Abonnements werden im Namensraum selbst behandelt. Wenn es
          auf ‘#f’ gesetzt ist, werden sie im Elternnamensraum
          behandelt. Das leere Präfix sollte hier immer ‘#t’ haben. Die
          Vorgabe ist ‘#t’.

      -- ‘namespace-configuration’-Parameter:
               „mailbox-configuration“-Liste mailboxes
          Die Liste der in diesem Namensraum vordefinierten Postfächer.
          Die Vorgabe ist ‘()’.

          Verfügbare ‘mailbox-configuration’-Felder sind:

           -- ‘mailbox-configuration’-Parameter: Zeichenkette name
               Der Name dieses Postfachs (dieser „Mailbox“).

           -- ‘mailbox-configuration’-Parameter: Zeichenkette auto
               Bei ‘create’ wird dieses Postfach automatisch erzeugt.
               Bei ‘subscribe’ wird dieses Postfach sowohl automatisch
               erzeugt als auch automatisch abonniert. Die Vorgabe ist
               ‘"no"’.

           -- ‘mailbox-configuration’-Parameter:
                    Leerzeichengetrennte-Zeichenketten-Liste special-use
               Liste der ‘SPECIAL-USE’-Attribute von IMAP, wie sie im
               RFC 6154 festgelegt wurden. Gültige Werte sind ‘\All’,
               ‘\Archive’, ‘\Drafts’, ‘\Flagged’, ‘\Junk’, ‘\Sent’ und
               ‘\Trash’. Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: Dateiname base-dir
     Das Basisverzeichnis, in dem Laufzeitdaten gespeichert werden. Die
     Vorgabe ist ‘"/var/run/dovecot/"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette login-greeting
     Begrüßungsnachricht für Clients. Die Vorgabe ist ‘"Dovecot
     ready."’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste
          login-trusted-networks
     Die Liste der Netzwerkbereiche, denen vertraut wird. Für
     Verbindungen von diesen IP-Adressen können abweichende IP-Adressen
     und Ports angegeben werden (zur Protokollierung und zur
     Authentifizierung). ‘disable-plaintext-auth’ wird für diese
     Netzwerke außerdem ignoriert. Normalerweise würden Sie hier Ihre
     IMAP-Proxy-Server eintragen. Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste login-access-sockets
     Die Liste der Sockets zur Zugriffsprüfung beim Anmelden (z.B.
     tcpwrap). Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          verbose-proctitle?
     Ausführlichere Prozessnamen anzeigen (mit „ps“). Nach
     Voreinstellung werden Benutzername und IP-Adresse angezeigt. Die
     Einstellung ist nützlich, wenn man sehen können will, wer
     tatsächlich IMAP-Prozesse benutzt (z.B. gemeinsam genutzte
     Postfächer oder wenn derselbe Benutzeridentifikator/„UID“ für
     mehrere Konten benutzt wird). Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          shutdown-clients?
     Ob alle Prozesse abgewürgt werden sollen, wenn der
     Haupt-Dovecot-Prozess terminiert. Ist dies auf ‘#f’ gesetzt, kann
     Dovecot aktualisiert werden, ohne dass bestehende
     Client-Verbindungen zwangsweise geschlossen werden (jedoch kann das
     problematisch sein, wenn die Aktualisierung z.B. eine
     Sicherheitslücke schließen soll). Die Vorgabe ist ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          doveadm-worker-count
     Ist dies _nicht_ null, werden Mail-Befehle über die angegebene
     Anzahl von Verbindungen an den doveadm-Server geschickt, statt sie
     direkt im selben Prozess auszuführen. Die Vorgabe ist ‘0’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette doveadm-socket-path
     Der UNIX-Socket oder das „Host:Port“-Paar, mit dem Verbindungen zum
     doveadm-Server hergestellt werden. Die Vorgabe ist
     ‘"doveadm-server"’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste import-environment
     Die Liste der Umgebungsvariablen, die beim Starten von Dovecot
     erhalten bleiben und allen Kindprozessen davon mitgegeben werden.
     Sie können auch „Schlüssel=Wert“-Paare angeben, um wie immer
     bestimmte Zuweisungen festzulegen.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          disable-plaintext-auth?
     Deaktiviert den LOGIN-Befehl und alle anderen
     Klartext-Authentisierungsverfahren, solange kein SSL/TLS benutzt
     wird (die LOGINDISABLED-Capability). Beachten Sie, dass, wenn die
     entfernte IP-Adresse mit der lokalen IP-Adresse identisch ist (Sie
     sich also vom selben Rechner aus verbinden), die Verbindung als
     sicher aufgefasst und Klartext-Authentisierung möglich ist. Siehe
     auch die „ssl=required“-Einstellung. Die Vorgabe ist ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          auth-cache-size
     Die Größe des Zwischenspeichers für Authentifizierungen (z.B.
     ‘#e10e6’). Bei 0 ist er deaktiviert. Beachten Sie, dass für
     bsdauth, PAM und vpopmail die Einstellung ‘cache-key’ festgelegt
     sein muss, damit ein Zwischenspeicher benutzt wird. Die Vorgabe ist
     ‘0’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-cache-ttl
     Wie lange Daten im Zwischenspeicher gültig bleiben („Time to
     live“). Nachdem die TTL ausläuft, wird der zwischengespeicherte
     Eintrag nicht mehr benutzt, _außer_ wenn eine Auflösung über die
     Hauptdatenbank zu einem internen Fehler führt. Dovecot versucht
     zudem, Passwortänderungen automatisch zu behandeln: Wenn die letzte
     Authentisierung erfolgreich war, diese jetzt aber nicht, wird der
     Zwischenspeicher _nicht_ benutzt. Derzeit funktioniert dies nur bei
     Klartext-Authentisierung. Die Vorgabe ist ‘"1 hour"’ für 1 Stunde.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          auth-cache-negative-ttl
     TTL beim Zwischenspeichern negativer Ergebnisse („negative Hits“,
     z.B. wenn der Benutzer nicht gefunden wurde oder das Passwort nicht
     stimmt). 0 deaktiviert das Zwischenspeichern davon vollständig. Die
     Vorgabe ist ‘"1 hour"’ für 1 Stunde.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste auth-realms
     Die Liste der Administrationsbereiche („Realms“) für
     SASL-Authentisierungsmechanismen, die solche benötigen. Sie können
     dieses Feld leer lassen, wenn Sie _keine_ Unterstützung für mehrere
     Administrationsbereiche wollen. Viele Clients benutzen den ersten
     hier aufgelisteten Administrationsbereich, also sollte der als
     Voreinstellung gewünschte Bereich vorne stehen. Die Vorgabe ist
     ‘()’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-default-realm
     Der voreingestellte Administrationsbereich bzw. die Domain, falls
     keiner angegeben wurde. Dies wird sowohl für
     SASL-Administrationsbereiche als auch zum Anhängen von @domain an
     den Benutzernamen bei Klartextanmeldungen benutzt. Die Vorgabe ist
     ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-username-chars
     Die Liste der in Benutzernamen zulässigen Zeichen. Wenn der vom
     Benutzer angegebene Benutzername ein hier nicht aufgelistetes
     Zeichen enthält, wird die Authentisierung automatisch abgelehnt.
     Dies dient bloß als eine weitere Überprüfung, um zu gewährleisten,
     dass mögliche Schwachstellen bei der Maskierung von
     Anführungszeichen in SQL-/LDAP-Datenbanken nicht ausgenutzt werden
     können. Wenn Sie alle Zeichen zulassen möchten, setzen Sie dieses
     Feld auf eine leere Zeichenkette. Die Vorgabe ist
     ‘"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          auth-username-translation
     Wie Zeichen in Benutzernamen ersetzt werden sollen, bevor der Name
     mit Datenbanken aufgelöst wird. Der Wert besteht aus einer Reihe
     von Angaben, welches Zeichen durch welches zu ersetzen ist. Zum
     Beispiel werden für ‘#@/@’ die Zeichen ‘#’ und ‘/’ beide durch ‘@’
     ersetzt. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-username-format
     Formatierungsanweisungen, die auf jeden Benutzernamen angewandt
     werden, bevor er mit einer Datenbank aufgelöst wird. Sie können
     hierzu die Standardvariablen verwenden, z.B. würde %Lu den
     Benutzernamen in Kleinbuchstaben umschreiben („lowercase“), %n
     würde den Domainnamen weglassen, wenn einer angegeben wurde, und
     ‘%n-AT-%d’ würde alle ‘@’ durch ‘-AT-’ ersetzen. Diese Übersetzung
     wird durchgeführt, nachdem die Änderungen aus
     ‘auth-username-translation’ angewandt wurden. Die Vorgabe ist
     ‘"%Lu"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          auth-master-user-separator
     Wenn Sie es für „Master“-Benutzer erlauben möchten, sich durch
     Angeben des Master-Benutzernamens als Teil einer normalen
     Benutzernamens-Zeichenkette als jemand anders anzumelden (also ohne
     Verwendung der Unterstützung davon durch den SASL-Mechanismus),
     können Sie hier die Trennzeichen dazwischen angeben. Das Format ist
     dann <Benutzername><Trenner><Master-Benutzername>. UW-IMAP benutzt
     ‘*’ als Trennzeichen, also könnte das eine gute Wahl sein. Die
     Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          auth-anonymous-username
     Der Benutzername, der verwendet wird, wenn sich Benutzer mit dem
     SASL-Mechanismus „ANONYMOUS“ anmelden. Die Vorgabe ist
     ‘"anonymous"’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          auth-worker-max-count
     Die maximale Anzahl von dovecot-auth-Arbeiterprozessen. Diese
     werden benutzt, um blockierende Anfragen an die Passwortdatenbank
     („passdb“) und an die Benutzerdatenbank („userdb“) zu stellen (z.B.
     MySQL und PAM). Sie werden automatisch erzeugt und gelöscht, je
     nachdem, wann sie gebraucht werden. Die Vorgabe ist ‘30’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-gssapi-hostname
     Der Rechnername, der in GSSAPI-Prinzipalnamen benutzt wird. Nach
     Voreinstellung wird der durch gethostname() zurückgelieferte Name
     verwendet. Benutzen Sie ‘$ALL’ (mit Anführungszeichen), damit alle
     Einträge in der Schlüsseltabelle („Keytab“) akzeptiert werden. Die
     Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-krb5-keytab
     Kerberos-Schlüsseltabelle („Keytab“), die für den
     GSSAPI-Mechanismus benutzt werden soll. Wenn sie nicht angegeben
     wird, wird die Voreinstellung des Systems benutzt (in der Regel
     ‘/etc/krb5.keytab’). Eventuell müssen Sie den Auth-Dienst als
     Administratornutzer „root“ ausführen lassen, um Lesezugriffe auf
     diese Datei zu ermöglichen. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          auth-use-winbind?
     NTLM-Authentifizierung und GSS-SPNEGO-Authentifizierung mit dem
     winbind-Daemon und dem ‘ntlm-auth’-Hilfsprogramm von Samba
     durchführen. Siehe
     <doc/wiki/Authentication/Mechanisms/Winbind.txt>. Die Vorgabe ist
     ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Dateiname
          auth-winbind-helper-path
     Der Pfad zur Binärdatei ‘ntlm-auth’ von Samba. Die Vorgabe ist
     ‘"/usr/bin/ntlm_auth"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette auth-failure-delay
     Die Zeit, wie lange vor der Antwort auf eine fehlgeschlagene
     Authentisierung gewartet wird. Die Vorgabe ist ‘"2 secs"’ für 2
     Sekunden.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          auth-ssl-require-client-cert?
     Es wird ein gültiges SSL-Client-Zertifikat verlangt, andernfalls
     schlägt die Authentisierung fehl. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          auth-ssl-username-from-cert?
     Ob der Benutzername aus dem SSL-Zertifikat des Clients ausgelesen
     werden soll, indem ‘X509_NAME_get_text_by_NID()’ benutzt wird, um
     den Distinguished Name („DN“) als Gebräuchlicher Name
     („CommonName“) des Zertifikatinhabers („Subject“) auszulesen. Die
     Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste auth-mechanisms
     Die Liste der erwünschten Authentisierungsmechanismen. Unterstützte
     Mechanismen sind: ‘plain’, ‘login’, ‘digest-md5’, ‘cram-md5’,
     ‘ntlm’, ‘rpa’, ‘apop’, ‘anonymous’, ‘gssapi’, ‘otp’, ‘skey’ und
     ‘gss-spnego’. _Anmerkung_: Siehe auch die Einstellung zu
     ‘disable-plaintext-auth’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste director-servers
     Die Liste der IP-Adressen oder Rechnernamen („Hostnames“) für alle
     Direktorserver, einschließlich dieses Servers selbst. Ports können
     wie in „IP:Port“ angegeben werden. Der voreingestellte Port ist
     derselbe wie der, der beim ‘inet-listener’ des Direktordienstes
     benutzt wird. Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste director-mail-servers
     Die Liste der IP-Adressen oder Rechnernamen („Hostnames“), um alle
     Hintergrund-Mailserver zu erreichen. Auch Bereiche können angegeben
     werden, wie 10.0.0.10-10.0.0.30. Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette director-user-expire
     Wie lange Benutzer zum selben Server weitergeleitet werden, sobald
     dieser keine Verbindungen mehr hat. Die Vorgabe ist ‘"15 min"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          director-username-hash
     Wie der Benutzername umgeschrieben wird, bevor er gehasht wird. Zu
     den sinnvollen Werten gehören %Ln, wenn der Nutzer sich mit oder
     ohne @domain anmelden kann, oder %Ld, wenn Postfächer innerhalb der
     Domain gemeinsam genutzt werden. Die Vorgabe ist ‘"%Lu"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette log-path
     Die Protokolldatei, die für Fehlermeldungen benutzt werden soll.
     Bei ‘syslog’ wird das Protokoll an syslog geschrieben, bei
     ‘/dev/stderr’ an die Standardfehlerausgabe. Die Vorgabe ist
     ‘"syslog"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette info-log-path
     Die Protokolldatei, die für Informationsmeldungen benutzt werden
     soll. Die Voreinstellung ist ‘log-path’. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette debug-log-path
     Die Protokolldatei, die für Meldungen zur Fehlersuche benutzt
     werden soll. Die Voreinstellung ist ‘info-log-path’. Die Vorgabe
     ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette syslog-facility
     Als welche Syslog-Einrichtung Protokolle an Syslog übermittelt
     werden sollen. Falls Sie ‘mail’ hierbei _nicht_ benutzen wollen,
     eignen sich normalerweise local0–local7. Andere
     Standardeinrichtungen werden auch unterstützt. Die Vorgabe ist
     ‘"mail"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck auth-verbose?
     Ob gescheiterte Anmeldeversuche und die Gründe, warum diese nicht
     erfolgreich waren, protokolliert werden sollen. Die Vorgabe ist
     ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          auth-verbose-passwords
     Ob bei falschen Passwörtern das versuchte falsche Passwort ins
     Protokoll geschrieben werden soll. Gültige Werte sind "no"
     („nein“), "plain" (als Klartext) und "sha1". Den SHA1-Hash zu
     speichern kann nützlich sein, um zu erkennen, wenn jemand versucht,
     sehr viele Passwörter durchzuprobieren (ein „Brute-Force“-Angriff)
     oder ob Benutzer einfach nur dasselbe Passwort immer wieder
     probieren. Sie können auch nur die ersten n Zeichen des Wertes
     protokollieren, indem Sie ":n" anhängen (z.B. sha1:6). Die Vorgabe
     ist ‘"no"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck auth-debug?
     Ob zur Fehlersuche noch ausführlichere Protokolle geschrieben
     werden sollen. Zum Beispiel werden SQL-Anfragen protokolliert. Die
     Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          auth-debug-passwords?
     Ob bei falschen Passwörtern das versuchte falsche Passwort und das
     benutzte Passwortschema ins Protokoll geschrieben werden soll,
     damit das Problem untersucht werden kann. Wenn dies aktiviert wird,
     wird auch ‘auth-debug’ aktiviert. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck mail-debug?
     Ob die Fehlersuche beim Mail-Prozess ermöglicht werden soll. Dies
     kann Ihnen dabei helfen, herauszufinden, warum Dovecot Ihre E-Mails
     nicht findet. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck verbose-ssl?
     SSL-Fehler auf Protokollebene anzeigen. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette log-timestamp
     Das Präfix für jede Zeile, die ins Protokoll geschrieben wird.
     %-Codes sind im Format von strftime(3). Die Vorgabe ist ‘"\"%b %d
     %H:%M:%S \""’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste
          login-log-format-elements
     Eine Liste der Elemente, die protokolliert werden sollen. Die
     Elemente, deren Variablenwerte nicht leer sind, werden zu einer
     kommagetrennten Zeichenkette zusammengefügt.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette login-log-format
     Das Format des Anmeldeprogramms. %s umfasst die Zeichenkette
     ‘login-log-format-elements’, %$ enthält die Daten, die man
     protokollieren lassen möchte. Die Vorgabe ist ‘"%$: %s"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-log-prefix
     Das Präfix, das Protokollen für Mailprozesse vorangestellt wird.
     Siehe doc/wiki/Variables.txt für eine Liste der benutzbaren
     Variablen. Die Vorgabe ist ‘"\"%s(%u)<%{pid}><%{session}>: \""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette deliver-log-format
     Welches Format zur Protokollierung von Mailzustellungen verwendet
     werden soll. Sie können die folgenden Variablen benutzen:
     ‘%$’
          Zustellungsstatusnachricht (z.B. ‘saved to INBOX’)
     ‘%m’
          Nachrichtenidentifikator („Message-ID“)
     ‘%s’
          Betreff („Subject“)
     ‘%f’
          Absendeadresse („From“)
     ‘%p’
          Physische Größe
     ‘%w’
          Virtuelle Größe.
     Die Vorgabe ist ‘"msgid=%m: %$"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-location
     Wo die Postfächer (die „Mailboxes“) der Benutzer gespeichert sind.
     Die Vorgabe ist die leere Zeichenkette, was bedeutet, dass Dovecot
     die Postfächer automatisch zu finden versucht. Das funktioniert
     nur, wenn der Nutzer bereits E-Mails gespeichert hat, also sollten
     Sie Dovecot den vollständigen Pfad mitteilen.

     Wenn Sie das mbox-Format benutzen, genügt es _nicht_, den Pfad zur
     INBOX-Datei (z.B. ‘/var/mail/%u’) anzugeben. Sie müssen Dovecot
     _auch_ mitteilen, wo die anderen Postfächer gespeichert sind.
     Dieses Verzeichnis nennt sich _Wurzelmailverzeichnis_ („Root Mail
     Directory“) und es muss als erster Pfad in der
     ‘mail-location’-Einstellung angegeben werden.

     Es gibt ein paar besondere Variable, die Sie verwenden können,
     z.B.:

     ‘%u’
          Benutzername
     ‘%n’
          Benutzerteil in Benutzer@Domain; sonst dasselbe wie %u, wenn
          es keine Domain gibt
     ‘%d’
          Domainteil in Benutzer@Domain; sonst leer, wenn es keine
          Domain gibt
     ‘%h’
          Persönliches Verzeichnis

     Siehe doc/wiki/Variables.txt für die vollständige Liste. Einige
     Beispiele:
     ‘maildir:~/Maildir’
     ‘mbox:~/mail:INBOX=/var/mail/%u’
     ‘mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%’
     Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-uid
     Systembenutzer und -gruppe, die benutzt werden sollen, um auf Mails
     zuzugreifen. Wenn Sie mehrere Benutzerkonten verwenden, kann auch
     die Benutzerdatenbank „userdb“ vorrangig verwendet werden, indem
     sie zu Benutzer- oder Gruppenidentifikatoren (UIDs und GIDs)
     auflöst. Sie können hier Zahlen oder Namen angeben. Siehe
     <doc/wiki/UserIds.txt>. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-gid

     Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          mail-privileged-group
     Die Benutzergruppe, die zwischenzeitlich benutzt wird, um
     Operationen mit besonderen Berechtigungen auszuführen. Derzeit wird
     dies nur mit dem INBOX-Postfach benutzt, wenn dessen anfängliche
     Erzeugung oder Sperrung per „Dotlocking“-Datei fehlschlägt.
     Typischerweise wird es auf ‘"mail"’ gesetzt, damit Zugriffe auf
     ‘/var/mail’ möglich sind. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-access-groups
     Mail-Prozessen Zugriff auf diese zusätzlichen Benutzergruppen
     gewähren. Typischerweise werden sie benutzt, um gemeinsam genutzte
     Postfächer („Mailboxes“) so einzurichten, dass alle aus der Gruppe
     zugreifen können. Beachten Sie, dass es gefährlich sein kann, dies
     zu erlauben, wenn Benutzer symbolische Verknüpfungen einrichten
     können (z.B. kann jeder, wenn hier die ‘mail’-Gruppe festgelegt
     wurde, ‘ln -s /var/mail ~/mail/var’ benutzen, um die Postfächer der
     anderen zu löschen, oder ‘ln -s /secret/shared/box ~/mail/mybox’,
     um sie zu lesen). Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-attribute-dict
     Der Ort, wo ein Dictionary (eine Schlüssel-Wert-Datenbank) zu
     finden ist, mit dem IMAP-Metadaten gespeichert werden, entsprechend
     deren Definition im RFC 5464 (https://tools.ietf.org/html/rfc5464).

     Die IMAP-METADATA-Befehle stehen nur zur Verfügung, wenn in der
     Protokollkonfiguration von „imap“ das Feld ‘imap-metadata?’ auf
     ‘#t’ gesetzt ist.

     Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mail-full-filesystem-access?
     Clients vollen Dateisystemzugriff gestatten. Damit gibt es keine
     Zugriffsüberprüfungen mehr, abgesehen von denen, die das
     Betriebssystem für die aktiven Benutzer- und Gruppenidentifikatoren
     (UID und GID) durchführt. Es ist sowohl für maildir- als auch
     mbox-Formate verwendbar und Sie können dadurch für Namen von
     Postfächern („Mailboxes“) Präfixe wie z.B. ‘/pfad/’ oder
     ‘~benutzer/’ wählen. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck mmap-disable?
     Überhaupt kein ‘mmap()’ benutzen. Das ist erforderlich, wenn Sie
     Indexe auf geteilten Dateisystemen speichern (wie NFS oder
     Cluster-Dateisystemen). Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          dotlock-use-excl?
     Ob sich Dovecot darauf verlassen kann, dass ‘O_EXCL’ funktioniert,
     wenn es Sperrdateien als „Dotlock“ erstellt. NFS unterstützt
     ‘O_EXCL’ seit Version 3, also sollte es heutzutage kein Problem
     mehr sein, dies als Voreinstellung zu benutzen. Die Vorgabe ist
     ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-fsync
     Wann fsync() oder fdatasync() aufgerufen werden soll:
     ‘optimized’
          Wann immer es nötig ist, um keine wichtigen Daten zu verlieren
     ‘always’
          Praktisch bei z.B. NFS, wenn Schreibzugriffe mit ‘write()’
          verzögert sind
     ‘never’
          Niemals benutzen (ist am schnellsten, aber Abstürze können zu
          Datenverlusten führen)
     Die Vorgabe ist ‘"optimized"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mail-nfs-storage?
     Mails werden in NFS gespeichert. Setzen Sie dies auf ja, damit
     Dovecot NFS-Zwischenspeicher zurückschreiben kann, wann immer es
     nötig ist. Wenn Sie nur einen einzigen Mail-Server benutzen,
     brauchen Sie es _nicht_. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mail-nfs-index?
     Ob die Index-Dateien für Mails auch in NFS gespeichert sind. Wenn
     dies auf ja gesetzt ist, muss ‘mmap-disable? #t’ und
     ‘fsync-disable? #f’ gesetzt sein. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette lock-method
     Die Sperrmethode für Indexdateien. Die Alternativen sind fcntl,
     flock und dotlock. Bei Dotlocking werden ein paar Tricks benutzt,
     die mehr Plattenein- und -ausgaben als andere Sperrmethoden zur
     Folge haben. Für NFS-Benutzer gilt: flock funktioniert nicht, also
     denken Sie bitte daran, ‘mmap-disable’ zu ändern. Die Vorgabe ist
     ‘"fcntl"’.

 -- ‘dovecot-configuration’-Parameter: Dateiname mail-temp-dir
     Das Verzeichnis, in dem LDA/LMTP zwischenzeitlich eingehende
     E-Mails >128 kB speichert. Die Vorgabe ist ‘"/tmp"’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          first-valid-uid
     Der Bereich, in dem die Benutzerkennungen („UIDs“) von sich bei
     Dovecot anmeldenden Benutzern liegen müssen. Das dient
     hauptsächlich dazu, sicherzustellen, dass sich Anwender nicht mit
     den Benutzerkonten von Daemons oder sonstigen Systembenutzerkonten
     anmelden können. Beachten Sie, dass eine Anmeldung als
     Administrator „root“ grundsätzlich vom Code des Dovecot-Programms
     verboten wird und selbst dann _nicht_ möglich ist, wenn Sie
     ‘first-valid-uid’ auf 0 setzen. Die Vorgabe ist ‘500’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          last-valid-uid

     Die Vorgabe ist ‘0’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          first-valid-gid
     Der Bereich, in dem die Gruppenkennungen („GIDs“) von sich bei
     Dovecot anmeldenden Benutzern liegen müssen. Benutzerkonten, deren
     primäre Gruppe keine gültige GID hat, können sich nicht anmelden.
     Wenn das Benutzerkonto zu zusätzlichen Gruppen mit ungültiger GID
     gehört, werden diese Gruppen-Berechtigungen von Dovecot wieder
     abgegeben. Die Vorgabe ist ‘1’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          last-valid-gid

     Die Vorgabe ist ‘0’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          mail-max-keyword-length
     Die maximale zulässige Länge eines Mail-Schlüsselwort-Namens. Sie
     wirkt sich nur aus, wenn Sie neue Schlüsselwörter anzulegen
     versuchen. Die Vorgabe ist ‘50’.

 -- ‘dovecot-configuration’-Parameter:
          Doppelpunktgetrennte-Dateinamen-Liste valid-chroot-dirs
     Die Liste der Verzeichnisse, in die Mail-Prozesse per „chroot“ das
     Wurzelverzeichnis wechseln können (d.h. für ‘/var/mail’ wird auch
     ein chroot nach ‘/var/mail/foo/bar’ möglich). Diese Einstellung hat
     keinen Einfluss auf ‘login-chroot’, ‘mail-chroot’ oder
     Authentifizierungs-„chroot“-Einstellungen. Wenn diese Einstellung
     leer gelassen wird, werden chroots per ‘/./’ in Persönlichen
     Verzeichnissen ignoriert. _Warnung_: Fügen Sie niemals
     Verzeichnisse hinzu, die lokale Benutzer verändern können, weil
     diese dann eventuell über eine Rechteausweitung Administratorrechte
     an sich reißen können. In der Regel sollte man ein solches
     Verzeichnis nur eintragen, wenn Nutzer keinen Shell-Zugriff
     erhalten können. Siehe <doc/wiki/Chrooting.txt>. Die Vorgabe ist
     ‘()’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-chroot
     Das voreingestellte „chroot“-Verzeichnis für Mail-Prozesse. Es kann
     für einzelne Nutzer in der Benutzerdatenbank außer Kraft gesetzt
     werden, indem ‘/./’ als Teil der Angabe zum Persönlichen
     Verzeichnis des Benutzers verwendet wird (z.B. lässt
     ‘/home/./benutzer’ das Wurzelverzeichnis per „chroot“ nach ‘/home’
     wechseln). Beachten Sie, dass es in der Regel _nicht_ unbedingt
     notwendig ist, Chrooting zu betreiben, weil Dovecot es Benutzern
     ohnehin nicht erlaubt, auf Dateien außerhalb ihres
     Mail-Verzeichnisses zuzugreifen. Wenn Ihren Persönlichen
     Verzeichnissen das Chroot-Verzeichnis vorangestellt ist, sollten
     Sie ‘/.’ an ‘mail-chroot’ anhängen. Siehe <doc/wiki/Chrooting.txt>.
     Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Dateiname auth-socket-path
     Der UNIX-Socket-Pfad, unter dem der Hauptauthentifizierungsserver
     zu finden ist, mit dem Nutzer gefunden werden können. Er wird von
     IMAP (für gemeinsame Benutzerkonten) und von LDA benutzt. Die
     Vorgabe ist ‘"/var/run/dovecot/auth-userdb"’.

 -- ‘dovecot-configuration’-Parameter: Dateiname mail-plugin-dir
     Das Verzeichnis, in dem Mailplugins zu finden sind. Die Vorgabe ist
     ‘"/usr/lib/dovecot"’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste mail-plugins
     Die Liste der Plugins, die für alle Dienste geladen werden sollen.
     Plugins, die nur für IMAP, LDA, etc. gedacht sind, werden in ihren
     eigenen .conf-Dateien zu dieser Liste hinzugefügt. Die Vorgabe ist
     ‘()’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          mail-cache-min-mail-count
     Die kleinste Anzahl an Mails in einem Postfach, bevor
     Aktualisierungen an der Zwischenspeicherdatei vorgenommen werden.
     Damit kann das Verhalten von Dovecot optimiert werden, um weniger
     Schreibzugriffe auf die Platte durchzuführen, wofür allerdings mehr
     Lesezugriffe notwendig werden. Die Vorgabe ist ‘0’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          mailbox-idle-check-interval
     Während der IDLE-Befehl läuft, wird ab und zu im Postfach (der
     „Mailbox“) nachgeschaut, ob es neue Mails oder andere Änderungen
     gibt. Mit dieser Einstellung wird festgelegt, wie lange zwischen
     diesen Überprüfungen höchstens gewartet wird. Dovecot kann auch
     dnotify, inotify und kqueue benutzen, um sofort über Änderungen
     informiert zu werden. Die Vorgabe ist ‘"30 secs"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mail-save-crlf?
     Ob Mails mit CR+LF-Kodierung für Zeilenumbrüche statt einfacher LF
     gespeichert werden sollen. Dadurch wird das Versenden dieser Mails
     den Prozessor weniger beanspruchen, dies gilt besonders für den
     Systemaufruf sendfile() unter Linux und FreeBSD. Allerdings werden
     auch ein bisschen mehr Ein- und Ausgaben auf der Platte notwendig,
     wodurch es insgesamt langsamer werden könnte. Beachten Sie
     außerdem, dass andere Software, die die mboxes/maildirs ausliest,
     mit den CRs falsch umgehen und Probleme verursachen könnte. Die
     Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          maildir-stat-dirs?
     Nach Voreinstellung liefert der LIST-Befehl alle Einträge im
     Mailverzeichnis („Maildir“), die mit einem Punkt beginnen. Wenn
     diese Option aktiviert wird, liefert Dovecot nur solche Einträge,
     die für Verzeichnisse stehen. Dazu wird auf jedem Eintrag stat()
     aufgerufen, wodurch mehr Ein- und Ausgaben auf der Platte anfallen.
     (Bei Systemen, die einen Struktureintrag ‘dirent->d_type’ machen,
     ist diese Überprüfung unnötig, daher werden dort nur Verzeichnisse
     geliefert, egal was hier eingestellt ist.) Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          maildir-copy-with-hardlinks?
     Ob zum Kopieren einer Nachricht statt einer Kopie so weit möglich
     harte Verknüpfungen („Hard Links“) verwendet werden sollen. Dadurch
     wird das System wesentlich weniger ausgelastet und Nebenwirkungen
     sind unwahrscheinlich. Die Vorgabe ist ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          maildir-very-dirty-syncs?
     Ob Dovecot annehmen darf, dass es der einzige MUA ist, der auf
     Maildir zugreift. Dann wird das cur/-Verzeichnis nur bei
     unerwarteten Änderungen an seiner mtime durchsucht oder wenn die
     Mail sonst nicht gefunden werden kann. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste mbox-read-locks
     Welche Sperrmethoden zum Sperren des mbox-Postfachs (der „Mailbox“)
     benutzt werden. Es stehen vier Methoden zur Auswahl:

     ‘dotlock’
          Hier wird eine Datei namens <Postfach>.lock erzeugt. Es
          handelt sich um die älteste und am ehesten mit NFS verwendbare
          Lösung. Wenn Sie ein Verzeichnis wie /var/mail/ benutzen,
          müssen die Benutzer Schreibzugriff darauf haben.
     ‘dotlock-try’
          Genau wie dotlock, aber wenn es mangels Berechtigungen
          fehlschlägt oder nicht genug Plattenplatz verfügbar ist, wird
          einfach nicht gesperrt.
     ‘fcntl’
          Benutzen Sie diese Einstellung wenn möglich. Sie funktioniert
          auch mit NFS, sofern lockd benutzt wird.
     ‘flock’
          Existiert vielleicht nicht auf allen Systemen. Funktioniert
          nicht mit NFS.
     ‘lockf’
          Existiert vielleicht nicht auf allen Systemen. Funktioniert
          nicht mit NFS.

     Sie können mehrere Sperrmethoden angeben; wenn ja, dann ist deren
     Reihenfolge entscheidend, um Verklemmungen („Deadlocks“) zu
     vermeiden, wenn andere MTAs/MUAs auch mehrere Sperrmethoden
     benutzen. Manche Betriebssysteme erlauben es nicht, manche davon
     gleichzeitig zu benutzen.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste mbox-write-locks

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mbox-lock-timeout
     Wie lange höchstens auf Sperren (irgendeiner Art) gewartet wird,
     bevor abgebrochen wird. Die Vorgabe ist ‘"5 mins"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          mbox-dotlock-change-timeout
     Wenn eine Dotlock-Sperrdatei existiert, das Postfach (die
     „Mailbox“) aber auf keine Weise geändert wurde, wird die Sperrdatei
     nach der hier angegebenen Zeit außer Kraft gesetzt. Die Vorgabe ist
     ‘"2 mins"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mbox-dirty-syncs?
     Wenn sich das mbox-Postfach unerwartet ändert, müssen wir es
     gänzlich neu einlesen, um herauszufinden, was sich geändert hat.
     Wenn die mbox groß ist, kann das viel Zeit in Anspruch nehmen. Weil
     es sich bei der Änderung meistens nur um eine neu angefügte Mail
     handelt, wäre es schneller, nur die neuen Mails zu lesen. Wenn
     diese Einstellung hier aktiviert ist, arbeitet Dovecot nach dem
     eben beschriebenen Prinzip, liest aber doch die ganze mbox-Datei
     neu ein, sobald es etwas nicht wie erwartet vorfindet. Der einzige
     wirkliche Nachteil bei dieser Einstellung ist, dass es Dovecot
     nicht sofort erkennt, wenn ein anderer MUA die Statusindikatoren
     („Flags“) ändert. Beachten Sie, dass eine komplette Synchronisation
     bei den Befehlen SELECT, EXAMINE, EXPUNGE und CHECK durchgeführt
     wird. Die Vorgabe ist ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mbox-very-dirty-syncs?
     Wie ‘mbox-dirty-syncs’, aber ohne dass komplette Synchronisationen
     selbst bei den Befehlen SELECT, EXAMINE, EXPUNGE oder CHECK
     durchgeführt werden. Wenn dies hier aktiviert ist, wird
     ‘mbox-dirty-syncs’ ignoriert. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mbox-lazy-writes?
     Ob das Schreiben von mbox-Kopfzeilen hinausgezögert wird, bis eine
     komplette Schreibsynchronisation durchgeführt wird (bei den
     Befehlen EXPUNGE und CHECK, und beim Schließen des Postfachs, d.h.
     der „Mailbox“). Das wird besonders nützlich, wenn Clients POP3
     verwenden, wo es oft vorkommt, dass die Clients alle Mails löschen.
     Der Nachteil ist, dass Dovecots Änderungen nicht sofort für andere
     MUAs sichtbar werden. Die Vorgabe ist ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          mbox-min-index-size
     Wenn die Größe des mbox-Postfaches kleiner als die angegebene Größe
     (z.B. 100k) ist, werden keine Index-Dateien geschrieben. Wenn
     bereits eine Index-Datei existiert, wird sie weiterhin gelesen und
     nur nicht aktualisiert. Die Vorgabe ist ‘0’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          mdbox-rotate-size
     Die maximale Größe der dbox-Datei, bis sie rotiert wird. Die
     Vorgabe ist ‘10000000’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          mdbox-rotate-interval
     Das maximale Alter der dbox-Datei, bis sie rotiert wird.
     Typischerweise wird es in Tagen angegeben. Der Tag beginnt um
     Mitternacht, also steht 1d für heute, 2d für gestern, etc. 0 heißt,
     die Überprüfung ist abgeschaltet. Die Vorgabe ist ‘"1d"’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          mdbox-preallocate-space?
     Ob beim Erstellen neuer mdbox-Postfachdateien gleich am Anfang eine
     Datei der Größe ‘mdbox-rotate-size’ vorab angelegt werden soll.
     Diese Einstellung funktioniert derzeit nur mit Linux auf manchen
     Dateisystemen (ext4, xfs). Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-attachment-dir
     Postfächer in den Formaten sdbox und mdbox unterstützen es,
     Mail-Anhänge in externen Dateien zu speichern, wodurch sie mit
     Einzelinstanz-Speicherung („Single-Instance Storage“) dedupliziert
     werden können. Andere Hintergrundsysteme („Backends“) bieten dafür
     noch keine Unterstützung.

     _Warnung_: Diese Funktionalität wurde noch nicht ausgiebig
     getestet. Benutzen Sie sie auf eigene Gefahr.

     Das Wurzelverzeichnis, in dem Mail-Anhänge gespeichert werden. Wenn
     es leer gelassen wird, ist es deaktiviert. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          mail-attachment-min-size
     Anhänge, die kleiner sind als hier angegeben, werden _nicht_ extern
     gespeichert. Es ist auch möglich, ein Plugin zu schreiben, das
     externes Speichern bestimmter Anhänge deaktiviert. Die Vorgabe ist
     ‘128000’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-attachment-fs
     Ein Dateisystemhintergrundprogramm, mit dem Anhänge gespeichert
     werden:
     ‘posix’
          Dovecot führt keine Einzelinstanzspeicherung durch (aber das
          Dateisystem kann so leichter selbst deduplizieren)
     ‘sis posix’
          Einzelinstanzspeicherung wird durch einen sofortigen
          Byte-für-Byte-Vergleich beim Speichern umgesetzt
     ‘sis-queue posix’
          Einzelinstanzspeicherung mit verzögertem Vergleich und
          Deduplizierung.
     Die Vorgabe ist ‘"sis posix"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette mail-attachment-hash
     Welches Hash-Format die Dateinamen von Anhängen bestimmt. Sie
     können beliebigen Text und Variable beifügen: ‘%{md4}’, ‘%{md5}’,
     ‘%{sha1}’, ‘%{sha256}’, ‘%{sha512}’, ‘%{size}’. Es können auch nur
     Teile der Variablen benutzt werden, z.B. liefert ‘%{sha256:80}’ nur
     die ersten 80 Bits. Die Vorgabe ist ‘"%{sha1}"’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          default-process-limit

     Die Vorgabe ist ‘100’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          default-client-limit

     Die Vorgabe ist ‘1000’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          default-vsz-limit
     Die vorgegebene Beschränkung der VSZ („Virtual Memory Size“,
     virtuelle Speichergröße) für Dienstprozesse. Dies ist hauptsächlich
     dafür gedacht, Prozessen, die ein Speicherleck aufweisen,
     rechtzeitig Einhalt zu gebieten und sie abzuwürgen, bevor sie allen
     Speicher aufbrauchen. Die Vorgabe ist ‘256000000’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette default-login-user
     Der Anmeldebenutzer, der intern von Anmeldeprozessen benutzt wird.
     Der Anmeldebenutzer ist derjenige Benutzer im Dovecot-System, dem
     am wenigsten Vertrauen zugeschrieben wird. Er sollte auf überhaupt
     nichts Zugriff haben. Die Vorgabe ist ‘"dovenull"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          default-internal-user
     Der interne Benutzer, der von Prozessen ohne besondere
     Berechtigungen benutzt wird. Er sollte sich vom Anmeldebenutzer
     unterscheiden, damit Anmeldeprozesse keine anderen Prozesse stören
     können. Die Vorgabe ist ‘"dovecot"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl?
     SSL/TLS-Unterstützung: yes für ja, no für nein, oder required, wenn
     SSL/TLS verpflichtend benutzt werden muss. Siehe
     <doc/wiki/SSL.txt>. Die Vorgabe ist ‘"required"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-cert
     Das PEM-kodierte X.509-SSL/TLS-Zertifikat (der öffentliche
     Schlüssel). Die Vorgabe ist ‘"</etc/dovecot/default.pem"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-key
     Der PEM-kodierte private Schlüssel für SSL/TLS. Der Schlüssel wird
     geöffnet, bevor Administratorrechte abgegeben werden, damit niemand
     außer dem Administratornutzer „root“ Lesezugriff auf die
     Schlüsseldatei hat. Die Vorgabe ist
     ‘"</etc/dovecot/private/default.pem"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-key-password
     Wenn die Schlüsseldatei passwortgeschützt ist, geben Sie hier das
     Passwort an. Alternativ können Sie es angeben, wenn sie Dovecot
     starten, indem Sie es mit dem Parameter -p übergeben. Da die
     Konfigurationsdatei oftmals allgemein lesbar ist, möchten Sie es
     vielleicht in einer anderen Datei ablegen. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-ca
     Die PEM-kodierte Zertifikatsautorität, die als vertrauenswürdig
     eingestuft wird. Legen Sie sie nur dann fest, wenn Sie
     ‘ssl-verify-client-cert? #t’ setzen möchten. Die Datei sollte das
     oder die Zertifikat(e) der Zertifikatsautorität („Certificate
     Authority“, kurz CA) enthalten, gefolgt von den entsprechenden
     Zertifikatsperrlisten (CRLs), z.B. ‘ssl-ca </etc/ssl/certs/ca.pem’.
     Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          ssl-require-crl?
     Ob die Prüfung der Client-Zertifikate gegen die
     Zertifikatsperrlisten (CRLs) erfolgreich sein muss. Die Vorgabe ist
     ‘#t’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          ssl-verify-client-cert?
     Ob der Client gebeten wird, ein Zertifikat zu schicken. Wenn Sie es
     auch verpflichtend machen wollen, setzen Sie
     ‘auth-ssl-require-client-cert? #t’ im Autorisierungsabschnitt. Die
     Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          ssl-cert-username-field
     Welches Feld im Zertifikat den Benutzernamen angibt. In der Regel
     wählt man den Gebräuchlichen Namen „commonName“ oder den
     Eindeutigen Identifikator „x500UniqueIdentifier“ als Benutzernamen,
     wenn man Client-Zertifikate benutzt. Sie müssen dann auch
     ‘auth-ssl-username-from-cert? #t’ setzen. Die Vorgabe ist
     ‘"commonName"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-min-protocol
     Die kleinste Version des SSL-Protokolls, die noch akzeptiert werden
     soll. Die Vorgabe ist ‘"TLSv1"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-cipher-list
     Welche SSL-Ciphers benutzt werden dürfen. Die Vorgabe ist
     ‘"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette ssl-crypto-device
     Das SSL-Verschlüsselungsgerät („Crypto Device“), das benutzt werden
     soll. Gültige Werte bekommen Sie gezeigt, wenn Sie „openssl engine“
     ausführen. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette postmaster-address
     An welche Adresse Mails versandt werden sollen, die über die
     Zurückweisung einer Mail informieren. %d wird zur Domain des
     Empfängers umgeschrieben. Die Vorgabe ist ‘"postmaster@%d"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette hostname
     Der Rechnername, der an mehreren Stellen in versandten E-Mails
     (z.B. im Nachrichtenidentifikator „Message-Id“) und in
     LMTP-Antworten benutzt wird. Die Voreinstellung entspricht dem
     wirklichen Rechnernamen des Systems. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          quota-full-tempfail?
     Ob bei einem Nutzer, der sein Kontingent überschreitet, ein
     temporärer Fehler gemeldet werden soll, statt Nachrichten zurück zu
     versenden (zu „bouncen“). Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Dateiname sendmail-path
     Welche Binärdatei zum Versenden von Mails benutzt werden soll. Die
     Vorgabe ist ‘"/usr/sbin/sendmail"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette submission-host
     Wenn dieses Feld nicht leer ist, werden Mails an den SMTP-Server
     auf dem angegebenen „Rechner[:Port]“ statt an sendmail geschickt.
     Die Vothabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette rejection-subject
     Die Betreffkopfzeile („Subject:“), die für Mails benutzt werden
     soll, die über die Zurückweisung einer Mail informieren. Sie können
     dieselben Variablen wie beim hierunter beschriebenen
     Zurückweisungsgrund ‘rejection-reason’ benutzen. Die Vorgabe ist
     ‘"Rejected: %s"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette rejection-reason
     Die menschenlesbare Fehlermeldung in Mails, die über die
     Zurückweisung einer Mail informieren. Sie können diese Variablen
     benutzen:

     ‘%n’
          CRLF-Zeilenumbruch
     ‘%r’
          Begründung („Reason“)
     ‘%s’
          Ursprünglicher Betreff („Subject“)
     ‘%t’
          Empfänger („To“)
     Die Vorgabe ist ‘"Your message to <%t> was automatically
     rejected:%n%r"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette recipient-delimiter
     Trennzeichen zwischen dem eigentlichen Lokalteil („local-part“) und
     Detailangaben in der E-Mail-Adresse. Die Vorgabe ist ‘"+"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          lda-original-recipient-header
     Aus welcher Kopfzeile die Adresse des Ursprünglichen Empfängers
     (SMTPs „RCPT TO:“-Adresse) genommen wird, wenn sie nicht
     anderweitig eingetragen ist. Wird die Befehlszeilenoption ‘-a’ von
     dovecot-lda angegeben, hat sie Vorrang vor diesem Feld. Oft wird
     die Kopfzeile X-Original-To hierfür verwendet. Die Vorgabe ist
     ‘""’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          lda-mailbox-autocreate?
     Ob ein nicht existierendes Postfach (eine „Mailbox“) automatisch
     erzeugt werden soll, wenn eine Mail darin abgespeichert wird. Die
     Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Boolescher-Ausdruck
          lda-mailbox-autosubscribe?
     Ob automatisch erzeugte Postfächer („Mailboxes“) auch automatisch
     abonniert werden sollen. Die Vorgabe ist ‘#f’.

 -- ‘dovecot-configuration’-Parameter: Nichtnegative-ganze-Zahl
          imap-max-line-length
     Die maximale Länge einer IMAP-Befehlszeile. Manche Clients erzeugen
     sehr lange Befehlszeilen bei riesigen Postfächern, daher müssen Sie
     diesen Wert gegebenenfalls anheben, wenn Sie Fehlermeldungen wie
     „Too long argument“ oder „IMAP command line too large“ häufig
     sehen. Die Vorgabe ist ‘64000’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette imap-logout-format
     Formatzeichenkette für das Abmelden bei IMAP:
     ‘%i’
          Gesamtzahl vom Client empfangener Bytes
     ‘%o’
          Gesamtzahl zum Client versandter Bytes
     Siehe ‘doc/wiki/Variables.txt’ für eine Liste aller Variablen, die
     Sie benutzen können. Die Vorgabe ist ‘"in=%i out=%o
     deleted=%{deleted} expunged=%{expunged} trashed=%{trashed}
     hdr_count=%{fetch_hdr_count} hdr_bytes=%{fetch_hdr_bytes}
     body_count=%{fetch_body_count} body_bytes=%{fetch_body_bytes}"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette imap-capability
     Ersetzt die Antworten auf IMAP-CAPABILITY-Anfragen. Wenn der Wert
     mit „+“ beginnt, werden die angegebenen Capabilitys zu den
     voreingestellten hinzugefügt (z.B. +XFOO XBAR). Die Vorgabe ist
     ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette
          imap-idle-notify-interval
     Wie lange zwischen „OK Still here“-Benachrichtigungen gewartet
     wird, wenn der Client auf IDLE steht. Die Vorgabe ist ‘"2 mins"’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette imap-id-send
     ID-Feldnamen und -werte, die an Clients versandt werden sollen.
     Wenn * als der Wert angegeben wird, benutzt Dovecot dafür den
     voreingestellten Wert. Die folgenden Felder verfügen derzeit über
     voreingestellte Werte: name, version, os, os-version, support-url,
     support-email. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette imap-id-log
     Welche vom Client übermittelten ID-Felder protokolliert werden. *
     bedeutet alle. Die Vorgabe ist ‘""’.

 -- ‘dovecot-configuration’-Parameter:
          Leerzeichengetrennte-Zeichenketten-Liste
          imap-client-workarounds
     Maßnahmen, um verschiedene Fehler in Clients zu umgehen:

     ‘delay-newmail’
          Benachrichtigungen über neue Mails mit EXISTS/RECENT nur als
          Antwort auf NOOP- und CHECK-Befehle versenden. Manche Clients
          ignorieren diese ansonsten, zum Beispiel OSX Mail (<v2.1).
          Outlook Express verhält sich noch problematischer, denn ohne
          diese Maßnahme können dem Anwender Fehlermeldungen wie „Die
          Nachricht steht nicht mehr auf dem Server zur Verfügung“
          („Message no longer in server“) angezeigt werden. Beachten
          Sie, dass OE6 auch mit dieser Maßnahme immer noch Probleme
          macht, wenn die Synchronisation auf „nur Kopfzeilen“ („Headers
          Only“) eingestellt ist.

     ‘tb-extra-mailbox-sep’
          Thunderbird kommt aus irgendeinem Grund durcheinander bei
          LAYOUT=fs (mbox und dbox) und fügt überzählige ‘/’-Suffixe an
          Postfachnamen („Mailbox“-Namen) an. Mit dieser Maßnahme
          ignoriert Dovecot zusätzliche ‘/’, statt sie als ungültige
          Postfachnamen zu behandeln.

     ‘tb-lsub-flags’
          Ob \Noselect-Flags für LSUB-Antworten mit LAYOUT=fs (z.B.
          mbox) geliefert werden. Dadurch merkt Thunderbird, dass man
          Postfächer nicht auswählen kann, und zeigt sie ausgegraut an,
          statt erst nach einiger Zeit eine Fehlermeldung einzublenden,
          sie seien nicht auswählbar.
     Die Vorgabe ist ‘()’.

 -- ‘dovecot-configuration’-Parameter: Zeichenkette imap-urlauth-host
     Welcher Rechner in vom Client übermittelten URLAUTH-URLs zugelassen
     wird. Bei „*“ wird jeder zugelassen. Die Vorgabe ist ‘""’.

   Uff! Das waren viele Konfigurationsoptionen. Das Schöne daran ist
aber, dass Guix eine vollständige Schnittstelle für alles bietet, was
man in Dovecots Konfigurationssprache ausdrücken kann. Damit können Sie
Konfigurationen nicht nur auf schöne Art aufschreiben, sondern kann auch
reflektiven Code schreiben, der Konfigurationen aus Scheme heraus
auslesen und umschreiben kann.

   Vielleicht haben Sie aber auch einfach schon eine ‘dovecot.conf’, die
Sie mit Guix zum Laufen bringen möchten. In diesem Fall können Sie eine
‘opaque-dovecot-configuration’ im ‘#:config’-Parameter an
‘dovecot-service’ übergeben. Wie der Name schon sagt, bietet eine opake
Konfiguration keinerlei Unterstützung für Reflexion.

   Verfügbare ‘opaque-dovecot-configuration’-Felder sind:

 -- ‘opaque-dovecot-configuration’-Parameter: „package“ dovecot
     Das Dovecot-Paket.

 -- ‘opaque-dovecot-configuration’-Parameter: Zeichenkette string
     Der Inhalt der ‘dovecot.conf’ als eine Zeichenkette.

   Wenn Ihre ‘dovecot.conf’ zum Beispiel nur aus der leeren Zeichenkette
bestünde, könnten Sie einen Dovecot-Dienst wie folgt instanziieren:

     (dovecot-service #:config
                      (opaque-dovecot-configuration
                       (string "")))

OpenSMTPD-Dienst
................

 -- Scheme-Variable: opensmtpd-service-type
     Dies ist der Diensttyp des OpenSMTPD-Dienstes
     (https://www.opensmtpd.org), dessen Wert ein
     ‘opensmtpd-configuration’-Objekt sein sollte, wie in diesem
     Beispiel:

          (service opensmtpd-service-type
                   (opensmtpd-configuration
                     (config-file (local-file "./my-smtpd.conf"))))

 -- Datentyp: opensmtpd-configuration
     Datentyp, der die Konfiguration von opensmtpd repräsentiert.

     ‘package’ (Vorgabe: OPENSMTPD)
          Das Paketobjekt des SMTP-Servers OpenSMTPD.

     ‘config-file’ (Vorgabe: ‘%default-opensmtpd-config-file’)
          Ein dateiartiges Objekt der OpenSMTPD-Konfigurationsdatei, die
          benutzt werden soll. Nach Vorgabe lauscht OpenSMTPD auf der
          Loopback-Netzwerkschnittstelle und ist so eingerichtet, dass
          Mail von Nutzern und Daemons auf der lokalen Maschine sowie
          E-Mails an entfernte Server versandt werden können. Führen Sie
          ‘man smtpd.conf’ aus, wenn Sie mehr erfahren möchten.

     ‘setgid-commands?’ (Vorgabe: ‘#t’)
          Dadurch werden die folgenden Befehle setgid als ‘smtpq’, damit
          sie ausgeführt werden können: ‘smtpctl’, ‘sendmail’,
          ‘send-mail’, ‘makemap’, ‘mailq’ und ‘newaliases’. Siehe *note
          Setuid-Programme:: für mehr Informationen zu
          setgid-Programmen.

Exim-Dienst
...........

 -- Scheme-Variable: exim-service-type
     Dies ist der Diensttyp für den Mail Transfer Agent (MTA) namens
     Exim (https://exim.org), dessen Wert ein
     ‘exim-configuration’-Objekt sein sollte, wie in diesem Beispiel:

          (service exim-service-type
                   (exim-configuration
                     (config-file (local-file "./my-exim.conf"))))

   Um einen Dienst vom Typ ‘exim-service-type’ zu benutzen, müssen Sie
auch einen Dienst ‘mail-aliases-service-type’ in Ihrer
‘operating-system’-Deklaration stehen haben (selbst wenn darin keine
Alias-Namen eingerichtet sind).

 -- Datentyp: exim-configuration
     Der Datentyp, der die Konfiguration von Exim repräsentiert.

     ‘package’ (Vorgabe: EXIM)
          Das Paketobjekt des Exim-Servers.

     ‘config-file’ (Vorgabe: ‘#f’)
          Ein dateiartiges Objekt der Exim-Konfigurationsdatei. Wenn
          sein Wert ‘#f’ ist, wird die vorgegebene Konfigurationsdatei
          aus dem als ‘package’ angegebenen Paket benutzt. Die sich
          ergebende Konfigurationsdatei wird geladen, nachdem die
          Konfigurationsvariablen ‘exim_user’ und ‘exim_group’ gesetzt
          wurden.

Getmail-Dienst
..............

 -- Scheme-Variable: getmail-service-type
     Dies ist der Diensttyp des Mail-Retrievers Getmail
     (http://pyropus.ca/software/getmail/), der als Wert ein
     ‘getmail-configuration’-Objekt hat.

   Verfügbare ‘getmail-configuration’-Felder sind:

 -- ‘getmail-configuration’-Parameter: Zeichenkette name
     Ein Symbol, das den getmail-Dienst identifiziert.

     Die Vorgabe ist ‘"unset"’.

 -- ‘getmail-configuration’-Parameter: „package“ package
     Das getmail-Paket, das benutzt werden soll.

 -- ‘getmail-configuration’-Parameter: Zeichenkette user
     Das Benutzerkonto, mit dem getmail ausgeführt wird.

     Die Vorgabe ist ‘"getmail"’.

 -- ‘getmail-configuration’-Parameter: Zeichenkette group
     Die Benutzergruppe, mit der getmail ausgeführt wird.

     Die Vorgabe ist ‘"getmail"’.

 -- ‘getmail-configuration’-Parameter: Zeichenkette directory
     Welches getmail-Verzeichnis benutzt werden soll.

     Die Vorgabe ist ‘"/var/lib/getmail/default"’.

 -- ‘getmail-configuration’-Parameter: „getmail-configuration-file“
          rcfile
     Die zu benutzende getmail-Konfigurationsdatei.

     Verfügbare ‘getmail-configuration-file’-Felder sind:

      -- ‘getmail-configuration-file’-Parameter:
               „getmail-retriever-configuration“ retriever
          Von welchem E-Mail-Konto Mails bezogen werden sollen und wie
          auf dieses zugegriffen werden kann.

          Verfügbare ‘getmail-retriever-configuration’-Felder sind:

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    type
               Welche Art von Mail-Retriever benutzt werden soll. Zu den
               gültigen Werten gehören ‘passwd’ und ‘static’.

               Die Vorgabe ist ‘"SimpleIMAPSSLRetriever"’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    server
               Der Benutzername, mit dem man sich beim Mailserver
               anmeldet.

               Die Vorgabe ist ‘unset’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    username
               Der Benutzername, mit dem man sich beim Mailserver
               anmeldet.

               Die Vorgabe ist ‘unset’.

           -- ‘getmail-retriever-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl port
               Die Portnummer, mit der eine Verbindung hergestellt wird.

               Vorgegeben ist ‘#f’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    password
               Einträge, die Vorrang vor den Feldern aus passwd haben.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-retriever-configuration’-Parameter: Liste
                    password-command
               Einträge, die Vorrang vor den Feldern aus passwd haben.

               Die Vorgabe ist ‘()’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    keyfile
               Der Schlüssel im PEM-Format, der für das Aufbauen der
               TLS-Verbindung genutzt werden soll.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    certfile
               Die Zertifikatsdatei im PEM-Format, die für das Aufbauen
               der TLS-Verbindung genutzt werden soll.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-retriever-configuration’-Parameter: Zeichenkette
                    ca-certs
               Welche Zertifikate von Zertifikatsautoritäten („CA
               Certificates“) benutzt werden sollen.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-retriever-configuration’-Parameter:
                    Parameter-Assoziative-Liste extra-parameters
               Weitere Parameter für den Retriever.

               Die Vorgabe ist ‘()’.

      -- ‘getmail-configuration-file’-Parameter:
               „getmail-destination-configuration“ destination
          Was mit geholten Nachrichten geschehen soll.

          Verfügbare ‘getmail-destination-configuration’-Felder sind:

           -- ‘getmail-destination-configuration’-Parameter:
                    Zeichenkette type
               Die Art des Empfängers der Mail. Zu den gültigen Werten
               gehören ‘Maildir’, ‘Mboxrd’ und ‘MDA_external’.

               Die Vorgabe ist ‘unset’.

           -- ‘getmail-destination-configuration’-Parameter:
                    Zeichenkette-oder-Dateiartiges-Objekt path
               Entspricht der path-Option für den Mailempfänger
               („Destination“). Was hiermit bewirkt wird, hängt von der
               gewählten Empfängerart ab.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-destination-configuration’-Parameter:
                    Parameter-Assoziative-Liste extra-parameters
               Weitere Empfängerparameter.

               Die Vorgabe ist ‘()’.

      -- ‘getmail-configuration-file’-Parameter:
               „getmail-options-configuration“ options
          getmail konfigurieren.

          Verfügbare ‘getmail-options-configuration’-Felder sind:

           -- ‘getmail-options-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl verbose
               Wenn es auf ‘0’ gesetzt ist, wird getmail nur Warnungen
               und Fehler ausgeben. Ein Wert von ‘1’ bedeutet, dass
               Meldungen über das Holen und Löschen von Nachrichten
               ausgegeben werden. Wenn es auf ‘2’ gesetzt ist, wird
               getmail Meldungen über jede durchgeführte Aktion
               ausgeben.

               Die Vorgabe ist ‘1’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck read-all
               Wenn es auf wahr gesetzt ist, wird getmail alle
               verfügbaren Nachrichten holen. Andernfalls wird es nur
               solche Nachrichten holen, die es nicht bereits gesehen
               hat.

               Die Vorgabe ist ‘#t’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck delete
               Wenn es auf wahr gesetzt ist, werden Mitteilungen vom
               Server gelöscht, nachdem sie erfolgreich geholt und
               zugestellt wurden. Andernfalls werden Nachrichten auf dem
               Server gelassen.

               Vorgegeben ist ‘#f’.

           -- ‘getmail-options-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl delete-after
               Getmail wird nach der hier angegebenen Anzahl von Tagen
               Nachrichten löschen, die es gesehen hat, wenn sie
               zugestellt wurden. Dadurch werden Nachrichten diese
               Anzahl von Tagen lang auf dem Server gelassen, nachdem
               sie zugestellt wurden. Ein Wert von ‘0’ deaktiviert diese
               Funktionalität.

               Die Vorgabe ist ‘0’.

           -- ‘getmail-options-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl delete-bigger-than
               Nachrichten, die größer als die angegebene Anzahl von
               Bytes sind, nach dem Holen löschen, selbst wenn die
               Optionen delete und delete-after abgeschaltet sind. Ein
               Wert von ‘0’ deaktiviert diese Funktionalität.

               Die Vorgabe ist ‘0’.

           -- ‘getmail-options-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl max-bytes-per-session
               Nachrichten, die höchstens die angegebene Anzahl von
               Bytes groß sind, vor dem Beenden der Serversitzung von
               dort holen. Ein Wert von ‘0’ deaktiviert diese
               Funktionalität.

               Die Vorgabe ist ‘0’.

           -- ‘getmail-options-configuration’-Parameter:
                    Nichtnegative-ganze-Zahl max-message-size
               _Keine_ Nachrichten holen, deren Größe die angegebene
               Anzahl von Bytes überschreitet. Ein Wert von ‘0’
               deaktiviert diese Funktionalität.

               Die Vorgabe ist ‘0’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck delivered-to
               Wenn dies auf wahr gesetzt ist, fügt getmail eine
               Delivered-To-Kopfzeile an die Nachrichten an.

               Die Vorgabe ist ‘#t’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck received
               Wenn dies gesetzt ist, fügt getmail eine
               Received-Kopfzeile an die Nachrichten an.

               Die Vorgabe ist ‘#t’.

           -- ‘getmail-options-configuration’-Parameter: Zeichenkette
                    message-log
               Getmail wird seine Aktionen in die genannte Datei
               protokollieren. Wenn als Wert ‘""’ angegeben wird, wird
               diese Funktionalität deaktiviert.

               Die Vorgabe ist ‘""’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck message-log-syslog
               Wenn es auf wahr gesetzt ist, wird getmail ein Protokoll
               seiner Aktionen an den Systemprotokolldienst übergeben.

               Vorgegeben ist ‘#f’.

           -- ‘getmail-options-configuration’-Parameter:
                    Boolescher-Ausdruck message-log-verbose
               Wenn dies auf wahr gesetzt ist, wird getmail
               Informationen über _nicht_ geholte Nachrichten und den
               jeweiligen Grund dafür sowie Anfang und Ende des
               Holvorgangs in Informationszeilen protokollieren.

               Vorgegeben ist ‘#f’.

           -- ‘getmail-options-configuration’-Parameter:
                    Parameter-Assoziative-Liste extra-parameters
               Weitere geltende Optionen.

               Die Vorgabe ist ‘()’.

 -- ‘getmail-configuration’-Parameter: Liste idle
     Eine Liste der Postfächer, für die getmail beim Server auf
     Benachrichtigungen wegen neuer Mails warten soll. Diese
     Funktionalität setzt voraus, dass der Server die IDLE-Erweiterung
     unterstützt.

     Die Vorgabe ist ‘()’.

 -- ‘getmail-configuration’-Parameter: Liste environment-variables
     Umgebungsvariable, die für getmail gelten sollen.

     Die Vorgabe ist ‘()’.

Dienst für Mail-Alias-Namen
...........................

 -- Scheme-Variable: mail-aliases-service-type
     Das ist der Typ des Dienstes, der ‘/etc/aliases’ zur Verfügung
     stellt, wo festgelegt wird, wie Mail-Nachrichten an Benutzer des
     Systems geliefert werden.

          (service mail-aliases-service-type
                   '(("postmaster" "bob")
                     ("bob" "bob@example.com" "bob@example2.com")))

   Die Konfiguration für einen Dienst vom Typ
‘mail-aliases-service-type’ ist eine assoziative Liste, die angibt, wie
beim System ankommende Mail-Nachrichten zuzustellen sind. Jeder Eintrag
hat die Form ‘(Alias Adressen ...)’, wobei das ‘Alias’ den lokalen
Alias-Namen angibt und ‘Adressen’ angibt, wo die Mail-Nachrichten für
diesen Benutzer ankommen sollen.

   Die Alias-Namen müssen nicht als Benutzerkonten auf dem lokalen
System existieren. Im Beispiel oben muss es also keinen Eintrag für
‘postmaster’ unter den ‘user-accounts’ in der
‘operating-system’-Deklaration geben, um die ‘postmaster’-Mails an ‘bob’
weiterzuleiten (von wo diese dann an ‘bob@example.com’ und
‘bob@example2.com’ weitergeschickt würden).

GNU-Mailutils-IMAP4-Daemon
..........................

 -- Scheme-Variable: imap4d-service-type
     Dies ist der Diensttyp für den IMAP4-Daemon aus den GNU Mailutils
     (siehe *note (mailutils)imap4d::), dessen Wert ein
     ‘imap4d-configuration’-Objekt sein sollte, wie in diesem Beispiel:

          (service imap4d-service-type
                   (imap4d-configuration
                     (config-file (local-file "imap4d.conf"))))

 -- Datentyp: imap4d-configuration
     Datentyp, der die Konfiguration von ‘imap4d’ repräsentiert.

     ‘package’ (Vorgabe: ‘mailutils’)
          Das Paket, das ‘imap4d’ zur Verfügung stellt.

     ‘config-file’ (Vorgabe: ‘%default-imap4d-config-file’)
          Dateiartiges Objekt der zu nutzenden Konfigurationsdatei. Nach
          Vorgabe lauscht IMAP4D auf TCP-Port 143 vom lokalen Rechner
          ‘localhost’. Siehe *note (mailutils)Conf-imap4d:: für Details.

Radicale-Dienst
...............

 -- Scheme-Variable: radicale-service-type
     Dies ist der Diensttyp des CalDAV- und CardDAV-Servers Radicale
     (https://radicale.org), der als Wert ein
     ‘radicale-configuration’-Objekt hat.

 -- Datentyp: radicale-configuration
     Datentyp, der die Konfiguration von ‘radicale’ repräsentiert.

     ‘package’ (Vorgabe: ‘radicale’)
          Das Paket, das ‘radicale’ zur Verfügung stellt.

     ‘config-file’ (Vorgabe: ‘%default-radicale-config-file’)
          Dateiartiges Objekt der zu nutzenden Konfigurationsdatei. Nach
          Vorgabe lauscht Radicale auf TCP-Port 5232 vom lokalen Rechner
          ‘localhost’ und benutzt die ‘htpasswd’-Datei unter
          ‘/var/lib/radicale/users’ mit Passwörtern im Klartext
          („plain“).

