¿Cómo puedo cambiar lo que se muestra en un shell de inicio de sesión?

23

Me estoy familiarizando con ajustar la forma en que se ven las cosas en un shell a través del indicador ( .bashrc), pero ahora estoy tratando de cambiar las cosas iniciales que se muestran cuando inicio sesión por primera vez. En mi instancia EC2, esto es lo que veo cuando Me conecto:

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


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

En la computadora Mint de mi casa, esto es lo que veo cuando inicio sesión:

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

¿Dónde se define esto? ¿Cómo puedo ajustar por alguna loca ASCII arte ACCIÓN ?

Naftuli Kay
fuente

Respuestas:

31

El texto que se muestra antes de que se solicite el inicio de sesión se almacena /etc/issue(hay un archivo relacionado /etc/motdque se muestra después de que el usuario inicia sesión, antes de que se inicie su shell). Es solo un archivo de texto normal, pero acepta un montón de secuencias de escape:

  • \b - Baudrate de la línea actual.
  • \d -- Fecha actual.
  • \s - Nombre del sistema, el nombre del sistema operativo.
  • \l - Nombre de la línea tty actual.
  • \m- Identificador de arquitectura de la máquina, p. Ej. i486
  • \n - Nombre de la máquina, también conocido como nombre de host.
  • \o - Nombre de dominio de la máquina.
  • \r- Número de versión del sistema operativo, por ejemplo. 1.1.9.
  • \t -- Tiempo actual.
  • \u - Número de usuarios actuales conectados.
  • \U - La cadena "1 usuario" o "usuarios" donde es el número de usuarios actuales conectados.
  • \v- Versión del sistema operativo, por ejemplo. la fecha de construcción, etc.

En mi máquina tengo:

Esto es \ n (\ s \ m \ r) \ t \ l

Que se representa como:

Esto es etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1

Michael Mrozek
fuente
6

El archivo /etc/issuey /etc/issue.netson los archivos que muestra el programa de inicio de sesión. Puede colocar caracteres de expansión especiales en él, como se indica en la otra respuesta. Pero también puede probar el programa linux_logo . Puede generar archivos de problemas de arte ASCII realmente agradables para usted.

Keith
fuente
4

el usuario claramente pregunta acerca de los mensajes que se muestran DESPUÉS de iniciar sesión, se muestran todos los "/ etc / issue" ANTES de iniciar sesión + contraseña, por lo que están fuera del tema.

Los pasos del 'shell de inicio de sesión' son:

  1. mostrar mensajes contenidos en "/ etc / issue"
  2. pedir usuario y pasar
  3. mostrar mensaje del día de:

    / etc / motd

    /etc/update-motd.d

  4. inicio / etc / profile y ~ / .bash_profile

NB .bashrc se ejecuta para el shell de inicio de sesión NO

@Naftuli Kay agrega tu arte ASCII a / etc / motd o agrega script en /etc/update-motd.d o / etc / profile para impresiones independientes del usuario, o ~ / .bash_profile para impresiones de un solo usuario

Valerio
fuente
3

De Ask Ubuntu :

Ubuntu splash screen.png

Consulte el enlace Preguntar Ubuntu anterior para obtener comentarios y posiblemente nuevas respuestas de otros usuarios.

now script bash

El trabajo pesado es el componente de salpicadura que muestra esto:

$ 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  

Sí, realmente es -14 en Edmonton y se siente como -23. ¡Un buen momento para pasar el largo fin de semana jugando al recién llegado Tomb Raider 2013! Tal vez repasar ese currículum para mudarse a Vancouver o Montreal ...

Aquí está el 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

Prerrequisitos

Para la visualización de tiempo elegante necesita instalar toilet:

sudo apt install toilet

Para otra visualización de tiempo elegante (pero no tan elegante) instale figlet:

sudo apt install figlet

De lo contrario, la hora se mostrará en letra "normal".

Clima

El tiempo lo proporciona el curl wttr.in/cityname?0comando. En su terminal use: curl wttr.in/:helppara detalles adicionales.

Clima: Cambiar nombre de ciudad

Querrá modificar esta sección de código y cambiar Edmontonel nombre de su ciudad:

# 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 es compatible con nombres de ciudades como /Москва(Moscú). Las cartas de aeropuerto son compatibles, como YEGpara Edmonton.

Clima: eliminar el nombre del país

Cuando el terminal está configurado para 92 caracteres de ancho, el clima se muestra como "Edmonton, Canadá". que es demasiado largo para mi gusto:

Tiempo con country.png

Peor aún cuando el terminal está configurado para 80 caracteres de ancho por defecto

Nombre del país del tiempo 80 chars.png

Para evitar el problema, ", Countryname" se borra en la pantalla con 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

Si necesita ayuda con esta parte del script, publique un comentario a continuación para obtener ayuda.

Ajustes de ancho de pantalla de terminal

Ajuste el espacio al ancho de la pantalla de su terminal cambiando:

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

Atarlo todo en ~/.bashrc

Edite su ~/.bashrcarchivo y agregue estas líneas en la parte inferior:

# Splash Calendar and time
now

# ASCII Linux distribution display
screenfetch

Guarde los cambios del archivo '~ / .bashrc ".

Para mostrar la información de Ubuntu que necesita screenfetch:

sudo apt install screenfetch

¡Hay paquetes de exhibición similares screenfetchpara darse una vuelta!

Si desea el mismo símbolo del sistema con la línea divisoria "─────────" entre los comandos, cambie estas líneas:

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

Tenga en cuenta que la longitud de la línea de separación coincide con el ancho de screenfetchsalida. En este caso, tiene 92 caracteres de ancho y las gnome-terminalpreferencias se configuran en consecuencia.

WinEunuuchs2Unix
fuente
1

También puede configurar el demonio ssh para que muestre un mensaje durante el inicio de sesión. Especifique el archivo para mostrar con la directiva Banner en el archivo sshd_config:

Banner /etc/ssh/ssh_banner

El nombre de archivo puede ser cualquier archivo, pero por razones de salud lo mantengo en / etc / ssh junto con el archivo sshd_config.

dr-jan
fuente
0

Un pequeño script para generar el problema / etc / con la dirección de red en /etc/rc.local del 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

actualización: parece que es suficiente con "ip -4 -br a" gracias @Mathieu CAROFF!

Howard.TH
fuente
man ip. Usa el -brinterruptor. También es posible que desee utilizar el -4interruptor. Su comando se puede acortar a ip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'. Aún mejor, úsalo hostname -I.
Mathieu CAROFF
0

IMPORTANTE para usar este banner ssh: Day Highlighting solo funciona con "ncal -bh> / tmp / terminal" en lugar de cal -h. cal -h ya no funciona / existe (Ubuntu 18.04)

Goasler
fuente