¿Por qué un Servidor Ubuntu tiene graphical.target como el objetivo systemd predeterminado?

19

He sido usuario de Ubuntu por un tiempo, y en el trabajo tenemos muchos servidores Ubuntu , todos los cuales ejecutan Ubuntu 14.04 LTS para implementar nuestras aplicaciones web, bases de datos y otras herramientas.

Actualmente estoy estudiando Ubuntu 16.04 LTS , escritorio y servidor, para poder actualizar nuestros servidores de producción en un futuro próximo sin causar problemas.

Desde Ubuntu 15.04, init y upstart han sido reemplazados por Systemd , así que también estoy estudiando Systemd.

Noté que mi computadora de desarrollo que ejecuta Ubuntu 16.04 Desktop edition tiene graphical.target como el objetivo systemd predeterminado, lo cual es lógico.

Pero luego noté que el servidor de prueba que ejecuta Ubuntu 16.04 Server edition también usa graphical.target como el objetivo systemd predeterminado.

$ systemctl get-default
graphical.target

Entonces estoy confundido. El servidor no tiene ninguna capa gráfica, así que ¿cómo es que el objetivo predeterminado es graphical.target ?

Editar # 0

Como sugirió Rinzwind en los comentarios, miré al objetivo para ver si está activo o no ...

y la respuesta es SÍ:

admin@server1604:~$ systemctl get-default
graphical.target

admin@server1604:~$ systemctl status graphical.target
● graphical.target - Graphical Interface
Loaded: loaded (/lib/systemd/system/graphical.target; static; vendor preset: enabled)
Active: active since jeu. 2016-10-13 16:03:18 CEST; 46min ago
Docs: man:systemd.special(7)

oct. 13 16:03:18 fdea systemd[1]: Reached target Graphical Interface.

Así que estoy un poco más confundido.

Editar # 1

La respuesta de Mark Stosberg señala el hecho de que display-manager.service es parte del árbol de dependencias del graphical.target en su propio servidor 16.04, y agrega que no hay un administrador de visualización instalado o ejecutándose en su máquina. Miré eso también, y de hecho, en mi servidor esta dependencia está allí:

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─apache2.service
● ├─apport.service
● ├─display-manager.service

...

Y este objetivo tiene un círculo rojo a la izquierda, donde la mayoría de las otras dependencias tienen una verde.

Y esta vez el resultado es consistente:

admin@server16.04:~$ systemctl status display-manager.service 
● display-manager.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Pero aquí hay otra cosa extraña: en mi edición de escritorio, el display-manager.service no es una dependencia de graphical.target :

me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep display
me@desktop16.04:~ $ 

Pero incluso encontré una alternativa porque ejecuto Ubuntu-Gnome con lightdm reemplazando el administrador de ventanas predeterminado:

me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
    
pregunta Rémi B. 13.10.2016 - 13:47

3 respuestas

1

Inspeccionar más en detalle el primer nivel de la dependencia del árbol del objetivo graphical.target :

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─apache2.service
● ├─apport.service
● ├─display-manager.service              (disabled)
● ├─grub-common.service
● ├─irqbalance.service
● ├─mdadm.service
● ├─ondemand.service
● ├─sysstat.service
● ├─systemd-update-utmp-runlevel.service (disabled)
● ├─ureadahead.service                   (disabled)
● └─multi-user.target

comparándolo con el primer nivel del multi-user.target :

admin@server16.04:~$ systemctl list-dependencies multi-user.target
multi-user.target
● ├─apache2.service
● ├─apport.service
● ├─atd.service
● ├─cron.service
● ├─dbus.service
● ├─grub-common.service
● ├─irqbalance.service
● ├─lxcfs.service
● ├─lxd-containers.service
● ├─mdadm.service
● ├─networking.service
● ├─ondemand.service
● ├─open-vm-tools.service

...

Noté que si eliminamos los objetivos desactivados en el árbol graphical.target ( display-manager.service , systemd-update-utmp-runlevel.service , ureadahead.service ), casi todos los restantes:

  • apache2.service
  • apport.service
  • grub-common.service
  • grub-common.service
  • irqbalance.service
  • mdadm.service
  • ondemand.service
  • y sysstat.service

ya están incluidos en el primer nivel del árbol de dependencias del multi-user.target .

Aunque, deberíamos preguntar de nuevo sobre este hecho, porque el graphical.target depende del multi-user.target , no hay necesidad de todo esto. Suena bastante raro.

Pero después de esta reducción, sigue siendo un servicio, el accounts-daemon.service , como Rinzwind señaló en su comentario .

Entonces podemos suponer que el graphical.target es necesario para cargar el accounts-daemon.service .

Sin embargo, en ese caso es extraño, porque adelgazar tendría más sentido para crear un objetivo dedicado para ese propósito, tal vez algo como accounts.target o cualquier término correcto para describirlo. De todos modos, probablemente los desarrolladores de Canonical tenían sus razones para pensar así.

Pero me siento curioso por conocer sus razones.

    
respondido por el Rémi B. 14.10.2016 - 10:14
9

A pesar del nombre del objetivo, no hay nada de ejecución gráfica en Ubuntu Server 16.04. Puede este comando para verificar y compararlo con su escritorio si lo desea:

systemctl list-dependencies graphical.target 

En mi servidor Ubuntu 16.04, veo que los objetivos dependen de "display-manager.service", pero no hay ningún administrador de visualización instalado o en ejecución.

Espero que los servidores de Ubuntu estén configurados de esta forma por algún tipo de coherencia, aunque estoy de acuerdo en que es confuso.

    
respondido por el Mark Stosberg 13.10.2016 - 15:44
8

Del manual de redhat :

  

Por ejemplo, la unidad del objetivo gráfico, que se usa para iniciar una sesión gráfica, inicia servicios del sistema tales como el Administrador de visualización de GNOME (gdm.service) o el Servicio de cuentas (accounts-daemon.service) y también activa el multi -user.target unit. De forma similar, la unidad objetivo multiusuario inicia otros servicios esenciales del sistema como NetworkManager (NetworkManager.service) o D-Bus (dbus.service) y activa otra unidad de destino llamada basic.target.

Por lo tanto, no está mal establecerlo, ya que no activa el administrador de visualización cuando el servicio que maneja el servicio de visualización no está configurado.

Para un servidor puede configurarlo en multi-user.target pero no es necesario. Parece que terminas en el nivel de ejecución 4 si lo haces y en el nivel de ejecución 5 cuando no lo haces.

Runlevel    Target Units    Description
0   runlevel0.target, poweroff.target   Shut down and power off the system.
1   runlevel1.target, rescue.target     Set up a rescue shell.
2   runlevel2.target, multi-user.target     Set up a non-graphical multi-user system.
3   runlevel3.target, multi-user.target     Set up a non-graphical multi-user system.
4   runlevel4.target, multi-user.target     Set up a non-graphical multi-user system.
5   runlevel5.target, graphical.target  Set up a graphical multi-user system.
6   runlevel6.target, reboot.target     Shut down and reboot the system. 
    
respondido por el Rinzwind 13.10.2016 - 15:29

Lea otras preguntas en las etiquetas