На этот вопрос уже есть ответ:
В моем терминале я сделал
$su nextuser
и вошел в эту учетную запись. Теперь, когда я пытаюсь открыть текстовый файл в домашнем каталоге этого пользователя с помощью
$gedit test.c
, я получаю
No protocol specified
Cannot open display:
Run 'gedit --help' to see a full list of available command line options.
Как я могу использовать графический текстовый редактор для отображения файлов в учетной записи нового пользователя?
Команда sux (см. man sux
) заботится об этом для Вас и берет тот же синтаксис как su
.
sux - nextuser
gedit test.c
Это автоматически удостоверится .Xauthority
корректно, таким образом, Вы не должны выполнять команды для ручной авторизации чего-либо.
Графические приложения имеют тенденцию писать конфигурационные файлы в Вашем корневом каталоге, и если Вы выполняете их как другой пользователь при сохранении $HOME
, они попытаются записать конфигурационные файлы как тот пользователь в Вашем корневом каталоге. Это приведет к отказу записать конфигурацию или конфигурацию, испорченную для исходного пользователя (или некоторая комбинация двух). Вот почему желательно использовать -
флаг с sux
(или su
) при запуске графических приложений. (Для sudo
, можно вместо этого использовать графический frontends как gksu
/gksudo
и kdesudo
.)
Можно использовать gksu
в su-режиме (с -w
флаг) для выполнения команды как другого пользователя (с -u
флаг):
gksu -w -u nextuser gedit test.c
Однако Вам, возможно, все еще придется работать xhost local:nextuser
сначала (поскольку Вы детализировали в своем довольно хорошем ответе), чтобы это работало. Этому, менее вероятно, будет нужно это, если Вы будете использовать sudo-режим, но затем можно только сделать это, если Вы - администратор (и Вы будете проходить проверку подлинности со своим паролем, а не nextuser
пароль, как sudo
вместо su
бэкенд):
gksu -u nextuer gedit test.c
Можно просто хотеть запустить программу графического терминала (который оболочка выполняет "внутри") как другой пользователь. После того как это работает, графические программы, запущенные от него, будут работать беспрепятственно также.
Можно использовать те же методы, описанные выше для выполнения gedit
как другой пользователь.
gksu -w -u nextuser gnome-terminal
gksu -u nextuser gnome-terminal
Используйте опцию -p
с su для сохранения переменных среды, включая DISPLAY
; поочередно установите его явно с помощью export
или добавьте префикс для каждой команды.
В качестве пользователя root запустите
echo $DISPLAY
xhost local:nextuser
Затем
su - nextuser
export DISPLAY=<the value got from echo $DISPLAY above>
(or SET DISPLAY.. if export does not work)
И все готово. :)