「su -」と「bash -l」の違いは何ですか?

「su -」と「bash -l」の違いは何ですか?

su -との違いは何ですかbash -l?

次のような問題があります:

:/etc/profile.d # su -
ディスプレイ「デフォルトディスプレイ」を開けません
ディレクトリ: /root
2013 年 11 月 28 日木曜日 11:23:57 CET

今、このメッセージが表示される理由を調べてみます。

:~ # ログアウト
:/etc/profile.d # bash -x -l
+ テスト -f /proc/mounts
+ ケース "`/bin/ls -l /proc/$$/exe`" の場合
++ /bin/ls -l /proc/17167/exe
+は=強打
+ 読み取り -t 1 ar
...

2 番目の出力には、「ディスプレイを開けません」というメッセージは表示されません。違いは何でしょうか?

答え1

最初のコマンドは root としてログインします。オプションは-、次のことを意味しますsu Manpage

-l, --login ユーザーが直接ログインした場合に期待される環境と同様の環境を提供します。

2番目のコマンドはbash -lない-lルートとしてログインします。オプションの意味は(再び から)次のとおりですbash Manpage

-l bash をログインシェルとして起動したかのように動作させる

ただし、これは を参照しますdifferent user。この場合、root ではなく、あなた自身を参照します。したがって、bash -lコマンドは、X セッションの制御を可能にする MIT マジック クッキーを維持しますが、 はsu -cそれを行うことができません。また、適切な MIT マジック クッキーを持っていないため、X セッションを制御することはできません。

この問題を回避するには、次の文を挿入します

  export XAUTHORITY=/home/your_name/.Xauthority

/root/.bashrc ファイルで、適切なログイン シェルを使用する代わりに su を実行している場合でも、root として GUI を開くことができるようになります。

関連情報