startx
运行和启动显示管理器有什么区别sudo service (display_manager) start
?发生了两个不同的事件,所以我很好奇了解幕后的差异。
答案1
传统 Unix 系统以及除 Mac OS X 之外的大多数现代 Unix 系统上的图形用户界面都构建在X窗口系统。 X 服务器是一个组件,它与硬件(显示和输入外围设备)进行通信,并提供基本原语来显示窗口和路由用户输入。其他程序(称为 X 客户端)通过与 X 服务器通信来显示窗口并监听用户输入。
为了与硬件通信,X 服务器可能需要特殊权限;例如,在某些系统上,X 服务器是 setuid root。最近的系统尝试避免让 X 服务器以 root 身份运行,以提高安全性。根据系统的不同,在系统控制台上运行 X 服务器可能仅限于某些用户或具有控制台物理访问权限的用户。
X 服务器除了显示硬编码的背景图案和鼠标光标之外什么也不做。为了做任何有用的事情,需要启动一些客户端,通常包括窗口管理器。
运行 GUI 会话的正常方法是运行会话管理器程序,该程序负责启动所有所需的客户端(窗口管理器、桌面小部件、剪贴板管理器、从用户上一个会话恢复的程序等)。会话管理器需要在 X 服务器之后启动,因为它将与 X 服务器交互。每个桌面环境都有自己的会话管理器;几乎任何窗口管理器都可以用作会话管理器,并且在紧要关头,运行 shell 的终端可以被视为简约的会话管理器 - 重要的是用户可以通过某种方式启动他们想要运行的程序。
有两种启动 GUI 会话的传统方法:
- 如果用户已经登录,但还没有 GUI,则可以运行
xinit
命令。该命令启动一个X服务器,然后启动一个会话管理器,并等待会话管理器退出;然后它会杀死 X 服务器。这样,会话的客户端和 X 服务器具有相同的生命周期。该startx
程序是一个小包装xinit
。 - 也可以在任何用户登录之前启动 GUI。在这种情况下,唯一的客户端是显示管理器,它提供登录提示。用户登录后,显示管理器将调用其会话管理器。当会话管理器退出时,显示管理器确保该会话中不再运行任何程序,并显示新的登录提示。
另一种看待这一点的方式是,为了拥有图形登录会话,需要有图形界面并且用户需要登录。这两个步骤可以按任意顺序执行:登录然后启动 GUI(startx
方法),或启动 GUI 然后登录(显示管理器方法)。
其他设置不常见但可能。例如,在信息亭设置中,系统启动脚本启动 X 服务器和单个全屏客户端。在自动登录设置中,显示管理器在启动时为默认用户运行会话管理器。
答案2
通常,unix 系统需要 root 来启动 X(或在 X 中运行的显示管理器)。
如果没有显示管理器,如果 root 启动 X,则 X 会话的当前用户是 root。
使用显示管理器,root 启动 X 和显示管理器,但随后允许其他用户在该环境中启动会话。这意味着即使它以root身份启动X,“普通”用户现在也可以控制并安全地运行所有进程。
然而,Root 仍然“拥有”X 会话。除非您授予用户权限(通过将该用户添加到适当的组)来执行关闭或重新启动等重要操作,否则该用户无法停止 X。只有 root 可以执行此操作。这有时在多用户系统上很重要,您不希望用户突然决定重新启动计算机,从而破坏该过程中的其他会话。