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

2

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

Eu tenho este problema:

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

Agora eu tento descobrir por que essa mensagem ocorre.

:~ # 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
...

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

    
por Marki 28.11.2013 / 13:59

1 resposta

2

O primeiro comando registra você como root; a opção - significa, do su Manpage :

-l, --login Provide an environment similar to what the user would expect had the user logged in directly.

O segundo comando, bash -l , não faz o login como root. É verdade que a opção -l significa (novamente a partir do bash Manpage ):

-l Make bash act as if it had been invoked as a login shell

No entanto, isso se refere a um different user , neste caso você mesmo em vez de raiz. Assim, o comando bash -l mantém o magic cookie do MIT que permite o controle da sua sessão X, enquanto o su -c não é capaz de fazer isso e, como você não tem o magic cookie do MIT apropriado, não pode assumir o controle do Sessão X.

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

  export XAUTHORITY=/home/your_name/.Xauthority

no arquivo /root/.bashrc, e você será capaz de abrir GUIs como root mesmo quando estiver su'ing ao invés de usar um shell de login apropriado.

    
por 28.11.2013 / 16:02

Tags