Повторное использование сеансов D-Bus через сеансы входа

20

Я получаю доступ к машине через несколько сеансов входа в систему. Время жизни сессий может или не может пересекаться. В моем случае эти сеансы входа в систему всегда выполняются по SSH, но я бы предпочел также обрабатывать локальные сеансы.

Иногда мне требуется D-Bus в этих сеансах, и я хочу использовать один и тот же сеанс D-Bus для всех сеансов входа в систему, чтобы использовать GVFS .

Каков рекомендуемый способ сделать это? Я не хочу отказываться от использования D-Bus, о котором я могу не знать. Я подумал об использовании

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))

но (по состоянию на Ubuntu 12.04) это не так:

  • для этого требуется сеанс X, но мои сеансы SSH могут или не могут передавать X-дисплей, и даже те, которые не совпадают $DISPLAY;
  • если X-дисплей недоступен, dbus-launchвыдает сообщение об ошибке «Ошибка автозапуска: инициализация X11 не удалась» и не запускает демон;
  • на dbus-launchстранице руководства говорится, что « --autolaunchопция рассматривается как внутренняя деталь реализации (…). В любом случае, нет никакой реальной причины использовать его за пределами реализации libdbus ».

dbus-launchПоддерживает ли другой инструмент в наборе D-Bus автоматическое обнаружение работающего dbus-daemonи подключающегося к нему? Необходимая информация находится в том ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}случае, если D-Bus запускается с X-соединением, но, кажется, нигде не сохраняется, если X-соединение недоступно.

Должен ли я загрузить свой собственный файл сеанса D-Bus? Если я это сделаю, я должен использовать файл в ~/.dbus/session-busкаталоге? Является ли путь /var/lib/dbus/machine-idнадежным и портативным?

Жиль "ТАК - перестать быть злым
источник
1
Этот ответ может быть частью решения для вас: serverfault.com/questions/405518/…
sdive
1
Я возился с DBus много лет назад, и все, что осталось в моей памяти от чтения, включая исходники, было: DBus может быть классным, но он настолько приспособлен для однократного запуска в качестве системного экземпляра и ровно еще раз для каждого сеанса локального пользователя это просто глупо, а не круто. Я думаю, вы должны сделать все сами. Я сделал, но у меня всегда есть X сессий, так что мне было немного легче. Удачи.
Bananguin
Я видел некоторую полезную информацию о конфигурации dbus в книге BLFS ( Beyond Linux From Scratch ).
Fiisch

Ответы:

6

DBus немного усложняет совместное использование настроек для демона dbus.

Для моей настройки настройки из dbus-launch --sh-syntaxсохраняются в файле, который является источником .bash_rc. Недостатком этого является то, что после каждой перезагрузки этот процесс выполняется вручную.

Однако, должно быть очень просто проверить существующий демон DBus. Допустим, файл настроек находится в $ HOME / .dbus_settings:

need_start=1

if [ -r "$HOME/.dbus_settings" ]
then
    . "$HOME/.dbus_settings"
fi

if [ -n "$DBUS_SESSION_BUS_PID" ]
then
    if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
    then
        need_start=0  # Found one
    fi
fi

if [ "$need_start" -ne 0 ]
then
    dbus-launch --sh-syntax >"$HOME/.dbus_settings"
    . "$HOME/.dbus_settings"
fi

Без --autolaunchопции я не верю, что требуется подключение к X windows.

ясень
источник