如何优雅地创建一个 Windows 快捷方式来启动 X 下的 WSL 程序
How to elegantly create a Windows shortcut that starts a WSL program under X
我很难通过 Windows 任务栏上的按钮从 VcXsrv 下的 WSL 安装中启动 xfce4-terminal
。完成后,除了 xfce4-terminal,我不想要任何 DOS box/console/terminal。我有它的工作,但男人是丑陋的。有人有更简洁的方法吗?
这是我的工作:我在桌面上用这个目标创建了一个 windows 快捷方式(全部在一行中,为了便于阅读,这里用换行符分隔):
C:\Windows\System32\wscript.exe
\wsl$\Ubuntu-20.04\home\peter\bin\windows\startTerminal.vbs
startTerminal.vbs
的灵感来自 10 Ways To Run Batch Files Silently And Hide The Console Window • 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 环境。 wsl.exe 显然不会那样做,除非你 运行 登录 shell。
所有这些都正常工作后,我可以将我的快捷方式拖到任务栏并在那里单击它。
我数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
。还是不太优雅...
是的,我认为您可以在一个快捷方式文件中完成我的工作。我将分享对我有用的东西,然后你必须 fiddle 为你的程序。
尝试将所有命令放入快捷方式 link 文件的目标部分。
第 1 步。右键单击桌面,然后单击新建,然后单击快捷方式,然后将其命名为 (LaunchXFCE4)
第 2 步。右键单击 LaunchXFCE4 select 属性
第 3 步。在“目标”部分输入所有启动序列
步骤 4. 右键单击 LaunchXFCE4 select 固定到任务栏
我在 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 ; exit}'):0 && export LIBGL_ALWAYS_INDIRECT=1 && export XCURSOR_SIZE=16 && setsid emacs"
第一个导出显示与您的 localhost:0.0 相似,因此更换它或尝试我的。也许你的 xfce4 取代了我的 emacs。阅读 this post 关于双 & 号的内容。所以可能这个
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 的快捷方式启动
顺便说一下,根据他们的 blog
,微软将在几个月内为 WSL 提供 GUI
GUI app support in WSL is becoming a reality! We are getting closer to
an initial preview and happy to announce a preview release for Windows
Insiders within the next couple of months.
在尝试了@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)
环境:WSL2 Windows 10
我很难通过 Windows 任务栏上的按钮从 VcXsrv 下的 WSL 安装中启动 xfce4-terminal
。完成后,除了 xfce4-terminal,我不想要任何 DOS box/console/terminal。我有它的工作,但男人是丑陋的。有人有更简洁的方法吗?
这是我的工作:我在桌面上用这个目标创建了一个 windows 快捷方式(全部在一行中,为了便于阅读,这里用换行符分隔):
C:\Windows\System32\wscript.exe
\wsl$\Ubuntu-20.04\home\peter\bin\windows\startTerminal.vbs
startTerminal.vbs
的灵感来自 10 Ways To Run Batch Files Silently And Hide The Console Window • 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 环境。 wsl.exe 显然不会那样做,除非你 运行 登录 shell。
所有这些都正常工作后,我可以将我的快捷方式拖到任务栏并在那里单击它。
我数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
。还是不太优雅...
是的,我认为您可以在一个快捷方式文件中完成我的工作。我将分享对我有用的东西,然后你必须 fiddle 为你的程序。
尝试将所有命令放入快捷方式 link 文件的目标部分。
第 1 步。右键单击桌面,然后单击新建,然后单击快捷方式,然后将其命名为 (LaunchXFCE4)
第 2 步。右键单击 LaunchXFCE4 select 属性
第 3 步。在“目标”部分输入所有启动序列
步骤 4. 右键单击 LaunchXFCE4 select 固定到任务栏
我在 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 ; exit}'):0 && export LIBGL_ALWAYS_INDIRECT=1 && export XCURSOR_SIZE=16 && setsid emacs"
第一个导出显示与您的 localhost:0.0 相似,因此更换它或尝试我的。也许你的 xfce4 取代了我的 emacs。阅读 this post 关于双 & 号的内容。所以可能这个
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 的快捷方式启动顺便说一下,根据他们的 blog
,微软将在几个月内为 WSL 提供 GUIGUI app support in WSL is becoming a reality! We are getting closer to an initial preview and happy to announce a preview release for Windows Insiders within the next couple of months.
在尝试了@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)
环境:WSL2 Windows 10