Как получить имя ОС при написании расширений gnome

Как получить имя ОС при написании расширений gnome..

Например:

GLib.get_real_name()

Я прочитал этот пост Как мое расширение GNOME Shell определить версию GNOME?


person UnKNOWn    schedule 17.07.2020    source источник
comment
Что именно вы подразумеваете под названием ОС? Имя дистрибутива, имя хоста или...?   -  person andy.holmes    schedule 18.07.2020


Ответы (1)


В случае получения имени операционной системы, найденного в /etc/os-release, это не имеет особого отношения к GJS или расширениям.

Вы можете просто открыть файл /etc/os-release напрямую, но, поскольку GKeyFile не является интроспективным в GJS, вам придется анализировать его вручную. В качестве альтернативы вы можете использовать интерфейс org.freedesktop.hostname1 DBus, чтобы получить красивое имя, хотя я не знаю, гарантированно ли это будет доступно во всех дистрибутивах.

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

let osName = 'Unknown';

try {
    // NOTE: this is a synchronous call that will block the main thread
    //       until it completes. Using `Gio.DBus.system.call()` would be
    //       better, but I don't know if that works for your use case.
    let reply = Gio.DBus.system.call_sync(
        'org.freedesktop.hostname1',
        '/org/freedesktop/hostname1',
        'org.freedesktop.DBus.Properties',
        'Get',
        new GLib.Variant('(ss)', [
            'org.freedesktop.hostname1',
            'OperatingSystemPrettyName'
        ]),
        null,
        Gio.DBusCallFlags.NONE,
        -1,
        null
    );

    let value = reply.deep_unpack()[0];
    osName = value.unpack();
} catch (e) {
    logError(e, 'Fetching OS name');
}

// Example Output: "Fedora 32 (Workstation Edition)" or "Unknown" on failure
log(osName);
person andy.holmes    schedule 19.07.2020