Javascript 在GNOME外壳扩展中包含二进制组件

Javascript 在GNOME外壳扩展中包含二进制组件,javascript,gnome-shell-extensions,gjs,Javascript,Gnome Shell Extensions,Gjs,为GNOME外壳开发扩展主要涉及通过GObject内省使用C API。这意味着用C实现的大多数事情也可以用JavaScript完成。能够用本机C代码弥补这些差距将非常有用 GNOME外壳扩展可以包含由C代码创建的二进制组件吗?如果是这样,它们是如何集成的?我有一个非常相同的问题。还没有找到一个好的方法。目前,我正在尝试两种非理想的方法: 硬编码路径,例如:~/.local/share/gnomeshell/extensions/myextension@myname.example.com/myb

为GNOME外壳开发扩展主要涉及通过GObject内省使用C API。这意味着用C实现的大多数事情也可以用JavaScript完成。能够用本机C代码弥补这些差距将非常有用


GNOME外壳扩展可以包含由C代码创建的二进制组件吗?如果是这样,它们是如何集成的?

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

  • 硬编码路径,例如:
    ~/.local/share/gnomeshell/extensions/myextension@myname.example.com/mybinary
  • 全局安装二进制文件,独立于扩展
  • 获得路径后,您可以使用
    Util.spawnCommandLine

    const Util = imports.misc.util;
    Util.spawnCommandLine('/path/to/your/bin');
    
    GLib.spawn\u 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);
      }
    });
    

    我缺少的一点是,是否有一种方法可以通过helper方法获得扩展路径。但是这些文档开发得非常落后,浏览源代码还没有找到解决方案。

    本文声称使用DBus是可行的: