最近用Vscode ssh远程连接鲁班猫(树莓派)时,发现程序运行后的图片无法直接显示,网上查阅资料发现可以采用X11转发的办法解决,特此记录
所谓X11转发是由SSH server与SSH client提供的一项功能。使用X11转发功能后,SSH server与SSH client可以用SSH的加密信道 代为转发 X server和X client之间的通信。
快速理解X server, DISPLAY 与 X11 ForwardingCSDN博客跳转
具体操作
1、SSH连接后,下载两个拓展Remote X11和Remote X11(SSH)
2、由于Remote X11默认采用免密登录的模式,在linux服务器端配置成免密登录,shell命令行输入
sudo apt-get install ssh
ssh-keygen -t rsa -C username
生成密钥
3、服务器上安装公钥
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
4、打开SSH配置文件sudo vim /etc/ssh/sshd_config,取消以下配置注释
PubkeyAuthentication yes
重启SSH服务
sudo service sshd restart
5、cd进入对应的.ssh文件夹下,该文件夹一般在home下,找到其中的id_rsa文件下载放到本地路径 C:Users用户名.ssh (如果不放,Remote X11插件会有报错提示找不到该文件,也就没办法使用密钥登录了。)
6、电脑搭建X11 Server
- 方法一:安装Xming,官网链接,若官网无法下载网盘链接,安装一路next即可,每次重启电脑需要手动点击运行。
- 方法二:若电脑安装了MobaXterm(MobaXterm中文版下载地址),可直接使用MobaXterm作为X11 Server。在设置界面进行如下配置
- 方法三:使用xshell作为X11 Server。这种方法我没有使用过,(xshell安装和连接远程服务器 ,官网免费下载正版xshell)仅供参考:下载安装好xshell并顺利连接上服务器后需要设置一下属性。
我这里使用的是方法二,需要将MobaXterm与vscode的DISPLAY参数设置成一样的,先查看MobaXterm的DISPLAY环境变量echo $DISPLAY,结果如下
然后再去vscode终端输入如下命令export DISPLAY=:10.0
测试
x11app测试(最方便)
安装x11app
sudo apt update
sudo apt update sudo apt install x11-apps
测试,如果成功,将会显示一个简单的小计算器
xcalc
opencv显示测试
#!/usr/bin/python3
import cv2
import numpy as np
import requests
# 图像URL
url = 'https://picture23.oss-cn-nanjing.aliyuncs.com/img/OIP.jpg'
# 从网络获取图像
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
# 将图像数据转换为numpy数组
image_array = np.asarray(bytearray(response.content), dtype=np.uint8)
# 解码图像
image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
# 检查图像是否成功解码
if image is None:
print("Error: Failed to decode the image.")
else:
# 显示图像
cv2.imshow('Image from URL', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("Error: Failed to download image. Status code:", response.status_code)
plt绘图测试(需要安装QT库)
通过apt工具安装QT5(最稳妥)
sudo apt-get -y install python3-pyqt5
#!/usr/bin/python3
import matplotlib
matplotlib.use('Qt5Agg')#必须要将GUI设置为Qt5才能显示
import matplotlib.pyplot as plt
plt.plot([1,2,3],[2,3,4])
plt.show()
注意
如果本地电脑控制多台多个树莓派或服务器,此时,本地会有多个id_rsa文件,则需要在config配置文件中,通过IdentityFile参数,来指定私钥的路径,按如下步骤:
然后重启vscode即可。








Comments NOTHING