O MOTD dinâmico é gerado pelo módulo pam_motd
(/etc/pam.d/login), que usa um código como esse para fazer isso:
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");
Como env
é invocado com -i
-i, --ignore-environment inicia com um ambiente vazio
nenhuma variável TERM está disponível no momento em que tput
é executado, portanto, nenhum código de cores é incluído na saída:
%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
...
Como solução alternativa, você pode pré-gerar seu logotipo com os códigos de escape incorporados nele, assim:
%/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
ou apenas defina uma variável TERM explícita no topo do seu script:
export TERM=xterm-256color
Ambas as opções não são perfeitas (como o tipo TERM será definido como fixo no momento em que o MOTD é gerado), mas o AFAIK é o melhor que você pode fazer (a menos que você queira corrigir o pam_motd
).