百科问答小站 logo
百科问答小站 font logo



Linux 图形界面的显示原理是什么? 第1页

  

user avatar   pansz 网友的相关建议: 
      

原理很简单:Linux的应用是客户端,图形界面是服务器端。

你得先跑一个XServer服务器,并且设定好服务器的地址(在环境变量中),让Linux图形应用连上服务器,就能正常显示了。

常见的能在Windows下边跑的 XServer 有 vcxsrv 。以及一个要付费的X410。

当然 Win11 之后直接 WSLg 就集成了一个 XServer,然后用这个 XServer 转发到 RDP ,这些操作全都在你安装 WSLg 的时候自动完成了。可用性还不错,没特别需求的话 vcxsrv 可以卸载了。

这个机制的最大问题是:高分屏支持很差。能显示,但字体渲染不大行,只有低分屏的字体渲染水平。当然,又不是不能用。

如果你是低分屏应该就没啥感觉。

目前个人没有见到过比较完美支持WSL图形的高分屏支持方案。个人还是建议有闲置设备就用真机跑Linux吧。


user avatar   han-pu-yu 网友的相关建议: 
      

先将理论知识再说怎么做.

X窗口系统:X Window System.这是MIT 1984年提出的以位图图像显示图形化界面的一套软件规范及协议.

X Window System使用最广的软件实现是Xorg.

X Window System使用C/S架构,服务端和客户端可以基于网络通信.

客户端(也就是各种软件)将绘图请求发给服务端,服务端操纵显卡或视频终端把位图图像绘制出来,并处理键盘鼠标的事件,发送给客户端.注意,和人交互的是服务端.

而为了方便编写GUI程序,程序员开发出GTK,QT这种图形库,这些图形库作为X window的客户端工作.

WSL是Windows的一个子系统,科学的(非官方)名称为GNU/NT:lxcore.微软没有从Linux抄一行代码,实现了Linux大部分二进制接口,但是目前没有实现Linux的显卡驱动功能,因此即使WSL中安装了Xorg,也会不能启动.

要想使用WSL显示GUI,必须要利用X window可以使用网络远程显示的特性,在Windows可以使用GUI的子系统win32中安装X server.

那么Xfce是干什么的呢?

为了管理众多的窗口怎么在屏幕上显示,需要窗口管理器(Window manager).窗口管理器可以实现一个屏幕上显示多个X程序,实现调整程序大小,标题栏,最大化,最小化,关闭按钮,虚拟桌面这些功能.

没有WM,一次只能运行一个GUI程序,而且分辨率锁死,显然很不符合使用习惯.

为了实现窗口之间的特效,还需要窗口合成器.窗口合成器可以制造半透明之类的特效.

Xfce使用的窗口管理器为Xfwm,此外还有Gnome的mutter,KDE的Kwin等

Windows也有类似的概念,其窗口管理器为Desktop Window Manager(DWM.exe),win7酷炫的Aero就算dwm实现的,win8之后虽然砍掉了毛玻璃,但是dwm成为关键进程,不能像win7一样关掉.

为了使用方便,一般还需要Windows里任务栏,开始按钮,通知区域这种功能,Linux里一般称之为面板.

Linux还有一个组件叫显示管理器(display manager),用于开机后显示登陆界面,并启动窗口管理器等X组件.没有显示管理器,Linux开机会显示命令行登陆界面,需要使用命令行登陆后手动启动Xserver和窗口管理器才能显示GUI,显示管理器自动的完成这些工作.常见的有GDM,KDM,LightDM,LXDM

此外为了显示桌面图标,还需要一个文件管理器.

把窗口管理器,显示管理器,合成器,文件管理器及其他应用,主题,GTK+/QT等图形库,连同通用的组件,比如Xorg,进程间通信用的Dbus等等库或程序,打包起来,就形成当今Linux下的桌面环境(Desktop environment),Gnome,KDE,Xfce,Ubuntu放弃的Unity,国产Deepin的DDE,都是桌面环境.也可以使用各种组件拼接出自己的桌面环境.


下面介绍WSL下的解决方案.

  1. 开启WSL功能并安装一个发行版.除了商店里的也可以看一下 yuk7/ArchWSL Archlinux
  2. 安装Windows上的X server
  3. 安装Xfce
  4. startxfce4

可选的Windows端的Xserver有:

(以下付费内容与我没有利益相关,我只是列举目前最好用的解决方案)

  1. VcXsrv Windows X Server 开源免费的选择,基于已经不更新的Xming
  2. MobaXterm free Xserver and tabbed SSH client for Windows 个人免费,专业版收费,功能强大,专业版$69 / 49€
  3. Buy X410 - Microsoft Store 应用商店收费,现在打二折 港区78港币(折合¥67),国区 ¥71 流畅度比其他的都高

总之你要下载其中的一个.建议设置开机启动,

然后需要在WSL里设置环境变量.

       export DISPLAY=:0 export LIBGL_ALWAYS_INDIRECT=1 export RUNLEVEL=3     

建议保存在.bashrc等shell的启动文件里.

打开GUI程序,如果报错cannot open display: :0,说明X server没有打开或配置有问题.

注意,WSL发行版默认没有中文字体,中文GUI会乱码方块,可以借用Windows的字体

root权限创建/etc/fonts/local.conf

       <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig>     <dir>/mnt/c/Windows/Fonts</dir> </fontconfig>     

虽然直接输入Code就能启动VSCode,但是还是建议安装Xfce

一方面这是所有DE中对WSL兼容性最好的,既不简陋,也没有强制使用3D合成器(目前WSL不支持3D加速,OpenGL不能使用)

另一方面Xfce可以提供一些设置界面,修改默认主题和字体就不需要改配置文件了

其次可以使用单一窗口模式(即在Windows窗口中绘制整个Linux屏幕,就像虚拟机一样).

此外Xfce会启动DBus,如果单独启动GUI程序,有可能报错找不到dbus-daemon.

首先安装Xfce,各个发行版都有对应的包.

建议卸载没有用的屏保 sudo apt purge xscreensaver (对于Ubuntu)

然后命令行输入startxfce4启动,命令行不能关闭.

最终效果:

提示:1903之后的Windows可以在资源管理器或者任何支持网络路径的win32程序中打开

       \wsl$     

查看WSL发行版的文件,并使用编辑器编辑.


现在VSCode已经支持远程开发了,这意味着我们不再需要在WSL中运行VSCode了.




  

相关话题

  导热硅脂对散热性能影响大吗? 
  老式机械计算器的工作原理? 
  你碰到过的最难调试的 Bug 是什么样的? 
  如何看待 Deepin 操作系统创始人王勇离职? 
  如果计算机语言是中国人发明的,hello world 会变成什么? 
  在人工智能时代,孩子学编程有什么好处? 
  集成电路会成为下一个计算机吗? 
  法律是否可能被代码化? 
  c语言中,关于switch循环的这个疑问怎么解? 
  为什么欧美国家很多十几岁的少年已经可以独立开发软件或创建实业了? 

前一个讨论
如果把一个完美球放在平面上,接触地面的面积是不是为0?
下一个讨论
人工智能测试。我一天煮饭为了豪华一些一次放5g盐,怎么样?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利