Включение бинарных компонентов в расширение оболочки GNOME
Разработка расширений для оболочки GNOME в основном включает использование API-интерфейсов C через GObject Introspection. Это означает, что большинство вещей, достижимых с C, может быть сделано и в JavaScript. Но в некоторых случаях функции API C не могут (пока) быть воспроизведены с помощью привязок самоанализа. Было бы полезно иметь возможность преодолеть эти пробелы с помощью собственного C-кода.
Может ли расширение GNOME Shell включать двоичные компоненты, созданные из кода C? Если да, то как они интегрированы?
1 ответ
У меня тот же вопрос. Еще не нашли хороший способ сделать это. В настоящее время я пытаюсь сделать 2 неидеальных подхода:
- Жесткий код пути, например:
~/.local/share/gnome-shell/extensions/myextension@myname.example.com/mybinary
- Установите двоичный файл глобально и независимо от расширения.
Если у вас есть путь, который вы можете, например, использовать 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);
}
});
Я пропускаю часть, если есть способ как-нибудь получить путь расширения с помощью вспомогательного метода. Но документы ужасно недоразвиты, и просмотр исходного кода еще не нашел мне решения.