WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-01-14 22:09:53

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

QQ20190114220711.png


mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?



只执行了下面几个步骤:

git clone https://github.com/littlevgl/pc_simulator.git
cd pc_simulator
git submodule update --init
make
./demo

按我以往的认知, 以为ssh 运行sdl之类的程序, 会直接奔溃.

在线

#2 2019-01-15 14:27:53

Zodiac
会员
注册时间: 2018-11-28
累计积分: 30

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

离线

#3 2019-01-15 14:31:21

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

Zodiac 说:

多谢指教!

在线

#4 2019-01-15 14:39:20

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

20190115143537.png

果然是, 默认就勾上了 X11 Forwarding

在线

#5 2019-01-15 14:44:29

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

20190115144201.png

qtcreator, 还能这么玩

在线

#6 2019-01-15 14:51:58

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

如果不勾上

运行 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

在线

#7 2019-02-11 17:32:09

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

QQ20190211173114.png
ubuntu 14 不行



QQ20190211173123.jpg
ubuntu 16, 18 都可以



这是什么问题引起?

在线

#8 2019-02-13 08:25:01

Zodiac
会员
注册时间: 2018-11-28
累计积分: 30

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

一套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

离线

#9 2019-02-13 08:48:27

Zodiac
会员
注册时间: 2018-11-28
累计积分: 30

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

在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
    ....

离线

#10 2019-02-13 08:56:23

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

@Zodiac 后来那个问题解决了, 可能python3.5下的安装包不全引起,
python3(3.4.3) 安装 Tk 包 apt-get install python3-tk ,
再运行,然后x终端就有窗口了。

在线

#11 2019-04-02 15:59:30

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

2019-04-02_155334.png





这个 mobaxterm 软件功能强大, 几乎无可挑剔, 但是为什么不能做到自动检测串口呢?
每次重新插入CP2104/CH34x 都要重启软件, 不可忍受, 因为我一般还可能开着 ssh 连着服务器。

在线

#12 2019-04-02 17:23:20

Quotation
会员
注册时间: 2018-10-04
累计积分: 111

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

fq5.whycan.cn,fq,嗯,我们懂的 big_smile

离线

#13 2019-04-02 17:30:24

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

Quotation 说:

fq5.whycan.cn,fq,嗯,我们懂的 big_smile

千算万算,还是没想到暴露了。

在线

#14 2019-04-02 17:32:50

john78
会员
注册时间: 2018-07-19
累计积分: 132

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

神奇!WIN下能登陆,显示?

离线

#15 2019-04-02 17:41:12

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 7,847

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

john78 说:

神奇!WIN下能登陆,显示?

是的,这就是传说中的  X 终端

在线

#16 2019-09-26 16:44:41

smartcar
会员
注册时间: 2018-02-19
累计积分: 390

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

试了一下确实可以,这是什么原理?为什么可以把linux服务器的 firefox推送到 windows来显示?

离线

#17 2019-09-29 23:02:42

歌以咏志
会员
注册时间: 2019-09-21
累计积分: 25

Re: mobaxterm ssh登录 vps, 运行littlevgl的模拟器, 终端居然能显示模拟器窗口, 请教是什么原理?

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)。

离线

页脚