mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?
只执行了下面几个步骤:
git clone https://github.com/littlevgl/pc_simulator.git
cd pc_simulator
git submodule update --init
make
./demo
按我以往的认知, 以为ssh 运行sdl之类的程序, 会直接奔溃.
离线
SSH X11 Forwarding了解一下。
https://itekblog.com/ssh-x11-forwarding-display-using-mobaxterm/
离线
离线
如果不勾上
运行 qtcreator, 直接炸了:
root@ubuntu:~# qtcreator
QXcbConnection: Could not connect to display
Aborted (core dumped)
root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~#
运行 littlevgl demo(没有炸, 命令行正常, 不显示窗口):
root@ubuntu:/opt/pc_simulator# ./demo
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
used: 9928 ( 16 %), frag: 1 %, biggest free: 55520
离线
一套py代码在不同OS版本上表现不同,多数是OS环境差异引起的。
从问题log来看,已经提示ubuntu 14的环境上,导入的matplotlib用了agg才出的问题。然而,该后端的确只支持写入文件,不支持屏幕绘制。
由此,估计问题是出在OS上,没有可用UI版本的agg。例如:Qt5Agg Qt4Agg Gtk3Agg GTK3Cairo TkAgg WxAgg。
或者是,部署matplotlib时默认为agg;需要导入后手动由代码指定一个可用UI的agg(前提:OS环境必须有相关lib)。
相关py调用,例如:matplotlib.use('GTK')
参考:
https://matplotlib.org/faq/usage_faq.html#what-is-a-backend
https://stackoverflow.com/questions/4930524/how-can-i-set-the-backend-in-matplotlib-in-python
离线
在matplotlib-3.0.2版的代码里发现如下内容:
该库会自行搜索OS上可用的agg后端,次序为,
for candidate in ["macosx", "qt5agg", "qt4agg", "gtk3agg", "gtk3cairo", "tkagg", "wxagg", "agg", "cairo"]:。
那么,只要ubuntu 14 安装了可用的UIagg的库,似乎就能解决问题。
源码位于:https://pypi.org/project/matplotlib/#files
# Line892 @matplotlib/_init_.py
class RcParams(MutableMapping, dict):
...
def __getitem__(self, key):
...
elif key == "backend":
val = dict.__getitem__(self, key)
if val is rcsetup._auto_backend_sentinel:
from matplotlib import pyplot as plt
plt.switch_backend(rcsetup._auto_backend_sentinel)
# Line177 @matplotlib/pyplot.py
def switch_backend(newbackend):
"""
Close all open figures and set the Matplotlib backend.
The argument is case-insensitive. Switching to an interactive backend is
possible only if no event loop for another interactive backend has started.
Switching to and from non-interactive backends is always possible.
Parameters
----------
newbackend : str
The name of the backend to use.
"""
close("all")
if newbackend is rcsetup._auto_backend_sentinel:
for candidate in ["macosx", "qt5agg", "qt4agg", "gtk3agg", "gtk3cairo",
"tkagg", "wxagg", "agg", "cairo"]:
try:
switch_backend(candidate)
except ImportError:
continue
else:
rcParamsOrig['backend'] = candidate
return
....
离线
离线
离线
fq5.whycan.cn,fq,嗯,我们懂的
离线
神奇!WIN下能登陆,显示?
离线
试了一下确实可以,这是什么原理?为什么可以把linux服务器的 firefox推送到 windows来显示?
离线
https://www.jianshu.com/p/24663f3491fa
https://stackoverflow.com/questions/19589844/set-up-x11-forwarding-over-ssh
使用SSH的X11 Forwarding远程执行GUI程序
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 Forwarding就提供了一个方法,在远程机器上执行X client程序(如Eclipse),但是在本地机器上显示(即运行X server)。
离线
xfce4 运行效果不错, 还可以在里面跑最新的QQ
离线
今天发现Xshell也有这个功能 : D
离线
原来现在都可以在远程终端下运行图形界面了啊,真好。
离线