В чем разница между 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 вместо использования надлежащей оболочки входа.