Qual é a diferença entre “su -” e “bash -l”?

Qual é a diferença entre “su -” e “bash -l”?

Qual é a diferença entre su -e bash -l?

Eu tenho esse problema:

:/etc/profile.d # su -
Não é possível abrir a exibição "exibição padrão"
Diretório: /root
Qui, 28 de novembro 11:23:57 CET 2013

Agora tento descobrir por que essa mensagem ocorre.

:~ # sair
:/etc/profile.d # bash -x -l
+ teste -f /proc/montagens
+ case "`/bin/ls -l /proc/$$/exe`" em
++ /bin/ls -l /proc/17167/exe
+ é=bash
+ leia -t 1 ar
...

Na segunda saída não tenho sinal da mensagem "não é possível abrir o display". Então qual é a diferença?

Responder1

O primeiro comando faz login como root; a opção -significa, a partir de su Manpage:

-l, --login Fornece um ambiente semelhante ao que o usuário esperaria se estivesse conectado diretamente.

O segundo comando, bash -l, faznãofaça login como root. É verdade que a -lopção significa (novamente do bash Manpage):

-l Faça o bash agir como se tivesse sido invocado como um shell de login

No entanto, isso se refere a um different user, neste caso você mesmo em vez de root. Assim, o bash -lcomando mantém o cookie mágico do MIT que permite o controle da sua sessão X, enquanto o su -cnão é capaz de fazer isso e, como você não possui o cookie mágico do MIT apropriado, não pode assumir o controle da sessão X.

Se você quiser contornar esse problema, insira esta declaração

  export XAUTHORITY=/home/your_name/.Xauthority

no arquivo /root/.bashrc, e você poderá abrir GUIs como root mesmo quando estiver su'ing em vez de usar um shell de login adequado.

informação relacionada