【问题标题】:WSL (Ubuntu): how to open localhost in browser from bash terminalWSL(Ubuntu):如何从 bash 终端在浏览器中打开 localhost
【发布时间】:2019-03-12 12:12:46
【问题描述】:

我正在尝试从 WSL bash 终端在(任何)浏览器中打开 http://localhost

到目前为止我已经尝试过:

为 xdg-open 设置 BROWSER 变量时运气不佳,它以 /usr/bin/xdg-open: 851: /usr/bin/xdg-open: /c/"Program: not found 响应 xdg-open http://localhost

我尝试使用\^ 进行转义。使用 %ProgramFiles(x86)% 和 ofcorse "Program Files (x86)"。每次或多或少都是相同的答案...任何想法如何设置在 WSL 中打开浏览器的工作流程?

到目前为止,我已经结束了:

/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe localhost

但我正在寻找更优雅的解决方案。

【问题讨论】:

  • 这并不能完全回答您的问题,但在 MacOS 中,您可以通过 Bash 终端打开以下代码 open http://localhost:3000 对不起,但这是我目前可以测试的唯一设置。
  • Linux 二进制文件无法扩展 windows 环境变量。

标签: windows bash ubuntu browser windows-subsystem-for-linux


【解决方案1】:

你快到了。只需为 windows chrome 可执行文件添加别名 http://www.linfo.org/alias.html

alias chrome="/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe"

现在您可以简单地运行 chrome localhost 并在您想要的任何 Web 位置打开 chrome。

【讨论】:

  • FWIW,我当前的安装需要 /mnt/c 而不是 /c alias chrome="/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe" 注意,这很方便,但不能解决运行本机 Linux Chrome 二进制文件的问题。
  • 为了运行本机 Linux GUI 应用程序,您需要一个 XServer。我的“首选武器”是 VcXsrv,但也有其他不错的选择,例如 Xming 或 Cygwin 的 XServer。
【解决方案2】:

要从 bash 终端在浏览器中打开 localhost,您需要配置 wsl,使其
默认为您的 Windows 10 系统中已设置为默认浏览器的任何浏览器。

您可以使用 wslu 中的一些工具(“WSL 实用程序集合”)来做到这一点。
为此,您需要。

  • wslview (-u, --unregister "删除 wslview 作为默认的 WSL web 浏览器。
    -r, --register "将 wslview 注册为默认的 WSL Web 浏览器。)

  • wslpath (-a "强制结果为绝对路径格式",
    -u "从 Windows 路径转换为 ​​WSL 路径(默认)")

您需要像这样注册您喜欢的浏览器...
对于谷歌浏览器:
wslview -r $(wslpath -au 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe')

对于 Microsoft Edge:
wslview -r $(wslpath -au 'C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\MicrosoftEdge.exe')

现在您可以将 localhost 打开为 x-www-browser localhost:8080www-browser localhost:8080 并且 x-www-browser 或 www-browser 将默认使用您当前的 Windows 10 默认浏览器,前提是它已按上述方式注册。
不要忘记指明端口;仅本地主机对我不起作用。

要取消注册任何浏览器,只需将 -r 标志更改为 -u。

在 wsl 终端中查看 wslview 帮助:info wslview <enter>wslpath <enter> 寻求有关 wslpath 的帮助。

【讨论】:

  • 你救了我的工作
【解决方案3】:

您可以从 Bash 调用 Windows 命令行,并使用 Windows 文件关联通过默认的 Windows 浏览器打开 URL。

为此,只需输入 Bash:

cmd.exe /C start http://localhost

在我的例子中,这会在 Chrome 中加载 localhost,注意完整的 URL 是 Windows 决定做什么所必需的。

这类似于 open 在 MacOS 中所做的事情,因此您可能会发现直接为命令设置别名并将其用于其他类型的文件很有用:

# add this to .bash_aliases
open='cmd.exe /C start'

现在您可以直接从 WSL 中 open URLopen file.pdf


注意:由于您只是将命令重定向到cmd.exe,因此它需要能够访问您使用的文件。因此,当您发现自己在 Windows 文件系统中时,上述解决方案将起作用,但当您使用 Linux 分区中的文件(即在 tmpbin 文件夹中)时,可能会失败。这可能是新版 WSL 中的has been fixed 但我没有测试过。

【讨论】:

  • 这并没有完全解决。尝试使用 /tmp 中的 open file.pdf 之类的东西会失败,因为 CMD 不知道如何处理 UNC 路径。此外,如果给出了绝对路径(open /tmp/file.pdf),CMD 会将第一个目录解释为一个开关,并拒绝采取行动,因为像 /tmp 这样的东西不是 CMD 的已知开关
  • 我提出的解决方案只是将 WSL 命令重定向到 cmd.exe 的命令,因此在不允许 cmd.exe 访问的任何地方(如在tmp 文件夹中),它都不起作用。这是 WSL 与 Windows 的互操作性问题,我相信无法以任何方式解决。无论如何感谢您的评论,我正在编辑我的答案以包含此详细信息。
【解决方案4】:

您可以像之前那样设置 BROWSER 变量。但是xdg-open 不能在 WSL 中作为 xdg-openscripts 设置为使用未引用的环境变量(在这种情况下, 路径因路径名中的空格而中断)。

您可以使用 wsl-opennpm 实用程序对 WSL 执行相同的操作。

安装 npm 后,安装 wsl-open 实用程序:

sudo npm install -g wsl-open

使用默认 Windows 浏览器打开任何 URL:

wsl-open http://google.com

您还可以将 wsl-open 设置为 WSL 中文件类型的默认程序:

wsl-open -w // sets wsl-open as the Shell Browser

然后您可以使用标准的 xdg-open 来处理 URL 以及默认的 windows 浏览器:

xdg-open http://google.com 

【讨论】:

    【解决方案5】:

    好吧,首先,我不再使用 Windows,所以我无法发布我亲自测试过的完整解决方案,但是当我使用 Windows 时,我曾经这样做并且它有效。 (这可能应该是一个评论,但不久前我删除了一些不被接受的答案并很多相关的声誉:/)

    解决方案:

    不要尝试从 WSL 内部启动 Windows 程序,而是安装程序的 linux 版本和 X 服务器,例如 XmingHere is an example tutorial 用于将 X 应用程序转发回 Windows 上的 Xming。

    总结一下,安装 Xming(在 Windows 上)。然后导出 DISPLAY 变量:

    export DISPLAY=:0

    在 WSL 中安装 google-chrome 并通过 CLI 启动它。它应该会显示在您的桌面上。

    注意:还有一种使用 PuTTY 和 XMing 进行远程查看的方法,但您需要先禁用 Windows 防火墙并在 WSL 中安装完整的 openssh-server。

    【讨论】:

      【解决方案6】:

      我创建了一个基本上将xdg-open 转发到powershell -c start 的脚本

      虽然没有经过太多测试。

      sudo tee /usr/local/bin/xdg-open <<EOF
      #!/bin/sh
      
      powershell.exe -c start "'\$@'"
      EOF
      sudo chmod +x /usr/local/bin/xdg-open
      

      干杯 奥利弗

      【讨论】:

        【解决方案7】:

        看到这篇对我有用的文章: https://towardsdatascience.com/running-jupyter-notebook-on-wsl-while-using-firefox-on-windows-5a47ebfae4c1

        简而言之:

        第 1 步 - 为 Jupyter Notebook 生成配置:

        jupyter notebook --generate-config
        

        第 2 步 - 使用“nano”或其他编辑器编辑配置文件

        配置文件应该在“.jupyter”文件夹下的主目录下:

        ~/.jupyter/jupyter_notebook_config.py
        

        第 3 步 - 通过重定向文件禁用启动浏览器

        先注释掉该行,然后将True改为False:

        c.NotebookApp.use_redirect_file = False
        

        第 4 步 - 在 .bashrc 文件中添加一行以设置浏览器路径

        export BROWSER='/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'

        对我来说,它是我的 Windows 程序文件下的 Chrome。否则 WSL 下的任何 linux 安装都没有本地浏览器可以启动,因此需要将其设置为 Windows 可执行文件。

        第 5 步 - 重新启动 .bashrc

        source .bashrc

        应该可以!

        【讨论】:

          【解决方案8】:

          https://github.com/microsoft/WSL/issues/3632#issuecomment-690061348

          export BROWSER='eval "/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"'
          
          xdg-open https://google.com   # nice work
          

          解决了间隔路径问题。 它对我有用。

          【讨论】:

            猜你喜欢
            • 2017-07-20
            • 2016-04-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多