linux
Linux 为何不把图形用户界面写入内核?
一、Linux 为何不把图形用户界面写入内核?
Windows NT 4.0把GUI做进内核, 微软是专门发了一个白皮书讲这件事的:
MS Windows NT Kernel-mode User and GDI White Paper简单转述一下:Windows NT的内核设计是考虑到微内核的设计的
什么是微内核?在微软NT内核的设计者看来, 微内核有两个原则
- 从设计上:模块化、封装和通过接口抽象数据结构.
- 从实现上:大部分操作系统代码运行在用户模式下(包括驱动程序),只有少部分硬件特定代码和内核本身运行在内核模式。即纯微内核系统
但事实上所有商业上可行的微内核设计不能采用纯微内核的设计, 因为这么做太慢了。
文中给了一个例子:微内核的一个好处是,如果一个操作系统的功能出现了问题,比如文件系统的代码有问题,整个系统不会崩溃。但从使用者的角度考虑,如果一个系统的文件系统出现了问题,那么宏内核的系统崩溃(比如Windows蓝屏)和微内核的数据丢失是没有区别的。
文中没有点出这一点,但很显然,在NT设计者看来,作为一个名称中带有“窗口”的操作系统,如果用户界面崩溃,那么整个系统即完全无法操作,微内核的好处无法体现。
事实上Windows NT 3.x的GUI是运行在用户态的,由csrss.exe(客户端/服务端运行时子系统,Client/Server Runtime Subsystem)负责。csrss.exe由smss.exe(Session Manager Subsystem, 1号进程,相当于Linux的init/systemd或macOS的launchd) 启动,在NT 3.x中负责实现win32子系统的功能。
win32实际上是来自基于DOS的16位Windows上采用的API的移植,16位Windows的user.exe(即窗口管理)和gdi.exe(2D图形绘制)在32位的NT 3.x中被移植为user32.dll和gdi32.dll, 二者仍负责窗口管理和2D图像绘制,但其实现方式为通过与csrss.exe进程间通讯完成GUI的各项功能。具体的进程间通讯方式为LPC, 全称为Local Procedure Call(本地过程调用)或Lightweight Procedure Call(轻量级过程调用), LPC会绕过内核调度器,直接调度到IPC对面的进程。
但尽管NT 3.5优化了LPC的性能,微软的NT开发者当时认为这种微内核风格的实现方式效率还是较低,因此微软在NT4(1996年发布)中将csrss原本负责user32和gdi32对应的服务端代码挪到了内核模式一个叫win32k.sys的组件下,csrss仅剩下win32控制台程序的接口。
将gdi移入内核的后果是,显卡驱动的gdi驱动必须一同在内核中运行,而当时应用也非常广泛的gdi打印机驱动也一同在内核中运行,尽管逻辑上打印机并不如GUI一样需要高性能。NT4和NT5中,如果显卡驱动或gdi打印机驱动出现问题,系统就会崩溃。
在当时,Linux的GUI基本上完全位于用户态. 除去内核的fbdev驱动可以提供一个基本的framebuffer, X Server负责构建窗口管理和绘图的功能(对应NT的win32k.sys),X client使用libX11(对应NT的user32.dll)通过Unix Socket或TCP连接到X Server(对应NT的HWND消息队列),然后使用libX11以及其之上的gtk或者qt(对应gdi32.dll和MFC等框架)绘制窗体。X Server可以使用DDX驱动加速2D绘图(对应NT的gdi驱动)
Linux这套方案在用户态实现,理论效率是不如NT的,而且Linux的GPU驱动质量不如NT, 因此更容易崩溃或卡死。但Linux确实可以通过重新启动X server的方式从崩溃后恢复,而当时的NT则必须重启整个系统。
但之后NT6和Linux都对GUI系统做出了重大的变动。
NT6移除了gdi驱动的功能,并引入了WDDM(Windows Display Driver Model),之前gdi驱动的功能完全使用Direct 3D或CPU实现。WDDM允许GPU驱动重启并重置硬件的状态,因此Windows可以从一些GPU驱动故障中恢复。此外dwm.exe(Desktop Window Manager)允许将桌面合成的工作转交给该进程完成。
Windows10之后,微软在桌面之外的系统上使用的GUI均不包括gdi32和user32的整个体系,在内核上,win32k.sys被分为通用的win32kbase.sys和win32kmin.sys/win32kfull.sys, 只有桌面版本的Windows使用win32kfull.sys, 包括gdi32/user32和传统的窗口体验,Windows手机版、SurfaceHub版、Hololens版、Xbox版、Iot版均使用win32kmin.sys, 并没有传统的窗口体验,反而是使用类似于手机的UI体验. 所谓UWP, 为了统一在这些设备上使用,也不能调用win32kmin中缺失的api, 因此UWP程序一直相较于win32程序较少的原因就是无法使用很多已有的win32 api.
而在定制之后的Windows 10 Iot core或Windows nano server系统上,压根不包括任何GUI的支持,所有控制只能通过powershell或者openssh.
Linux这边,drm换掉了fbdev(1999年drm框架提出,2021年Linux 5.14合并SimpleDRM作为fbdev的替代), drm本身足够轻量,大部分GPU驱动的功能由用户态的mesa或者各个专有驱动完成。而窗口管理等功能均有不同的用户态进程完成,例如X11的开源实现Xorg, 具有客户端库libX11/xcb并通过Unix socket/TCP连接,由各种Window Manager负责管理窗口,然后由合成器完成图像合成;Wayland由各个Wayland合成器负责窗口管理和合成,有统一的libwayland-client客户端库,并通过Unix socket链接;Android有SurfaceFlinger负责窗口合成,有WindowManager负责窗口管理,并通过Linux binder内核驱动与各App进行通讯。显然Linux具有丰富的GUI生态体系。
事实上,当初Windows NT 4.0将GUI移入内核的原因在当前已经不存在了。一方面gdi已经不再使用,程序普遍自绘GUI,另一方面,在用户态实现窗口管理完全不存在性能瓶颈,况且dwm已经将绘制这一主要的窗口管理功能在用户态实现了。唯一能解释的就是微软本来打算使用UWP完全代替过去的生态, 但失败了, 因此不再追求在桌面版Windows上破坏原有的win32兼容性。
至于Linux GUI的问题,恐怕并不出在Linux内核上。比如drm支持热插拔,但实际上大概率会导致合成器卡死甚至于内核卡死。
二、linux怎么进入到图形界面创建用户?
1、首先,打开linux操作系统进入到界面。
2、在空白处在单击打开终端。
3、出现如下图在输入命令。
4、输入system-config-usersd 在回车键出现了要输入管理员密码。
5、在输入管理员密码,在单击确定。
6、出现了用户管理器,在单击添加用户。
7、出现了创建新用户在输入要创建的用户名、密码,在单击确定。
8、确定后,回到用户管理器,可以看到了add用户。
三、Linux用户接口类型:命令行界面和图形用户界面
Linux用户接口类型:命令行界面和图形用户界面
Linux操作系统是一种广泛使用的开源操作系统,它提供了多种用户接口类型供用户使用。本文将介绍Linux常见的两种用户接口类型:命令行界面(Command Line Interface,CLI)和图形用户界面(Graphical User Interface,GUI)。
命令行界面(CLI)
命令行界面是Linux最基本且最常用的用户接口类型。在命令行界面下,用户通过键入文本命令与系统进行交互。用户可以使用各种命令执行文件管理、系统配置、软件安装等操作。
命令行界面的优势在于它能够提供更高级的控制和更丰富的功能。通过使用命令行界面,用户可以更灵活地操作系统,编写自己的脚本和程序。
然而,使用命令行界面需要掌握一些基本的命令操作和语法,对于新手来说,可能需要一些时间来适应和学习。
图形用户界面(GUI)
图形用户界面是一种直观且易用的用户接口类型,它以图形化的方式呈现给用户。通过图形用户界面,用户可以使用鼠标、键盘等输入设备进行操作,而不需要记住复杂的命令。
Linux的图形用户界面通常是基于X Window System(缩写为X11)开发的。X11提供了各种窗口管理器和桌面环境,例如GNOME、KDE、Xfce等。这些桌面环境提供了众多的应用程序和工具,使用户可以轻松进行文件管理、网页浏览、邮件收发等常见任务。
图形用户界面的优势在于它的易用性和可视化特性。对于不熟悉命令行操作的用户来说,图形用户界面提供了更友好的使用体验。
总结
Linux操作系统提供了命令行界面(CLI)和图形用户界面(GUI)两种用户接口类型。命令行界面提供了更高级的控制和更丰富的功能,适用于对命令操作熟悉的用户;图形用户界面则以其易用性和可视化特性受到广大用户的喜爱。无论是使用命令行界面还是图形用户界面,都有助于用户高效地管理和操作Linux系统。
感谢您阅读本文,希望通过本文对Linux用户接口类型有更清晰的了解,以便更好地利用Linux操作系统。
四、同样源于Unix,是不是Linux的桌面图形用户界面(GUI)没有MacOS流畅?
本人前软粉, windows从98开始用到win 10, surface 出来后连续买过3代sp, 最后实在受不了微软的品控, 遂把sp全部黑苹果化, 然后转为果粉.
用黑苹果(配置比较高的那种) + Macbook Pro 16 总共3年左右的时候,
现在是Linux 粉.
原因比较简单, MacOS看起来一代比一代炫酷, 其实非常占用资源, 系统内部优化一代不如一代, 现在的big sur 动不动卡出翔.
如今转投Linux, 自己配置的Manjaro Architect, 桌面使用自己配置的DWM, 终于舒服了. 这里请注意, DWM使用的xorg这个所谓很古早的图形系统.
在使用DWM之前, 我用的主要是KDE, 依然流畅舒服.
三个系统用下来, 我可以负责任的告诉你, Linux 绝对是最流畅的, 对高分屏高刷屏支持也非常好
以上截图是刚截的, R9000X 2021 版是144hz的高刷屏, 另外我外接了一个4K 三星32寸显示器,
截图里面运行的程序有:
一个浏览器vivaldi, 开了12个页面,
一个占用1.5G左右内存( 虚拟机1g内存+ 256M显存 )的虚拟机,
一个vs code 写rust 项目, 其中rust-analyzer 占用了1.8G内存,
后台还开着jupyter lab,
再加6个alacrrity终端,
内存占用一共5G多,
你可以自己算算, DWM和它的附带组件一共占了多少内存~
上面uptime一栏你可以看到, 我这台笔记本这几天都没关机, 而我本人有个习惯, 每天要sudo pacman -Syyu好几次,
所以, 你就说稳定不稳定, 流畅不流畅?
Linux唯一的弱点, 是没有傻瓜式集成系统, 你得自己会配置才行.
五、linux centos 图形
Linux CentOS 图形界面使用指南
Linux 操作系统一直以来都以其强大的稳定性和灵活性而闻名于世。CentOS 是其中的一种流行的 Linux 发行版,被广泛用于服务器和个人电脑上。尽管 Linux 一直以来都以其强大的命令行界面而引以为豪,但也有许多用户更倾向于使用图形界面进行操作,以方便、直观地管理系统。
本指南将重点介绍在 CentOS 系统中如何有效地使用图形界面,让新手用户能够轻松上手,熟练掌握各种操作方式。
CentOS 图形界面介绍
在 CentOS 中,常用的图形界面是基于 GNOME 或 KDE 桌面环境的。这些桌面环境提供了用户友好的界面,让用户可以通过鼠标、窗口和菜单来完成各种操作。
无论您选择 GNOME 还是 KDE,都可以通过系统设置来对桌面环境进行个性化配置,以满足您的需求。其中包括更改主题、壁纸、图标样式等。这些定制化选项使得用户可以根据自己的喜好来打造独一无二的桌面体验。
使用图形界面管理文件和文件夹
在 CentOS 的图形界面中,可以使用文件管理器来管理您的文件和文件夹。通过文件管理器,您可以轻松地创建、复制、粘贴和删除文件,以及对文件夹进行移动和重命名。
另外,通过文件管理器,您还可以查看文件的属性、权限以及文件大小等信息。这为用户提供了更多关于文件系统的详细信息,方便进行管理和整理。
使用图形界面安装和卸载软件
通过 CentOS 的图形界面,用户可以方便地进行软件的安装和卸载。在桌面环境的应用程序菜单中,可以找到软件中心或包管理器的图标,通过这些工具可以搜索、安装和卸载各种软件。
在软件中心中,用户可以浏览各类软件,并了解软件的详细信息、评价和版本更新等内容。一键安装软件只需简单的几步操作,让用户摆脱复杂的命令行操作,轻松实现软件的管理。
调整图形界面设置
在 CentOS 的图形界面中,用户可以根据自己的需要对系统进行各种设置调整,以提升系统的易用性和个性化设置。
通过系统设置菜单,用户可以调整显示器分辨率、桌面背景、字体和主题等。这些调整可以使得桌面环境更符合用户的审美需求,让用户在使用系统的过程中感到更加舒适和舒适。
图形界面下的网络设置
在 CentOS 的图形界面中,用户可以方便地设置和管理网络连接。通过网络设置菜单,可以查看当前网络状态、连接新的网络、配置网络代理以及设置静态 IP 地址等操作。
此外,用户还可以通过图形界面对网络连接进行审查和故障排除,更直观地了解网络连接状态,保持网络畅通。
总结
通过本文的介绍,您已经了解了在 CentOS 系统中如何有效地使用图形界面进行各种操作。图形界面为用户提供了直观、友好的操作方式,让用户可以更加轻松地管理系统。
无论您是新手用户还是有一定经验的 Linux 用户,都可以通过图形界面来提高工作效率,快速完成各种任务。希望本指南对您有所帮助,让您更好地掌握 CentOS 系统的图形界面操作技巧。
六、深入探索Linux窗口编程:创建迷人的图形用户界面
引言
在当今的技术世界中,Linux窗口编程是一个不可忽视的领域。利用Linux操作系统的独特特性,开发者可以创建功能丰富且用户友好的图形用户界面(GUI)。这篇文章将深入探讨Linux窗口编程的基本概念以及实现方法,以帮助开发者展开自己的探索之旅。
为什么选择Linux窗口编程
Linux被广泛应用于服务器和嵌入式设备,它的稳定性和高效性受到开发者的青睐。而在桌面应用程序开发中,Linux窗口编程同样提供了强大的功能和灵活性。
以下是选择Linux窗口编程的一些理由:
- 开源性:Linux是开源的,开发者可以自由地获取和修改代码。
- 强大的社区支持:Linux有着活跃的社区,开发者可以轻松找到帮助和资源。
- 兼容多种开发语言:支持C、C++、Python等多种编程语言。
- 丰富的库和工具:如Qt、GTK等,使开发更为高效。
Linux窗口编程的基本框架
在Linux中,窗口编程通常依赖于特定的图形库,如GTK或Qt。这里我们将简要介绍这两种流行的库:
GTK(GIMP Toolkit)
GTK是一个用于创建图形用户界面的开源工具包,广泛用于Linux系统。它采用C语言编写,提供了众多控件,例如按钮、文本框、列表框等,来构建交互式应用程序。
Qt
Qt是一个跨平台的图形用户界面框架,支持多种操作系统。它很容易上手,并且提供了丰富的文档和示例。Qt支持C++,常用于开发复杂的桌面应用程序。
Linux窗口编程的基础知识
在开始编程之前,我们需要了解一些基本概念:
- 事件循环:事件循环是程序的心脏,它监听用户输入并做出相应。
- 控件:各类界面元素,例如按钮、菜单和文本框,用户通过这些控件与程序进行交互。
- 布局管理:管理各个控件布局的方式,确保界面美观且易于使用。
- 信号与槽:在Qt中,信号用于发出通知,槽用来响应信号,使程序模块之间以解耦的方式进行通信。
创建基本的窗口应用程序
下面我们将通过一个简单的例子,演示如何使用GTK创建一个基本的窗口应用程序。
#include
static void on_button_clicked(GtkWidget *button, gpointer data) {
g_print("按钮被点击了!\n");
}
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Hello GTK");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 200);
GtkWidget *button = gtk_button_new_with_label("点击我");
g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);
gtk_container_add(GTK_CONTAINER(window), button);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
以上代码创建了一个基本的窗口应用程序,其中包含一个按钮。用户点击按钮时,将在控制台输出一条信息。这是Linux窗口编程的基本入门,供初学者参考。
进阶:深入学习GTK和Qt
了解基本的窗口编程后,开发者可以进一步深入学习GTK和Qt。这两者都有丰富的文档和在线教程,可帮助开发者创建更为复杂的应用程序。
- GTK文档:访问GTK官方网站,获取官方文档和学习材料。
- Qt文档:Qt官方文档提供详细的API参考和示例代码。
结论
Linux窗口编程是一个充满潜力的领域。随着开发者熟悉基本概念以及使用相应的工具和库,构建出色的桌面应用程序将变得愈加简单。无论是GTK还是Qt,都为开发者提供了丰富的功能,使得开发过程更加高效和灵活。
感谢您阅读完这篇文章!希望通过本篇文章,您能够对Linux窗口编程有一个全面的了解,为接下来的学习与开发打下坚实的基础。
七、linux用户怎么分类?
用户组时具有相同特征用户的逻辑集合
将用户分组是Linux系统中对用户进行管理及控制访问权权限的一种手段。
在Linux系统中, 有两种组群分类方法,
一种方法将组群分为私有组群和标准组群
另一种方法将组群分为主要组群和次要组群
私有组群和标准组群
私有族群
当创建一个新的用户账户时, 如果没有指定该用户属于哪一个组群, 那么Linux就会创建一个和该用户同名的组群, 这个组群就是私有组群, 在这个私有组群中只包含这个用户
私有组群可以转换成标准组群, 当把其他用户加入到该组群中, 那么这个私有组群就变成了标准组群。
标准族群
标准组群也称为普通组群, 标准组群可以包含多个用户账户。 如果使用标准组群, 那么在创建一个新的用户账户时, 应该指定该用户属于哪一个组群。
主要组群和次要组群
主要组群
当一个用户账户属于多个组群成员时, 登录后所属的组群便是主要组群, 其他的组群是次要组群。 一个用户账户只能属于一个主要组群
次要组群
次要组群也称为附加组群, 一个用户账户可以属于多个次要组群
八、linux怎么添加用户?
要在Linux上添加用户,可以使用adduser或useradd命令。
首先,使用root用户登录到系统。
然后,在命令行中输入adduser或useradd命令,后跟要添加的用户名。
您可以选择是否为该用户设置密码、家目录和其他选项。
添加用户后,使用passwd命令为其设置密码。
最后,使用su命令或切换到新用户的登录会话来测试新用户帐户是否正常工作。
九、linux怎么创建用户?
工具/原料
1、linux操作系统。
方法/步骤
1、首先右击桌面,在单击打开终端。
2、打开终端后可以看到如下图,在输入命令:adduser 这个是要创建用户名,lifeng 是取的用户名,adduser lifeng是创建lifeng名,在回车。
3、回车之后在输入,tail -l /etc/passwd可以看到lifeng是空的密码。
4、要设置密码的话在输入passwd lifeng,在回车。
5、回车之后在输入要设置的密码,在回车。
6、在输入确认密码,在回车。
7、出现如下图就可以看到了设置密码成功了。
8、在查看lifeng是加密了,在输入tail -l /etc/shadow命令在回车。可以看到了lifeng后面加密的数字就可以了。
十、linux用户账户分为?
第一:root(超级管理员),UID为0,这个用户有极大的权限,可以直接无视很多的限制,包括读写执行的权限。
第二:系统用户,UID为1~499。一般是不会被登入的。
第三:普通用户,UID范围一般是500~65534。这类用户的权限会受到基本权限的限制,也会受到来自管理员的限制。不过要注意nobody这个特殊的帐号,UID为65534,这个用户的权限会进一步的受到限制,一般用于实现来宾帐号。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...