/etc/update-motd.dにMOTDスクリプトをインストールしましたが、うまくいきますが、SSHで色が欠けているようです。
SSD外観:
ログイン後にスクリプトを実行したときの出力:
実際のスクリプト:
cat /etc/update-motd.d/20-logo
#! /usr/bin/env bash
echo "";
echo "$(tput setaf 2) .::::::::::::::::::::::::::::::::::::::::...
:::::::::::::::::::::::::::::::::::::::::::::::::::.
.::::::::::::::::::::::::::::::::::::::::::::::::::::::.
.....::::::::::::::::::
$(tput setaf 7):@@@@@O $(tput setaf 2).:::::::::::
$(tput setaf 7)@@@@@@@o $(tput setaf 2).::::::::
$(tput setaf 7)@@@@@@@o $(tput setaf 2):::::::
$(tput setaf 7)@@@@@@@o $(tput setaf 2).::::::
$(tput setaf 7):@@@@@O @@@@@@@o O@@@@O $(tput setaf 2):::::::
$(tput setaf 7):@@@@@@@@o @@@@@@@o o@@@@@@@O $(tput setaf 2):::::::.
$(tput setaf 7)o@@@@@@@@O @@@@@@@o :@@@@@@@@@ $(tput setaf 2).::::::::.
$(tput setaf 7)o@@@@@@@O @@@@@@@o o@@@@@@@O $(tput setaf 2)..:::::::::::::
$(tput setaf 7)@@@@@@@O @@@@@@@o :@@@@@@@o $(tput setaf 2)::::::::::::::::::
$(tput setaf 7)o@@@@@@@ @@@@@@@: o@@@@@@@ $(tput setaf 2)::::::::::::::::.
$(tput setaf 7)o@@@@@@o o@@@O: @@@@@@@ $(tput setaf 2).:::::::::..
$(tput setaf 7)o@@@@@@@ o@@@@@@@ $(tput setaf 2).:::::::::
$(tput setaf 7)o@@@@@@@ O@@@@@@O $(tput setaf 2).:::::::::.
$(tput setaf 7)@@@@@@@@ O@@@@@@@: $(tput setaf 2).::::::::::.
$(tput setaf 7)@@@@@@@@O :@@@@@@@@o $(tput setaf 2).:::::::::::.
$(tput setaf 7)@@@@@@@@@O: o@@@@@@@@@o $(tput setaf 2)::::::::::::::.
$(tput setaf 7)O@@@@@@@@@@@@@@@@@@@@@@@@@@@@: $(tput setaf 2).:::::::::::::::..
$(tput setaf 7)O@@@@@@@@@@@@@@@@@@@@@@@@: $(tput setaf 2).:::::::::::::::.
$(tput setaf 7):@@@@@@@@@@@@@@@@@@@O $(tput setaf 2).::::::::::::
$(tput setaf 7)oO@@@@@@@@@@o: $(tput setaf 2)..::::.$(tput sgr0)
";
echo "================================================================================";
force_color_prompt=yes
私はそれがアクティブで~/.bashrc
、私の$TERM
変数が両側で正しく見えることを確認しました。端末エミュレータとサーバーの両方が表示されます。xterm-256color
SSHログイン中に色が失敗する原因は何ですか?
ベストアンサー1
pam_motd
動的MOTDは、これを行うために次のコードを使用するモジュール(/etc/pam.d/login)によって生成されます。
if (!system("/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new"))
rename("/run/motd.dynamic.new", "/run/motd.dynamic");
env
呼ばれるように-i
-i, --ignore-environment 空の環境で始まる
実行時に使用できるTERM変数がないため、tput
カラーコードは出力に含まれません。
%env -i /etc/update-motd.d/20-logoenv -i /etc/update-motd.d/20-logo
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
...
回避策として、次のようにロゴを事前に生成し、エスケープコードを含めることができます。
%/etc/update-motd.d/20-logo > /tmp/color.logo
%(echo "#! /usr/bin/env bash";
echo "cat <<EOF"; cat /tmp/color.logo;
echo "EOF") > /etc/update-motd.d/20-logo
または、スクリプトの上部に明示的なTERM変数を設定してください。
export TERM=xterm-256color
どちらのオプションも完璧ではありませんが(MOTDが作成されたときにTERMタイプが固定に設定されているため)、私が知っている限り、この方法は最善です(pam_motd
独自のパッチを望まない限り)。