Как получить графическое отображение при выполнении команд от имени другого пользователя через терминал? [дубликат]

В моем терминале я сделал

 $su nextuser

и вошел в эту учетную запись. Теперь, когда я пытаюсь открыть текстовый файл в домашнем каталоге этого пользователя с помощью

$gedit test.c

, я получаю

No protocol specified
Cannot open display: 
Run 'gedit --help' to see a full list of available command line options.

Как я могу использовать графический текстовый редактор для отображения файлов в учетной записи нового пользователя?

5
задан 20 December 2012 в 23:28

3 ответа

Выполнение графических команд от Shell другого Пользователя

Install suxКоманда 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

Выполнение терминала (Не только Shell) как другой пользователь

Можно просто хотеть запустить программу графического терминала (который оболочка выполняет "внутри") как другой пользователь. После того как это работает, графические программы, запущенные от него, будут работать беспрепятственно также.

Можно использовать те же методы, описанные выше для выполнения gedit как другой пользователь.

gksu -w -u nextuser gnome-terminal
gksu -u nextuser gnome-terminal
4
ответ дан 20 December 2012 в 23:28

Используйте опцию -p с su для сохранения переменных среды, включая DISPLAY; поочередно установите его явно с помощью export или добавьте префикс для каждой команды.

0
ответ дан 20 December 2012 в 23:28

В качестве пользователя 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)

И все готово. :)

0
ответ дан 20 December 2012 в 23:28

Другие вопросы по тегам:

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