我也不清楚怎么描述这个问题:我在wsl下装了vscode,把所有需要的图形的库都装齐了。运行正常,后台都有进程,但是没有界面;此外我运行vmd ovito,控制台也有也在运行,但是也没有界面。 其实问题重点并不是在于怎么在wsl下用图形界面,而是想借此机会了解一下linux系统显示图形界面的原理,为什么装了软件要求的图形库却仍然没有界面显示。所以我想问这个界面是怎么显示出来的?有人装了xfce就能用这些软件的图形界面了,这是…
X窗口系统:X Window System.这是MIT 1984年提出的以位图图像显示图形化界面的一套软件规范及协议.
客户端(也就是各种软件)将绘图请求发给服务端,服务端操纵显卡或视频终端把位图图像绘制出来,并处理键盘鼠标的事件,发送给客户端.注意,和人交互的是服务端.
而为了方便编写GUI程序,程序员开发出GTK,QT这种图形库,这些图形库作为X window的客户端工作.
WSL是Windows的一个子系统,科学的(非官方)名称为GNU/NT:lxcore.微软没有从Linux抄一行代码,实现了Linux大部分二进制接口,但是目前没有实现Linux的显卡驱动功能,因此即使WSL中安装了Xorg,也会不能启动.
为了管理众多的窗口怎么在屏幕上显示,需要窗口管理器(Window manager).窗口管理器可以实现一个屏幕上显示多个X程序,实现调整程序大小,标题栏,最大化,最小化,关闭按钮,虚拟桌面这些功能.
为了使用方便,一般还需要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,都是桌面环境.也可以使用各种组件拼接出自己的桌面环境.
一方面这是所有DE中对WSL兼容性最好的,既不简陋,也没有强制使用3D合成器(目前WSL不支持3D加速,OpenGL不能使用)
其次可以使用单一窗口模式(即在Windows窗口中绘制整个Linux屏幕,就像虚拟机一样).
提示:1903之后的Windows可以在资源管理器或者任何支持网络路径的win32程序中打开
传统的Linux图形界面基于Xwindow系统(wayland什么的先不说)分为两部分,一部分是Xserver,这一部分负责驱动显卡和在屏幕上绘图,另一部分是client,这一部分包括window manger以及各种GUI应用比如浏览器之类。这两部分通过X定义的一套协议进行交互,这个协议是网络透明的,也就是说Xserver和X client可以不在同一台机器上,所以X天生支持远程图形界面,但代价就是在本地跑的时候性能也会有损失。
WSL目前并不包含任何Xserver的功能,只能安装一些X client,所以你还需要一个Xserver并正确配置才能看到UI,Windows下常见的有Xming和Exceed之类。
Linux本身无图形化界面。KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单,kDE是K Desktop Environment的缩写。他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。 GNOME是GNU Network Object Model Environment的缩写。和KDE一样,也是一个功能强大的综合环境。 另外在其它UNIX系统中,常常使用CDE作为这样一个环境。 其它的小型窗口管理器有: window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器。REDHAT9中有window maker 但是默认不安装,大家可以装来试试。只要xinit再wmaker & 就可以用windowmaker了。 linux本身--X服务器-[通过X协议交谈]-窗口管理器(综合桌面环境)--X应用程序。
如果只是要用VSCode配合Linux系的工具的话, 可以用python搞一个localhost上的服务器, 底下开一个bash的子进程, 把vsc的task设置成向这个服务器发送命令, 服务器再把输出发送回来.
xorg是一个具有统一接口的服务程序,通过内核访问显示相关的硬件,按照应用程序的要求绘制图形。
Windows下的Linux子系统并没有独立的内核,而是通过让Windows内核兼容Linux的api和elf应用程序格式的方式实现的
所以要运行wsl中的图形程序,需要运行移植到Windows的x server才行,移植版的x server可以在cygwin项目找到
安装好桌面和依赖的图形库后装一个远程桌面Server 如xrdp或者vncserver等,然后在Windows上用对应的客户端即可显示桌面(实际上是跑在本地的远程桌面)
另外VSCODE现在支持WSL了,装几个插件就可以轻松访问WSL文件和使用WSL的开发环境进行编译调试了,不需要在WSL下面搞图形界面了(效率太低,巨难用)
我想补充的是, 如果你花点功夫(比较大的功夫)去试试ArchLinux的安装(在物理机上最好, 虚拟机当然也不错)
另外也许和Qt的库有关,比如我用的WSL是基于Arch的i3wm,官方源中的libQtCore.so需要经过strip才能正常调用的。
但是如果你是为了使用vscode的话,它有个web版本的。可以在linux运行,然后用浏览器使用
wsl下面要运行图形界面,你需要把适当的东西装进Windows里才对,因为wsl是Windows的一个部分,他自己是不包含显示功能的.

