为什么Ubuntu服务器将图形目标作为默认的systemd目标?


20

我已经成为Ubuntu用户已有一段时间了,在工作中,我们有许多Ubuntu VM 服务器,它们全部运行Ubuntu 14.04 LTS以部署我们的Web应用程序,数据库和其他工具。

我目前正在研究Ubuntu 16.04 LTS台式机和服务器,以便能够在不久的将来升级生产服务器而不会引起问题。

从Ubuntu 15.04开始,init并且upstart已被取代Systemd,因此我也在研究Systemd。

我注意到运行Ubuntu 16.04 Desktop Edition的开发计算机具有graphical.target默认的systemd目标,这是合乎逻辑的。

但是随后我注意到运行Ubuntu 16.04 Server版本的测试服务器也将其graphical.target用作默认的systemd目标。

$ systemctl get-default
graphical.target

所以我很困惑。服务器没有任何图形层,因此默认目标是graphical.target什么?

编辑#0

就像林茨温德(Rinzwind)在评论中建议的那样,我看着目标,看它是否处于活动状态...

并且响应为是:

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.

所以我有点困惑。

编辑#1

马克·斯托斯伯格(Mark Stosberg)的答案指出了这一事实,即它display-manager.servicegraphical.target其自己的16.04服务器上依赖树的一部分,并且他补充说,其计算机上未安装或运行任何显示管理器。我也看了看,确实在我的服务器上有这种依赖关系:

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

...

这个目标的左侧有一个红色圆圈,其他大多数依赖项都有一个绿色圆圈。

这次结果是一致的:

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

但这又是另外一件奇怪的事情:在我的桌面版上,display-manager.service并非依赖于graphical.target

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

但是我什至找到了替代方法,因为我运行Ubuntu-Gnomelightdm替换了默认的窗口管理器:

me@desktop16.04:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service

您缺少1条重要信息:是否graphical.target活跃?
Rinzwind '16

谢谢你的评论。但实际上,是的,它很活跃!这是什么意思 ?
雷米B.

嗯发现了一些相关的东西。
Rinzwind '16

可能有意义的部分:“ ...或accounts-daemon.service”我想服务器也需要这个。至少可以说令人困惑。
Rinzwind '16

Answers:


10

尽管有目标的名称,但在Ubuntu Server 16.04上没有任何图形运行。如果愿意,您可以使用此命令进行检查并将其与您的桌面进行比较:

systemctl list-dependencies graphical.target 

在我的Ubuntu 16.04服务器上,我看到目标取决于“ display-manager.service”,但是没有安装或运行任何显示管理器。

我希望将Ubuntu服务器设置为具有某种一致性,尽管我同意这很令人困惑。


同意混淆的说法。可能有人认为不设置de就足够了
Rinzwind '16

@Rinzwind,我不明白你的那句“没有设定去就够了”(英语不是我的主要语言)
雷米B.

您可能对一致性的要求是正确的。服务器版本是从桌面构建的,而不是由debian替代的吗?
雷米B.

“ de”表示桌面环境。我记得几年前发布的公告,其中说Ubuntu开始使用基本系统。但是我不知道他们是否使用服务器来创建桌面或是否使用桌面来创建服务器。“ graphical.target”设置桌面服务;它可以具有值“”,然后不启动DE却令人困惑(我希望保留该值,并且服务器使用“ multi-user.target”
Rinzwind

8

redhat手册

例如,用于启动图形会话的graphic.target单元启动诸如GNOME显示管理器(gdm.service)或帐户服务(accounts-daemon.service)之类的系统服务,并激活多用户。目标单位。同样,多用户目标单元将启动其他基本系统服务,例如NetworkManager(NetworkManager.service)或D-Bus(dbus.service),并激活另一个名为basic.target的目标单元。

因此,设置它没有错,因为当未设置用于处理显示服务的服务时,它不会激活显示管理器。

对于服务器,您可以将其设置为,multi-user.target但这不是必需的。看起来如果您这样做,您最终将进入运行级别4,如果没有,则您最终将进入运行级别5。

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. 

我希望收到有关下降表决的反馈。
Rinzwind '16

1

详细检查目标的树依赖的第一级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

一个用的第一级相比它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

...

我注意到,如果我们删除的残疾人目标graphical.target树(display-manager.servicesystemd-update-utmp-runlevel.serviceureadahead.service),几乎所有的剩余的一些:

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

已包含在的依赖项树的第一级中multi-user.target

虽然,我们应该再次询问这个事实,因为graphical.target取决于multi-user.target,所以不需要所有这些东西。听起来很奇怪。

但是减少之后,它仍然是一项服务accounts-daemon.service,就像Rinzwind在其评论中指出的那样

因此,我们可以假设graphical.target需要来加载accounts-daemon.service

但是,在那种情况下,它又很奇怪,因为我认为它很有意义,为此目的创建一个专门的目标,也许是类似的东西accounts.target或任何正确的术语来描述它。无论如何,Canonical开发人员可能有他们这样的想法。

但是我很好奇知道它的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.