How to get rid of original tty2?

Hi,

I try to incorporate the info reader on tty2 from the installer in my regular system.
But I get the following error:
guix system: error: service 'term-tty2' provided more than once

Any tips and hints are welcomed.

here is my current config:

;; -*- mode: scheme; -*-
;; This is an operating system configuration template
;; for a "desktop" setup with GNOME and Xfce where the
;; root partition is encrypted with LUKS, and a swap file.

(use-modules (gnu)
             (gnu system)
             (gnu system nss)
             (guix utils)
             (gnu packages linux)
             (gnu packages audio)
             (gnu packages networking)
             (gnu packages password-utils)
             (gnu packages version-control)
             (gnu packages ssh)
             (gnu packages tls)
             (gnu packages cryptsetup)
             (gnu packages cpio)
             (gnu packages textutils)
             (gnu packages firmware)
	     (gnu packages gnupg)
	     (gnu packages gnuzilla)
             (gnu packages texinfo)
             (gnu packages compression)
	     (gnu services cups)
             (gnu services shepherd)
	     ;; Import nonfree linux module.
             (nongnu packages linux)
             (nongnu system linux-initrd)
	     ;; (nongnu packages mozilla)
             (nongnu packages firmware))

(use-service-modules
             desktop
             sddm
             xorg
             dbus
             ssh)
(use-package-modules
             certs
             kde)


(define install-grub-efi-mkimage
  #~(lambda (bootloader efi-dir mount-point)
  "Create an Grub EFI image with included cryptomount support for luks2,
which grub-install does not handle yet."
        (when efi-dir
            (let ((grub-mkimage (string-append bootloader "/bin/grub-mkimage"))
                  ;; Required modules, YMMV.
                  (modules (list "luks2" "part_gpt" "cryptodisk" "gcry_rijndael" "pbkdf2" "gcry_sha256" "btrfs"))
                  (prefix (string-append mount-point "/boot/grub"))
                  ;; Different configuration required to set up a crypto
                  ;; device. Change crypto_uuid to match your output of
                  ;; `cryptsetup luksUUID /device` but remove the dashes.
                  ;; XXX: Maybe cryptomount -a could work?
                  (config #$(plain-file "grub.cfg" "set crypto_uuid=d3267bbc2a1d49f6a8e9a7bfc8c750e3
cryptomount -u $crypto_uuid
set root=crypto0
set prefix=($root)/boot/grub
insmod normal
normal"))
                  (target-esp (if (file-exists? (string-append mount-point efi-dir))
                                  (string-append mount-point efi-dir)
                                  efi-dir)))
              (apply invoke (append
                             (list
                               grub-mkimage
                              "-p" prefix
                              "-O" "x86_64-efi"
                              "-c" config
                              "-o" (string-append target-esp "/EFI/Guix/grubx64.efi"))
                             modules))))))

(define grub-efi-bootloader-luks2
  (bootloader
    (inherit grub-efi-bootloader)
    (name 'grub-efi-luks2)
    (installer install-grub-efi-mkimage)))

;;;
;;; Documentation service.
;;;

(define %installation-node-names
  ;; Translated name of the "System Installation" node of the manual.  Ideally
  ;; we'd extract it from the 'guix-manual' gettext domain, but that one is
  ;; usually not available at run time, hence this hack.
  '(("de" . "Systeminstallation")
    ("en" . "System Installation")
    ("es" . "Instalación del sistema")
    ("fr" . "Installation du système")
    ("ru" . "Установка системы")))

(define (log-to-info tty user)
  "Return a script that spawns the Info reader on the right section of the
manual."
  (program-file "log-to-info"
                #~(let* ((tty      (open-file #$(string-append "/dev/" tty)
                                              "r0+"))
                         (locale   (cadr (command-line)))
                         (language (string-take locale
                                                (string-index locale #\_)))
                         (infodir  "/run/current-system/profile/share/info")
                         (per-lang (string-append infodir "/guix." language
                                                  ".info.gz"))
                         (file     (if (file-exists? per-lang)
                                       per-lang
                                       (string-append infodir "/guix.info")))
                         (node     (or (assoc-ref '#$%installation-node-names
                                                  language)
                                       "System Installation")))
                    (redirect-port tty (current-output-port))
                    (redirect-port tty (current-error-port))
                    (redirect-port tty (current-input-port))

                    (let ((pw (getpwnam #$user)))
                      (setgid (passwd:gid pw))
                      (setuid (passwd:uid pw)))

                    ;; 'gunzip' is needed to decompress the doc.
                    (setenv "PATH" (string-append #$gzip "/bin"))

                    ;; Change this process' locale so that command-line
                    ;; arguments to 'info' are properly encoded.
                    (catch #t
                      (lambda ()
                        (setlocale LC_ALL locale)
                        (setenv "LC_ALL" locale))
                      (lambda _
                        ;; Sometimes LOCALE itself is not available.  In that
                        ;; case pick the one UTF-8 locale that's known to work
                        ;; instead of failing.
                        (setlocale LC_ALL "en_US.utf8")
                        (setenv "LC_ALL" "en_US.utf8")))

                    (execl #$(file-append info-reader "/bin/info")
                           "info" "-d" infodir "-f" file "-n" node))))

(define (documentation-shepherd-service tty)
  (list (shepherd-service
         (provision (list (symbol-append 'term- (string->symbol tty))))
         (requirement '(user-processes host-name udev virtual-terminal))
         (start #~(lambda* (#:optional (locale "en_US.utf8"))
                    (fork+exec-command
                     (list #$(log-to-info tty "documentation") locale)
                     #:environment-variables
                     `("GUIX_LOCPATH=/run/current-system/locale"
                       "TERM=linux"))))
         (stop #~(make-kill-destructor)))))

(define %documentation-users
  ;; User account for the Info viewer.
  (list (user-account (name "documentation")
                      (system? #t)
                      (group "nogroup")
                      (home-directory "/var/empty"))))

(define documentation-service-type
  ;; Documentation viewer service.
  (service-type (name 'documentation)
                (extensions
                 (list (service-extension shepherd-root-service-type
                                          documentation-shepherd-service)
                       (service-extension account-service-type
                                          (const %documentation-users))))
                (description "Run the Info reader on a tty.")))



(define %issue
  ;; Greeting.
  "
\x1b[1;37mWelcome to Guix \\s \\r \\v \\n \\l \x1b[0m

\x1b[1;33mUse Alt-F2 for documentation.\x1b[0m
")

(operating-system
  (kernel linux)
  (initrd microcode-initrd)
  (firmware (list linux-firmware))
  ;(firmware (cons* 
                   ; amdgpu-firmware
                   ; atheros-firmware
                   ; %base-firmware))
  (host-name "X13")
  (timezone "Europe/Paris")
  (locale "de_CH.utf8")

  ;; Choose US English keyboard layout.  The "altgr-intl"
  ;; variant provides dead keys for accented characters.
  ;(keyboard-layout (keyboard-layout "us" "altgr-intl"))
  (keyboard-layout (keyboard-layout "ch"))

  ;; Use the UEFI variant of GRUB with the EFI System
  ;; Partition mounted on /boot/efi.
  ;; /root in /root/key-file.cpio refers to the 
  ;; /dev/mapper/env/root subvolume and not the home of root.
  (bootloader (bootloader-configuration
                (bootloader grub-efi-bootloader-luks2)
                (targets '("/boot/efi"))
                (keyboard-layout keyboard-layout)
                (extra-initrd "/root/key-file.cpio")))

  ;; Specify a mapped device for the encrypted root partition.
  ;; The UUID is that returned by 'cryptsetup luksUUID'.
  (mapped-devices
   (list (mapped-device
          (source (uuid "d3267bbc-2a1d-49f6-a8e9-a7bfc8c750e3"))
          (target "enc")
          (type (luks-device-mapping-with-options #:key-file "/key-file.bin")))))

  (file-systems (cons* (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/")
                         (type "btrfs")
                         (options "subvol=root")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/boot")
                         (type "btrfs")
                         (options "subvol=boot")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/gnu")
                         (type "btrfs")
                         (options "subvol=gnu")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/home")
                         (type "btrfs")
                         (options "subvol=home")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/var/log")
                         (type "btrfs")
                         (options "subvol=log")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/data")
                         (type "btrfs")
                         (options "subvol=data")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/swap")
                         (type "btrfs")
                         (options "subvol=swap")
                         (dependencies mapped-devices))
                       (file-system
                         (mount-point "/boot/efi")
                         (type "vfat")
                         (device (uuid "9311-566C" 'fat32)))
                 %base-file-systems))
  (swap-devices
    (list
      (swap-space
        (target "/swap/swapfile")
        (dependencies (filter (file-system-mount-point-predicate "/swap")
                              file-systems)))))

  (users (cons* (user-account
                  (name "dgr")
                  (comment "Dominik Riva - owner of this machine")
                  (password #f)
                  (group "students")
                  (supplementary-groups '("wheel" "netdev"
                                          "audio" "video")))
               %base-user-accounts))

  ;; Add the `students' group
  (groups (cons* (user-group
                  (name "students"))
                 %base-groups))

  ;; This is where we specify system-wide packages.
  (packages (cons* bluez 
                   bluez-alsa
                   blueman
		   icecat
		   gpgme ;; for kwallet
                   keepassxc
                   git
                   ;gvfs ;; for user mounts
                   openssh
                   openssl
                   cryptsetup
                   cpio
		   aha ;; for plasma info center firmware security
                   fwupd ;; also for firmware security
                   %base-packages))

  (issue %issue)

  ;; Use the "desktop" services, which
  ;; include the X11 log-in service, networking with
  ;; NetworkManager, and more.
  (services 
   (append (list (service plasma-desktop-service-type)

                 ;; Documentation.  The manual is in UTF-8, but
                 ;; 'console-font-service' sets up Unicode support and loads a font
                 ;; with all the useful glyphs like em dash and quotation marks.
                 (service documentation-service-type "tty2")

                 ;; To facilitate copy/paste.
                 (service gpm-service-type)

                 ;;(service fwupd-service-type)
                 (simple-service 'fwupd-polkit
				 polkit-service-type
                                 (list fwupd))
                 (simple-service 'fwupd-dbus
                                 dbus-root-service-type
                                 (list fwupd))
                 (set-xorg-configuration
                  (xorg-configuration
                   (keyboard-layout keyboard-layout))
                  sddm-service-type)
                 (service sddm-service-type
                          (sddm-configuration
                           (theme "breeze")
                           (display-server "wayland")
			   ))
                 (service bluetooth-service-type
                          (bluetooth-configuration
                           (auto-enable? #t)))
                 (simple-service 'dbus-extras
				 dbus-root-service-type
                                 (list blueman))
                 (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"))))))
		 (service cups-service-type))
	   (modify-services %desktop-services
	    		    (delete gdm-service-type))
	   ;; (delete (lambda (x) (when
	   ;; 	      (mingetty-configuration? (service-parameters x)) (eq?
	   ;; 	      (mingetty-configuration-tty (service-parameters x)) 2)))
	   ;; 	   %base-services)
	   ))

  ;; Allow resolution of '.local' host names with mDNS.
  (name-service-switch %mdns-host-lookup-nss))

guix system: error: service ‘term-tty2’ provided more than once

There was a post on guix-devel discussing this some time ago: Re: service 'term-tty2' provided more than once

the workaround suggested here is something along the lines of:

(modify-services %base-services
 ...
 (delete mingetty-service-type)
 (delete mingetty-service-type)
 (delete mingetty-service-type)
 (delete mingetty-service-type)
 (delete mingetty-service-type)
 (delete mingetty-service-type))

to delete all of the predefined 6 mingetty-services. Two deletes would just delete tty1 and tty2 , so you could delete the first two mingetty services and redefine them like:

        (service mingetty-service-type (mingetty-configuration
                                         (tty "tty1")
                                          ...))

while redefining tty2 to your liking, but that would be a cumbersome solution as we can just modify the existing mingetty-service-type here. To get back to your original question:

I try to incorporate the info reader on tty2 from the installer in my regular system.

You could modify tty2 to autologin to the user info (this requires ice-9 match):

(modify-services %base-services
		 (mingetty-service-type
                  config =>
                  (mingetty-configuration
                   (inherit config)
                   (auto-login
                    (match (mingetty-configuration-tty config)
			   ("tty2" "info")
			   (_ #f))))))

and create the user info with /bin/info as its login-shell:

(user-account
  (name "info")
  (group "nogroup")
  (shell (file-append info-reader "/bin/info"))
  (comment "auto-login user for info-reader"))

so logging in as the user info would drop you to an overview of all system-wide available info pages, the guix ones would be accessible from there. As we modified tty2 to auto-login as info this would mean the info pages are accessible on tty2 just like they would be when using the installer. Hope this helps, even though it probably isn’t exactly the configuration the installer uses.

1 Like

Sounds good to me as I don’t want to recreate the installers info on TTY2 exactly but have the documentation handy in case I mess up the GUI.

Where to put the modify-services exactly?

I get different errors that depending on where I put your proposed code.

/sudo:root@x13:/home/dgr/ #$ guix system reconfigure /data/guix-config/config.scm
/data/guix-config/config.scm:308:2: error: (modify-services %base-services (mingetty-service-type config => (mingetty-configuration (inherit config) (auto-login (match (mingetty-configuration-tty config) ("tty2" "info") (_ #f)))))): invalid field specifier
/sudo:root@x13:/home/dgr/ #$ guix system reconfigure /data/guix-config/config.scm
/data/guix-config/config.scm:362:27: error: (_ #f): bad use of '_' syntactic keyword

Where to put the modify-services exactly?

modify-services evaluates to a list of services so you could either assign the new list of services to a variable and reference it like (services %my-new-services) in your operating-system declaration or you could directly use modify-services there.

As a more concrete example:

;;  so you need ice-9 match
(use-modules (gnu) 
             (srfi srfi-1)
             (ice-9 match))
;; inside your operating-system declaration
(operating-system

  (users (cons*
;; add a user to be used for documentation
                (user-account
                  (name "docs")
                  (group "nogroup")
                  (shell (file-append info-reader "/bin/info"))
                  (comment "info-reader"))
                %base-user-accounts))
;; and finally modify the list of services like this
  (services
  ;; note wilkos-services is a list of services on my system
  ;; you want to use %base-services or %desktop-services
  ;; here instead of that
   (modify-services wilkos-services
     (mingetty-service-type
      config =>
      (mingetty-configuration
       (inherit config)
       (auto-login
        (match (mingetty-configuration-tty config)
           ("tty2" "docs")
           (_ #f)))))
    ;; this is something you can ignore, just to showcase
    ;; how modify services work and how to modify additional
    ;; provided services.
    (network-manager-service-type config =>
      (network-manager-configuration
        (vpn-plugins
        (list network-manager-openvpn))))
     ;; deleting a service works like this
     (delete gdm-service-type)))

tried to guix system reconfigure with this config without issues, so this should work for you (haven’t restarted, to check wether tty2 works as expected, but it probably should!).

1 Like

Thank you very much!

The error: (_ #f): bad use of '_' syntactic keyword was because I forgot to add ice-9 match.

Sadly still no info on TTY2 as I get Error in Service module after the auto login.

Could you try logging in as the newly created docs user on any of the available other tty? Does that work and drops you to info? I suspect the error in service module may stem from something different, if you’d like to, you could drop the current version of your config here & I’ll have a look as soon as I find the time to during the next week.

I can login at an other tty and info works as expected.

Thank you for the generous offer!

;; -*- mode: scheme; -*-
;; This is an operating system configuration template
;; for a "desktop" setup with GNOME and Xfce where the
;; root partition is encrypted with LUKS, and a swap file.

(use-modules (gnu)
	     (srfi srfi-1)
	     (ice-9 match)
             (gnu system)
             (gnu system nss)
             (guix utils)
             (gnu packages linux)
             (gnu packages audio)
             (gnu packages networking)
             (gnu packages password-utils)
             (gnu packages version-control)
             (gnu packages ssh)
             (gnu packages tls)
             (gnu packages cryptsetup)
             (gnu packages cpio)
             (gnu packages textutils)
             (gnu packages firmware)
	     (gnu packages gnupg)
	     (gnu packages gnuzilla)
             (gnu packages texinfo)
             (gnu packages compression)
	     (gnu services cups)
             (gnu services shepherd)
	     ;; Import nonfree linux module.
             (nongnu packages linux)
             (nongnu system linux-initrd)
	     ;; (nongnu packages mozilla)
             (nongnu packages firmware))

(use-service-modules
             desktop
             sddm
             xorg
             dbus
             ssh)
(use-package-modules
             certs
             kde)


(define install-grub-efi-mkimage
  #~(lambda (bootloader efi-dir mount-point)
  "Create an Grub EFI image with included cryptomount support for luks2,
which grub-install does not handle yet."
        (when efi-dir
            (let ((grub-mkimage (string-append bootloader "/bin/grub-mkimage"))
                  ;; Required modules, YMMV.
                  (modules (list "luks2" "part_gpt" "cryptodisk" "gcry_rijndael" "pbkdf2" "gcry_sha256" "btrfs"))
                  (prefix (string-append mount-point "/boot/grub"))
                  ;; Different configuration required to set up a crypto
                  ;; device. Change crypto_uuid to match your output of
                  ;; `cryptsetup luksUUID /device` but remove the dashes.
                  ;; XXX: Maybe cryptomount -a could work?
                  (config #$(plain-file "grub.cfg" "set crypto_uuid=d3267bbc2a1d49f6a8e9a7bfc8c750e3
cryptomount -u $crypto_uuid
set root=crypto0
set prefix=($root)/boot/grub
insmod normal
normal"))
                  (target-esp (if (file-exists? (string-append mount-point efi-dir))
                                  (string-append mount-point efi-dir)
                                  efi-dir)))
              (apply invoke (append
                             (list
                               grub-mkimage
                              "-p" prefix
                              "-O" "x86_64-efi"
                              "-c" config
                              "-o" (string-append target-esp "/EFI/Guix/grubx64.efi"))
                             modules))))))

(define grub-efi-bootloader-luks2
  (bootloader
    (inherit grub-efi-bootloader)
    (name 'grub-efi-luks2)
    (installer install-grub-efi-mkimage)))

(define %issue
  ;; Greeting.
  "
\x1b[1;37mWelcome to Guix \\s \\r \\v \\n \\l \x1b[0m

\x1b[1;33mUse Alt-F2 for documentation.\x1b[0m
")

(operating-system
  (kernel linux)
  (initrd microcode-initrd)
  (firmware (list linux-firmware))
  ;(firmware (cons*
                   ; amdgpu-firmware
                   ; atheros-firmware
                   ; %base-firmware))
  (host-name "X13")
  (timezone "Europe/Paris")
  (locale "de_CH.utf8")

  ;; Choose US English keyboard layout.  The "altgr-intl"
  ;; variant provides dead keys for accented characters.
  ;(keyboard-layout (keyboard-layout "us" "altgr-intl"))
  (keyboard-layout (keyboard-layout "ch"))

  ;; Use the UEFI variant of GRUB with the EFI System
  ;; Partition mounted on /boot/efi.
  ;; /root in /root/key-file.cpio refers to the 
  ;; /dev/mapper/env/root subvolume and not the home of root.
  (bootloader (bootloader-configuration
                (bootloader grub-efi-bootloader-luks2)
                (targets '("/boot/efi"))
                (keyboard-layout keyboard-layout)
                (extra-initrd "/root/key-file.cpio")))

  ;; Specify a mapped device for the encrypted root partition.
  ;; The UUID is that returned by 'cryptsetup luksUUID'.
  (mapped-devices
   (list (mapped-device
          (source (uuid "d3267bbc-2a1d-49f6-a8e9-a7bfc8c750e3"))
          (target "enc")
          (type (luks-device-mapping-with-options #:key-file "/key-file.bin")))))

  (file-systems (cons* (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/")
                         (type "btrfs")
                         (options "subvol=root")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/boot")
                         (type "btrfs")
                         (options "subvol=boot")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/gnu")
                         (type "btrfs")
                         (options "subvol=gnu")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/home")
                         (type "btrfs")
                         (options "subvol=home")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/var/log")
                         (type "btrfs")
                         (options "subvol=log")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/data")
                         (type "btrfs")
                         (options "subvol=data")
                         (dependencies mapped-devices))
                       (file-system
                         (device "/dev/mapper/enc")
                         (mount-point "/swap")
                         (type "btrfs")
                         (options "subvol=swap")
                         (dependencies mapped-devices))
                       (file-system
                         (mount-point "/boot/efi")
                         (type "vfat")
                         (device (uuid "9311-566C" 'fat32)))
                 %base-file-systems))
  (swap-devices
    (list
      (swap-space
        (target "/swap/swapfile")
        (dependencies (filter (file-system-mount-point-predicate "/swap")
                              file-systems)))))

  (users (cons* (user-account
                  (name "dgr")
                  (comment "Dominik Riva - owner of this machine")
                  (password #f)
                  (group "students")
                  (supplementary-groups '("wheel" "netdev"
                                          "audio" "video")))
		(user-account
		 (name "info")
		 (group "nogroup")
		 (shell (file-append info-reader "/bin/info"))
		 (comment "auto-login user for info-reader"))
               %base-user-accounts))

  ;; Add the `students' group
  (groups (cons* (user-group
                  (name "students"))
                 %base-groups))

  ;; This is where we specify system-wide packages.
  (packages (cons* bluez
                   bluez-alsa
                   blueman
		   icecat
		   gpgme ;; for kwallet
                   keepassxc
                   git
                   ;gvfs ;; for user mounts
                   openssh
                   openssl
                   cryptsetup
                   cpio
		   aha ;; for plasma info center firmware security
                   fwupd ;; also for firmware security
                   %base-packages))

  ;; inject the modified issue to get stuff like TTY N° displayed
  (issue %issue)

  ;; Use the "desktop" services, which
  ;; include the X11 log-in service, networking with
  ;; NetworkManager, and more.
  (services
   (append (list (service plasma-desktop-service-type)
                 ;; To facilitate copy/paste.
                 (service gpm-service-type)
                 ;;(service fwupd-service-type)
                 (simple-service 'fwupd-polkit
				 polkit-service-type
                                 (list fwupd))
                 (simple-service 'fwupd-dbus
                                 dbus-root-service-type
                                 (list fwupd))
                 (set-xorg-configuration
                  (xorg-configuration
                   (keyboard-layout keyboard-layout))
                  sddm-service-type)
                 (service sddm-service-type
                          (sddm-configuration
                           (theme "breeze")
                           (display-server "wayland")
			   ))
                 (service bluetooth-service-type
                          (bluetooth-configuration
                           (auto-enable? #t)))
                 (simple-service 'dbus-extras
				 dbus-root-service-type
                                 (list blueman))
                 (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"))))))
		 (service cups-service-type))
		 (modify-services %desktop-services
				  ;; modify TTY2 to get info for quick references if I hose the GUI
				  (mingetty-service-type
				   config =>
				   (mingetty-configuration
				    (inherit config)
				    (auto-login
				     (match (mingetty-configuration-tty config)
				       ("tty2" "info")
				       (_ #f)))))
	    			  (delete gdm-service-type))))

  ;; Allow resolution of '.local' host names with mDNS.
  (name-service-switch %mdns-host-lookup-nss))