简单示例:在 Ubuntu 20.04 下,以下命令:
gdbus call -e -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval true
产生这个输出:
(true, 'true')
但在 22.04 下,相同的命令会产生以下输出:
(false,'')
我在 22.04 下尝试过的任何其他“Eval”语句都会产生相同的输出。
怎么了?20.04 和 22.04 系统都是新安装的原版安装。
更新:这似乎是 gcdev ( https://askubuntu.com/users/1216972/gcdev ) 之前试图报告的问题之一:
与其他任何地方一样,Gnome Shell 也实施了更严格的安全性。
(https://gitlab.gnome.org/GNOME/gnome-shell/-/commit/a628bbc4)
这就是为什么许多这样的命令不再起作用的原因。可以进入
global.context.unsafe_mode = true
窥镜 ( Alt+ F2,lg
Enter) 以使它们在当前会话中工作。有一个扩展,不安全模式菜单,允许在安全和不安全模式之间切换(感谢 Bryan Wright)。也应该可以使用选项启动 Gnome Shell--unsafe
。为了补充钒的答案,
这是一个将 gdb 附加到 gnome-shell 进程的脚本,并调用 javascript 引擎来切换 unsafe 变量。
这意味着只要在此过程中没有中断,您就不需要重新启动会话来添加标志,或处理插件或类似的事情。
这是重要的一行:
将 $1 替换为需要运行的代码,例如:
请注意,这有点危险且不受支持。如果 gdb 没有完成,会话将挂起。我建议在 screen 或 tmux 中运行它,如果你的 UI 挂起,可以通过某种方式访问它。