FreeBSD: Открывающий X приложений после su для укоренения?

Использование perl-переименовывает, швейцарский нож переименования файла с регулярными выражениями (на человечности, это связывается пакетом жемчуга как предварительное имя):

# Replace prename as appropriate (i.e. if you've got it installed under a different name
find /RootPath -type f -iname '*.mp3' -print0 | xargs -0 prename 's/mp3$/mp3/i'

Если Вы - осторожный вид, используйте-n, и-v опции к жемчугу переименовывают для наблюдения то, что он на самом деле сделает.

2
03.04.2011, 01:46
1 ответ

Хорошо у меня отчасти есть фиксация для этого. Существует хорошее объяснение от этого сайта https://bugs.launchpad.net/ubuntu / + source/gconf / + ошибка/336660:

Объяснение проблемы следующее:

Когда Вы su для укоренения от терминала, где Вы зарегистрированы как другой пользователь новый "преследуемый" пользователь, собирающийся наследовать переменные среды от родительского пользователя оболочки.

Пример: скажем, это для пользовательского разъема переменная среды DBUS_SESSION_BUS_ADDRESS установлено на: "unix:abstract =/tmp/dbus-l5SiTFzmR8, guid=1af28c9d83400a896ef6268d4a7af59f" Теперь, если Вы открываете терминал как разъем и делаете su для укоренения переменной DBUS_SESSION_BUS_ADDRESS, должен остаться что касается пользовательского разъема. И вот проблема, точно эта определенная огибающая переменная (DBUS_SESSION_BUS_ADDRESS) генерирует ту проблему. Программы Gnome как gedit, наутилус... используйте dbus протокол для общения с gconf, где специфичные для приложений конфигурации хранятся, и не просто. Программа, выполненная как корень, использует другой адрес шины сессии D-шины, сравненный, когда Вы выполняете ту программу как пользователь разъема, например. Таким образом, проблема состоит в том, что Вы переключаетесь на корень, но переменные неподвижные точки DBUS_SESSION_BUS_ADDRESS dbus адрес шины сессии разъема.

Решение: у пользователя root есть отдельный dbus адрес сессии также (расположенный в/root/.dbus/session-bus/...) Так для использования адреса dbus корня, когда Вы находитесь в терминале и "преследуемые" для укоренения просто ясные переменная DBUS_SESSION_BUS_ADDRESS. как: экспортируйте DBUS_SESSION_BUS_ADDRESS = "" программа, которая нужна в dbus связи с gconf, например, проверяет, что переменная среды, и если это пусто, это читает адрес dbus от пользователей ~/.dbus/session-bus/каталог (правильное место). Для создания этого постоянным добавляют следующую строку к пользователям root .bashrc файл: экспортируйте DBUS_SESSION_BUS_ADDRESS = "", Это означает, что каждый раз, когда Вы su для укоренения и терминал не являетесь оболочкой входа в систему (случай, когда Вы зарегистрированы как разъем и открыли терминал и выполнил su) переменная DBUS_SESSION_BUS_ADDRESS очищена, таким образом, приложения, собирающиеся читать адрес dbus из правильного места.

по тому, как Вы не должны запускать новую dbus сессию с dbus-запуском. Даже если Вы сделаете так, но приложения все еще читают адрес dbus из неправильного места, то проблема сохранится.

Когда я unsetenv DBUS_SESSION_BUS_ADDRESS, я могу теперь запустить emacs в X после su'ing. Однако я все еще получаю предупреждения:

(emacs 1879): GLib-WARNING **: In call to g_spawn_sync()...
3
27.01.2020, 22:07
  • 1
    Здорово! Это сохранило меня некоторое время, пытаясь выяснить, почему Вы не можете использовать "применять-схему" от родительского корневого терминала с помощью su. dbus адрес сессии должен быть очищен. –  ascotan 04.07.2011, 17:48
  • 2
    Хорошее объяснение :) –  Spl2nky 14.10.2016, 01:05

Теги

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