关于Snap应用自查已授予权限方法的技术咨询
关于Snap应用自查已授予权限方法的技术咨询
嘿,这个问题我刚好有经验!Snap其实提供了内置的工具让你的应用直接自查已授予的权限,不用靠捕获库的错误来间接判断,下面给你具体的方法:
用
snapctl is-connected直接检查单个权限
Snap自带的snapctl工具允许沙箱内的应用查询自身的接口连接状态(也就是权限是否已授予)。对于你需要的raw-usb权限,只需要在应用内执行命令:snapctl is-connected raw-usb。- 如果命令返回退出码0,说明权限已成功授予;
- 如果返回非0值,说明权限未连接。
你可以在代码里调用这个命令来做判断,比如用Python实现的话可以参考这段代码:
import subprocess def has_raw_usb_permission(): try: # 执行命令,check=True会在命令返回非0时抛出异常 subprocess.run( ["snapctl", "is-connected", "raw-usb"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) return True except subprocess.CalledProcessError: # 捕获异常,说明权限未授予 return False在应用启动阶段调用这个函数,如果返回
False,就可以弹出提示告知用户需要执行snap connect 你的应用名称:raw-usb来手动授予权限。批量查询所有已连接权限
如果你需要一次性查看当前应用所有已授予的权限,可以执行snapctl connections(在沙箱环境中默认指向当前应用),它会输出所有接口的连接状态详情。你可以解析这个输出提取所需信息,但一般来说,针对单个权限的检查会更高效直接。
另外,对于你之前通过捕获密码库错误来判断password-manager-service权限的方式,也可以换成这个snapctl检查方法,提前在应用启动时验证权限,避免用户操作后才遇到错误,体验会更友好。
备注:内容来源于stack exchange,提问作者Moritz
相关产品推荐
相关产品推荐

