Linux 桌面GUI及其启动流程

Published: by Creative Commons Licence

  • Categories:

为了让大家更好的理解 ChromiumOS 系统的UI启动流程,这里将它和Ubuntu系统的启动进行对比。

Linux GUI 涉及到的术语

Init systems(Init)

  • 用户空间启动的第一个进程,PID=1,进程名一般为init,用来(根据配置文件)启动系统中的其他进程;
  • 常见的实现有 System V Init(SysV,最老的,新的init大多都兼容它的启动脚本),SystemD(兼容SysV),Upstart(兼容SysV和SystemD),OpenRC(基于SysV),runit
  • 对比: https://www.tecmint.com/best-linux-init-systems/ ,https://wiki.gentoo.org/wiki/Comparison_of_init_systems

Display Manager(DM)

  • 别名Login Manager,提供系统登陆界面,并且负责启动 Display Server,一般会允许配置登录后要执行的程序,默认登录后会执行相应桌面环境的session程序,比如gnome-session,mate-session,如果需要的话这些session程序会启动WM程序,可以通过配置直接启动一个普通的应用程序,这时没有可用的WM,除非程序自己实现相关功能,DM一般也会允许配置对应的greeter程序,该程序专门用来显示登陆界面;
  • 常见的实现有 LightDM,GDM,SDDM;

Display Server(DS)

  • 用来为上层应用提供和鼠标,键盘,GPU等硬件交互的能力,一般通过定义好的协议来和上层应用通信,常见的协议包括 X11,Wayland,SurfaceFlinger,QuartzCompositor,DirectFB,SPICE等,;
  • 常见的实现有 X.org Server,X Window System,Xephyr,Xvfb,Weston,Mutter,Kwin,Enlightenment;

Window Manager(WM):

  • 为GUI程序提供“窗口”这一概念,提供窗口标题栏,最大化最小化关闭按钮,阴影,窗口re-parent等功能,有些WM同时提供root window,它提供壁纸等功能;
  • 常见的实现有 Compiz,Mutter,Kwin,dwm.exe,openbox,awesome等;
  • 对比: https://en.wikipedia.org/wiki/Comparison_of_X_window_managers

Greeter:

  • 一般附属于DM,专门提供系统登陆界面;

Desktop Environment(DE):

  • 代表一个完整桌面环境,可能包括WM,Shell,小工具,图形库等;
  • 常见的DE有 GNOME,KDE

使用mate桌面的 Ubuntu18 系统GUI的启动流程

mate

其中有几点需要说明:

  • systemd 是目前主流的 Init 系统;
  • lightdm 是目前主流的 DM 系统;
  • Xorg 的介绍见 X window system(X11) 介绍
  • mate-session 是 Mate 桌面环境提供的 SM。Mate桌面环境是由 gnome2 发展而来,个人觉得它比 gnome2/3 都更好用;
  • macro 是 Mate 默认的WM,可以通过配置替换成其他的WM,比如 Compiz;
  • Greeter(登陆界面)程序是 DM 提供的,不随着你安装的 DE 的改变而改变,Greeter 程序在登陆后就会退出,如果要更换登陆界面,可以安装独立的 Greeter 程序,然后配置lightdm使之生效;
  • 安装了不同的DE之后,一般可以在 Greeter 界面上选择登陆后要使用的 DE;
  • 有些 WM 是没有独立的进程的,在Ubuntu18默认的系统上,使用gnome3的DE,它的WM(Mutter)是集成在gnome-shell中的,所以看不到独立的进程;

ChromiumOS 系统GUI启动流程

mate

说明:

  • upstart 是由ubuntu开发的并行Init系统,用于取代System-V,文档见 http://upstart.ubuntu.com/
  • ChromiumOS 把 Display Manager 和 Session Manager 进行了合并,都是由 session_manager 程序提供;
  • Display Server 的实现在 components/exo 目录下,没有独立的进程,运行在 chrome 进程中,实现了 wayland 协议;
  • Desktop 和 Window Manager 都是由 ash 模块提供,同样没有独立的进程,运行在 chrome 进程中;
  • exo 是一个不完整的 wayland 服务器,有些api没有实现,因此只能运行部分 wayland 程序;
  • components/exo/wayland/clients 目录下提供了好几个简单的 wayland 客户端程序,可以通过ninja编译之后拷贝到系统中直接运行;
  • ui/display/manager/display_manager.xx 文件中定一个名为 DisplayManager 的类,它是用来管理显示器的,相当于 MonitorManager,并不是图中提到的Display Manager;