Wie kann ich ändern, was in einer Login-Shell angezeigt wird?

23

Ich bin damit vertraut, wie die Dinge in einer Shell über die Eingabeaufforderung ( .bashrc) aussehen , aber ich versuche jetzt, die anfänglichen Dinge zu ändern, die beim ersten Anmelden angezeigt werden. Auf meiner EC2-Instanz ist dies, was ich wann sehe Ich melde mich an:

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


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

Auf meinem Mint-Heimcomputer wird beim Anmelden Folgendes angezeigt:

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

Wo ist das definiert? Wie kann ich es für einige mad ASCII - Art zwicken ACTION ?

Naftuli Kay
quelle

Antworten:

31

Der vor der Anmeldeaufforderung angezeigte Text wird in gespeichert /etc/issue(es gibt eine zugehörige Datei, /etc/motddie angezeigt wird, nachdem sich der Benutzer angemeldet hat, bevor die Shell gestartet wird). Es ist nur eine normale Textdatei, aber sie akzeptiert eine Reihe von Escape-Sequenzen:

  • \b - Baudrate der aktuellen Zeile.
  • \d -- Aktuelles Datum.
  • \s - Systemname, der Name des Betriebssystems.
  • \l - Name der aktuellen Tty-Zeile.
  • \m- Architekturkennung der Maschine, z. i486
  • \n - Knotenname des Rechners, auch Hostname genannt.
  • \o - Domainname der Maschine.
  • \r- Versionsnummer des Betriebssystems, z. 1.1.9.
  • \t -- Aktuelle Uhrzeit.
  • \u - Anzahl der aktuell angemeldeten Benutzer.
  • \U - Die Zeichenfolge "1 Benutzer" oder "Benutzer", wobei die Anzahl der aktuell angemeldeten Benutzer ist.
  • \v- Version des Betriebssystems, z. das Erstellungsdatum usw.

Auf meiner Maschine habe ich:

Dies ist \ n (\ s \ m \ r) \ t \ l

Welches wird gerendert als:

Dies ist etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1

Michael Mrozek
quelle
6

Die Datei /etc/issueund /etc/issue.netsind die Dateien, die vom Anmeldeprogramm angezeigt werden. Sie können spezielle Erweiterungszeichen einfügen, wie in der anderen Antwort angegeben. Vielleicht möchten Sie aber auch das Programm linux_logo ausprobieren . Es kann wirklich nette ASCII-Art-Issue-Dateien für Sie erzeugen.

Keith
quelle
4

Der Benutzer fragt eindeutig nach Nachrichten, die NACH dem Anmelden angezeigt werden. Alle "/ etc / issue" werden angezeigt, BEVOR Login + Passwort eingegeben werden, damit sie nicht zum Thema gehören.

Die "Login-Shell" Schritte sind:

  1. Nachrichten in "/ etc / issue" anzeigen
  2. nach Benutzer fragen und weitergeben
  3. zeige Botschaft des Tages von:

    / etc / motd

    /etc/update-motd.d

  4. Starten Sie / etc / profile und ~ / .bash_profile

NB .bashrc wird für die NON Login Shell ausgeführt

@Naftuli Kay Fügen Sie Ihre ASCII-Grafik zu / etc / motd hinzu, oder fügen Sie ein Skript in /etc/update-motd.d oder / etc / profile für benutzerunabhängige Ausdrucke hinzu, oder ~ / .bash_profile für Einzelbenutzerausdrucke

Valerio
quelle
3

Von Ask Ubuntu :

Ubuntu splash screen.png

Überprüfen Sie den Link " Ubuntu fragen" oben auf Kommentare und möglicherweise neue Antworten von anderen Benutzern.

now Bash-Skript

Das schwere Heben ist die Spritzkomponente, die dies zeigt:

$ 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  

Ja, es ist wirklich -14 in Edmonton und fühlt sich an wie -23. Eine gute Zeit, um das lange Wochenende drinnen zu verbringen und den neu eingetroffenen Tomb Raider 2013 zu spielen! Vielleicht den Lebenslauf auffrischen, um nach Vancouver oder Montreal zu ziehen ...

Hier ist der 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

Voraussetzungen

Für die fantastische Zeitanzeige müssen Sie Folgendes installieren toilet:

sudo apt install toilet

Für eine andere schicke Zeitanzeige (aber nicht ganz so schick) installieren Sie figlet:

sudo apt install figlet

Ansonsten wird die Uhrzeit in "normaler" Schrift angezeigt.

Wetter

Das Wetter wird durch den curl wttr.in/cityname?0Befehl zur Verfügung gestellt. In Ihrem Terminal verwenden Sie: curl wttr.in/:helpfür weitere Details.

Wetter: Ändern Sie den Namen der Stadt

Sie möchten diesen Codeabschnitt ändern Edmontonund den Namen Ihrer Stadt ändern :

# 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 wird für Städtenamen wie /Москва(Moskau) unterstützt. Flughafenbriefe werden beispielsweise YEGfür Edmonton unterstützt.

Wetter: Ländernamen entfernen

Wenn das Terminal auf eine Breite von 92 Zeichen eingestellt ist, wird das Wetter als "Edmonton, Kanada" angezeigt. Das ist zu lang für meinen Geschmack:

Wetter mit country.png

Schlimmer noch, wenn das Terminal auf eine Standardbreite von 80 Zeichen eingestellt ist:

Wetterlandname 80 chars.png

Um das Problem zu umgehen, wird ", Countryname" auf dem Bildschirm mit dem folgenden Code ausgeblendet:

# 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

Wenn Sie Hilfe zu diesem Teil des Skripts benötigen, geben Sie unten einen Kommentar für Unterstützung ein.

Anpassung der Terminal-Bildschirmbreite

Passen Sie den Abstand an die Bildschirmbreite Ihres Terminals an, indem Sie Folgendes ändern:

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

Alles zusammenbinden ~/.bashrc

Bearbeiten Sie Ihre ~/.bashrcDatei und fügen Sie diese Zeilen unten hinzu:

# Splash Calendar and time
now

# ASCII Linux distribution display
screenfetch

Speichern Sie die Änderungen an der Datei `~ / .bashrc".

So zeigen Sie die von Ihnen benötigten Ubuntu-Informationen an screenfetch:

sudo apt install screenfetch

Es gibt ähnliche Display-Pakete zum screenfetchShoppen!

Wenn Sie dieselbe Eingabeaufforderung mit einer Trennlinie zwischen Befehlen wünschen, ändern Sie diese Zeilen:

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

Beachten Sie, dass die Länge der Trennlinie mit der Breite der screenfetchAusgabe übereinstimmt . In diesem Fall ist es 92 Zeichen breit und gnome-terminaldie Einstellungen werden entsprechend festgelegt.

WinEunuuchs2Unix
quelle
1

Sie können den ssh-Daemon auch so konfigurieren, dass beim Anmelden eine Meldung angezeigt wird. Geben Sie die Datei an, die mit der Banner-Direktive in der Datei sshd_config angezeigt werden soll:

Banner /etc/ssh/ssh_banner

Der Dateiname kann eine beliebige Datei sein, aber aus Gründen der Übersichtlichkeit behalte ich ihn zusammen mit der Datei sshd_config in / etc / ssh.

dr-jan
quelle
0

Ein kleines Skript, um die Datei / etc / issue mit der Netzwerkadresse in /etc/rc.local von debian host zu generieren.

/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: klingt es reicht mit "ip -4 -br a" danke @Mathieu CAROFF!

Howard.TH
quelle
man ip. Benutze den -brSchalter. Möglicherweise möchten Sie auch den -4Schalter verwenden. Ihr Befehl kann auf gekürzt werden ip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'. Noch besser, benutze hostname -I.
Mathieu CAROFF
0

WICHTIG für die Verwendung dieses SSH-Banners: Die Tagesmarkierung funktioniert nur mit "ncal -bh> / tmp / terminal" anstelle von "cal -h". cal -h funktioniert / existiert nicht mehr (Ubuntu 18.04)

Goasler
quelle