Как я могу изменить то, что отображается в оболочке входа?


23

Я знакомлюсь с настройкой того, как все выглядит в оболочке, через приглашение ( .bashrc), но сейчас я пытаюсь изменить исходные данные, отображаемые при первом входе в систему. На моем экземпляре EC2 это то, что я вижу, когда Я вхожу в:

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


  Welcome to: 

    Wowza Media Server 2 for Amazon EC2

      Version: 2.0.0.08

На моем домашнем компьютере Mint вот что я вижу при входе в систему:

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

Где это определено? Как я могу настроить его для какого-то безумного ASCII арт- ДЕЙСТВИЯ ?

Ответы:


31

Текст, отображаемый до приглашения на вход в систему, сохраняется /etc/issue(есть связанный файл /etc/motd, который отображается после входа пользователя в систему до запуска его оболочки). Это обычный текстовый файл, но он принимает несколько escape-последовательностей:

  • \b - Скорость передачи текущей строки.
  • \d -- Текущая дата.
  • \s - Имя системы, название операционной системы.
  • \l - Имя текущей строки tty.
  • \m- Идентификатор архитектуры машины, например. i486
  • \n - Имя машины, также известное как имя хоста.
  • \o - Доменное имя машины.
  • \r- Номер версии ОС, например. 1.1.9.
  • \t -- Текущее время.
  • \u - Количество текущих пользователей, вошедших в систему.
  • \U - Строка «1 пользователь» или «пользователи», где указано количество текущих пользователей, вошедших в систему.
  • \v- версия ОС, например. дата сборки и т. д.

На моей машине у меня есть:

Это \ n (\ s \ m \ r) \ t \ l

Который представлен как:

Это etudes-1 (Linux x86_64 2.6.39-gentoo) 17:43:10 tty1


6

Файл /etc/issueи /etc/issue.netфайлы, отображаемые программой входа в систему. Вы можете поместить в него специальные символы расширения, как отмечено в другом ответе. Но вы также можете попробовать программу linux_logo . Он может генерировать действительно хорошие файлы ASCII.


4

пользователь явно спрашивает о сообщениях, отображаемых ПОСЛЕ входа в систему, все "/ etc / issue" отображаются ДО входа в систему + пароль введен, поэтому не по теме.

Шаги входа в оболочку:

  1. показать сообщения, содержащиеся в "/ etc / issue"
  2. попросить пользователя и передать
  3. показать сообщение дня от:

    / И т.д. / MOTD

    /etc/update-motd.d

  4. запустите / etc / profile и ~ / .bash_profile

NB .bashrc выполняется для NON оболочки входа

@Naftuli Kay добавьте свой ASCII-рисунок в / etc / motd или добавьте сценарий в /etc/update-motd.d или / etc / profile для независимых от пользователя отпечатков, или ~ / .bash_profile для однопользовательских отпечатков


3

От Ask Ubuntu :

Ubuntu заставка screen.png

Проверьте Ask Ubuntu ссылку выше для комментариев и, возможно, новых ответов от других пользователей.

now скрипт bash

Поднятие тяжестей - это всплеск, который показывает это:

$ 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  

Да, это действительно -14 в Эдмонтоне и чувствует себя как -23. Хорошее время провести долгие выходные внутри, играя в недавно прибывший Tomb Raider 2013! Возможно освежить это Резюме, чтобы переехать в Ванкувер или Монреаль ...

Вот код:

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

Предпосылки

Для отображения модного времени вам необходимо установить toilet:

sudo apt install toilet

Для другого модного отображения времени (но не совсем так) установите figlet:

sudo apt install figlet

В противном случае время будет отображаться «обычным» шрифтом.

Погода

Погода предоставляется curl wttr.in/cityname?0командой. В вашем терминале используйте:curl wttr.in/:help для дополнительных деталей.

Погода: Изменить название города

Вы хотите изменить этот раздел кода и изменить Edmontonназвание вашего города:

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

Юникод поддерживается для названий городов, таких как /Москва(Москва). Поддерживаются письма из аэропорта, такие какYEG для Эдмонтона.

Погода: Удалить название страны

Когда терминал установлен на 92 символа в ширину, погода отображается как «Эдмонтон, Канада». что слишком долго на мой вкус:

Погода с country.png

Еще хуже, когда для терминала установлено значение по умолчанию 80 символов:

Погода название страны 80 chars.png

Чтобы обойти проблему, на экране скрыто «, Countryname» с этим кодом:

# 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

Если вам нужна помощь с этой частью сценария, пожалуйста, оставьте комментарий ниже для помощи.

Регулировка ширины экрана терминала

Отрегулируйте расстояние до ширины экрана вашего терминала, изменив:

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

Связать все вместе в ~/.bashrc

Отредактируйте ваш ~/.bashrcфайл и добавьте эти строки внизу:

# Splash Calendar and time
now

# ASCII Linux distribution display
screenfetch

Сохраните изменения в файле ~ ~ .bashrc.

Для отображения информации об Ubuntu вам нужно screenfetch:

sudo apt install screenfetch

Есть похожие пакеты отображения screenfetch чтобы делать покупки вокруг!

Если вам нужна та же командная строка с разделительной линией "─────────" между командами, измените эти строки:

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

Обратите внимание, что длина разделительной линии совпадает с шириной screenfetchвывода. В этом случае его ширина составляет 92 символа, и gnome-terminalнастройки устанавливаются соответственно.


1

Вы также можете настроить демон ssh для отображения сообщения во время входа в систему. Укажите файл для отображения с помощью директивы Banner в файле sshd_config:

Banner /etc/ssh/ssh_banner

Имя файла может быть любым файлом, но для здравого смысла я храню его в / etc / ssh вместе с файлом sshd_config.


0

Один небольшой скрипт для генерации / etc / issue с ​​сетевым адресом в /etc/rc.local хоста 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

обновление: звучит достаточно с "ip -4 -br a" благодаря @Mathieu CAROFF!


man ip, Используйте -brпереключатель. Вы также можете использовать -4переключатель. Ваша команда может быть сокращена до ip -br a | sed -nE 's:^(\w+)\s+UP\s+([0-9.]+)/.*$:\1 \2:p'. Еще лучше, используйте hostname -I.
Матье КАРОФФ

0

ВАЖНО для использования этого ssh Banner: Дневное выделение работает только с "ncal -bh> / tmp / terminal" вместо cal -h. cal -h больше не работает / не существует (Ubuntu 18.04)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.