Weston 桌面系统截屏:解决 weston-screenshooter unauthorized

本文要点

  • 定位 weston-screenshooter unauthorized 的根因。
  • 分别给出 init.d 与 systemd 环境下启用 --debug 的方式。
  • 说明重启服务后如何执行默认命名或指定文件名截图。

解决 weston-screenshooter 的权限问题

在基于Wayland协议的Weston桌面环境中,weston-screenshooter是一个常用的命令行工具,用于捕获屏幕截图。然而,用户在使用此工具时,经常会遇到“unauthorized”或“permission denied”的错误。

错误现象与原因分析

当直接运行weston-screenshooter命令时,如果Weston合成器(Compositor)没有启用特定的调试模式,就会出现以下错误信息:

Output capture error: unauthorized
screenshooter failed: permission denied. Debug protocol must be enabled

根本原因在于:weston-screenshooter工具依赖于Weston的调试模式来获取屏幕内容。出于安全和权限考虑,Weston默认情况下不会启用这个模式。因此直接使用截图客户端weston-screenshooter会被拒绝访问,从而报告“未授权”或“权限不足”的错误。

解决方案:启用Weston的调试模式

解决此问题的核心在于修改Weston的启动配置,确保在启动时带上--debug参数,启用所需的调试模式。具体的修改方法取决于系统如何启动Weston。

1. 针对使用init.d脚本启动的系统

在许多嵌入式Linux系统(如Buildroot或特定的开发板固件)中,Weston通过init.d脚本来启动。

操作步骤:

  1. 找到并编辑Weston的启动脚本,例如/etc/init.d/S49weston/etc/init.d/S50launcher

  2. 在脚本中找到启动Weston的命令,通常是 /usr/bin/weston

  3. 在命令后添加--debug参数。

修改示例(以/etc/init.d/S49weston为例)

原始命令

修改后的命令

/usr/bin/weston &

/usr/bin/weston --debug &

2. 针对使用systemd服务启动的系统

在现代Linux发行版或使用Yocto等构建系统的环境中,Weston通常作为systemd服务运行。

操作步骤:

  1. 找到并编辑Weston的systemd服务文件,通常位于/lib/systemd/system/weston.service

  2. [Service]部分,找到ExecStart行。

  3. ExecStart命令中添加--debug参数。

修改示例(以/lib/systemd/system/weston.service为例)

# 修改前
ExecStart=/usr/bin/weston $OPTARGS

# 修改后
ExecStart=/usr/bin/weston --debug $OPTARGS

3. 重启系统或Weston服务

完成上述修改后,您需要重启Weston服务或直接重启整个系统,以使新的配置生效。

# 如果是systemd系统
systemctl restart weston

# 如果是init.d系统,通常需要重启设备reboot

weston-screenshooter的使用方法

在成功启用调试模式后,weston-screenshooter即可正常使用。

命令

描述

示例输出文件名

weston-screenshooter

截取当前屏幕,并使用默认命名规则保存为PNG文件。

wayland-screenshot-YYYY-MM-DD_HH-MM-SS.png

weston-screenshooter <filename>

截取当前屏幕,并保存为指定的文件名。

01.png

注意: 截图文件通常会保存在当前用户的工作目录下。

总结

weston-screenshooter的“未授权”错误并非真正的用户权限问题,而是Weston合成器出于安全考虑未默认启用屏幕捕获所需的调试模式。通过在Weston启动命令中添加--debug参数,即可轻松解决此问题,从而在Wayland桌面上实现便捷的命令行截图功能。


参考文献

[1] 飞凌的OK3588-C-Linux5.10.209+Qt5.15.10使用weston-screenshooter截屏的方法
[2] weston桌面系统截屏方法