如何优雅地创建在X下启动WSL程序的Windows快捷方式

问题描述 投票:0回答:5

我在通过 Windows 任务栏上的按钮从 VcXsrv 下的 WSL 安装中启动

xfce4-terminal
时遇到了一些困难。完成后,除了 xfce4-terminal 之外,我不需要任何 DOS 框/控制台/终端。我已经可以使用了,但是它太丑了。有人有更干净的方法吗?

这就是我所做的工作:我使用此目标在桌面上创建了一个 Windows 快捷方式(全部在一行中,为了便于阅读,这里用换行符分隔):

C:\Windows\System32\wscript.exe
    \\wsl$\Ubuntu-20.04\home\peter\bin\windows\startTerminal.vbs

startTerminal.vbs
的灵感来自静默运行批处理文件并隐藏控制台窗口的10种方法•Raymond.CC(不需要为此安装单独程序的少数解决方案之一!),它包含:

CreateObject("Wscript.Shell").Run "C:\Windows\System32\wsl.exe -u peter --exec /home/peter/bin/windows/startTerminal.sh",0,True

startTerminal.sh
包含:

export DISPLAY=localhost:0.0
xfce4-terminal --command=/bin/zsh

设置 DISPLAY 显然是必需的,即使我在 ~/.zshrc 中设置了 DISPLAY 环境。除非您运行登录 shell,否则 wsl.exe 显然不会执行此操作。

一旦所有这些都正常工作,我可以将快捷方式拖动到任务栏并单击那里。

我数了数,有 3 个,三个文件合作来实现这个简单的目标?我可以在不安装外部程序的情况下将其限制为一两个吗?

windows x11 windows-subsystem-for-linux
5个回答
11
投票

是的,我认为您可以在一个快捷方式文件中执行我所做的操作。我将分享对我有用的方法,然后你就必须摆弄你的程序了。

尝试将所有命令放入快捷方式链接文件的目标部分。

步骤1.右键单击桌面,然后单击“新建”,然后单击“快捷方式”,然后将其命名为(LaunchXFCE4)

步骤 2. 右键单击 LaunchXFCE4 选择属性

第 3 步。在“目标”部分中输入所有启动序列

步骤 4. 右键单击 LaunchXFCE4 选择固定到任务栏

我正在使用此代码在 WSL 2 上启动 Emacs 27.1,并在 Windows 10 上使用 Ubuntu 20.10,您也许可以修改该代码。

C:\Windows\System32\wsl.exe --distribution Ubuntu20 bash -c "export DISPLAY=$(ip route | awk '{print $3; exit}'):0 && export LIBGL_ALWAYS_INDIRECT=1 && export XCURSOR_SIZE=16 && setsid emacs"

第一个导出显示与您的 localhost:0.0 类似,因此替换它或尝试我的。也许你的 xfce4 取代了我的 emacs。阅读这篇文章了解双与号。所以可能是这个

C:\Windows\System32\wsl.exe --distribution Ubuntu20 bash -c "export DISPLAY=localhost:0.0 && export LIBGL_ALWAYS_INDIRECT=1 && export XCURSOR_SIZE=16 && setsid xfce4-terminal --command=/bin/zsh"

注意,我的 VcXsrv 在 Windows 启动时启动,方法是在我的 C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 中放置 config.xlaunch 的快捷方式。

顺便说一句,根据他们的博客

,微软将在几个月内为 WSL 提供 GUI

WSL 中的 GUI 应用程序支持正在成为现实!我们越来越接近 初始预览版并很高兴地宣布推出 Windows 预览版 未来几个月内的内部人士。


3
投票

我通过以下方式删除了对

startTerminal.sh
文件的需求:

编辑

startTerminal.vbs
以包含:

CreateObject("Wscript.Shell").Run "C:\Windows\System32\wsl.exe -u peter bash -l -c xfce4-terminal",0,True

然后我创建了一个

~/.bash_profile
来设置
$DISPLAY
变量,无论如何这可能应该完成:

$ cat .bash_profile
if [ -z "$DISPLAY" ]; then 
    export DISPLAY=:0
fi

现在有了快捷方式和启动它的

startTerminal.vbs
。还是不太优雅...


1
投票

在尝试了@Saj 的答案后,这对我不起作用,我得到了以下结果:

C:\Windows\System32\wsl.exe --distribution Ubuntu-20.04 bash -c "export DISPLAY=$((route.exe print | Select-String 0.0.0.0 | select -first 1) -Split "\s+" | select -Index 4):0.0 && export LIBGL_ALWAYS_INDIRECT=1 && setsid emacs"

请注意,我的问题是它无法在括号内使用 bash 命令(grep、awk)

环境:Windows 10 上的 WSL2


1
投票

WSL-2 是 Windows 中为数不多的优秀补充之一,它现在的功能更加强大。 它是 Win 10 和 Win 11 后期版本的一部分。 以下是如何优雅地创建终端窗口,将终端替换为您想要的任何 X 应用程序。

  1. Linux:“apt-get install xfce4-terminal”(或同等命令)
  2. Windows:创建一个新的快捷方式(右键单击任何 Windows 文件夹) 2.1) 快捷方式 ->
    C:\Windows\System32\wslg.exe -u root  -- /usr/bin/xfce4-terminal
    如果您有多个发行版,请使用它,例如:“-d Debian”

就是这样。您可以给它一个更好的图标并命名。 它将像 Windows 应用程序一样启动该应用程序。


0
投票

“C:\Program Files\WSL\wslg.exe”-d Ubuntu --cd“~”--xsnow

Windows 本身具有功能。 xsnow ist nicht xs now, sondern das Winterschneeprogramm :)

© www.soinside.com 2019 - 2024. All rights reserved.