在linux下对桌面图形界面进行管理

前言

引出的问题

  • 在使用过程中, 发现ubuntu可以通过桌面应用startup_applictionsgnome-session-properties)来添加自定义的桌面应用启动程序, 比如在其应用中添加 gnome-terminal 命令, 可以打开一个桌面图形终端来执行相应的command? 于是, 想当然地在 rc.local的脚本中也执行了 gnome-terminal 命令, 但是发现完全不起作用?于是就有了开始探讨gnome-session-properties这个命令如何在启动时起作用的思考。

解决问题

  • linux下的图形界面启动流程,下图有些地方并不是那么准确,大致参考即可:

  • 开机启动中不同的运行级别代表着不同的作用,级别5表示启动X-windwos界面。

  • Ubuntu默认shell为bash,.bashrc即为配置文件,在用户输入完用户名和密码后生效,可添加启动项目。
    在这里插入图片描述

  • 其实,以下这张图足以说明,为何我们在rc.local的脚本当中启动不了gnome-terminal, 因为在那个阶段, xinit显然还没有启动。图形界面的开机启动流程:(下图的启动流程, 可以使用 pstree去查看 整棵进程树。)
    在这里插入图片描述
    图形界面的服务器和客户端的启动流程:
    在这里插入图片描述

  • 图形界面的服务端和客户端的相关启动配置文件如下:
    $(HOME)/.xinitrc Client to run. Typically a shell script which runs many programs in the background.
    $(HOME)/.xserverrc Server to run. The default is X.
    /etc/X11/xinit/xinitrc Client to run if the user has no .xinitrc file.
    /etc/X11/xinit/xserverrc Server to run if the user has no .xserverrc file.

  • 用户可以通过 xinit 程序手动启动 Xorg 显示服务器,startx(1) 脚本只是是 xinit(1) 的前端。

  • startx的默认启动过程大致为:
    startx调用并将系统文件/etc/X11/xinit/xinitrc/etc/X11/xinit/xserverrc 作为参数传给xinit,
    xinit就会先执行系统文件/etc/X11/xinit/xserverrc以启动X Server,
    然后执行/etc/X11/xinit/xinitrc,而xinitrc则会执行脚本/etc/X11/Xsession,而Xsession则会按顺序调用执行/etc/X11/Xsession.d目录下的文件,从而最终调用了gnome-session(或者openbox)这个用于启动GNOME桌面环境的程序。

  • 常见的X-server有 xorg, 常见的x-client有openboxgnome等等

  • 那么和Xorg, xclient, X11之间具体存在什么联系呢?

    • X.Org 项目提供了 X 窗口系统的开源实现, 主要提供显示器的显卡驱动配置以及输入设备的配置,如鼠标,键盘,触摸屏, 触摸板等等硬件。
    • xinit 工具(startx 脚本)可以带一个可选的客户端程序参数,用来启动上图说的X-client程序, 该程序就是用于桌面显示的桌面环境。
    • Xorg通过还要配合窗口管理器才能进行窗口移动,最大化,最小化等, 而窗口管理器一般包含在桌面环境 x-client中, 桌面环境主要用来提供通用图形用户界面元素,如图标、工具栏、壁纸,桌面小部件,并控制窗口管理器。
      (1)XDM(默认的X Window System Display Manager)
      (2)GDM(gnome提供的Display Manager)
      (3)KDM(KDE提供的Display Manager)
    • 需要注意的是,LightDM(Light Display Manager)是一个全新的轻量级Linux桌面显示管理器,而传统的Ubuntu是使用GNOME桌面标准的GDM。参考wiki链接: https://wiki.archlinux.org/index.php/LightDM
    • 那么X11是什么呢? X11也叫做X Window系统,是图形化窗口管理系统 。它是诞生于Unix 、以及 OpenVMS,是传统上Unix环境中建立图形用户界面 的标准工具包和协议, 也就是说它是一个用于规定X-server设计的协议, 不然千奇百怪的,直接就乱套了, 互不兼容,难以相护借鉴,X.org是其中一个极为优秀的开源方案。

在ubuntu下的桌面环境配置文件

  • Ubuntu默认shell为bash,.bashrc即为配置文件,在用户输入完用户名和密码后生效,可添加启动项目。
  • LightDM会去读取/etc/profile的来的配置当前账户的环境变量等信息。
  • ubuntu默认使用lightDM来作为桌面管理器,桌面管理器会去读取自动启动的配置。自动启动会去读以下相关的配置内容, 来启动相应的程序:

    /etc/xdg/autostart
    /usr/share/autostart
    /usr/share/gdm/autostart
    /usr/share/gnome/autostart
    ~/.config/autostart
    ~/.kde/share/autostart
    ~/.local/share/autostart

  • 可新建文件/usr/share/xsessions/custom.desktop, 用于桌面自动启动的管理:
    1 [Desktop Entry]
    2 Name=Ubuntu
    3 Comment=This session logs you into Ubuntu
    4 Exec=gnome-session --session=ubuntu
    5 TryExec=unity
    6 Icon=
    7 Type=Application
    8 DesktopNames=Unity
    9 X-Ubuntu-Gettext-Domain=gnome-session-3.0
    

仍存在的问题点:

  • 在rc5.d的启动脚本中,可以看到lightdm已经在启动过程中被启动了? 这样的话, 图形界面就很早启动了,与前面的图解相矛盾, 那么Xorg的启动位置在哪里?

    $:/etc/rc5.d $ ls
    README S01lvm2-lvmetad S01unattended-upgrades S02anacron S02hddtemp S02rsync S02thermald S03avahi-daemon S04cups S05grub-common S05rc.local
    S01apport S01lvm2-lvmpolld S01uuidd S02cron S02irqbalance S02speech-dispatcher S02vsftpd S03bluetooth S04cups-browsed S05ondemand
    S01binfmt-support S01rsyslog S02acpid S02dbus S02kerneloops S02ssh S02whoopsie S03lightdm S04saned S05plymouth

  • 直接在命令行通过startx命令启动图形窗口,显示出的界面只有壁纸,整体缺失严重? 界面图形显示不全。


版权声明:本文为walleva96原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。