关于在内网穿透时如何使用X11的问题解决

1 问题描述

首先说一下问题。

(我原先以为docker容器是无法使用x11程序的,但同事说是可以的,而且通过内网正常运行)

2 正常的情况

然后在linux上只有两个步骤:

# 设置 DISPLAY 环境变量
export DISPLAY=10.xx.xx.xx:0.0
# 运行 x11 程序
xclock

运行效果

3 问题思考

其次,设置 DISPLAY 时是直接使用IP,意味着X程序是直接连接的该IP,由于使用内网穿透时,服务器是无法直接连接到本机电脑的,所以使用netstat查看时状态一直都是SYN_SENT,无法建立连接。

4 问题解决

# 设置 DISPLAY 环境变量   1.0 对应端口 6001
export DISPLAY=localhost:1.0
# 运行 x11 程序
xclock

5 其他小记

  1. x11端口变更:默认 DISPLAY=IP:0.0 使用端口 6000,DISPLAY=IP:1.0 使用端口6001,以此类推
  2. docker 可以直接运行x11程序,之前一直误解以为在容器中无法运行,对X理解太浅。
  3. MobaXterm自带xserver,在运行时自动启动xserver。xshell、vscode不带xserver,需要通过其他工具先启动xserver后才能按以上方式运行x11程序。
经验分享 程序员 微信小程序 职场和发展