Как я могу сделать поддельную “активную сессию” для gconf?

Создайте общий базовый класс как:

public abstract class ArticleItemBase
{ }

и пусть ваши классы наследуют от него как:

public class ArticleItem : ArticleItemBase

и

public class ArticleItemB : ArticleItemBase

. Сделайте так, чтобы ваш PrintCatalog принимал Словарь с типом общего значения и ограничивал его только объектами вашего базового класса:

public static void PrintCatalog<T>(Dictionary<string, T> catalog) where T : ArticleItemBase
{
    foreach (var item in catalog)
    {
        Console.WriteLine(item.Value.ToString());
    }
}
9
задан Vadim Kotov 23 October 2017 в 14:48
поделиться

3 ответа

Я могу воспроизвести это путем установки GConf 2.24 на моей машине. GConf 2.22 хорошо работает, но 2,24 повреждения это.

GConf не удается запуститься, потому что D-шина не работает. Вручную мечущая икру D-шина и демон GConf делают эту работу снова.

Я пытался породить шину сессии D-шины путем выполнения следующего:

import dbus
dummy_bus = dbus.SessionBus()

... но получил это:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.

Странный. Похож на него, не любит подходить, если X не работает. Для работы вокруг этого запустите dbus-запуск вручную (IIRC используют os.system () вызов):

$ dbus-launch 
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-eAmT3q94u0,guid=c250f62d3c4739dcc9a12d48490fc268
DBUS_SESSION_BUS_PID=15836

Необходимо будет проанализировать вывод так или иначе и ввести их в переменные среды (Вы, вероятно, захотите использовать os.putenv). Для моего тестирования я просто использовал оболочку и установил среду Вар вручную с export DBUS_SESSION_BUS_ADDRESS=blahblah..., и т.д.

Затем, необходимо запуститься gconftool-2 --spawn с теми переменными среды Вы получили из dbus-launch. Это запустит демона GConf. Если среда D-шины, Вар не установлен, демон, не запустится.

Затем выполните свой код GConf. Если Вы устанавливаете переменные среды шины сессии D-шины для своего собственного сценария, Вы теперь сможете общаться с демоном GConf.

Я знаю, что это сложно.

gconftool-2 обеспечивает a --direct опция, которая позволяет Вам установить переменные GConf, не будучи должен связаться с сервером, но я не смог найти эквивалентную опцию для привязки Python (за исключением вывода XML вручную).

Править: Для дальнейшего использования, если кто-либо хочет работать dbus-launch из нормального bash сценарий (в противоположность сценарию Python, как этот поток обсуждает), довольно легко получить адрес шины сессии для использования в рамках сценария:

#!/bin/bash

eval `dbus-launch --sh-syntax`

export DBUS_SESSION_BUS_ADDRESS
export DBUS_SESSION_BUS_PID

do_other_stuff_here
8
ответ дан 4 December 2019 в 21:13
поделиться

Ну, я думаю, что понимаю вопрос. Похож на Ваш сценарий, просто должен запустить dbus демона или удостовериться его запущенный. Я полагаю, что "сессия" здесь обращается к dbus сессии. (вот некоторое доказательство), не сессия Gnome. Dbus и gconf оба хорошо работают без Gnome.

Так или иначе фальсифицирование "активной сессии" походит на довольно плохую идею. Это только искало бы его, если бы этому был нужен он.

Возможно, мы видели сценарий в pastebin? Я должен был действительно видеть его прежде, чем сделать любой комментарий.

1
ответ дан 4 December 2019 в 21:13
поделиться

Спасибо, Ali & Jeremy - оба Ваших ответа были большой справкой. Я все еще работаю над этим (хотя я остановился на вечер).

Во-первых, я понял намек от Ali и пробовал часть предложения Jeremy: Я использовал dbus-запуск для выполнения "gconftool-2 - икра". Это не работало на меня; я теперь понимаю, почему (спасибо, Jeremy) - я пытался использовать gconf из той же программы Python, которая запускала dbus и gconftool, но его среда не имела переменных среды - понятное дело.

Я отложил ту стратегию, когда я заметил gconftool-2's - прямая опция; внутренне, gconftool-2 использует API, который не выставляется gconf привязкой Python. Так, я изменил python-gconf для представления дополнительного метода, и после того как это создает (у меня были некоторые несвязанные проблемы, заставляя это работать), мы будем видеть, чинит ли это вещи - если он не делает (и возможно если он делает, потому что создание той привязки, кажется, создает всего гнома!), я найду лучший способ управлять переменными среды в той первой стратегии.

(Я добавлю другой ответ здесь завтра так или иначе),

И это на следующий день: Я столкнулся с небольшой проблемой со своим измененным python-gconf, который вдохновил меня пробовать более простую идею Jeremy, которая хорошо работала - прежде, чем сделать первую gconf операцию, я просто выполнил "dbus-запуск", проанализировал получающиеся пары "имя-значение" и добавил их непосредственно к среде Python. Сделав это, я работал "gconftool-2 - икра". Проблема решена.

1
ответ дан 4 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: