Если я переключаю пользователя в терминал.
su bob
Я не могу открыться gedit
потому что bob
не владеет дисплеем.
Если я выполняюсь
xhost +
прежде, чем переключиться на bob
Я могу открыть дисплей для некоторых приложений, но не всех. Я получаю следующий вывод при попытке выполниться gedit
:
(crashreporter:4415): GNOMEUI-ПРЕДУПРЕЖДЕНИЕ *: При соединении с менеджером сеансов: Ни один из указанных протоколов аутентификации не поддерживается.
* GLib-GIO:ERROR:/build/buildd/glib2.0-2.28.6/./gio/gdbusconnection.c:2279:initable_init: утверждение перестало работать: (соединение-> initialization_error == ПУСТОЙ УКАЗАТЕЛЬ)
Если Вы хотите позволить пользователю bob
для доступа к существующему X сессий из командной строки можно ввести эти команды при терминальной подсказке:
xauth nextract - $DISPLAY | sudo -u bob xauth nmerge -
Thius использует команду xauth для извлечения информации аутентификации для текущего пользователя (первая часть команды, перед |
) и затем объедините его в пользователя bob
$HOME/.Xauthority
файл. Обратите внимание, что это требует /etc/sudoers
быть настроенным так, чтобы Вас разрешили командам выполнения как пользователь bob
(это - значение по умолчанию, если Вы - администраторский пользователь на поле Ubuntu).
Можно затем переключиться на пользователя bob
с su -l
.
С другой стороны, можно дать эти отдельные команды:
xauth nextract - $DISPLAY > /tmp/xauth.temporary.file
su -l bob -c 'xauth nmerge - < /tmp/xauth.temporary.file'
rm /tmp/xauth.temporary.file
Обратите внимание что:
1) временный файл должен иметь полномочия, таким образом что пользователь bob
может считать его (который часто означает, что любой пользователь в системе может считать его);
2) существует окно времени, во время который любой пользователь, который может читать, временный файл может получить доступ к Вашим X дисплеям.
Поэтому лучше использовать sudo
приблизьтесь, поскольку это не имеет этих оборотных сторон.
Иначе, после xhost +
был выполнен:
dbus-launch gedit --sm-client-disable