2

В чем разница между su - и bash -l?

У меня есть эта проблема:

:/etc/profile.d # su -
Cannot open display "default display"
Directory: /root
Thu Nov 28 11:23:57 CET 2013

Сейчас я пытаюсь выяснить, почему происходит это сообщение.

:~ # logout
:/etc/profile.d # bash -x -l
+ test -f /proc/mounts
+ case "`/bin/ls -l /proc/$$/exe`" in
++ /bin/ls -l /proc/17167/exe
+ is=bash
+ read -t 1 a r
...

Во втором выводе у меня нет никаких признаков сообщения "Не удается открыть дисплей". Так в чем же разница?

1 ответ1

2

Первая команда регистрирует вас как root; Опция - означает, из su Manpage:

-l, --login Обеспечить среду, аналогичную той, которую пользователь ожидал бы, если бы пользователь вошел в систему напрямую.

Вторая команда, bash -l , не регистрирует вас как root. Это правда, что опция -l означает (снова с bash Manpage):

-l сделать так, чтобы bash действовал как оболочка входа

Однако это относится к different user , в данном случае вы сами, а не root. Таким образом, команда bash -l поддерживает магический cookie-файл MIT, который позволяет контролировать ваш сеанс X, в то время как su -c не может этого сделать, и, поскольку у вас нет соответствующего магического cookie-файла MIT, вы не можете получить контроль над Х сессия.

Если вы хотите обойти эту проблему, вставьте это утверждение

  export XAUTHORITY=/home/your_name/.Xauthority

в файле /root/.bashrc, и вы сможете открывать GUI от имени пользователя root, даже когда вы используете вместо использования соответствующей оболочки входа в систему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .