SSH and X11 forwarding
参考链接:
简介
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勾选上,其余随意
通过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
成功在本地显示了远程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
上的。
评论区