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

21

Estou ficando mais familiarizado com a maneira como as coisas ficam em um shell por meio do prompt ( .bashrc ), mas agora estou tentando alterar o material inicial exibido na primeira vez que faço login. Na minha instância do EC2, isto é o que eu vejo quando faço o login:

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


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

No computador da minha casa, aqui está o que eu vejo quando faç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 arte ASCII louca ACTION ?

    
por Naftuli Kay 08.07.2011 / 04:18

7 respostas

30

O texto exibido antes do prompt de login é armazenado em /etc/issue (há um arquivo relacionado, /etc/motd , exibido depois que o usuário efetua login, antes de seu shell ser iniciado). É apenas um arquivo de texto normal, mas aceita várias sequências de escape:

  • \b - Taxa de transmissão 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 - Nodename da máquina, também conhecido como hostname.
  • \o - nome de domínio da máquina.
  • \r - Número do release do SO, por exemplo. 1.1.9.
  • \t - hora atual.
  • \u - Número de usuários atuais conectados.
  • \U - A string "1 usuário" ou "usuários", onde está o número de usuários atuais conectados.
  • \v - Versão do SO, por exemplo. a data de construção, etc.

Na minha máquina eu tenho:

This is \n (\s \m \r) \t \l

Que é processado como:

This is etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1

    
por 08.07.2011 / 04:53
7

O arquivo /etc/issue e /etc/issue.net são os arquivos exibidos pelo programa de login. Você pode inserir caracteres especiais de expansão, conforme observado na outra resposta. Mas você também pode querer experimentar o programa linux_logo . Ele pode gerar arquivos de edição de arte ASCII realmente interessantes para você.

    
por 08.07.2011 / 05:34
2

o usuário está perguntando claramente sobre as mensagens exibidas APÓS o login, todas as "/ etc / issue" são exibidas ANTES que o login + a senha seja inserida, o assunto é fora do assunto.

As etapas do 'login shell' são:

  1. mostrar mensagens contidas em "/ etc / issue"
  2. pergunte ao usuário e passe
  3. mostre a mensagem do dia de:

    / etc / motd

    /etc/update-motd.d

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

NB .bashrc é executado para o shell de login NON

@Naftuli Kay adicione sua arte ASCII ao / 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

    
por 01.05.2018 / 22:17
2

De Pergunte ao Ubuntu :

VerifiqueolinkAskUbuntuacimaparaobtercomentáriosepossivelmentenovasrespostasdeoutrosusuários.

nowscriptbash

Otrabalhopesadoéocomponenteinicialquemostraisso:

$nowWeatherreport:EdmontonMarch2018┌────────────────────────────┐SuMoTuWeThFrSa│┏━┓╺┓┏━┓┏━┓┏━┓┏┳┓│\/Sunny123│┃┃┃┃╹┏━┛┗━┫┣━┛┃┃┃│.-.-23--14°C45678910│┗━┛╺┻╸╹┗━╸┗━┛╹╹╹│―()―↘22km/h11121314151617└────────────────────────────┘'-’14km18192021222324/\0.9mm25262728293031

Sim,realmenteé-14emEdmontoneparece-23.Umbommomentoparapassarolongofimdesemanadentrodorecém-chegadoTombRaider2013!TalvezescovaresseresumoparasemudarparaVancouverouMontreal...

Aquiestáocó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: https://sobrelinux.info/questions/32733/bash-substring-stringoffsetlength-error"%d") # Prefix with space when length < 2 if [[ ${#Today} < 2 ]] ; then Today=" "$Today fi printf "3[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 "3[7m" # Reverse: [ 7 m printf "$Today" printf "3[0m" # Normal: [ 0 m printf "3[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 "3[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 "3[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 sofisticada, você precisa instalar o toilet :

sudo apt install toilet

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

sudo apt install figlet

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

Tempo

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

Tempo: altere o nome da cidade

Você desejará modificar esta seção do código e alterar Edmonton para 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---^

O Unicode é compatível com nomes de cidades como /Москва (Moscou). Cartas de aeroporto são suportadas, como YEG para Edmonton.

Tempo: remover o nome do país

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

Pioraindaquandooterminalédefinidocom80caracterespadrãodelargura:

Paracontornaroproblema,"Countryname" está em branco 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 você precisar de ajuda com essa parte do script, poste um comentário abaixo para obter ajuda.

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 "   "   "   "

Juntando tudo em ~/.bashrc

Edite seu arquivo ~/.bashrc e adicione essas linhas ao final:

# 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 de screenfetch :

sudo apt install screenfetch

Existem pacotes de exibição semelhantes a screenfetch , por isso compre!

Se você quiser o mesmo prompt de comando com "─────────" linha divisória entre os comandos, altere estas linhas:

if [ "$color_prompt" = yes ]; then
    PS1='───────────────────────────────────────────────────────────────────────────────────────────
${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[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 de screenfetch de saída. Nesse caso, ele tem 92 caracteres de largura e gnome-terminal de preferências são definidas de acordo.

    
por 31.03.2018 / 18:28
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 para sanidade eu o mantenho em / etc / ssh junto com o arquivo sshd_config.

    
por 09.11.2015 / 18:53
0

Um pequeno script para gerar o / etc / issue com 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

atualização: soa é o suficiente com "ip -4 -br a" obrigado @Mathieu CAROFF!

    
por 31.07.2017 / 06:00
0

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

    
por 12.12.2018 / 00:53