百科问答小站 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了.




  

相关话题

  为什么不能有把中文想法直接转换成电脑程序的编程呢? 
  在2019年,硬盘分区的意义是什么? 
  有没有什么上古的程序代码至今依然没被更替? 
  如何用代码画出一只齿轮? 
  为什么信息竞赛都不开编译优化以及不允许内联汇编? 
  知乎用户 @萧井陌 写代码什么水平? 
  程序员有很厉害,不外传的代码吗? 
  为什么要学习别人的设计模式? 
  微软小冰测颜值是否比较准?为什么? 
  作为计算机专业学生,最应该学习的课程前五位是什么? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利