在GNOME Shell扩展中包含二进制组件

时间:2016-12-01 20:05:31

标签: javascript gnome-shell-extensions gjs

开发GNOME Shell的扩展主要涉及通过GObject Introspection使用C API。这意味着使用C可以实现的大多数事情也可以在JavaScript中完成。 But there are some cases, where features of the C APIs cannot (yet) be reproduced through the introspection bindings.能够使用本机C代码弥补这些差距是很有用的。

GNOME Shell扩展是否可以包含从C代码创建的二进制组件?如果是这样,它们是如何整合的?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。还没有找到一个好方法。目前我正在尝试两种非理想的方法:

  1. 硬编码路径,例如:~/.local/share/gnome-shell/extensions/myextension@myname.example.com/mybinary
  2. 全局安装二进制文件并独立于扩展名。
  3. 一旦你有了路径,你就可以使用Util.spawnCommandLine

    const Util = imports.misc.util;
    Util.spawnCommandLine('/path/to/your/bin');
    

    GLib.spawn_async如果您需要回电:

    const GLib = imports.gi.GLib;
    let [success, pid] = GLib.spawn_async(null,
      ['/path/to/your/bin', '--param1','--param2'],
      null,
      GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
      null);
    
    if (!success) {
      global.log('ERROR NO SUCCESS');
      return;
    }
    
    GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function (pid, status) {
      GLib.spawn_close_pid(pid);
    
      if (status !== 0 && status !== '0') {
        global.log('ERROR');
      }
      else {
        global.log('SUCCESS', status);
      }
    });
    

    我遗失的那篇文章是否有办法通过辅助方法以某种方式获得扩展路径。但是文档非常不发达,浏览源代码还没有找到解决方案。