Je suis un utilisateur Ubuntu depuis longtemps et au travail, nous avons de nombreux Ubuntu VM serveurs, qui exécutent tous Ubuntu 14.04 LTS
pour déployer nos applications Web, bases de données et autres outils. .
J'étudie actuellement Ubuntu 16.04 LTS
, desktop et server, afin de pouvoir mettre à niveau nos serveurs de production dans un avenir proche sans causer de problèmes.
Depuis Ubuntu 15.04, init
et upstart
ont été remplacés par Systemd
, aussi j'étudie Systemd.
J'ai remarqué que mon ordinateur de développement exécutant Ubuntu 16.04 Desktop edition avait graphical.target
comme cible systemd par défaut, ce qui est logique.
Mais ensuite, j'ai remarqué que le serveur de test exécutant Ubuntu 16.04 Server Edition utilise également graphical.target
comme cible systemd par défaut.
$ systemctl get-default
graphical.target
Donc je suis confus. Le serveur n'a pas de couche graphique, alors comment se fait-il que la cible par défaut est graphical.target
?
Comme suggéré par Rinzwind dans les commentaires, j'ai examiné la cible pour voir si elle était active ou non ...
et la réponse est OUI:
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.
Donc je suis un peu plus confus.
La réponse de Mark Stosberg indique que display-manager.service
fait partie de l'arborescence des dépendances de graphical.target
sur son propre serveur 16.04, et ajoute qu'aucun gestionnaire d'affichage n'est installé ou en cours d'exécution sur sa machine. J'ai aussi regardé ça, et en effet, sur mon serveur, cette dépendance est là:
admin@server1604:~$ systemctl list-dependencies graphical.target
graphical.target
● ├─accounts-daemon.service
● ├─Apache2.service
● ├─apport.service
● ├─display-manager.service
...
Et cette cible a un cercle rouge à gauche, où la plupart des autres dépendances ont un vert.
Et cette fois, le résultat est cohérent:
[email protected]:~$ systemctl status display-manager.service
● display-manager.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Mais voici une autre chose étrange: sur mon édition de bureau, le display-manager.service
n'est pas une dépendance de graphical.target
:
[email protected]:~ $ systemctl list-dependencies graphical.target | grep display
[email protected]:~ $
Mais j'ai même trouvé une alternative car je lance Ubuntu-Gnome
avec lightdm
en remplacement du gestionnaire de fenêtres par défaut:
[email protected]:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
Inspection plus détaillée du premier niveau de dépendance de l’arborescence de la cible 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
une comparaison avec le premier niveau du multi-user.target
:
[email protected]:~$ 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
...
Je remarque que si nous supprimons les cibles désactivées dans l'arborescence graphical.target
(display-manager.service
, systemd-update-utmp-runlevel.service
, ureadahead.service
), la quasi-totalité des cibles restantes:
Apache2.service
apport.service
grub-common.service
grub-common.service
irqbalance.service
mdadm.service
ondemand.service
sysstat.service
sont déjà inclus dans le premier niveau de l'arbre de dépendance du multi-user.target
.
Bien que nous devions demander à nouveau à ce sujet, étant donné que le graphical.target
dépend du multi-user.target
, il n’est pas nécessaire de disposer de tous ces éléments. Cela semble assez bizarre.
Mais après cette réduction, il reste un service, le accounts-daemon.service
, comme Rinzwind a souligné dans son commentaire .
Nous pouvons donc supposer que le graphical.target
est nécessaire pour charger le accounts-daemon.service
.
Cependant, dans ce cas, c’est encore une fois bizarre, car je pense qu’il serait plus logique de créer une cible dédiée à cet effet, par exemple accounts.target
ou tout autre terme correct. Quoi qu'il en soit, les développeurs de Canonical avaient probablement des raisons de penser de la sorte.
Mais je reste curieux de connaître ses raisons.
Malgré le nom de la cible, il n’existe aucun élément graphique sur Ubuntu Server 16.04. Vous pouvez cette commande pour vérifier et comparer avec votre bureau si vous aimez:
systemctl list-dependencies graphical.target
Sur mon serveur Ubuntu 16.04, je constate que les cibles dépendent de "display-manager.service", mais aucun gestionnaire d'affichage n'est installé ou en cours d'exécution.
Je m'attends à ce que les serveurs Ubuntu soient configurés de cette manière pour une sorte de cohérence, bien que je sois d'accord, c'est déroutant.
De la manuel redhat :
Par exemple, l'unité graphical.target, utilisée pour démarrer une session graphique, démarre des services système tels que le gestionnaire d'affichage GNOME (gdm.service) ou le service de comptes (accounts-daemon.service) et active également le mode multi-utilisateur. unité cible. De la même manière, l'unité multi-utilisateurs.target démarre d'autres services système essentiels tels que NetworkManager (NetworkManager.service) ou D-Bus (dbus.service) et active une autre unité cible appelée basic.target.
Il n’est donc pas faux de le définir car il n’active pas le gestionnaire d’affichage lorsque le service qui gère le service d’affichage n’est pas défini.
Pour un serveur, vous pouvez le définir sur multi-user.target
mais ce n'est pas nécessaire. On dirait que vous vous retrouvez au niveau 4 si vous le faites et au niveau 5 quand vous ne le faites pas.
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.