FreeBSD: открытие приложений X после su для root?

Использование FreeBSD 8.2. Я получаю доступ к моей машине через vnc, используя tightvnc. Я вхожу в систему как обычный пользователь. Это нормально. Я могу открывать X-приложения, и они отображаются отлично. Тогда я su, чтобы корень, и они не откроются. Раньше я мог делать xhost + localhost, но это больше не работает. Я читал онлайн о копировании .Xauthority, поэтому теперь в моем .cshrc для root я делаю это:

if ($user != "root") then setenv XAUTHORITY /home/$user/.Xauthoriy endif 

Это меня доводит, но теперь я получаю сообщение об ошибке:

  • Как запустить обновление pkg на FreeBSD без загрузки каких-либо данных?
  • Изменение линий прокрутки при использовании колесиков мыши?
  • Прочтите СУЩЕСТВУЮЩИЙ контент с другого терминала
  • Родной маршрутизатор IPv6 на FreeBSD
  • Установлено соединение x11, но значение magic-cookie отличается?
  • freebsd make install openjdk6
  •  GLib-GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed .. 

    Я искал этот онлайн, и кто-то сказал, что сначала префикс команды dbus-launch:

     dbus-launch emacs 

    Я попробовал это, и он работает, но кажется клочковым. Как мне получить эту работу, чтобы я мог запускать X-основанные программы после того, как вы могли нормально работать (как я мог бы с FreeBSD 6.x)?

  • Xorg увеличивает использование процессора с течением времени
  • X: alt / ctrl / f1 больше не работает после выключения и включения дисплея с помощью xrandr
  • Как установить скорость повторения клавиатуры USB с помощью udev?
  • Почему система X Window использует сервер?
  • Видеокарта Nvidia
  • Полноэкранные программы обновляются только при перемещении мыши
  • One Solution collect form web for “FreeBSD: открытие приложений X после su для root?”

    Хорошо, у меня есть причина для этого. На этом сайте есть хорошее объяснение. https://bugs.launchpad.net/ubuntu/+source/gconf/+bug/336660 :

    Объяснение проблемы заключается в следующем:

    Когда вам удастся подключиться к терминалу, где вы вошли в систему как другой пользователь, новый пользователь «su-ed» наследует переменные среды от пользователя родительской оболочки.

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

    Решение. У пользователя root есть отдельный адрес сеанса dbus (расположенный в /root/.dbus/session-bus/.). Таким образом, чтобы использовать адрес dbus root, когда вы находитесь в терминале и «su-ed» для root просто очистите переменную DBUS_SESSION_BUS_ADDRESS. например: export DBUS_SESSION_BUS_ADDRESS = "" Программа, которая, например, нуждается в dbus-связи с gconf, проверяет эту переменную среды, а если она пуста, она считывает адрес dbus из каталога ~ ~ .dbus / session-bus / users (в нужном месте ). Чтобы сделать это постоянным, добавьте следующую строку к корневому пользователю .bashrc-файл: export DBUS_SESSION_BUS_ADDRESS = "" Это означает, что каждый раз, когда вы используете root, а терминал не является оболочкой входа (случай, когда вы вошли в систему как гнездо и открыл терминал и выполнил 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()... 
    Linux и Unix - лучшая ОС в мире.