如何在 Windows 10 中创建快捷方式以在 VcXsrv 中启动 WSL2 GUI 应用程序

如何在 Windows 10 中创建快捷方式以在 VcXsrv 中启动 WSL2 GUI 应用程序

我正在尝试为 Firefox 创建从 WSL2 到 Windows 10 Home 的快捷方式,但一直无法做到。我正在使用 VcXsrv,我已将其设置为自动启动。我无法使用 WSLg,因为我没有使用 Windows 11。

您可以在 Windows 快捷方式中使用 Firefox 等应用程序,而无需手动导出吗DISPLAY

答案1

听起来你是这样:

  • 已经DISPLAY正确设置了变量,并且可以从 VcXsrv 中的命令行运行 Firefox。这是一个很好的开始。

  • 但由于您提到必须手动DISPLAY导出变量,因此请在中将其导出。~/.bashrc

如果是这种情况,那么您首先需要在启动配置中导出变量。如果您已经完成此部分,请跳至“快捷命令行”部分。

在启动时导出 DISPLAY

将以下内容添加到您的~/.bashrc

export DISPLAY="$(hostname).local:0"

它使用 mDNS 根据我的在这里回答这个问题。如果您有其他DISPLAY适合的设置,则可以使用它,但我发现hostname在大多数情况下基于的方法是最简单的。

然后:

source ~/.bashrc

让它重新读取配置。您也可以重新启动 shell 以确保无误。然后确保 Firefox 可以运行。

快捷命令行

以上内容适用于交互的shell,因为 rc 文件是为交互式 shell 编写的。但是,当您通过快捷方式启动 Firefox 时,您需要使用该wsl.exe命令,默认情况下不是交互式(或登录) shell。

根据记忆,尝试将 Windows 快捷方式设置为:

wsl -e bash -lic "firefox"

这将运行 Bash:

  • 作为登录 shell ( -l),它将获取您的~/.bash_profile
  • 作为交互式 shell ( -i),它将获取您的~/.bashrc
  • 并运行命令(-c)firefox

答案2

我建议使用以下语法:

wsl -e bash -lic "nohup firefox &"

Linux 中的“&”表示“在后台启动”。如果没有“&”,则父进程(bash)将处于活动状态;如果使用“&”但不使用“nohup”,则进程将与父进程(bash 窗口)一起结束。

使用“nohup”和“&”一切看起来都很漂亮 - 只有 Firefox 进程。

答案3

进一步:

Windows 快捷方式(目标命令)

在我的特定环境下,即带有 WSL2 Debian 的 Windows 10,这是最有效、最可靠的方法。

C:\Windows\System32\wsl.exe -d Debian -- bash -lic "nohup firefox &"

注意(如果从 GWSL 迁移)

如果您在升级到 WSL2 之前曾经使用 GWSL 启动 GUI 应用程序,请务必仔细检查您的~/.bashrc& ~/.profile(或~/.bash_profile)文件以删除 GWSL 放置在那里的任何配置,这些配置可能会无意中将DISPLAY环境变量覆盖为包含您的名称服务器 IP 地址(来自)的无效内容/etc/resolve.conf

就我而言,旧的 GWSL 配置设置DISPLAY1.1.1.1:0.0而不是:0,这导致事情发生故障。

答案4

当我尝试让 Xilinx IDE 在 WSL 中以所需的环境和我的工作目录运行时,我得到以下结果:

wsl.exe -e bash -lic ". /opt/Xilinx/14.7/ISE_DS/settings64.sh && cd /mnt/c/Users/%username%/Documents/ISE_Projects && nohup ise &"

使用 && 链接命令允许我在启动程序之前强制所需的环境和工作目录。

%username% 替换似乎有效。

相关内容