DebugDump Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@debugdump.com

您尚未登录。

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

晕哥
Administrator
注册时间: 1970-01-01
累计积分: 5,526

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
累计积分: 10

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

离线

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

晕哥
Administrator
注册时间: 1970-01-01
累计积分: 5,526

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

Zodiac 说:

多谢指教!

在线

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

晕哥
Administrator
注册时间: 1970-01-01
累计积分: 5,526

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

20190115143537.png

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

在线

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

晕哥
Administrator
注册时间: 1970-01-01
累计积分: 5,526

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

20190115144201.png

qtcreator, 还能这么玩

在线

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

晕哥
Administrator
注册时间: 1970-01-01
累计积分: 5,526

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
注册时间: 1970-01-01
累计积分: 5,526

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
累计积分: 10

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
累计积分: 10

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
注册时间: 1970-01-01
累计积分: 5,526

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

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

在线

页脚