weston.ini配置
# configuration file for Weston
[core]
shell=ivi-shell.so
modules=ivi-controller.so
idle-time=0
backend=drm-backend.so
repaint-window=10
require-outputs=none
require-input=false
gbm-format=abgr8888
[ivi-shell]
ivi-input-module=ivi-input-controller.so
ivi-id-agent-module=ivi-id-agent.so
bkgnd-surface-id=1
bkgnd-color=0x00000000
ivi-client-name=/usr/bin/simple-weston-client
[desktop-app-default]
default-surface-id=2000000
default-surface-id-max=2001000
[output]
name=DSI-1
mode=current
[output]
name=DP-1
mode=current
1 配置环境
export XDG_RUNTIME_DIR=/run/user/root
export WAYLAND_DISPLAY=wayland-0
配置命令
layer-add-surfaces -l 1000 -s 1 &
weston-simple-egl &
LayerManagerControl create layer 1000 1920 720
LayerManagerControl set screen 1 render order 1000
LayerManagerControl get surfaces
LayerManagerControl add surface 2000000 to layer 1000
LayerManagerControl set layer 1000 visibility 1
LayerManagerControl set surface 2000000 visibility 1
LayerManagerControl set surface 2000000 source region 0 0 1920 720
LayerManagerControl set surface 2000000 destination region 0 0 1920 720
- Layer(图层):屏幕上的一个透明画布,有层级、大小、可见性,是界面的容器
- Surface(界面):应用(如 weston-simple-egl)渲染出的具体画面,需要绑定到图层才能显示
- LayerManager:系统底层服务,统一管理所有图层和界面的显示规则
命令解释
1. 启动应用与后台进程
layer-add-surfaces -l 1000 -s 1 &
-
作用 :后台启动图层界面绑定工具 ,创建 ID 为
1000的图层关联,生成 ID 为1的界面(surface) -
参数:
-
-l 1000:指定关联的图层 ID 为 1000 -
-s 1:指定界面 ID 为 1weston-simple-egl &
-
-
作用 :后台启动Weston 的 EGL 渲染测试程序(一个简单的彩色 / 动态界面应用)
-
这个程序运行后,会自动生成一个Wayland 界面(Surface) ,ID 为
2000000(后续命令用到的固定 ID)
2. 创建图层
LayerManagerControl create layer 1000 1920 720
- 核心命令 :通过图层管理工具创建一个新图层
- 参数:
create layer:创建图层指令1000:图层唯一 ID(自定义数字,后续操作都用这个 ID)1920:图层宽度(像素)720:图层高度(像素)
- 效果:在显示系统中创建了一个
1920x720、ID 为 1000 的空白画布
3. 设置图层渲染层级
LayerManagerControl set screen 1 render order 1000
- 作用 :指定屏幕 1的图层渲染优先级(显示层级)
- 参数:
screen 1:操作目标为第 1 块物理屏幕render order 1000:渲染序号为 1000(数字越大,图层越靠上显示,不会被其他图层遮挡)
4. 查询系统所有界面
LayerManagerControl get surfaces
- 作用 :查询并打印当前系统中所有正在运行的应用界面(Surface)列表
- 目的:确认
weston-simple-egl生成的界面2000000已成功创建
5. 将界面绑定到图层
LayerManagerControl add surface 2000000 to layer 1000
- 核心命令 :把应用界面 挂载到图层上(只有绑定后,界面才能通过图层显示)
- 参数:
surface 2000000:目标界面 ID(weston-simple-egl 的界面)to layer 1000:绑定到 ID 为 1000 的图层
6. 显示图层与界面
LayerManagerControl set layer 1000 visibility 1
-
作用:设置图层可见性
-
参数:
visibility 1= 显示图层(0= 隐藏图层)LayerManagerControl set surface 2000000 visibility 1
-
作用:设置界面可见性
-
参数:
visibility 1= 显示界面(0= 隐藏界面) -
此时:图层 + 界面都已显示,屏幕上能看到 weston-simple-egl 的画面
7. 裁剪界面(源区域)
LayerManagerControl set surface 2000000 source region 0 0 1920 720
- 作用 :截取应用界面的一部分显示(源区域:界面本身的区域)
- 参数含义:
X起点 Y起点 宽度 高度0 0:从界面左上角开始截取1920 720:截取宽度 1920、高度 720 的完整界面
- 效果:不裁剪,使用应用界面的全部内容
8. 显示位置(目标区域)
LayerManagerControl set surface 2000000 destination region 0 0 1920 720
- 作用 :设置界面在屏幕上的显示位置和大小(目标区域:屏幕上的绘制区域)
- 参数含义:
X坐标 Y坐标 宽度 高度0 0:显示在屏幕左上角1920 720:显示尺寸和图层 / 界面一致
- 效果:界面全屏铺满图层,无偏移、无缩放
总结
这组命令完成了从无到有显示一个应用界面的完整流程:
- 启动测试应用 → 生成界面
- 创建图层 → 设置显示层级
- 绑定界面到图层
- 开启可见性 → 让画面显示
- 配置裁剪 / 位置 → 固定界面显示规则
2 添加一个surfaces
layer-add-surfaces -l 1000 -s 1 &
3 启动测试程序egl
weston-simple-egl &
4 配置参数
//这里的1000对应上面添加layer 1000(layer-add-surfaces -l 1000 -s 1 &)
LayerManagerControl create layer 1000 1920 720 // 这里1920 720修改成对应的分辨率
LayerManagerControl set screen 1 render order 1000
//获取surfaces 下面2000000 是这里获取到的值
LayerManagerControl get surfaces
LayerManagerControl add surface 2000000 to layer 1000
LayerManagerControl set layer 1000 visibility 1
LayerManagerControl set surface 2000000 visibility 1
LayerManagerControl set surface 2000000 source region 0 0 1920 720
LayerManagerControl set surface 2000000 destination region 0 0 1920 720
其他:
LayerManagerControl get surfaces
LayerManagerControl get layers
LayerManagerControl get scene