新・OS X ハッキング! 第212回 ログインメッセージをカスタマイズ

0

2018年02月19日 10:03  マイナビニュース

  • チェックする
  • つぶやく
  • 日記を書く

マイナビニュース

画像提供:マイナビニュース
Terminalでの作業が苦でないユーザにとって「SSH」は日常の道具。クライアントが同じmacOSかVNC互換のアプリがあれば、GUIを利用したリモートコントロールソフト「画面共有」を使う手もあるが、描画の必要上それなりの帯域を必要とする"重さ"は否めない。

一方のSSHはテキストベースで動作が軽く、macOS以外のホストからアクセスしても操作感は変わらない。scpやsftpを使えばファイルコピーも容易なため、こちらをリモートコントロールのメインツールとしているユーザは多いことだろう。

とはいえ、SSHを利用したリモートログインは見た目が味気なさすぎる。日々使うツールのこと、飾り立てるとまではいかずとも、カスタマイズの愉しみくらいはあってもいいのでは……というわけで、かんたんに行えるSSHのカスタマイズ術を紹介する。

○「Message of The Day」

歴代のmacOSにはSSHサーバ(sshd)が収録されており、システム環境設定「共有」パネルに用意された「リモートログイン」スイッチでオン/オフできるが、オプションとして用意されているのはユーザ/グループごとのアクセス許可くらいなもので、カスタマイズの余地はなきに等しい。

そこで検討したいのが「Message of The Day」。SSHに限った話ではないが、/etc/motdにテキストを用意しておくと、ログイン時にTerminal画面へ出力してくれる。ログインするたびに気の利いたアスキーアートや自分のモットーを表示できるため、自分のMacにログインしているのだな、という実感が湧いてくること請け合いだ。

手順はかんたん、適当なテキストファイルを用意して以下のとおりコマンドを実行すればOK。SSHを利用したリモートログインだけでなく、手もとのMacでTerminalを起動した直後(ログインシェルが起動された直後)にも表示されるようになるはずだ。なお、表示したくない場合は、ホームディレクトリに「.hushlogin(~/.hushlogin)」という内容が空のファイルを作成しておけばいい。

$ sudo cp ○○.txt /etc/motd

○もっと"カコイイ"AAを表示する

アスキーアートやメッセージを表示する場合、/etc/motdは扱いやすい存在だが、つねに同じコンテンツしか表示できない。内容固定にもかかわらず「Message of The Day」とは、これいかに。ときどきメッセージが変わるほうがうれしくないだろうか? それに、アスキーアートのデザインは結構な手間がかかる。かんたんに日替わりの、しかも見映えがするものを表示できれば……

そんなときは「figlet」を利用しよう。パッケージマネージャー「Homebrew」の導入が前提となるが、インストールはコマンドライン1行で完了する。膨大な数のフォントファイル(アスキーアートの模様)が付属しているため、デザインにも飽きがこない。

$ brew install figlet

まずは、基本のオプションをマスターする。「-f」に続けて字体を指定すればいいのだが、ディレクトリ(/usr/local/opt/figlet/share/figlet/fonts)には膨大な数のファイルがあるため、「showfigfonts」コマンドを実行し、出力サンプルを確認してみよう。往年の3Dゲーム「DooM」やスタートレックTNGのロゴに似せたものなど、いい感じの字体が見つかるはずだ。

ただアスキーアート化するだけでは芸がないので、ついでに着色してみよう。基本的な使いかたは『\033[色コードm』で着色を開始し、figletのコマンドラインを記述、『\033[m』で着色終了というパターンだ。たとえば、「macOS」をtrekという字体で赤く表示するには、以下のとおりコマンドラインを実行する。「32」の部分を30から37の範囲で変更すれば、8色で表示できる。

$ echo -e "\033[31m`figlet -f trek macOS`\033[m"

これをログイン時に表示させるには、リスト1のようなシェルスクリプトを作成し、適当な場所(仮に「/Users/shinobu/.motdsh」とする)へ保存する。あとは「sudo crontab -e」を実行して実行サイクルと絶対パスを記述し、chmodコマンドで実行権限を与えておけば(chmod +x /Users/shinobu/.motdsh)、一定間隔で更新されるようになるはずだ。

リスト1:/etc/motdを更新するシェルスクリプト

#!/bin/bash

DATE='/bin/date'
FIGLET='/usr/local/bin/figlet'
HOSTNAME='/bin/hostname'
UNAME='/usr/bin/uname'

echo "
$(${FIGLET} -c -f slant $(${HOSTNAME} -s))
Motd last updated = $(${DATE})
Architecture = $(${UNAME} -mps)
" > /etc/motd(海上忍)

    ランキングIT・インターネット

    前日のランキングへ

    ニュース設定