用Xserver顯示遠端ubuntu server的matplotlib畫面 - jenhaoyang/ml_blog GitHub Wiki
寫深度學習程式的時候經常會使用運算能力比較強的server,如果想要顯示遠端python程式的圖片,我們可以利用matplotlib搭配xerver來顯示圖片。 步驟如下:
1. 安裝Xserver並啟用
- 確認執行X Window system而不是Wayland
# echo $XDG_SESSION_TYPE x11
回傳值應該要是x11,如果是wayland進行以下設定
nano /etc/gdm3/custom.conf
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false
2. 設定ssh並允許x11 forwarding
- 啟用ssh
- 開通X11 forwarding
nano /etc/ ssh/ssh_config
將ForwardX11反註解並且設為yes
.
.
Host *
# ForwardAgent no
ForwardX11 yes
.
.
- 重啟ssh服務
- 測試顯示ubuntu應用程式
$ ssh -X user@hostname
$ echo $DISPLAY
應該要顯示類似localhost:10.0的訊息 試試看開啟gedit
$ gedit
- Trusted X11 Forwarding 如果/etc/ssh/ssh_config改動的是```ForwardX11Trusted yes````,顯示的速度會變順暢,但是這樣比較不安全,因為傳輸沒有加密 可以用下面指令來連線
$ ssh -Y user@hostname
- 壓縮x11 forwarding資訊 利用壓縮也可以提升速度
$ ssh -X -C user@hostname
- 在windows使用x11 forwdarding
- 要先安裝xserver : VcXsrv Windows X Server
- 利用putty設定開啟x11 forwarding
- 用putty連線到server就可以了
3. 將matplotlib backend設定為使用支援x11的
- 設定backend
import cv2
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')
video = cv2.VideoCapture("video_ource",cv2.CAP_IMAGES)
plt.ion()
fig = plt.figure()
ax1 = fig.add_subplot(111, aspect='equal')
while True:
success, frame = video.read()
print("try")
if success:
print("good")
ax1.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
fig.canvas.flush_events()
plt.draw()
參考:
https://www.answertopia.com/ubuntu/displaying-ubuntu-applications-remotely-x11-forwarding/
https://www.answertopia.com/ubuntu/configuring-ssh-key-based-authentication-on-ubuntu/
https://pycairo.readthedocs.io/en/latest/
https://pygobject.readthedocs.io/en/latest/getting_started.html#ubuntu-getting-started
https://stackoverflow.com/a/3453527
https://matplotlib.org/2.0.2/faq/usage_faq.html