10

我正在使用 Gjs(Gnome JavaScript 绑定)编写一个 gtk+ 应用程序,因为没有可用的文档,我正在阅读 gnome-shell JavaScript 的源代码。在我的应用程序中,我需要访问global.userdatadir.

我正在尝试将 Shell 对象添加到我的脚本中:

const Shell = imports.gi.Shell;

并运行它#gjs myscript.js 但是当我这样做时它会抛出一个错误说:

JS ERROR: !!!   Exception was: Error: Requiring Shell, version none: Typelib file for namespace 'Shell' (any version) not found
    JS ERROR: !!!     lineNumber = '0'
    JS ERROR: !!!     fileName = '"gjs_throw"'
    JS ERROR: !!!     stack = '"("Requiring Shell, version none: Typelib file for namespace 'Shell' (any version) not found")@gjs_throw:0
@manager.js:5
"'
    JS ERROR: !!!     message = '"Requiring Shell, version none: Typelib file for namespace 'Shell' (any version) not found"'
Error: Requiring Shell, version none: Typelib file for namespace 'Shell' (any version) not found

我无法理解它有什么问题,它与 Gnome-shell 源文件中的完全一样。其他对象都可以使用imports.gi.Gio, imports.gi.GLib, 工作正常。

在 Ubuntu 11.10 x64 上工作

4

3 回答 3

7

您不能通过 gjs 运行 gnome-shell 扩展,它们必须由 gnome-shell 本身加载。对于开发,这通常意味着将它们放入~/.local/share/gnome-shell/extensions/YOUR-EXTENSION-ID并重新启动 shell。

于 2012-05-05T06:39:20.553 回答
2
$ apt-file search -x "Shell.*typelib"
gnome-shell: /usr/lib/gnome-shell/Shell-0.1.typelib
gnome-shell: /usr/lib/gnome-shell/ShellJS-0.1.typelib
gnome-shell: /usr/lib/gnome-shell/ShellMenu-0.1.typelib

$ sudo apt-get install gnome-shell
于 2015-01-20T16:58:51.477 回答
1

org.gnome.Shell.Eval通过 dbus调用。

正如 gfxmonk 所指出的,JavaScript 代码应该由 shell 本身运行。如果您编写扩展程序,则可以通过 dbus 来实现,例如使用 systemd 的busctl. (我相信它也可以通过dbus-send,我只是更喜欢busctl's 语法。它有制表符完成!)

例如,这会记录所有窗口标题:

busctl --user call org.gnome.Shell /org/gnome/Shell org.gnome.Shell Eval s '
    for (const actor of global.get_window_actors()) {
        const window = actor.get_meta_window(),
              title = window.get_title();
        log(title);
    }
'

您可以使用 来查看日志消息journalctl /usr/bin/gnome-shell 'GLIB_DOMAIN=GNOME Shell'。(您可能还想添加-b仅查看来自当前引导的消息,或者--since '5 minutes ago',... – 有关更多选项,请参见journalctl (1)。)

或者,这个 GitHub gist描述了如何在(添加到和到的搜索路径)中获取Shell模块,但我还没有设法使用它访问对象。gjs/usr/lib/gnome-shellLD_LIBRARY_PATHGIRepository.Repositoryglobal

于 2017-12-23T10:02:18.453 回答