截至 2018 年,在适用于 Linux 的 Windows 子系统上运行 GUI 应用程序的最简单方法是什么?

Geo*_*ian 130 gui windows-subsystem-for-linux

我搜索了一下,目前有两种方法建议;为 Linux 的 Windows 子系统安装增强功能并安装 XServer。

我想知道哪种方法最省事(易于安装和使用),哪种方法不那么占用内存。

我只想要 Synaptic 和 CMake。为什么这不能成为内置功能?

Win*_*nix 99

服务端

我选择VcXsrv在 WSL(Windows 10 Subsystem for Linux)中使用。我建议每个人在xming(已接受的答案)和VcXsrv之间进行研究,然后再选择一个或另一个以获得 Windows 10 Ubuntu 16.04 中的图形用户界面 (GUI) 支持。

安装

安装很简单。自 2019 年 3 月 17 日起,您只需接受默认值即可。如果您想gedit从 Bash Shell / 终端中调用,您需要编辑~/.bashrc并插入以下行:

export DISPLAY=localhost:0.0
Run Code Online (Sandbox Code Playgroud)

安装 VcXsrv 后可以做什么?

我能够运行:

sudo apt install ubuntu-desktop
sudo apt install yad
sudo apt install gedit
Run Code Online (Sandbox Code Playgroud)

...安装GUI桌面软件。然后这允许我运行geditnautilus。此外,我还可以使用aptapt-get命令通过 CLI(命令行界面)安装特定的 GUI 应用程序。

当我想在 WSL 中尝试我的许多 Ubuntu bash 脚本时,必须安装VcXsrvzenity并显示yadx-windows 对话框以供用户输入。

正如其他人所指出的,WSL 中的 GUI 并不完美,您可以期望花时间解决一些问题。还有一些 GUI 软件根本无法在 WSL 中工作。

安装注意事项

我修改/etc/environment以调整 GUI 下拉菜单:

PATH="/mnt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export LIBGL_ALWAYS_INDIRECT=Yes
export DISPLAY=localhost:0.0
Run Code Online (Sandbox Code Playgroud)
  • /mnt/e/bin是不寻常的路径,因为它是我存储在 Windows 10 双启动 WSL 和 Ubuntu 16.04 双启动中使用的脚本的地方。大多数用户不会在他们的机器上包含这个。

  • 这很轻松:在 Windows 上,使用提供的链接下载 VcXsrv。安装并启动它。然后我打开一个 Ubuntu shell 并输入 `export DISPLAY=:0`。现在我可以在 Ubuntu 中运行 `xhost`、`xeyes` 和 `gnuplot`(前提是这些程序已经安装在 Ubuntu WSL 中)。 (10认同)
  • 也`export LIBGL_ALWAYS_INDIRECT=1`,你可以使用 VcXsrv 在 X 上的 GL 应用程序中获得一些硬件加速 (4认同)
  • @dessert +1 到您的评论。考虑到我的用户名意味着“受限于 Windows 用户切换到 Unix”,这真是太搞笑了。多亏了 WSL,我现在偶尔会使用 Windows 10,因为我可以在其中运行 Ubuntu。叫我 WinEunuuchs2Unix2WinSub4Linux?:p (3认同)
  • @ErelSegal-Halevi 有关完整说明,请参阅 https://github.com/QMonkey/wsl-tutorial。 (2认同)
  • 我不得不使用 WSL 网络接口 IP。在 .bashrc 上,我添加了 \n `export DISPLAY_NUMBER="0.0"` 和另一行:`export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):$DISPLAY_NUMBER` (2认同)

Pan*_*her 39

简短的回答是您不能,因为 WSL 尚不支持此功能。WSL 不是带有 Linux 内核的完整 Linux 安装,它允许您在 Windows (Microsoft) 内核上运行一些本机 linux 命令/二进制文件,并且有限制。

https://github.com/Microsoft/WSL/issues/2356

但是,您可以将 3rd 方 X 服务器(例如 xming)和 ssh 安装到您的 WSL 中。

https://virtualizationreview.com/articles/2017/02/08/graphical-programs-on-windows-subsystem-on-linux.aspx

我没有在此处复制该教程,因为它非常普遍(X over ssh),而且我希望某些应用程序即使使用这种技术也无法正常工作。

  • 请记住,您根本不必使用 SSH。只需设置`DISPLAY`,你就可以开始了(无论如何,对于xming 和VcXsrv)。 (12认同)
  • 我会否决这个答案,因为它 1:不完全准确,2:不符合问题的精神 - 是的,您可以使用 xserver 在 wsl 中运行 gui 应用程序。op 没有询问支持的应用程序。(安装 vcxserve 或类似的东西,设置 DISPLAY 后 sudo apt-get install synaptic,不需要 ssh)... (6认同)
  • @decuser Upvote 更好的答案:如果没有,请写一个。 (4认同)
  • WSL 上的图形程序并不意味着您可以在 WSL 上使用 Steam。您需要 Valve 来创建对 WSL 的支持。 (2认同)

ten*_*das 27

我在 Windows (Ubuntu 16.04 Xenial x86_64 Linux 4.4.0-17074-Microsoft) 上的 Win 10 Bash 上使用 VcXsrv 获得了非常积极的体验。我没有专注于运行 Unity 桌面,因为它无用且消耗资源。我只是简单地使用 XServer 从 Windows10 桌面以 GUI 模式从 bash 运行应用程序。

  1. 在 Sourceforge 上这里安装 VcXsrv

  2. 直接运行 VcXsrv 应用程序,不要启动 XLaunch。localhost:0.0 - 0 clients当您将鼠标悬停在 Win10 任务栏上的图标上时,您应该会看到

  3. 打开 Ubuntu Bash:

     cd /mnt
    
    Run Code Online (Sandbox Code Playgroud)

(结果为 localhost@localhost:/mnt$)

    cd .. 
Run Code Online (Sandbox Code Playgroud)

(localhost@localhost:/$ 意味着此命令会将您带到 WSL 所能看到的硬盘驱动器的开头...)

    sudo apt-get install dbus synaptic nautilus --install-suggests --show-progress
Run Code Online (Sandbox Code Playgroud)

(这将安装“dbus”来为 GUI 创建虚拟连接器,“Synaptic Package Manager”和“Nautilus”文件浏览器用于统一桌面

    cd /usr/share/dbus-1 && sudo vi session.conf
Run Code Online (Sandbox Code Playgroud)

session.conf在 vi 编辑器中打开时)

i进入插入模式并添加

    <!-- <listen>unix:tmpdir=/tmp</listen> || Original Command --> to preserve original rules
Run Code Online (Sandbox Code Playgroud)

比添加:

    <listen>tcp:host=localhost,bind=0.0.0.0,port=0</listen>
    <auth>EXTERNAL</auth>
    <auth>DBUS_COOKIE_SHA1</auth>
    <auth>allow_anonymous</auth> 
Run Code Online (Sandbox Code Playgroud)

完成编辑文件并:wq保存文件后,按 ESC 。

运行这些命令并检查它们的输出:

    $ export DISPLAY=localhost:0
    $ sudo service dbus start
    * Starting system message bus dbus                 [OK]
    $ echo $DISPLAY
    localhost:0
Run Code Online (Sandbox Code Playgroud)
  1. 你完成了!现在只需从 Bash 运行突触、鹦鹉螺或火狐,它们应该会加载到 Win10 桌面上。像这样的 GUI 选项有问题但可操作。您可以安装ubuntu-desktopunityccsmcompiz并尝试运行统一桌面的Ubuntu。我没有尝试设置“Steam”,因为我仍然在努力运行“Unreal”,祝你好运:)

如果有人知道如何gnome-terminal在 XServer 而不是 XTerm 上运行,请分享...

PS
您可以将 VcXsrv 添加为 Win10 可启动项

要使用原始帖子中指定的“Steam”最大化您的资源,请稍微调整您的 Windows 以进行网络包管理(以降低延迟)和 CPU/GPU 优先级以制作 Win10XBox……:)

尽管您将在“Unix”下运行“Steam”,但外壳仍然是“Windows”,它允许您在“Unix”上启动“Steam”……

Tcp 准备:;

在注册表中:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces
Run Code Online (Sandbox Code Playgroud)

在这里,您需要通过子项列表来定位用于连接到 Internet 的网络适配器条目。如果您使用 DHCP,您需要查找DhcpIPAdddress条目(系统数据值 NOT :0.0.0.0)以找到正确的适配器。

找到正确的密钥后,右键单击它并选择New > Dword (32-bit) Value

将其命名为TcpFrequency并单击ok

之后双击该值并将其十进制值设置为 1。(要恢复默认设置,请将值更改为 2 或删除键)现在导航到以下键: HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ

再次右键单击该键并选择New > Dword (32-bit) Value

将新参数命名为 TcpDelay

之后双击它并将其 Decimal 值更改为 1。(要在稍后的时间点恢复密钥,请将其更改为 0 或删除该密钥)

纳格尔算法

Nagle 的算法将几个小数据包组合成一个更大的数据包,以实现更高效的传输。这是为了提高数据传输的吞吐量效率。禁用“nagling”有助于减少某些游戏中的延迟/ping。默认情况下,Windows 中启用 Nagle 算法。要实施此调整,请修改以下注册表项。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{NIC-id}
Run Code Online (Sandbox Code Playgroud)

对于{NIC-id},查找列出了您的 IP 地址的那个;在此{NIC-id}键下创建以下 DWORD 值:

  • TcpFrequency 并将其设置为 1 以禁用游戏的“nagling”。
  • TCPDelay 并将其也设置为 1 以禁用“nagling”
  • TcpTicks 并将其设置为 0

笔记:

一些报道称,这些调整确实减少了玩 Dota 2 和英雄联盟时的延迟,但对某些人不起作用。我已经尝试过了,玩 Dota 2 时我的延迟从 110 毫秒提高到 90 毫秒(东南亚服务器)。

网络节流指数

Windows 实现了网络节流机制,这种节流背后的思想是网络数据包的处理可能是一项资源密集型任务。关闭此类节流以实现最大吞吐量是有益的。

要实现此调整,请运行 regedit 并修改注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile. 
Run Code Online (Sandbox Code Playgroud)

SystemProfile 下,创建一个 DWORD 值并将其命名为NetworkThrottlingIndex,然后将其十六进制值设置为 ffffffff 以用于游戏和最大吞吐量:ffffffff 完全禁用节流。


系统游戏响应性(对此不太确定:)

多媒体流媒体和一些使用“多媒体类调度程序”服务 (MMCSS) 的游戏最多只能使用 80% 的 CPU。“多媒体类调度程序”服务 (MMCSS) 可确保优先访问 CPU 资源,而不会将 CPU 资源拒绝给较低优先级的后台应用程序。

要实现此调整,请运行 regedit 并修改注册表项

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile. 
Run Code Online (Sandbox Code Playgroud)

从那里,创建一个新的 DWORD 并将其命名为SystemResponsiveness,将其十进制值设置为 00000000,用于纯游戏/流媒体。

在与上述调整相同的注册表配置单元中,您还可以更改游戏的优先级。要实施此调整,请转到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Games
Run Code Online (Sandbox Code Playgroud)

并更改以下注册表值:

  • 对于游戏,“GPU Priority”将其值更改为 8。
  • 游戏的“优先级”设置为 1。

这个 Windows=Xbox 调整的作者为“未知”欢呼(原谅我有一段时间因为我复制了你的指示)作者......

PPS:如果 XServer 在您想做的事情上失败,请尝试使用 Docker 找到解决方法。

  • [WSL_Apache_Roolez][1]
  • [节流_a_'mm'_:0][2]
  • [你有邮件!!!][3]

微软宣布为 WSL 2 GUI 开绿灯:https : //devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/#wsl-gui

  • “直接运行 VcXsrv 应用程序”是什么意思 - 如何做到这一点? (2认同)

Gue*_*est 12

尽管 Microsoft 不“正式”支持完整的 GUI 桌面环境,但它可以工作。

打开或关闭 Windows 功能
为 Linux 启用 Windows 子系统
重新启动计算机
启动 Microsoft Store
搜索
Ubuntu 在应用程序下选择 Ubuntu 18.04
单击获取
启动 Ubuntu 并等待安装
设置用户名和密码

运行以下命令:

sudo apt-get update -y
sudo apt-get install ubuntu-desktop -y
sudo apt-get install xfce4 xorg xrdp -y
sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
Run Code Online (Sandbox Code Playgroud)

创建和修改 .xsession

cd /home/user/
sudo vim .xsession
Run Code Online (Sandbox Code Playgroud)

添加文字:

gnome-session --session=ubuntu-2d
Run Code Online (Sandbox Code Playgroud)

保存退出vi

sudo chmod 755 .xsession
sudo systemctl enable xrdp
Run Code Online (Sandbox Code Playgroud)

您将需要在 Ubuntu 上使用第二个帐户

sudo adduser remote
sudo usermod -aG sudo remote
Run Code Online (Sandbox Code Playgroud)

修改startwm.sh

cd /etc/xrdp
sudo chmod 777 startwm.sh
vim startwm.sh
Run Code Online (Sandbox Code Playgroud)

注释掉最下面的两行

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
Run Code Online (Sandbox Code Playgroud)

添加文字:

startxfce4
Run Code Online (Sandbox Code Playgroud)

保存退出vi

exit
Run Code Online (Sandbox Code Playgroud)

在 Windows 中,重新启动 Ubuntu 并运行:

sudo /etc/init.d/xrdp start
Run Code Online (Sandbox Code Playgroud)

在 Windows 中运行 mstsc.exe
计算机:127.0.0.1:3390 将
用户名留空
连接

会话:Xorg
用户名:远程
密码:密码

享受xfce!

完成后关闭远程桌面连接
返回Ubuntu命令行

sudo /etc/init.d/xrdp stop
exit
Run Code Online (Sandbox Code Playgroud)


Not*_*1ds 10

太长了;博士

WSLg 现在可在 Windows 10 和 Windows 11 上使用,使其成为大多数用户的首选机制。请参阅下面的更新安装/更新说明。


(更多)更多细节:

因此,该问题要求对在 WSL 中运行 Linux GUI 应用程序的技术提出三个“评分”标准:

  • 易于安装
  • 使用方便
  • 内存消耗

我要补充一点:

  • 灵活性
  • 表现

在某种程度上,“最简单”是一个观点问题,但我很乐意提供我的观点。一般来说,我认为更重要的是了解所有可用的选项并决定哪一个适合您的需求。

目前,在 WSL 下运行 Linux GUI 应用程序至少有三种技术:

  • WSLg
  • 在 Windows 中安装第三方 X 服务器
  • 在 Ubuntu/WSL 中安装xrdp桌面管理器并通过 Windows 远程桌面连接进行连接

我将在下面逐一介绍。


WSLg

虽然最初提出此问题时不是一个选项,但现在使用 WSLg 在 WSL2 上开箱即用地支持 Linux GUI 应用程序。

而且在我最初写这个答案时,WSLg 只是 Windows 11 上的一个选项,导致大量因各种原因无法升级的 Windows 10 用户无法使用它。现在,随着 WSL应用程序包的发布,这种情况发生了变化,使大多数用户的安装变得更加容易。

Windows 10 用户当前需要KB5020030或更高版本,这意味着您的 Windows 内部版本号将以或更高版本结尾.2311

Windows 11 和 Windows 10xxxxx.2311用户应该能够安装或更新:

wsl --install
# or, if already installed
wsl --update
# to confirm:
wsl --version
Run Code Online (Sandbox Code Playgroud)

WSLg 还使用更新的驱动程序支持 GPU 加速。脉冲音频也已预先配置。

WSLg 架构采用基于CBL-Mariner发行版的只读“系统发行版” ,微软也将 CBL-Mariner 发行版用于其 Azure 云服务。该发行版已预先配置为运行 Wayland/XWayland,套接字通过内部 WSL 网络共享,并符号链接到/tmp/.X11-unix您安装的每个 WSL2 发行版(例如 Ubuntu)的相应文件(例如 )。

和变量由 WSL (PID 1)DISPLAY进程在初始启动时预先配置。WAYLAND_DISPLAY/init

请注意,WSLg 仅适用于 WSL2,不适用于 WSL1 实例。

WSLg 总结和评分:

  • 易于安装:现在 Windows 10 用户也可以安装,对于大多数用例来说,这几乎肯定是三种技术中最简单的一种。

  • 易用性:优秀

  • 灵活性:在某些方面最为灵活——运行 Wayland/Weston/Xwayland。如果需要,可以运行 Weston-on-Weston 实施来运行全屏桌面。

  • 内存消耗:简短回答 - 运行大约 213MB xterm。我们可以假设其中大部分来自 WSLg 基础设施。无论如何,我还使用 测试了下面的其他两个场景xterm,因此它的内存使用量是这些测量中的粗略常数。

    有关 WSLg 内存使用情况的更多信息,请参阅本文末尾的脚注。请注意,这包括具有此内存占用的 Wayland、Xwayland 和 Pulse Audio 支持。下面列出的其他两个选项不包括 Wayland 或 Pulse Audio。

  • 性能:加载后最高 - GPU 加速。我的系统(nVidia 2070 Super)上的 glmark2 为 666,听起来很低,但请记住,这是被合成到 Windows 桌面上的。它几乎是 VcXsrv 的两倍,是 xrdp 的大约 4 倍。

    但是,请注意,首次在 WSL2 会话中启动任何 GUI 应用程序时复制和启动系统发行版时会出现初始延迟。在我的高中端性能系统上,此延迟约为 5 秒。此后,其他 GUI 应用程序将在亚秒内启动。


XRDP

对于那些无法升级到 Windows 11 的人,或者仍然需要 WSL1 支持的人来说,仍然有两个不错的选择。第一种方法,也是我的首选方法,是在 Ubuntu 中运行xrdp,并简单地使用 Microsoft 的远程桌面连接和 Xfce4 等轻量级工具。

sudo apt install xrdp xfce4
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini 
# So it doesn't interfere with Windows RDP on 3389
Run Code Online (Sandbox Code Playgroud)

在 /etc/xrdp/startwm.sh 中,注释掉最后两行(提到 Xsession)并添加:

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
exec startxfce4
Run Code Online (Sandbox Code Playgroud)

启动 xrdp:

sudo service xrdp start
Run Code Online (Sandbox Code Playgroud)

就是这样 - 您应该能够使用内置的远程桌面连接应用程序连接到 WSL 桌面。要连接的计算机将是localhost:3390。确保选择 Xorg 作为会话类型。

使用此方法(与 WSLg 一样),无需配置任何防火墙规则,因为您实际上使用的是 WSL 的内置本地主机转发,localhost当 Windows 中的该端口上没有侦听套接字时,它将流量路由到 WSL。

我个人发现这比这里关于第三方 X 服务器的其他答案要容易得多。然而,它可能不是最高效的内存效率,因为它需要运行桌面环境。

xrdp总结和评分:

  • 易于安装:只要桌面管理器不需要 Systemd(例如 Gnome),就非常好。让 Systemd 在 WSL 中运行目前是一个重大挑战。可以使用第三方帮助程序,但在 Systemd 下 WSL 的系统和用法发生了巨大变化。

  • 易于使用:非常好 - 不会在需要时自动配置为启动,因此它不像 WSLg 那样无缝。有些人报告说它的性能不如 VcXsrv,但我也体验到了出色的性能。

  • 灵活性:窗口选项最不灵活。您必须至少运行一个窗口管理器,并将其配置为 xrdp。它无法在 Windows 桌面上运行单个应用程序。WSLg 和第三方 X Server 都可以全屏或窗口运行。

    此方法确实在 Windows 10 下运行,并且也应该在 WSL1 下运行,尽管我不记得我是否实际使用 WSL1 测试了 xrdp。

  • 内存消耗:正如我预期的那样,该技术的内存消耗是迄今为止最高的。在 xrdp 下启动 Xfce4 桌面在 Vmmem 下额外消耗了 687MB。

  • 性能:我个人对 xrdp 的使用仅限于简单的 UI 应用程序,并且性能反应非常灵敏。然而,更深入的检查表明,这对于性能来说无疑是最差的选择。使用 VLC 播放 H.264 视频严重卡顿,glmark2 得分为 167,大约是 VcXsrv 的一半。


Windows 中的第三方 X Server,例如 VcXsrv

最后,针对 Windows 10 和/或 WSL1 的“正常”推荐方法(如此处的其他答案中主要提到的)是在 Windows 中安装第三方 X 服务器并在 WSL(版本 1 或 2)中配置 Ubuntu 以使用它。

我要补充一点的是,为 WSl2 设置DISPLAY变量的旧方法可能有点过时了。我建议使用:

export DISPLAY="$(hostname).local:0"
Run Code Online (Sandbox Code Playgroud)

这利用了 mDNS(.local域),它已经在 Windows 10 和 WSL 中使用了几年。由于您的hostnameWSL Ubuntu 与您的 Windows“计算机名称”相同,因此这会自动连接到 Windows 主机的正确 IP 地址。

对于 WSL2,需要为此选项设置防火墙规则,因为您是“跨网络”连接(尽管是虚拟网络)。根据我的经验,Windows 将检测首次连接的尝试,并请求用户采取自动创建防火墙规则的操作。但是,如果错过或忽略此消息,则必须手动配置规则。

对于 WSL1,不需要防火墙规则,并且“正常”DISPLAY=:0应该可以工作,因为它与 Windows(运行 X Server 的地方)共享相同的网络接口。

设置第三方 X 服务器当然不是“最简单的”,因此如果您在使用该技术时遇到麻烦,我建议您阅读此处(以及其他地方)的其他答案。

关于防火墙规则的附加说明 - Windows 下的 WSL2 网络被归类为“公共”网络接口,并且在最近的 Windows 版本中似乎没有一种简单的方法可以更改此设置。以前是可以的,但现在界面被隐藏了,无法更改。这意味着您必须设置防火墙规则以允许公共网络上的 VcXsrv(或任何第三方 X 服务器)。如果您连接到其他不受信任的公共网络,这可能会成为问题。

请记住:

  • 连接到不受信任的网络时关闭 VcXsrv
  • 和/或在 X 服务器中强制执行访问控制。

第三方 X 服务器 - 总结和评分:

  • 易于安装:恕我直言,这三个选项中最容易出现问题的。您的结果可能会有所不同,但正如您从答案数量(以及 Stack 站点上发布的问题)中看到的那样,人们确实往往会遇到使用此技术的各种问题。跨网络通信(从 Windows 主机到 WSL2 虚拟网络)使问题变得复杂。

  • 易于使用:正确安装和配置后,中等至简单。虽然 WSLg 将在 WSL 中执行第一个 GUI 应用程序时“按需”启动,但您确实需要在需要时自行启动第三方 X 服务器。或者您可以让它始终保持运行状态,但这将意味着更长期的内存使用。

  • 灵活性:高 - 可以窗口或全屏运行。目前没有 Wayland 选项。

    在 Windows 10/11 和 WSL1/WSL2 上运行。

  • 内存消耗:这三个选项中最好的情况。总共只消耗了 48MB——Vmmem 增加了 10MB,VcXsrv 本身又增加了 38.6MB。

  • 性能:虽然我更喜欢 xrdp,但今天的基准测试将使我在未来更仔细地研究 VcXsrv(也许还有其他 X 服务器,例如 MobaXterm)。显然,VcXsrv 做了一些 OpenGL 加速,它的 glmark2 分数为 322,大约是 xrdp 的两倍。即使在 3440x1440 分辨率下,H.264 的 VLC 播放也很流畅(抱歉,没有 4k 可供测试)。


脚注:测量内存

为了确定每种技术的粗略内存使用情况,我查看了 Windows 中的 Vmmem 进程内存消耗。这是处理 WSL2 的虚拟机进程。我也在大多数这些测试之间重新启动了 Windows,但在wsl --shutdown相同技术的测试之间做了一次。

请注意,可以使用这些选项中的每一个来启用 PulseAudio,但只有 WSLg 包含开箱即用的预配置。我没有在 xrdp 或 VcXsrv 选项上启用 PulseAudio 支持,因此不会考虑那里需要的任何内存(如果您需要音频支持)。

脚注:WSLg 内存消耗

WSLg 的内存消耗显然有两个“颠簸”。第一种情况发生在您启动 WSL2 且 WSLg 只是“启用”(默认)时。我一开始并没有注意到这种增加,因为我从未禁用过WSLg。完全可以通过编辑.wslconfig文件(请参阅此文档)并guiApplications=false在 参考资料[wsl2]部分中进行设置来完全关闭该功能。

禁用该功能并重新启动 Ubuntu WSL2 实例后,我的基本内存使用量下降了 108MB。重新打开并重新启动显示“稳态”WSL2 内存消耗有所增加。因此,始终启用此功能会带来一些小损失。

然后,当启动初始 x 客户端(xterm在本例中)时,Vmmem 中又出现 105MB 的增加。

脚注:优化

一般来说,我使用开箱即用的默认配置运行这些方法。我确实在 VcXsrv 中启用了 OpenGL 加速,并且我的 Windows nVidia 驱动程序是最新的,并且已确认可用于 Ubuntu 中的 OpenGL Mesa。

每种技术都可能有额外的优化来提高性能。


Err*_*404 7

根据官方文档

\n
\n

您现在可以预览 Windows Subsystem for Linux (WSL) 支持,以在 Windows 上以完全集成的桌面体验运行 Linux GUI 应用程序(X11 和 Wayland)。

\n

WSL 2 使 Linux GUI 应用程序在 Windows 上使用起来感觉原生且自然。

\n
    \n
  • 从 Windows 开始菜单启动 Linux 应用程序
  • \n
  • 将 Linux 应用程序固定到 Windows 任务栏
  • \n
  • 使用 alt-tab 在 Linux 和 Windows 应用程序之间切换
  • \n
  • 跨 Windows 和 Linux 应用程序剪切 + 粘贴
  • \n
\n

您现在可以将 Windows 和 Linux 应用程序集成到您的工作流程中,以获得无缝的桌面体验。

\n
\n

先决条件

\n\n

在 WSL 上安装 GUI 应用程序。

\n

假设您已满足所有先决条件并已安装 WSL,那么您现在必须更新 WSL。

\n
    \n
  1. 打开PowerShell窗口,方法是单击“开始”\xe2\x86\x92,键入“Power Shell”\xe2\x86\x92,右键单击 Windows PowerShell \xe2\x86\x92以管理员身份运行。

    \n
  2. \n
  3. 更新 WSL:

    \n
    wsl --update\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 您需要重新启动 WSL 才能使更新生效:

    \n
    wsl --shutdown\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n

您现在已准备好开始在 WSL 上使用 GUI 应用程序。

\n

注意 WSL 对 GUI 应用程序的支持并不提供完整的桌面体验。它依赖于 Windows 桌面,因此可能不支持安装以桌面为中心的工具或应用程序。

\n

安装任何 GUI 应用程序,例如,要安装 gedit,请运行:

\n
sudo apt update\nsudo apt install gedit\n
Run Code Online (Sandbox Code Playgroud)\n

要启动 gedit,请运行:

\n
gedit /path/to/any/file/you/want/to/edit\n
Run Code Online (Sandbox Code Playgroud)\n

WSL 中的 GUI 应用程序

\n

参考资料:官方文档

\n


Dav*_*Xue 5

根据我的研究,wsl 最初不是为 GUI 用户设计的。但是,我们可以从第三方安装X-server来显示 GUI。我已经测试过,经过适当设置的VcXsrv可用于显示 Debian Linux-desktop。

我认为我的方法可以顺利地在 Windows 子系统 Linux Debian 上显示 mate-desktop (GUI)。我制作了一个关于如何从头开始在 wsl Debian 上安装和显示mate-desktop (GUI)的视频。链接:https : //youtu.be/QjogEWudpaM

mate-desktop 在Ubuntu上的安装略有不同。

第 1 步:安装 wsl

  • 以管理员身份打开 PowerShell并键入Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  • 从 Microsoft 商店安装“Debian”或“Ubuntu”。

第 2 步:安装图形用户界面,例如 mate 桌面。

对于Debian用户:

  • 在 Windows 10 中打开 Linux 控制台并通过键入以下内容安装 mate-desktop:,按sudo apt-get updateEnter。
  • 更新完成后,输入sudo apt install task-mate-desktop,回车。

或者对于Ubuntu用户:

  • 从 Windows 10 打开 ubuntu 控制台
  • 输入sudo apt install tasksel,按回车
  • 输入sudo apt update,按回车
  • 输入sudo tasksel install ubuntu-mate-desktop,按回车

第三步:在windows 10中安装X服务器。我使用了一个名为VcXsrv的开源服务器。它可以从https://sourceforge.net/projects/vcxsrv/下载。
安装完成后:

  • 在 Windows 10 中打开 XLauch

  • 执行以下设置:

    • 选择: "One large window"
    • 选择 Display number: 0
    • 点击 next
    • 选择 Start no client
    • 点击 next
    • 点击 finish

第 4 步:在 Linux 控制台中设置:

  • 类型 export DISPLAY=:0

  • 类型export LIBGL_ALWAYS_INDIRECT=1(也许不需要这个推荐)

第 5 步:显示 mate-desktop GUI:

  • 键入mate-session用于Debian的用户

  • 键入mate-sessionlightdm-sessionUbuntu用户

如果您对我的描述感到困惑,可以查看我的 youtube 视频Install GUI (mate desktop) to Microsoft Windows Subsystem Linux

  • 这个站点给了我丢失的信息:https://github.com/microsoft/WSL/issues/4106 对于 WSL2,你必须找到实际的 IP 地址,因为它是一个单独的 VM:`export DISPLAY=$(cat /etc/ resolv.conf | grep nameserver | awk '{print $2}'):0.0` 此外,VcXsrv 被我的 Windows 防火墙(私有/公共)阻止。 (2认同)