SSH and X11 forwarding

参考链接:

简介

X11 forwarding,Windows与Linux结合的最佳开发环境【编程环境优化篇】

Linux下执行一个GUI程序通常需要两个部分来协调完成,X server与X client。X server是专门负责显示用户界面的,它管理你的显示器,键盘以及鼠标。X client则负责程序的逻辑,如果需要使用用户界面,则通过给X server发送请求来完成。通常情况下,X server与X client都运行在同一台机器上,例如我们在Ubuntu上运行任何GUI程序都是这样的。但因为X系统当初设计成是通过socket在X server与X client之间通信的,所以它们也可以运行在不同的机器上。

通过X11 fowrading,在远程执行Linux下的程序(X client),可以在本机上显示交互界面(X server),通过这种方式Windows与Linux结合的最佳开发环境。

场景描述:windows用户的编程开发环境是wsl或者linux,需要linux的环境,以及在linux下运行软件。比如启动linux下的vscode,而不是通过vscode的remote插件连接到远程,这样的好处是:vscode不论是工作目录,还是ssh配置目录都在远程,避免windows不兼容的错误。

下载安装

下载安装VcXsrv,下载网址: https://sourceforge.net/projects/vcxsrv/,备份网址:https://nas.sunie.top/files/vcxsrv-64.1.20.14.0.installer.exe

安装VScode:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

sudo apt-get update
sudo apt-get install code # or code-insiders

启动

启动XLaunch,Display number取0,Disable access control勾选上,其余随意

image-20220217212546351

通过wsl/ssh连接到目的主机

ssh -Y root@172.28.168.233		# 对方的IP
wsl

其中/etc/ssh/sshd_config中要有X11Forwarding yes

启动vscode:

export DISPLAY='172.28.160.1:0.0' 
# 172.28.160.1 需要替换成client的IP,如果当前地址未知,export DISPLAY='0.0'
export DONT_PROMPT_WSL_INSTALL=1
code --user-data-dir --no-sandbox

# 其他服务:
xclock
gedit
thunar	# 轻量文件系统
google-chrome-stable
firefox
xterm

image-20220217221643083

成功在本地显示了远程vcode界面

forwarding接力

以上过程可以套娃,如:

(base) PS C:\Users\Sunie> wsl
(base) root@DESKTOP-A8MI18O:/mnt/c/Users/Sunie# export DISPLAY='172.28.160.1:0.0'
(base) root@DESKTOP-A8MI18O:/mnt/c/Users/Sunie# ssh root@sunie.tpddns.cn
root@sunye:~# gedit
debug1: client_input_channel_open: ctype x11 rchan 3 win 65536 max 16384
debug1: client_request_x11: request from 127.0.0.1 35726
debug1: channel 3: new [x11]
debug1: confirm x11
debug1: client_input_channel_open: ctype x11 rchan 4 win 65536 max 16384
debug1: client_request_x11: request from 127.0.0.1 35728
debug1: channel 4: new [x11]
debug1: confirm x11
debug1: channel 4: FORCE input drain
debug1: channel 4: free: x11, nchannels 5

在远程主机sunie.tpddns.cn启动的gedit程序,先是传递到wsl中,继而传递到当前主机上,并弹出窗口,可以看到文件系统都是sunie.tpddns.cn上的。