GTK+/DirectFB PC模拟运行环境

2024-01-18 08:18

本文主要是介绍GTK+/DirectFB PC模拟运行环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GTK+/DirectFB PC模拟运行环境

转载时请注明出处和作者联系方式
作者联系方式:李先静

GTK+/DirectFB不但可以运行在frambebuffer上,而且可以运行在其它GUI之上,比如像SDL和X11等等,因此在PC上建立模拟运行环境是非常简单的。不过有一个小小麻烦一直困扰着我们,直到最近才解决这个问题,这里做个笔记供大家参考。

基于SDL/X11等其它GUI

这个很简单,只要修改一下DirectFB的配置/etc/directfbrc即可(也可以修改当前用户的配置文件)。如:
system=sdl
mode=240x320
wm=unique

这里的system=sdl指定以SDL作为显示后端,SDL通常是运行在X11之上的,所以要注意设置DISPLAY环境变量。mode=240x320指明分辨率为240像素宽,320像素高。wm=unique指定窗口管理器为unique。

基于framebuffer

如果前面的方式能够正常工作,那就没有必要使用基于framebuffer方式了。但不幸的是前面的方式在多进程(基于fusion)时,非常容易死锁,这主要是因为调用fusion_call_execute更新屏幕引起的。这个问题在最新版本里,似乎也没有解决,我看了一下,要解决它也确实很麻烦。

基于framebuffer是唯一不会死锁的方式,所以在多进程运行时使用基于framebuffer的方式是比较明智的。但遗憾的是,PC上的framebuffer的分辨率一般在都640x480及以上大小(可以参考kernel中的文档Documentation/fb/vesafb.txt)。看了网上一些文档,也做了一些尝试,但没有成功的把分辨率设置得更低。

后来修改了一下DirectFB,让它把窗口显示到指定区域,这样虽然framebuffer的分辨率是比较大的,但是屏幕上的效果是可以是任意分辨率的。主要修改如下:

1.修改layer_context.c:dfb_layer_context_get_configuration,返回配置文件中指定的分辨率,而不是实际的分辨率。因为gdk_screen_width/gdk_screen_height调用该函数获得屏幕大小,修改之后,GDK认为屏幕大小是配置文件中指定的值,而不是实际的framebuffer的大小。

2.修改窗口管理器的wm_resize_stack函数(也可以修改调用的地方),使用配置文件中指定的分辨率,而不是实际的分辨率。这样窗口管理器可以据此约束窗口的显示范围(与窗口管理器的实现有关)。

测试了一下,发现基于framebuffer的PC版本稳定多了,再也没有出现过那种死锁现象,分辨率也可以设置为任意大小。

不过要注意的是,基于framebuffer的DirectFB独占了显示设备,你不能运行其它X11程序,也不能打开终端,只能通过SSH远程去控制它。为了方便,把它放到虚拟机里去运行是不错的选择。

~~end~~
 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1880973


这篇关于GTK+/DirectFB PC模拟运行环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618473

相关文章

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.