You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取调用D-Bus接口org.gnome.Shell.Introspect.GetWindows()的权限?

如何获取调用D-Bus接口org.gnome.Shell.Introspect.GetWindows()的权限?

你遇到的这个AccessDenied错误,本质是GNOME Shell出于安全和隐私考虑,对org.gnome.Shell.Introspect这个调试接口做了严格的权限限制——默认情况下,只有GNOME Shell自身或者拥有特殊权限的进程才能调用它的方法,普通用户直接用dbus-send调用自然会被拒绝。下面给你两种可行的解决方案:

方案一:临时通过GNOME调试工具获取窗口信息(无需改配置)

这是最快捷的临时方式,不用修改任何系统配置:

  1. 按Alt+F2打开GNOME的运行对话框
  2. 输入lg并回车,打开GNOME的内置调试工具Looking Glass
  3. 切换到「Eval」标签页,输入以下代码并回车:
    global.get_window_actors().map(a => a.meta_window)
    
    这样就能直接获取到所有窗口的详细信息,效果和调用GetWindows()完全一致。

方案二:修改D-Bus权限配置(永久允许调用)

如果你确实需要通过命令行调用这个接口,可以通过添加自定义D-Bus权限规则来实现:

  1. 先创建用户级的D-Bus配置目录(如果不存在的话):
    mkdir -p ~/.local/share/dbus-1/session.d/
    
  2. 在该目录下新建一个名为org.gnome.Shell.Introspect.conf的文件,内容如下(记得把你的用户名替换成你实际的系统用户名):
    <!DOCTYPE busconfig PUBLIC
     "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
     "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
    <busconfig>
      <policy user="你的用户名">
        <allow send_destination="org.gnome.Shell.Introspect"/>
        <allow send_interface="org.gnome.Shell.Introspect"/>
      </policy>
    </busconfig>
    
  3. 注销当前用户再重新登录,之后再运行你的dbus-send命令,就能成功调用GetWindows()方法了。

注意事项

修改D-Bus权限会让你的用户直接获取到系统所有窗口的敏感信息,存在一定的安全风险,建议只在调试或测试场景下使用,用完后可以删除刚才创建的配置文件,恢复默认的安全限制。

备注:内容来源于stack exchange,提问作者eminfedar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:23:02