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

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

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

У меня такая проблема:

:/etc/profile.d # su -
Невозможно открыть дисплей «дисплей по умолчанию»
Каталог: /root
Чт Ноя 28 11:23:57 CET 2013

Теперь я пытаюсь выяснить, почему появляется это сообщение.

:~ # выйти
:/etc/profile.d # bash -x -l
+ тест -f /proc/mounts
+ случай "`/bin/ls -l /proc/$$/exe`" в
++ /bin/ls -l /proc/17167/exe
+ это=баш
+ читать -t 1 ар
...

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

решение1

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

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

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

-l Заставить bash действовать так, как будто он был вызван как оболочка входа в систему

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

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

  export XAUTHORITY=/home/your_name/.Xauthority

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

Связанный контент