![图形 shell 与图形 shell](https://linux22.com/image/10940/%E5%9B%BE%E5%BD%A2%20shell%20%E4%B8%8E%E5%9B%BE%E5%BD%A2%20shell.png)
来自理解Linux内核
Unix 是一个具有可抢占进程的多处理操作系统。即使没有用户登录并且没有应用程序运行,多个系统进程也会监视外围设备。特别是,有几个进程在系统终端上监听,等待用户登录。当用户输入登录名时,监听进程运行一个验证用户密码的程序。如果用户身份得到确认,该进程将创建另一个运行 shell 的进程,在该 shell 中输入命令。 当图形显示被激活时,一个进程运行窗口管理器,并且显示器上的每个窗口通常由单独的进程运行。当用户创建图形外壳时,一个进程运行图形窗口,第二个进程运行贝壳用户可以在其中输入命令。对于每个用户命令,shell 进程都会创建另一个执行相应程序的进程。
这里的“图形外壳”是什么意思?
gnome shell 是图形 shell 吗?
是我之前的问题吗“图形外壳”在“窗口系统、窗口管理器、桌面环境”的层次结构中处于什么位置? 与这里的那个有关吗?问题链接到https://en.wikipedia.org/wiki/Shell_(computing)#GUI,其中说
图形外壳提供基于图形用户界面 (GUI) 的程序操作方法,允许进行打开、关闭、移动窗口和调整窗口大小以及在窗口之间切换焦点等操作。图形外壳可以包含在桌面环境中,也可以单独提供,甚至作为一组松散耦合的实用程序。
末尾的“the shell”是否意味着“图形外壳”?它是在终端模拟器中运行的命令行 shell 吗?
答案1
该术语graphics shell
可以是图形 shell,也可以是在其下运行的命令行 shell。意思是,用户图形界面(GUI)或控制 GUI 功能的命令行。
首先我们先从shell开始,“shell”是什么意思:“shell”这个词的定义是指一个程序,甚至是一组一起工作的程序,它控制着操作系统,以及硬件,所以shell实际上是该软件使您可以直接控制计算机。
图形 shell 是将输出呈现为 2D 或 3D 图形(而不是纯文本)的 shell。换句话说,包括窗口、菜单等的图形用户界面(GUI)提供了用户和系统之间更灵活的交互,而不是终端界面提供的纯文本。
然而,鉴于GUI的核心是作为shell构建的,那么它的所有功能都可以通过命令行控制。例如,命令gnome shell是 GNOME 桌面的图形外壳,此命令提供 GNOME 桌面的核心用户界面功能,可以通过命令行进行调整。另一个例子是 nautilus,它是 Gnome 中文件资源管理器的主 GUI 界面,该界面可作为命令行使用,称为鹦鹉螺。该命令行有以下功能:
$ nautilus --help
Usage:
nautilus [OPTION...] [URI...]
Help Options:
-h, --help Show help options
--help-all Show all help options
--help-gapplication Show GApplication options
--help-gtk Show GTK+ Options
Application Options:
-c, --check Perform a quick set of self-check tests.
--version Show the version of the program.
-w, --new-window Always open a new window for browsing specified URIs
-n, --no-default-window Only create windows for explicitly specified URIs.
-q, --quit Quit Nautilus.
-s, --select Select specified URI in parent folder.
--display=DISPLAY X display to use
这意味着,您可以通过命令行控制 GUI 功能。
在 Linux 中,图形 shell 通常由几层软件组成。操作系统应提供图形驱动程序、键盘和鼠标驱动程序。然后在驱动程序之上,您有一个窗口系统,例如 X11 或 Wayland。它围绕输入创建更高级别的包装器(例如提供键盘布局),以管理存储传输到显示驱动程序的 2D 图像的内存,并为应用程序提供在内存中绘制这些 2D 图像的功能。
在窗口系统之上有一个窗口管理器,这就是应用程序如何将键盘和鼠标事件转换为系统调用,以操纵应用程序正在绘制的窗口。这包括启动、暂停、隐藏、显示和关闭应用程序、检测应用程序何时失败以及在失败后进行清理等任务。
有数十种流行的窗口管理器,包括 Unity、Gnome Shell、Xfwm、OpenBox、i3、Xmonad 等。
应用程序可以根据需要绘制图形,但是应用程序开发人员通常更喜欢使用一组通用的绘图工具,因此他们的应用程序看起来与系统上运行的所有其他应用程序一致。这些是您导入到应用程序中的软件库。然后,您可以调用它们的函数来绘制菜单、按钮、文本输入以及显示 PNG 和 JPG 等图像。
这些常见的绘图工具称为“小部件工具包”。 Linux 上最流行的两个小部件工具包是 Gtk+ 和 Qt。您可以同时使用 Gtk+ 和 Qt,这通常就是为什么 Linux 上的不同应用程序有时会在外观和感觉上不一致的原因。
这些层非常特定于 Linux 软件生态系统。 Mac OS、Windows 和 Android 的处理方式各不相同,但它们都倾向于将每一层集成到一个单一的图形 shell 软件中。它简化了事情,但也阻止了很多定制。
Linux 使事情变得复杂的原因是因为人们更喜欢有选择,并且他们喜欢定制他们的 shell。如果您正在管理自己的 Linux 发行版,最好花一些精力来选择默认的应用程序集,以便它们都使用相同的小部件工具包,并提供一致的外观和感觉。
在图形 shell 之上,您可以构建图形应用程序,例如文件系统浏览器、应用程序启动器、通知和系统状态应用程序以及系统配置(“控制面板”)应用程序。这些应用程序共同构成了我们所说的“桌面环境”。