ฉันจะเปลี่ยนสิ่งที่ปรากฏที่เปลือกเข้าสู่ระบบได้อย่างไร


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 - Baudrate ของบรรทัดปัจจุบัน
  • \d -- วันที่ปัจจุบัน.
  • \s - ชื่อระบบชื่อของระบบปฏิบัติการ
  • \l - ชื่อของบรรทัด tty ปัจจุบัน
  • \m- ตัวระบุสถาปัตยกรรมของเครื่องเช่น i486
  • \n - ชื่อของเครื่องที่รู้จักกันว่าชื่อโฮสต์
  • \o - ชื่อโดเมนของเครื่อง
  • \r- หมายเลขรุ่นของระบบปฏิบัติการเช่น 1.1.9
  • \t - เวลาปัจจุบัน
  • \u - จำนวนผู้ใช้ปัจจุบันที่ล็อกอิน
  • \U - สตริง "1 user" หรือ "users" โดยที่จำนวนผู้ใช้ปัจจุบันเข้าสู่ระบบ
  • \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 / ปัญหา" จะปรากฏขึ้นก่อนเข้าสู่ระบบ + รหัสผ่านจะถูกป้อนเพื่อเป็นนอกหัวข้อ

ขั้นตอน 'login shell' คือ:

  1. แสดงข้อความที่มีอยู่ใน "/ etc / ปัญหา"
  2. ขอผู้ใช้และผ่าน
  3. แสดงข้อความประจำวันจาก:

    / etc / motd

    /etc/update-motd.d

  4. start / etc / profile และ ~ / .bash_profile

NB .bashrc ถูกเรียกใช้งานสำหรับ NON login shell

@Naftuli Kay เพิ่ม art ASCII ของคุณใน / etc / motd หรือเพิ่มสคริปต์ใน /etc/update-motd.d หรือ / etc / profile สำหรับงานพิมพ์อิสระของผู้ใช้หรือ ~ / .bash_profile สำหรับการพิมพ์ผู้ใช้คนเดียว


3

จากถาม Ubuntu :

หน้าจอ Ubuntu ที่หน้าจอ. png

ตรวจสอบลิงก์ถาม Ubuntuด้านบนเพื่อรับฟังความคิดเห็นและคำตอบใหม่ ๆ จากผู้ใช้รายอื่น

now สคริปต์ทุบตี

การยกของหนักเป็นส่วนประกอบของสแปลชที่แสดงสิ่งนี้:

$ 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 ที่เพิ่งมาถึง! อาจจะรีบไปหา Resume เพื่อย้ายไปแวนคูเวอร์หรือมอนทรีออล ...

นี่คือรหัส:

#!/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คำสั่งให้สภาพอากาศ ในการใช้ terminal ของคุณ: 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---^

Unicode ได้รับการสนับสนุนสำหรับชื่อเมืองเช่น/Москва(มอสโก) รองรับตัวอักษรของสนามบินเช่นYEGEdmonton

สภาพอากาศ: ลบชื่อประเทศ

เมื่อเทอร์มินัลถูกตั้งค่าสำหรับความกว้าง 92 ตัวอักษรสภาพอากาศจะแสดงเป็น "Edmonton, Canada" ซึ่งยาวเกินไปสำหรับความชอบของฉัน:

สภาพอากาศกับ country.png

ที่แย่กว่านั้นเมื่อตั้งค่าเทอร์มินัลสำหรับความกว้าง 80 อักขระเริ่มต้น:

ชื่อประเทศสภาพอากาศ 80 chars.png

หากต้องการหลีกเลี่ยงปัญหา ", ชื่อประเทศ" จะถูกทำให้ว่างบนหน้าจอด้วยรหัสนี้:

# 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 daemon เพื่อแสดงข้อความในระหว่างการเข้าสู่ระบบ ระบุไฟล์ที่จะแสดงด้วยคำสั่ง Banner ในไฟล์ sshd_config:

Banner /etc/ssh/ssh_banner

ชื่อไฟล์สามารถเป็นไฟล์ใดก็ได้ แต่สำหรับสติฉันเก็บไว้ใน / etc / ssh พร้อมกับไฟล์ sshd_config


0

หนึ่งสคริปต์เล็กน้อยในการสร้าง / etc / ปัญหาด้วยที่อยู่เครือข่ายใน /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ยิ่งไปกว่านั้นการใช้งาน
Mathieu CAROFF

0

สำคัญสำหรับการใช้แบนเนอร์ ssh นี้: การไฮไลต์วันใช้งานได้กับ "ncal -bh> / tmp / terminal" แทน cal -h cal -h ไม่ทำงาน / มีอยู่อีกต่อไป (Ubuntu 18.04)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.