Comment puis-je modifier ce qui est affiché dans un shell de connexion?

23

Je me familiarise avec la modification de l'apparence des choses dans un shell via l'invite ( .bashrc), mais j'essaie maintenant de modifier le contenu initial affiché lors de ma première connexion. Sur mon instance EC2, voici ce que je vois lorsque Je me connecte:

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


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

Sur mon ordinateur Mint à la maison, voici ce que je vois lorsque je me connecte:

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

Où est-ce défini? Comment puis-je le modifier pour une action d' art ASCII folle ?

Naftuli Kay
la source

Réponses:

31

Le texte affiché avant l'invite de connexion est stocké dans /etc/issue(il existe un fichier associé /etc/motd, qui s'affiche après la connexion de l'utilisateur, avant le démarrage de son shell). C'est juste un fichier texte normal, mais il accepte un tas de séquences d'échappement:

  • \b - Débit en bauds de la ligne actuelle.
  • \d -- Date actuelle.
  • \s - Nom du système, le nom du système d'exploitation.
  • \l - Nom de la ligne tty actuelle.
  • \m- Identifiant d'architecture de la machine, par exemple. i486
  • \n - Nom de noeud de la machine, également appelé nom d'hôte.
  • \o - Nom de domaine de la machine.
  • \r- Numéro de version de l'OS, par exemple. 1.1.9.
  • \t -- Heure actuelle.
  • \u - Nombre d'utilisateurs actuels connectés.
  • \U - La chaîne "1 utilisateur" ou "utilisateurs" où est le nombre d'utilisateurs actuellement connectés.
  • \v- Version de l'OS, par exemple. la date de construction, etc.

Sur ma machine, j'ai:

C'est \ n (\ s \ m \ r) \ t \ l

Qui est rendu comme:

Ceci est etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1

Michael Mrozek
la source
6

Le fichier /etc/issueet /etc/issue.netsont les fichiers affichés par le programme de connexion. Vous pouvez y mettre des caractères d'extension spéciaux, comme indiqué dans l'autre réponse. Mais vous pouvez également essayer le programme linux_logo . Il peut générer des fichiers d'art ASCII vraiment sympas pour vous.

Keith
la source
4

l'utilisateur pose clairement des questions sur les messages affichés APRÈS la connexion, tous les "/ etc / issue" sont affichés AVANT que la connexion + le mot de passe ne soient saisis, donc hors sujet.

Les étapes du «shell de connexion» sont les suivantes:

  1. afficher les messages contenus dans "/ etc / issue"
  2. demander un utilisateur et passer
  3. montrer Message Of The Day de:

    / etc / motd

    /etc/update-motd.d

  4. démarrez / etc / profile et ~ / .bash_profile

NB .bashrc est exécuté pour le shell de connexion NON

@Naftuli Kay ajoutez votre art ASCII à / etc / motd ou ajoutez un script dans /etc/update-motd.d ou / etc / profile pour les impressions indépendantes de l'utilisateur, ou ~ / .bash_profile pour les impressions à utilisateur unique

Valerio
la source
3

De Ask Ubuntu :

Ubuntu splash screen.png

Consultez le lien Demander à Ubuntu ci-dessus pour obtenir des commentaires et éventuellement de nouvelles réponses d'autres utilisateurs.

now script bash

Le levage lourd est le composant d'éclaboussure qui montre ceci:

$ 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  

Oui, il fait vraiment -14 à Edmonton et ressemble à -23. Un bon moment pour passer le long week-end à l'intérieur à jouer au Tomb Raider 2013 nouvellement arrivé! Peut-être réviser ce CV pour déménager à Vancouver ou Montréal ...

Voici le code:

#!/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

Conditions préalables

Pour l'affichage de l'heure fantaisie, vous devez installer toilet:

sudo apt install toilet

Pour un autre affichage de l'heure (mais pas aussi sophistiqué), installez figlet:

sudo apt install figlet

Sinon, l'heure sera affichée en police "normale".

Conditions météorologiques

La météo est fournie par la curl wttr.in/cityname?0commande. Dans votre terminal, utilisez: curl wttr.in/:helppour plus de détails.

Météo: Changer le nom de la ville

Vous voudrez modifier cette section de code et changer Edmontonpour le nom de votre ville:

# 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 est pris en charge pour les noms de villes comme /Москва(Moscou). Les lettres d'aéroport sont prises en charge, comme YEGpour Edmonton.

Météo: Supprimer le nom du pays

Lorsque le terminal est configuré pour 92 caractères de large, la météo s'affiche comme «Edmonton, Canada». ce qui est trop long à mon goût:

Météo avec country.png

Pire encore lorsque le terminal est défini pour une largeur par défaut de 80 caractères:

Nom du pays météo 80 chars.png

Pour contourner le problème, ", Countryname" est masqué à l'écran avec ce code:

# 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 vous avez besoin d'aide avec cette partie du script, veuillez poster un commentaire ci-dessous pour obtenir de l'aide.

Réglages de la largeur de l'écran du terminal

Ajustez l'espacement à la largeur de l'écran de votre terminal en modifiant:

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

Lier le tout ensemble dans ~/.bashrc

Modifiez votre ~/.bashrcfichier et ajoutez ces lignes en bas:

# Splash Calendar and time
now

# ASCII Linux distribution display
screenfetch

Enregistrez les modifications du fichier `~ / .bashrc".

Pour afficher les informations Ubuntu dont vous avez besoin screenfetch:

sudo apt install screenfetch

Il existe des packages d'affichage similaires pour screenfetchfaire le tour!

Si vous souhaitez que la même invite de commande avec "─────────" ligne de séparation entre les commandes, modifiez ces lignes:

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

Notez que la longueur de la ligne de séparation coïncide avec la largeur de screenfetchsortie. Dans ce cas, il est large de 92 caractères et les gnome-terminalpréférences sont définies en conséquence.

WinEunuuchs2Unix
la source
1

Vous pouvez également configurer le démon ssh pour afficher un message lors de la connexion. Spécifiez le fichier à afficher avec la directive Banner dans le fichier sshd_config:

Banner /etc/ssh/ssh_banner

Le nom de fichier peut être n'importe quel fichier, mais pour raison je le garde dans / etc / ssh avec le fichier sshd_config.

dr-jan
la source
0

Un petit script pour générer le problème / etc / avec l'adresse réseau dans /etc/rc.local de l'hôte 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

mise à jour: ça sonne c'est assez avec "ip -4 -br a" merci @Mathieu CAROFF!

Howard.TH
la source
man ip. Utilisez l' -brinterrupteur. Vous pouvez également utiliser le -4commutateur. Votre commande peut être raccourcie ip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'. Encore mieux, utilisez hostname -I.
Mathieu CAROFF
0

IMPORTANT pour utiliser cette bannière ssh: la mise en évidence du jour ne fonctionne qu'avec "ncal -bh> / tmp / terminal" au lieu de cal -h. cal -h ne fonctionne plus / n'existe plus (Ubuntu 18.04)

Goasler
la source