按键screenshot

目录

 

前言

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可执行文件的位置。

总结

上述分析的可以通过下图进行表述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值