Ubuntu

Ubuntu22.04 コンソールの色を変える

先日、GRUBのカスタマイズをしていて色々とトラブったので、LiveCDから起動したUbuntuのコンソールで何度も操作をした。
その時に、lsコマンドでディレクトリがよく見えないと思った。

モニターの輝度とコントラストを上げれば見えるのだろうけれども、他の解決方法はないものかと考えた。



広告


現状の確認

Ubuntu 22.04 LTS serverにログインしたところ、ターミナルタイプはlinuxだった。
フレームバッファーで実行されるLinux 仮想コンソール(Virtual Console/Virtual Terminal)ではこれが表示されるらしい。

$ echo $TERM
linux

メインPCは、気分によってUbuntuデスクトップ使っている。
GNOME Terminalを起動して確認してみたところ、ターミナルタイプはxterm-256colorだった。

$ echo $TERM
xterm-256color

日頃、サーバー達を操作するときはTera Term。
SSHログインしたところ、ターミナルタイプはxtermだった。

$ echo $TERM
xterm

TERATERM.iniに以下が書いてあるので、そうなっているらしい。

;	  Telnet terminal type
;TermType=vt100
TermType=xterm

カラーパレット

カラー表示はされている方が良いと思っていて、それが見やすい色だといいなとも思っているので、自分にとって最適な色を決めたい。
UbuntuデスクトップでGNOME Terminalの設定を見てみたら、ビルトインされている色定義から、どんな色が使われているのかが分かった。

パレット番号Linux ConsoleGNOMEGNOMEをちょっと変えてみる
0000000(0,0,0)171421(23,20,33)000000(0,0,0)
1■AA0000(170,0,0)■C01C28(192,28,40)■CC1D2C(204,29,44)
2■00AA00(0,170,0)■26A269(38,162,105)
3■AA5500(170,85,0)■A2734C(162,115,76)
4■0000AA(0,0,170)■12488B(18,72,139)■1867C2(24,103,194)
5■AA00AA(170,0,170)■A347BA(168,71,186)■AA44AA(170,68,170)
6■00AAAA(0,170,170)■2AA1B3(42,161,179)
7■AAAAAA(170,170,170)■D0CFCC(208,207,204)
8■555555(85,85,85)■5E5C64(94,92,100)■777777(119,119,119)
9■FF5555(255,85,85)■F66151(246,97,81)
A■55FF55(85,255,85)■33D17A(61,209,122)
B■FFFF55(255,255,85)■E9AD0C(233,173,12)
C■5555FF(85,85,255)■2A7BDE(42,123,222)2D85F1(45,133,241)
D■FF55FF(255,85,255)■C061CB(192,97,203)■D16ADE(209,106,222)
E■55FFFF(85,255,255)■33C7DE(51,199,222)■38E0F9(56,224,249)
F■FFFFFF(255,255,255)■FFFFFF(255,255,255)

モニターにもよるだろうし、目の見え方にもよるだろうけれども、個人的にはLinux ConsoleのNo.4が一番読みづらく(ほとんど見えない)、No.1と5も読みづらい。
そしてGNOMEはとても良い色を選択しているように思ったが、もう少し明るくしてみたいと考えた。

以降、それぞれのターミナルで色を指定していく。

linux(tty, Virtual Console, Virtual Terminal)

Ubuntuに直接ログインしたときに使用するコンソール。
色々と呼ばれているけれど、ttyが正しいのかなと思いつつ、どれが正解かよく分からなかったのでタイトルに列挙している。

稼働しているサーバー

Ubuntuのttyにログインした時に、カラーパレットの色が変わるようにするため、.bashrcに以下を追加した。

~/.bashrc

if [ "$TERM" = "linux" ]; then
  echo -en "\e]P0000000"
  echo -en "\e]P1CC1D2C"
  echo -en "\e]P226A269"
  echo -en "\e]P3A2734C"
  echo -en "\e]P41867C2"
  echo -en "\e]P5AA44AA"
  echo -en "\e]P62AA1B3"
  echo -en "\e]P7D0CFCC"
  echo -en "\e]P8777777"
  echo -en "\e]P9F66151"
  echo -en "\e]PA33D17A"
  echo -en "\e]PBE9AD0C"
  echo -en "\e]PC2D85F1"
  echo -en "\e]PDD16ADE"
  echo -en "\e]PE38E0F9"
  echo -en "\e]PFFFFFFF"
fi

※最後に追加。

これによってlsコマンドの結果が読みやすくなった。
vimのカラー表示にも影響があり、全体に少し色が薄く明るくなったように見える。

これを手打ちするのは面倒な気がしたので、ダウンロードできるようにした。
以下でダウンロードしたファイルを、.bashrcに追記している。

$ wget https://gitea.rohhie.net/rohhie/toybox/raw/branch/main/ccp.sh
$ cat ccp.sh >> .bashrc

※ファイル1つ落とすのにちょっと文字列が長すぎるとは思うけれど、他に置き場もないので仕方がない。

スクリプトを追記してしまえば用事は済むので、ccp.shは削除すればいいと思う。

LiveCDのShell

先日、Ubuntu 22.04 serverのCDから仮想PCを立ち上げて、Shellに入ってちょっとしたそうさをすることがあった。
こんな場合には…

$ loadkeys jp
$ wget https://gitea.rohhie.net/rohhie/toybox/raw/branch/main/ccp.sh
$ bash ccp.sh

とすると、一時的にレイアウトが日本語キーボードになり、カラーパレットも変わって、操作がしやすくなるかもしれない。

GNOME Terminal

カラーパレットの選択肢を増やしたいと思ったが、それはできないようだった。
Ask Ubuntu / How can I create a "built-in" color scheme for GNOME Terminal?

設定をスクリプトでいじる場合、どうやらdconfコマンドを使うようだった。
ちゃんと分かっていればできるのだと思うけれど、何かあったらちょっと面倒(感覚的にはWindowsのレジストリエディター)。

ここまで調べたところで、画面で設定するのが安全そうだと考えて、そうすることにした。

  • 設定画面を開き、使用中のプロファイルを選ぶ。
  • Colorsタブを選ぶ。
  • Built-in schemesでGNOMEを選択する。
  • Color paletteのなかから変更する色を選択し、16進数で色を入力する。

元々がどんなパレットだったのかによるけれども、結果としてはlsコマンドの結果が読みやすくなったように思う。
そして、vimのカラー表示にも影響があった。

Tera Term

Tera TermはTERATERM.INIのANSIColor項目でカラーパレットを設定できた。

TERATERM.INI

;ANSIColor=0,0,0,0, 1,255,0,0, 2,0,255,0, 3,255,255,0, 4,128,128,255, 5,255,0,255, 6,0,255,255, 7,255,255,255, 8,64,64,64, 9,192,0,0, 10,0,192,0, 11,192,192,0, 12,64,64,192, 13,192,0,192, 14,0,192,192, 15,192,192,192
ANSIColor=0,0,0,0, 1,204,29,44, 2,38,162,105, 3,162,115,76, 4,24,103,194, 5,170,68,170, 6,42,161,179, 7,208,207,204, 8,119,119,119, 9,246,97,81, 10,61,209,122, 11,233,173,12, 12,45,133,241, 13,209,106,222, 14,56,224,249, 15,255,255,255

Tera Termの設定ファイルはここにある。
%ProgramFiles(x86)%\teraterm

ただし、このディレクトリでバーチャルストアという機能が働くようだ。
%LOCALAPPDATA%\VirtualStore\Program Files (x86)\teraterm

本当にファイルを更新できたか、それを起動時に読み込んでいるか、という基本的なところを確かめる。

TeraTerm Menuを使い、端末ごとに背景色を少し変えていたりする。
この場合には、適用する設定ファイルを変えていたりするのだが、それがどこのファイルを読み取っているのか確認する。
今回、バーチャルストアのディレクトリと、普通のディレクトリの2箇所にTERATERM-custom.INIが幾つか置いてあって、TeraTerm Menu設定がバラバラに指定してあることが分かったので、全てのファイルを普通のディレクトリに移し、指定をあわせた。

これで、GNOME Terminalと同じ色で表示されるようになった。
vimへの影響も同じだった。

調べたこと

ttyのパレットを変えること

ttyの色を変えたいと思って探していたときに見つけた投稿。
ask ubuntu / How can I change the TTY colors?
Arch Linux / コンソールのカラー出力

最後に行われているclearを実行することで、画面全体がこの色になるそうだ。

~/.bashrc ※最後に追加

if [ "$TERM" = "linux" ]; then
    echo -en "\e]P0232323" #black
    echo -en "\e]P1D75F5F" #darkred
    echo -en "\e]P287AF5F" #darkgreen
    echo -en "\e]P3D7AF87" #brown
    echo -en "\e]P48787AF" #darkblue
    echo -en "\e]P5BD53A5" #darkmagenta
    echo -en "\e]P65FAFAF" #darkcyan
    echo -en "\e]P7E5E5E5" #lightgrey
    echo -en "\e]P82B2B2B" #darkgrey
    echo -en "\e]P9E33636" #red
    echo -en "\e]PA98E34D" #green
    echo -en "\e]PBFFD75F" #yellow
    echo -en "\e]PC7373C9" #blue
    echo -en "\e]PDD633B2" #magenta
    echo -en "\e]PE44C9C9" #cyan
    echo -en "\e]PFFFFFFF" #white
    clear #for background artifacting
fi

表示する文字の色を変える

ttyの色を変えることを調べているときに、こんな投稿を見つけた。
Unix & Linux / Which terminal type am I using?

xtermで以下を入力してみたところ、ターミナルの出力が赤文字になった。

$ tput setf 4; echo hi

terminfoについて見ていたら、/etc/terminfi/READMEというファイルが見つかった。

This directory is for system-local terminfo descriptions. By default, ncurses will search ${HOME}/.terminfo first, then /etc/terminfo (this directory), then /lib/terminfo, and last not least /usr/share/terminfo.

このディレクトリは、システムローカルのterminfo記述のためのものである。デフォルトでは、ncursesは最初に${HOME}/.terminfoを検索し、次に/etc/terminfo(このディレクトリ)を検索し、次に/lib/terminfoを検索し、最後に/usr/share/terminfoを検索します。

DeepL先生の翻訳

$TERMに入っていたターミナルタイプが見つからないと思っていたのだけれど、/lib/terminfoに入っていた。

-rw-r--r-- 1 root root 1740 May 17 03:45 /lib/terminfo/l/linux
-rw-r--r-- 1 root root 3772 May 17 03:45 /lib/terminfo/x/xterm

設定値は、tputで見られるようだ。

$ tput colors
8

※これはlinuxでもxtermでも同じ結果だった。

先程のsetfというのは、set_foregroundのcapnameで、これで文字色を設定したのだと分かった。

ここまでみてみたけれども、まだちょっと仕組みと結果がつながらないなー。

さいごに

整理してみた結果で考えてみると、Linuxそのものは「文字や背景をどんな色で表示するのか」という信号を送ってくるので、それをどの「ような色で表示するのか」をターミナルの側で決めれば良いということのようだ。
出力されるメッセージ1つとってもそういう考え方だと記憶しているので、恐らくは。

仕組みが分かればもっと色々なことができるのだろうけれども、今回はこのくらいで。

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他