先日、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 Console | GNOME | GNOMEをちょっと変えてみる |
---|---|---|---|
0 | ■000000(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つとってもそういう考え方だと記憶しているので、恐らくは。
仕組みが分かればもっと色々なことができるのだろうけれども、今回はこのくらいで。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他