gnome-shell - 无需重新启动即可安装 GNOME Shell 扩展?

标签 gnome-shell gnome-shell-extensions gjs

我写了一个小的 GNOME Shell 扩展,我想分发给一些同事。

为此,我创建了一个 RPM。安装后需要重新启动 GNOME-Shell 才能使扩展可见,因此可以启用它。通过使用 <ALT-F2>其次是 r使用 X11 时或使用 Wayland 时注销和登录。

只有在重新启动后,扩展才在 GNOME-Tweaks 中可见,或者可以使用 gnome-extensions enable ... 激活。 .

有人告诉我,可能有一种方法可以让 GNOME-Shell 知道该扩展程序而无需重新启动。我四处寻找,但没有找到任何东西。

那么:GNOME-Shell 扩展是否可以以无需重新启动即可激活的方式进行安装?

Fedora 31 和 32 上的环境是 GNOME-Shell 3.34 和 3.36。

最佳答案

这将启用扩展,就好像它来自自我一样。替换 global.userdatadirglobal.datadirPER_USERSYSTEM如果扩展名在 /usr/share/gnome-shell/extensions/ .

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;

const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main;

// Here, the directory must be in ~/.local/share/gnome-shell/extensions.
function installFromLocal(uuid) {
    let dir = Gio.File.new_for_path(GLib.build_filenamev([global.userdatadir, 'extensions', uuid]));
    let manager = Main.extensionManager;
    
    try {
        let extension = manager.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER);
        manager.loadExtension(extension);
        if (!manager.enableExtension(uuid))
            throw new Error('Cannot add %s to enabled extensions gsettings key'.format(uuid));
    } catch (e) {
        let extension = Main.extensionManager.lookup(uuid);
        if (extension)
            Main.extensionManager.unloadExtension(extension);
        throw new Error('Error while installing %s: %s (%s)'.format(uuid, 'LoadExtensionError', e));
    }
}

关于gnome-shell - 无需重新启动即可安装 GNOME Shell 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62265594/

相关文章:

ubuntu - 如何在 Gnome shell 中列出所有事件 session

python - 在 tkinter 中分组窗口

gnome - 如何获取 gnome-shell-extension 中的进程列表?

javascript - 如何使用 GJS 判断窗口是否最小化?

c++ - 在 Qt 中使用 unity 菜单栏

javascript - GNOME 中鼠标进入屏幕特定像素范围时的激活方法

event-handling - 在 gnome shell 扩展中处理窗口焦点事件

javascript - 为什么有时重写类函数不起作用?

javascript - 异步汤调用

javascript - 未知选项-D Gjs