使用 Windows 自带 ssh 的 X11转发功能并配置 ssh 和 VSCode

1. 确认自带的 ssh 支持 X11 forwarding

一般来说 Windows 10 version 1809 及之后的 Windows 版本都内置了 ssh 客户端,这个客户端是带有 X11 功能的。但是,直到 ssh 客户端到 version 8.1p1 时才完整的实现了对 X11 forwarding 的支持。

打开一个命令行或者 Powershell 窗口, 输入一下指令,如果你的版本大于等于 8.1p1 , 那么恭喜你,你可以接下来的工作了。否则,请更新你的 Windows 版本。

复制代码
ssh -V
#输出: OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3

2. 下载安装 X11 server

下载下面任意软件中的一款,用于安装 X11 server

  1. VcXsrv 免费工具
  2. X410 收费工具

VcXsrv 配置

下载并安装 VcXsrv。 打开 XLauncher,选择 Mulitiple windows ,并点击下一页。选择 Start no client , 点击下一页,选择前两个。点击下一页,然后保存配置文件到本地。点击完成,X11 服务器就打开了。

X410 配置

从 Windows Store 购买 X410 并安装。打开 X410 会自动最小化运行。在任务栏找到一个类似于 X 的图标,点击打开。 一定确定勾选 LoopBack。此时,X11 服务器就正式运行了。

3. 设置系统变量

ssh 在运行 X11 转发的时候会读取 DISPLAY 变量来获得 X11 服务器的地址。所以我们需要在系统变量中指定 DISPLAY 的值为服务器地址。有临时的和永久的两种方式:

  1. 临时的方法
    1. CMD:
      1. 设置: set DISPLAY=127.0.0.1:0
      2. 查看: echo %DISPLAY%
    2. Powershell
      1. 设置: $env:DISPLAY="127.0.0.1:0.0"
      2. 查看: echo $env:DISPLAY
  2. 永久的方法(powershell 和 CMD 都可以)
    1. setx DISPLAY "127.0.0.1:0.0"

注意设置了永久的方法之后需要重启一下当前的终端才可以,比如 WindowsTerminal 需要重启。

4. 测试 X11 转发功能

既然已经安装好了 X11, 就让我们来测试一下 X11 转发功能吧。打开命令行连接你的服务器:

复制代码
ssh -XY <your_user_id>_@_<server_address>

然后在你的服务器上打开:

复制代码
xcalc

应该会出现一个计算器啦。如果没有的话,请检查你的服务器是否安装了 x11-apps

5. 更改你的 ssh 配置文件 ~/.ssh/config

使用你喜欢的编辑器打开你的配置文件 ~/.ssh/config 文件,在 HOST 下面添加如下的选项:

复制代码
Host test
    Hostname test.com
    Port 22
    User test 
    ForwardX11 yes
    ForwardX11Trusted yes

额外添加的这两行等同于 ssh-XY 选项。

现在你就可以在 MacOS、Windows、Linux 默认启用 sshX11 转发功能了。至此,我们已经可以直接在使用 VSCode 的远程功能时在 Terminal 里面打开远程 GUI 程序了。

6. 测试 VSCode 远程终端直接打开 GUI 程序

自从 Windows 内置了 ssh 以后,VSCode 的 remote 插件都使用的是内置的 ssh 访问远程服务器,所以当我们配置好了内置的 sshX11 转发功能之后,我们就可以在 VSCode 的远程终端里面访问远程服务器上的 GUI 程序了。

打开一个 VSCode 程序,远程连接到你的服务器。打开一个 Terminal, 输入: xcalc。你应该看到一个如上图所示的计算器出现在你的眼前。

7. 关于 Linux 的使用注解

Linux 默认有 X11 服务器,所以不需要额外的软件。所以可以直接跳到 5。

8. 关于 MacOS 的使用注解

MacOS 默认是不带 X11 服务器的,所以需要另外安装: XQuartz 。下载安装并运行即可。

相关推荐
世转神风-2 小时前
Ubuntu 24.04-国内镜像源替换
linux·ubuntu
枉费红笺2 小时前
Linux / macOS 环境下解压 ZIP 文件的标准命令与常用变体
linux·运维·macos
云游牧者2 小时前
ubuntu 22.04系统修改网卡名称方法
linux·运维·ubuntu
默|笙2 小时前
【Linux】进程控制(1)进程创建、终止
linux·运维·服务器
G_H_S_3_2 小时前
【网络运维】容器、容器架构与docker部署
运维·网络·docker·架构
郝学胜-神的一滴2 小时前
Linux的pthread_self函数详解:多线程编程中的身份标识器
linux·运维·服务器·开发语言·c++·程序人生
love530love2 小时前
【笔记】华硕 ROG MAXIMUS Z890 HERO 主板 BIOS 更新完整操作实录
运维·人工智能·windows·笔记·单片机·嵌入式硬件·bios
小立爱学习2 小时前
ARM64 指令 --- CCMP/CSEL
linux·c语言
jimy12 小时前
程序崩溃free(): double free detected in tcache 2
linux·开发语言·数据结构·链表