ログインシェルに表示される内容を変更するにはどうすればよいですか?


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ユーザーがログインした後、シェルが開始関連ファイルがあります)。これは単なる通常のテキストファイルですが、一連のエスケープシーケンスを受け入れます。

  • \b -現在の回線のボーレート。
  • \d - 現在の日付。
  • \s -システム名、オペレーティングシステムの名前。
  • \l -現在のtty回線の名前。
  • \m-マシンのアーキテクチャ識別子、例えば i486
  • \n -マシンのノード名、ホスト名とも呼ばれます。
  • \o -マシンのドメイン名。
  • \r-OSのリリース番号(例:1.1.9。
  • \t - 現在の時刻。
  • \u -現在ログインしているユーザーの数。
  • \U -文字列「1 user」または「users」は、現在ログインしているユーザーの数です。
  • \v-OSのバージョン、たとえば ビルド日付など

私のマシンには:

これは\ 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. 今日のメッセージを表示:

    / etc / 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 splash screen.png

他のユーザーからのコメントや新しい回答については、上記の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---^

Unicodeは/Москва(モスクワ)などの都市名でサポートされています。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デーモンを構成することもできます。sshd_configファイルのBannerディレクティブで表示するファイルを指定します。

Banner /etc/ssh/ssh_banner

ファイル名には任意のファイルを使用できますが、健全性のために、sshd_configファイルとともに/ etc / sshに保存します。


0

debianホストの/etc/rc.localにネットワークアドレスを持つ/ etc / issueを生成する小さなスクリプト。

/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バナーを使用するための重要:日の強調表示は、cal -hではなく「ncal -bh> / tmp / terminal」でのみ機能します。cal -hは機能しなくなりました(Ubuntu 18.04)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.