Como posso alterar o que é exibido em um shell de login?


23

Estou me familiarizando mais com a maneira como as coisas ficam em um shell por meio do prompt ( .bashrc), mas agora estou tentando alterar as coisas iniciais exibidas quando eu inicio a sessão. Na minha instância do EC2, é isso que vejo quando Eu entro em:

         __|  __|_  )  Fedora 8
         _|  (     /    32-bit
        ___|\___|___|


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

No meu computador Mint doméstico, eis o que vejo quando faço o login:

Welcome to Linux Mint 11 Katya (GNU/Linux 2.6.38-8-generic x86_64)

Welcome to Linux Mint
* Documentation:  http://www.linuxmint.com

Last login: Tue Jun 21 17:44:05 2011

Onde isso é definido? Como posso ajustá-lo para alguma ação ASCII de arte louca ?

Respostas:


31

O texto exibido antes do prompt de logon ser armazenado /etc/issue(há um arquivo relacionado, /etc/motdexibido após o usuário efetuar login, antes do início do shell). É apenas um arquivo de texto normal, mas aceita várias seqüências de escape:

  • \b - Baudrate da linha atual.
  • \d -- Data atual.
  • \s - Nome do sistema, o nome do sistema operacional.
  • \l - Nome da linha tty atual.
  • \m- Identificador de arquitetura da máquina, por exemplo. i486
  • \n - Nome do nó da máquina, também conhecido como nome do host.
  • \o - Nome de domínio da máquina.
  • \r- Número do release do sistema operacional, por exemplo. 1.1.9
  • \t -- Hora atual.
  • \u - Número de usuários atuais conectados.
  • \U - A cadeia "1 usuário" ou "usuários", onde é o número de usuários atuais conectados.
  • \v- Versão do sistema operacional, por exemplo. a data de construção etc.

Na minha máquina eu tenho:

Isso é \ n (\ s \ m \ r) \ t \ l

O qual é renderizado como:

Este é o etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1


6

O arquivo /etc/issuee /etc/issue.netsão os arquivos exibidos pelo programa de login. Você pode colocar caracteres especiais de expansão, conforme observado na outra resposta. Mas você também pode tentar o programa linux_logo . Ele pode gerar arquivos de edição de arte ASCII muito bons para você.


4

o usuário está perguntando claramente sobre as mensagens exibidas APÓS o login, todos os "/ etc / issue" são exibidos ANTES do login + senha serem inseridos, portanto, são tópicos diferentes.

As etapas do 'shell de login' são:

  1. mostre as mensagens contidas em "/ etc / issue"
  2. peça usuário e passe
  3. mostrar Mensagem do dia de:

    / etc / motd

    /etc/update-motd.d

  4. inicie / etc / profile e ~ / .bash_profile

NB .bashrc é executado para o shell NÃO de login

@Naftuli Kay adicione sua arte ASCII a / etc / motd ou adicione script em /etc/update-motd.d ou / etc / profile para impressões independentes do usuário ou ~ / .bash_profile para impressões de usuário único


3

No Ask Ubuntu :

Ubuntu splash screen.png

Verifique o link Ask Ubuntu acima para comentários e possivelmente novas respostas de outros usuários.

now script bash

O trabalho pesado é o componente de respingo que mostra isso:

$ now

Weather report: Edmonton               March 2018            ┌────────────────────────────┐
                                  Su Mo Tu We Th Fr Sa          ┏━┓╺┓  ┏━┓┏━┓   ┏━┓┏┳┓   
     \   /     Sunny                           1  2  3          ┃┃┃  ╹┏━┛┗━┫   ┣━┛┃┃┃   
      .-.      -23--14 °C          4  5  6  7  8  9 10          ┗━┛╺┻╸╹┗━╸┗━┛         
    (   )     22 km/h          11 12 13 14 15 16 17       └────────────────────────────┘
      `-’      14 km              18 19 20 21 22 23 24  
     /   \     0.9 mm             25 26 27 28 29 30 31  

Sim, é realmente -14 em Edmonton e parece -23. Um bom momento para passar o fim de semana prolongado jogando o recém-chegado Tomb Raider 2013! Talvez retocar esse currículo para mudar para Vancouver ou Montreal ...

Aqui está o código:

#!/bin/bash

# NAME: now
# PATH: $HOME/bin
# DESC: Display current weather, calendar and time
# CALL: Called from terminal or ~/.bashrc
# DATE: Apr 6, 2017. Modified: Mar 30, 2018.

# NOTE: To display all available toilet fonts use this one-liner:
#       for i in ${TOILET_FONT_PATH:=/usr/share/figlet}/*.{t,f}lf; do j=${i##*/}; toilet -d "${i%/*}" -f "$j" "${j%.*}"; done

# Setup for 92 character wide terminal
DateColumn=34 # Default is 27 for 80 character line, 34 for 92 character line
TimeColumn=61 # Default is 49 for   "   "   "   "    61 "   "   "   "

#--------- WEATHER ----------------------------------------------------------

# Current weather, already in color so no need to override
echo " "
# Replace Edmonton with your city name, GPS, etc. See: curl wttr.in/:help
curl wttr.in/Edmonton?0 --silent --max-time 3
# Timeout #. Increase for slow connection---^

echo " "
echo " "                # Pad with blank lines for calendar & time to fit

#--------- DATE -------------------------------------------------------------

# calendar current month with today highlighted.
# colors 00=bright white, 31=red, 32=green, 33=yellow, 34=blue, 35=purple,
#        36=cyan, 37=white

tput sc                 # Save cursor position.
# Move up 9 lines
while [ $((++i)) -lt 10 ]; do tput cuu1; done

# Depending on length of your city name and country name you will:
#   1. Comment out next three lines of code. Uncomment fourth code line.
#   2. Change subtraction value and set number of print spaces to match
#      subtraction value. Then place comment on fourth code line.

Column=$(($DateColumn - 10))
tput cuf $Column        # Move x column number
printf "          "     # Blank out ", country" with x spaces
#tput cuf $DateColumn    # Position to column 27 for date display


# -h needed to turn off formating: /ubuntu/1013954/bash-substring-stringoffsetlength-error/1013960#1013960
cal -h > /tmp/terminal

CalLineCnt=1
Today=$(date +"%d")
# Prefix with space when length < 2
if [[ ${#Today} < 2 ]] ; then
    Today=" "$Today
fi
printf "\033[32m"   # color green -- see list above.

while IFS= read -r Cal; do
    printf "$Cal"
    if [[ $CalLineCnt > 2 ]] ; then
        # See if today is on current line & invert background
        tput cub 22
        for (( j=0 ; j <= 18 ; j += 3 )) ; do
            Test=${Cal:$j:2}            # Current day on calendar line
            if [[ "$Test" == "$Today" ]] ; then
                printf "\033[7m"        # Reverse: [ 7 m
                printf "$Today"
                printf "\033[0m"        # Normal: [ 0 m
                printf "\033[32m"       # color green -- see list above.
                tput cuf 1
            else
                tput cuf 3
            fi
        done
    fi

    tput cud1               # Down one line
    tput cuf $DateColumn    # Move 27 columns right
    CalLineCnt=$((++CalLineCnt))
done < /tmp/terminal

printf "\033[00m"           # color -- bright white (default)
echo ""

tput rc                     # Restore saved cursor position.

#-------- TIME --------------------------------------------------------------

tput sc                 # Save cursor position.
# Move up 9 lines
i=0
while [ $((++i)) -lt 10 ]; do tput cuu1; done
tput cuf $TimeColumn    # Move 49 columns right

# Do we have the toilet package?
if hash toilet 2>/dev/null; then
    echo " "$(date +"%I:%M %P")" " | \
        toilet -f future --filter border > /tmp/terminal
# Do we have the figlet package?
elif hash figlet 2>/dev/null; then
    echo $(date +"%I:%M %P") | figlet > /tmp/terminal
# else use standard font
else
    echo $(date +"%I:%M %P") > /tmp/terminal
fi

while IFS= read -r Time; do
    printf "\033[01;36m"    # color cyan
    printf "$Time"
    tput cud1               # Up one line
    tput cuf $TimeColumn    # Move 49 columns right
done < /tmp/terminal

tput rc                     # Restore saved cursor position.

exit 0

Pré-requisitos

Para a exibição das horas de fantasia, você precisa instalar toilet:

sudo apt install toilet

Para outra exibição sofisticada (mas não tão sofisticada), instale figlet:

sudo apt install figlet

Caso contrário, a hora será exibida na fonte "normal".

Clima

O tempo é fornecido pelo curl wttr.in/cityname?0comando No seu terminal, use:curl wttr.in/:help para detalhes adicionais.

Tempo: alterar o nome da cidade

Você deseja modificar esta seção do código e mudar Edmontonpara o nome da sua cidade:

# Replace Edmonton with your city name, GPS, etc. See: curl wttr.in/:help
curl wttr.in/Edmonton?0 --silent --max-time 3
# Timeout #. Increase for slow connection---^

Unicode é suportado para nomes de cidades como /Москва(Moscou). Cartas de aeroporto são suportadas, como YEGpara Edmonton.

Tempo: remover o nome do país

Quando o terminal está definido para 92 caracteres de largura, o clima é exibido como "Edmonton, Canadá". o que é muito longo para o meu gosto:

Tempo com country.png

Pior ainda, quando o terminal está configurado para 80 caracteres padrão:

Tempo no nome do país 80 chars.png

Para contornar o problema, ", Countryname" é apagado na tela com este código:

# Depending on length of your city name and country name you will:
#   1. Comment out next three lines of code. Uncomment fourth code line.
#   2. Change subtraction value and set number of print spaces to match
#      subtraction value. Then place comment on fourth code line.
Column=$(($DateColumn - 10))
tput cuf $Column        # Move x column number
printf "          "     # Blank out ", country" with x spaces
#tput cuf $DateColumn    # Position to column 27 for date display

Se precisar de ajuda com esta parte do script, poste um comentário abaixo para obter assistência.

Ajustes de largura da tela do terminal

Ajuste o espaçamento para a largura da tela do terminal alterando:

# Setup for 92 character wide terminal
DateColumn=34 # Default is 27 for 80 character line, 34 for 92 character line
TimeColumn=61 # Default is 49 for   "   "   "   "    61 "   "   "   "

Amarrando tudo junto ~/.bashrc

Edite seu ~/.bashrcarquivo e adicione estas linhas na parte inferior:

# Splash Calendar and time
now

# ASCII Linux distribution display
screenfetch

Salve as alterações do arquivo `~ / .bashrc".

Para exibir as informações do Ubuntu, você precisa screenfetch:

sudo apt install screenfetch

Existem pacotes de exibição semelhantes para screenfetchcomprar ao redor!

Se você deseja o mesmo prompt de comando com "─────────" dividindo a linha entre os comandos, altere estas linhas:

if [ "$color_prompt" = yes ]; then
    PS1='───────────────────────────────────────────────────────────────────────────────────────────
${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='───────────────────────────────────────────────────────────────────────────────────────────
${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Observe que o comprimento da linha separadora coincide com a largura da screenfetchsaída. Nesse caso, ele possui 92 caracteres e as gnome-terminalpreferências são definidas de acordo.


1

Você também pode configurar o daemon ssh para exibir uma mensagem durante o login. Especifique o arquivo a ser exibido com a diretiva Banner no arquivo sshd_config:

Banner /etc/ssh/ssh_banner

O nome do arquivo pode ser qualquer arquivo, mas por sanidade, eu o mantenho em / etc / ssh junto com o arquivo sshd_config.


0

Um pequeno script para gerar o / etc / issue com o endereço de rede em /etc/rc.local do host debian.

/bin/echo "This is \n(\s \m \r) \t \l">/etc/issue
/bin/sleep 10 # This is optional, sometimes OS need more time to get ip address while DHCP, otherwise maybe you will get nothing :(
/sbin/ip a| /bin/grep inet| /bin/grep -v -E "inet6|127.0.0.1"| /bin/sed "s/\s*//"|/bin/sed "s/\/24.*//" >>/etc/issue

update: parece suficiente com "ip -4 -br a" obrigado @Mathieu CAROFF!


man ip. Use o -brinterruptor. Você também pode usar o -4comutador. Seu comando pode ser reduzido para ip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'. Melhor ainda, use hostname -I.
Mathieu CAROFF

0

IMPORTANTE para usar este banner ssh: o destaque do dia funciona apenas com "ncal -bh> / tmp / terminal" em vez de cal -h. cal -h não funciona / existe mais (Ubuntu 18.04)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.