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


87

我四处搜寻,目前建议使用两种方法;安装适用于Linux的Windows子系统的增强功能并安装XServer。

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

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


1
我个人的感觉是WSL是个玩笑!为什么不简单地加载VM?
格林

3
@CharlesGreen内存...我当前正在使用一台很旧的笔记本电脑。
乔治·霍夫汉尼斯

我也是,但是我要在VM中运行Windows 10,因为我需要的一个程序只能在Windows中运行
Charles Green,

1
@CharlesGreen VirtualBox?
乔治·霍夫汉尼斯

“我真的很想运行Steam并最终在Linux上玩Portal 2!” WSL不是Linux,因此永远不会发生; WSL也不打算用作游戏平台;它是将BASH的功能释放给Windows的平台;仅此而已;要在WSL上运行Steam,您不仅需要在WSL上安装台式机但也有STEAM支持WSL。永远不会发生
。– Rinzwind

Answers:


28

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

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

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

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

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


那么,无忧不是一种选择,然后呢?也许有人会做出突触的Windows在未来WSL工作....
乔治Hovhannisian

1
WSL上的图形程序并不意味着您可以在WSL上使用Steam。您将需要Valve创建对WSL的支持。
Rinzwind '18年

7
请记住,您根本不需要使用SSH。只要设置DISPLAY好,您就可以开始使用了(无论如何对于xming和VcXsrv)。
dma1324 '18年

5
我会否决这个答案,因为它是1:不是完全准确,而2:不是本着问题的精神-是的,您可以使用xserver在wsl中运行gui应用。这位操作员没有询问支持的应用程序。(安装vcxserve或类似的东西,在设置DISPLAY之后,sudo apt-get install synaptic,不需要ssh)...
decuser

1
@decuser最好的答案是:如果没有答案,请写一个。
托尔比约恩Ravn的安德森

61

VcXsrv

我选择VcXsrv在WSL(Linux的Windows 10子系统)中使用。我建议所有人在Windows 10 Ubuntu 16.04中选择一个或多个图形用户界面(GUI)支持之前,先在xming(接受的答案)和VcXsrv之间进行研究。

安装

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

export DISPLAY=localhost:0.0

安装VcXsrv后该怎么办?

我能够跑步:

sudo apt install ubuntu-desktop
sudo apt install yad
sudo apt install gedit

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

当我想尝试WSL VcXsrv中的许多Ubuntu bash脚本时,必须安装它们,zenity并显示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
  • /mnt/e/bin这是一条不寻常的路径,因为它是我存储Windows 10双启动WSL和Ubuntu 16.04双启动中使用的脚本的位置。大多数用户不会在其计算机上包括此功能。

1
@GeorgeHovhannisian对我来说,优点是我可以使用geditUbuntu桌面经验中熟悉的功能。另外,我的许多bash脚本都使用zenityyad用于x-windows对话框。除非VcXsrv已安装,否则这些bash脚本将不会运行 。
WinEunuuchs2Unix

6
+1太好笑了:如何从内部秘密地将Windows系统转换为Ubuntu?
甜点

8
这很轻松:在Windows上,使用提供的链接下载了VcXsrv。安装并启动它。然后我打开一个Ubuntu shell,然后进入export DISPLAY=:0。现在,我可以运行xhostxeyes并且可以gnuplot在Ubuntu中运行(前提是这些程序已经安装在Ubuntu WSL中)。
丹尼尔·K

2
@dessert +1您的评论。考虑到我的用户名意思是“ Windows受限用户切换到Unix”,这是双重喜剧。多亏了WSL,我现在偶尔使用Windows 10,因为我可以在其中运行Ubuntu。叫我WinEunuuchs2Unix2WinSub4Linux吗?:p
WinEunuuchs2Unix

2
同时export LIBGL_ALWAYS_INDIRECT=1,你会得到一些硬件加速GL应用了X使用VcXsrv
Jippers

19

我在Windows的Ubuntu(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
    

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

    cd .. 
    

    (localhost @ localhost:/ $表示此命令将您带到WSL可以看到的硬盘驱动器的开头...)

    sudo apt-get install dbus synaptic nautilus --install-suggests --show-progress
    

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

    cd /usr/share/dbus-1 && sudo vi session.conf
    

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

    i进入插入模式并添加

    <!-- <listen>unix:tmpdir=/tmp</listen> || Original Command --> to preserve original rules
    

    比添加:

    <listen>tcp:host=localhost,bind=0.0.0.0,port=0</listen>
    <auth>EXTERNAL</auth>
    <auth>DBUS_COOKIE_SHA1</auth>
    <auth>allow_anonymous</auth> 
    

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

    运行以下命令并检查其输出:

    $ export DISPLAY=localhost:0
    $ sudo service dbus start
    * Starting system message bus dbus                 [OK]
    $ echo $DISPLAY
    localhost:0
    
  4. 大功告成!现在只需从Bash运行突触,nautilus或firefox,它们便应加载到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准备:;

在regedit中:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces

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

找到正确的密钥后,右键单击它,然后选择“ 新建”>“ Dword(32位)值”

将其命名为TcpFrequency,然后单击ok

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

再次右键单击该键,然后选择“ 新建”>“ Dword(32位)值”

命名新参数TcpDelay

之后双击它,并将其十进制值更改为1。(要在以后的某个时间点还原密钥,请将其更改为0或删除密钥)

Nagle的算法

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{NIC-id}

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

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

注意:

一些报道说,这些调整确实减少了玩《 Dota 2》和《英雄联盟》时的等待时间,但对某些人却无效。我尝试过,在玩Dota 2时,我的等待时间从110ms改善到了90ms(SEA Server)。

网络节流指数

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile. 

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


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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile. 

在此处创建一个新的DWORD,并将其命名为SystemResponsiveness,将其十进制值设置为00000000,以进行纯游戏/流媒体播放。

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Games

并更改以下注册表值:

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

Windows = Xbox的作者对“未知”的所有欢呼声(请原谅我一段时间,因为我复制了您的指导)……

PPS:如果XServer失败,请尝试找到Docker的解决方法。


6-5-7;:5-6-7 ...
tenedas '18

感谢您提供非常详细的答案。否则,由于有人建议编辑,我无法相信,人们实际上是在建议运行Steam的解决方案。另一方面,人们仍然在建议台式机,我仍然不知道该怎么用,我个人甚至不需要文件管理器,更不用说完整的flex台式机了。
乔治·霍夫汉尼斯(National Hovhannisian),

我在Windows上安装了Xming,然后使用了第3节中的所有步骤。在这里(上文)-安装dbus(实际上不需要突触或nautilus,但是nautilus是很好的检查),进行session.conf编辑,然后启动dbus服务。然后,Nautilus会成功启动,并显示一些错误消息。
MikeW

您所说的“直接运行VcXsrv应用程序”是什么意思-究竟该怎么做?
Erel Segal-Halevi

更改<auth>allow_anonymous</auth><auth>ANONYMOUS</auth>,然后service dbus restartgnome-terminal应该工作
ZAB

9

即使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

创建和修改.xsession

cd /home/user/
sudo vim .xsession

添加文字:

gnome-session --session=ubuntu-2d

保存并退出vi

sudo chmod 755 .xsession
sudo systemctl enable xrdp

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

sudo adduser remote
sudo usermod -aG sudo remote

修改startwm.sh

cd /etc/xrdp
sudo chmod 777 startwm.sh
vim startwm.sh

注释掉下面两行

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession

添加文字:

startxfce4

保存并退出vi

exit

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

sudo /etc/init.d/xrdp start

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

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

享受xfce!

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

sudo /etc/init.d/xrdp stop
exit

1
可以了 我使用了ubuntu16。我没有ubuntu本机GUI外观。Xorg在xrdp列表中不可用
TRiNE '18

我不断收到以下错误消息-“显示0登录失败”。有什么想法吗?为什么XRDP不允许我登录?
J-Dizzle

2

既然您想轻松...在Microsoft Store中有一个名为x410的应用程序。它基本上是一台Cygwin X11服务器,没有使用Cygwin本身。安装后(即零配置),您可以运行WSL X11 Apps!(甚至整个台式机)。您可能想在.bashrc中插入以下几行(通过WSL用户帐户),以便可以从bash终端运行应用程序。

### Setup a D-Bus instance that will be shared by all X-Window apps
pidof dbus-launch 1> /dev/null || dbus-launch --exit-with-x11 1> /dev/null 2> 
/dev/null

## Export
export DISPLAY=127.0.0.1:0.0

我花了大约5欧元购买了x410上的x410。因此,如果价格过高,也许要等一下出售!


2

如果您想轻松使用现成的解决方案,请使用MobaXTerm。这是一款出色的多选项卡终端仿真器,直接支持WSL,并具有内置的优化X服务器。我一直在Moba上使用突触。甚至RStudio。


1

我选择Panther的答案不仅是因为它是唯一的,而且还因为它是正确的答案。没有让GUI应用程序运行的简便方法。

另外,我使用了教程,但做了一些更改:

  1. 我没有安装xfce,因为我不知道为什么我需要台式机。
  2. 之所以选择Multiple WindowsXLaunch(无DE,因此不需要一个巨大的窗口)
  3. 不需要mkdir修复,也不需要单独的终端。

我安装了哪些gui应用程序?只有Synaptic和CMake,因为我真的想不起wsl上需要的其他任何东西。

由于Panther指出的相同原因,我不执行VM / Dual Boot。我需要一个方便的(对我而言)开发环境,而不是一个完整的Flex OS。


vagrantup.com/docs/other/wsl.html-vagrant是快速启动开发环境的出色工具。看起来它支持wsl。虽然我还没有尝试过。
TamusJRoyce

1

根据我的研究,wsl最初不是为GUI用户设计的。但是,我们可以从第三方安装X服务器来显示GUI。我已经测试了具有适当设置的VcXsrv可以用于显示Debian Linux桌面。

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

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

第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,然后按Enter。

或对于Ubuntu用户:

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

步骤3:在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:显示队友桌面GUI:

  • 类型mate-sessionDebian的用户

  • 键入mate-sessionlightdm-session针对Ubuntu用户

如果您对我的描述感到困惑,可以查看我的youtube视频将GUI(伴侣桌面)安装到Microsoft Windows Subsystem Linux


-1
  • 使用NAT网络在Windows机器上的VirtualBox中安装Fedora
  • 在WSL中 sudo service ssh start
  • 从Fedora run ssh -Y 10.0.2.2

通常,VirtualBox来宾的主机可以通过10.0.2.2与之联系。

现在,即使使用无缝Windows,您也可以在Fedora桌面上使用任何WSL X程序。


现在,这很有趣。我本人并不是超级软呢帽迷。用Arch可以做同样的事情吗?
乔治·霍夫汉尼斯,

我猜也是。默认情况下,可以通过ssh在Fedora中访问X服务器,您可能必须在Arch中更改某些sshd设置。
weberjn18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.