前言
1 开始后weston client端服务启动
2 自定义按键截屏
3 实现分析
总结
前言
weston框架下,可以通过标准键盘的:WIN+s 实现截屏,但是如果我们要用自己的按键实现截屏又该如何操作呢?
1 开始后weston client端服务启动
weston会在启动时或按需起一些子进程,它们本质上是Weston的client,它们会通过专用的协议做一些系统应用的工作。如系统应用weston-desktop-shell负责一些系统全局的界面,比如panel, background, cursor, app launcher, lock screen等。它不作为weston服务本身的一部分,而是作为一个client。weston-keyboard是软键盘面板。weston-screenshooter和weston-screensaver分别用于截屏和屏保,它们都是按需才由Weston启动的。前者在截屏快捷键按下时启动,后者在需要锁屏时启动。
上图总结而言为:
1、weston-desktop-shell负责一些系统全局的界面,比如panel, background, cursor,
app launcher, lock screen等。
2、weston-keyboard是软键盘面板。
3、weston-screenshooter和weston-screensaver分别用于截屏和屏保,它们都是按
需才由Weston启动的。
2 自定义按键截屏
在笔者调试的嵌入式设备中, weston-screenshooter可执行程序的位置在:/usr/libexec。
weston-screenshooter的初始化位置应该是从应用层启动的,所以在weston/desktop-shell/shell.c中
wet_shell_init
screenshooter_create
screenshooter_create中的内容为:
weston_compositor_add_key_binding(ec, KEY_S, MODIFIER_SUPER,
screenshooter_binding, shooter);//截屏由win+S键触发
weston_compositor_add_key_binding(ec, KEY_R, MODIFIER_SUPER,
recorder_binding, shooter);//录屏由win+R键触发
所以在此处添加自己的截屏处理按键绑定shooter即可,如:
weston_compositor_add_key_binding(ec, KEY_W, 0,
screenshooter_binding, shooter);//截屏由W键触发
3 实现分析
weston_compositor_add_key_binding的内容为:
static void
screenshooter_binding(struct weston_keyboard *keyboard, uint32_t time,
uint32_t key, void *data)
{
struct screenshooter *shooter = data;
char *screenshooter_exe;
int ret;
ret = asprintf(&screenshooter_exe, "%s/%s",
weston_config_get_libexec_dir(),
"/weston-screenshooter");
if (ret < 0) {
weston_log("Could not construct screenshooter path.\n");
return;
}
if (!shooter->client)
shooter->client = weston_client_launch(shooter->ec,
&shooter->process,
screenshooter_exe, screenshooter_sigchld);
free(screenshooter_exe);
}
上述代码中screenshooter_exe为weston-screenshooter可执行文件的具体位置,weston_client_launch实现了screenshooter_exe的启动。具体实现为weston_client_launch中设置了一个fork进程,执行
child_client_exec(sv[1], path);
其中path即为weston-screenshooter可执行文件的位置。
总结
上述分析的可以通过下图进行表述
————————————————
版权声明:本文为CSDN博主「UNISOC-少林寺武功」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yikunbai5708/article/details/103845086