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

2024-01-09

开发 GNOME Shell 扩展主要涉及通过 GObject Introspection 使用 C API。这意味着用 C 实现的大多数事情也可以用 JavaScript 完成。但在某些情况下,C API 的功能(尚)无法通过内省绑定重现。 https://stackoverflow.com/questions/40919435/create-a-dynamic-rescheduling-gsource-in-javascript如果能够用本机 C 代码弥补这些差距,将会非常有用。

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


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

  1. 对路径进行硬编码,例如:~/.local/share/gnome-shell/extensions/[email protected] /cdn-cgi/l/email-protection/mybinary
  2. 全局安装二进制文件并独立于扩展。

一旦你有了路径,你可以使用Util.spawnCommandLine:

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

Or 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);
  }
});

我缺少的是是否有一种方法可以通过辅助方法以某种方式获取扩展路径。但文档非常不发达,浏览源代码还没有找到解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 GNOME Shell 扩展中包含二进制组件 的相关文章

随机推荐

  • 在 Xcode 中强制刷新代码签名

    在我们的环境中 我们跨多个项目和平台共享资源 为 iPhone 进行构建时 仅需要这些资源的子集 由于该子集仍然相当大 因此我们有一个清单文件列出了其中的内容 这限制了副本 我们有自己的 Python 脚本来执行复制 仅刷新已更改的文件 我
  • Discord.js - 如何编辑 message.embed() 语句?

    我正在执行 ping 命令 编码非常简单 但我完全不知道如何编辑我正在使用的嵌入 这是我的代码 我正在使用命令处理程序来解释exports run 语句 const Discord require discord js exports ru
  • 记住在整个网站上按下的选项卡

    我创建了自己的带有超链接和 div 的选项卡 我将它们放在侧边栏中 当单击超链接时 我在相关 div 上使用 jquery show 和 hide 它工作正常 但是 我希望在用户导航时在整个网站上记住最后单击的链接 选项卡 我怎样才能做到这
  • Jquery 单击事件 - 需要两次单击才能触发

    这可能非常简单 但我正在努力找出发生了什么 在 JS 小提琴上 http jsfiddle net 3hHAX http jsfiddle net 3hHAX 有两个链接输出到 打开视频模式 正如链接文本所示 这两个链接应该打开一个模型弹出
  • 在 R 中排列 3 维列联表以运行 Cochran-Mantel-Haenszel 分析?

    我正在尝试在 R 中运行 Mantel Haenszel 分析 以确定在考虑组内 诊断 比率时比例测试的比较是否仍然显着 此测试可在 stats 包中找到 library stats mantelhaen test x 读完一些书后 我发现
  • 如何从 Cython 调用 C-API 函数,例如 PyUnicode_READ_CHAR?

    我正在使用 Cython 来加速对字符串 unicode CPython 3 6 进行操作的函数 我如何调用 CPythonPy UCS4 val PyUnicode READ CHAR my string my index 来自我的 Cy
  • Android:MaterialButton 覆盖 Style 中的 textColor

    我想定义一个替代按钮样式 使用我的辅助颜色作为背景和 colorOnSecondary分别为文本 但我正在努力获取样式中定义的 textColor MaterialButton 使用 私有 选择器绘制作为 textColor 它使用 col
  • Win32 下的堆损坏;如何定位?

    我正在研究一个多线程正在损坏堆的 C 应用程序 定位这种损坏的常用工具似乎不适用 源代码的旧版本 18 个月前 表现出与最新版本相同的行为 因此这种情况已经存在很长时间了 只是没有引起注意 不利的一面是 源增量不能用于识别错误何时引入 有a
  • 如何实现SpriteKit定时器?

    我目前正在尝试为我的精灵套件游戏实现一个计时器 但我没有让它工作 定时器的初始值始终保持不变 我假设我需要以某种方式 某处更新标签 但我不知道如何以及在哪里 我不明白这一点 有任何想法吗 这是我的 GameScene 类中的代码 let l
  • 如何在 Python 中进行“基于性能”(基准)单元测试

    假设我的代码库已达到尽可能高的单元测试覆盖率 超过某一点 增加覆盖范围就不会产生良好的投资回报率 接下来我想测试一下性能 对代码进行基准测试 以确保新的提交不会不必要地减慢速度 我对 Safari 非常感兴趣零容忍政策 http webki
  • 在转换器(IValueConverter)中使用“await”不起作用?

    我的 Windows Phone 应用程序中有一个转换器 但您似乎无法在其中使用 等待 方法 public object Convert object value Type targetType object parameter strin
  • 使用“go get”下载二进制文件而不将它们添加到 go.mod

    我在我的项目和构建系统 例如 Travis CI 中使用 Go 模块 我正在下载一个命令行实用程序 用 Go 编写 go get协助我的构建过程 例如 go get github com mitchellh gox 然而 这go get导致
  • TabWidget 未填充 Horizo​​ntalScrollView

    我想显示选项卡宽度水平滚动条 我尝试像这样实现如何设置选项卡视图滚动 https stackoverflow com questions 2492840 how do you set tab view to scroll 但选项卡不会填充宽
  • 在 mod_rewrite 规则中转换为小写

    我希望像 server com foo 这样的 URL 不区分大小写 但 server com foo 实际上将 mod rewrite d 到 server com somedir foo 假设 somedir 中的所有文件都是小写的 所
  • 我在 oracle 12.1.0.2 中运行 json_object ,它说 error 。为什么?

    我已经运行了这个查询 我是 Oracle 新手 gt CREATE TABLE sample emp empno NUMBER 4 NOT NULL PRIMARY gt KEY ename VARCHAR2 10 hiredate DAT
  • Matplotlib 流图箭头指向错误的方向

    我正在 matplotlib 中生成地下水高程等值线和河图 等值线表明许多地区的海拔正在下降 但地下水流量 河图 指向上坡 我圈出了似乎指向错误方向的箭头 地图底部的箭头似乎指向正确的方向 有谁知道为什么会这样 这是生成此图的大部分代码 c
  • 在训练/验证/测试期间在 Tensorflow 中保存/恢复模型的“正确”结构是什么?

    我想在 Tensoflow 中编写一些代码 可以训练模型 在训练期间运行验证 最后报告通过验证数据选择的最佳模型的测试数据结果 我想知道以下结构是正确的方法吗 考虑变量范围 参数共享 保存 恢复 我的模型 py class MyModel
  • Symfony2 中的 jQuery datepicker 给出“此值无效”。

    我在 symfony2 表单中添加了一个 jQuery 日期选择器 树枝文件 date datepicker showOn button buttonImageOnly true changeMonth true changeYear tr
  • 如何在 MSVC 中启用 SSE4.1 和 SSE3(但不是 AVX)

    我正在尝试使用 MSVC 启用不同的 simd 支持 有一个页面讨论启用一些simd 例如SSE2 AVX AVX2https learn microsoft com en us cpp build reference arch x86 r
  • 在 GNOME Shell 扩展中包含二进制组件

    开发 GNOME Shell 扩展主要涉及通过 GObject Introspection 使用 C API 这意味着用 C 实现的大多数事情也可以用 JavaScript 完成 但在某些情况下 C API 的功能 尚 无法通过内省绑定重现