UNIX系 CUI環境のpackage/toolまとめ(X/Wayland無し環境)

## 序
UNIX系システムでGUI環境(X,wayland)をインストールする事なく、日本語表示・入力、メール、Webページ閲覧、静止画表示、音声再生、動画再生などができるCUI環境を構築するためのパッケージやツールを包括的にまとめてみました。ロースペックPC、サーバ類などのGUI環境を入れたくない（入れられない）場合や、UNIX系の修行に活用できれば幸いです。
※自分の備忘録でもありますが、追加情報や違っている等あれば教えて下さい。
※CUIなツールはコンパイルにも時間がそれ程かからないものが多いのですが、パッケージがあれば管理が楽になるので、パッケージ情報をメインにしています。


## 日本語表示可能なターミナル
CUIオンリーなターミナル上で日本語・中国語・ハングル(CJK)等の文字を表示させるには、マルチバイト文字に対応するターミナルに変更する必要があります。それらの状況と併せ画像表示に有用なsixel対応の情報と表示色数も加えてあります。尚、バイナリパッケージ有無はDebian/Ubuntu系(主にDebian),Arch Linuxと一部FreeBSD状況です。ソースからコンパイルするしか無い場合は表では　X　表示としてます。

| 名称 | Debian | Arch | UTF-8 | 表示色 | sixel対応 | フォント | 備考 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|--|
| fbterm | ○ | aur | ○ | 256(デフォ16？)  | X | ベクター|この中では一番ネットの情報が多い。ただ以降のものより表示が乱れることが多い気がする。|
| kmscon | △ | aur | ○ | 256 | X | ベクター |Archwikiに設定等記載されているので設定はしやすい(Archは2023.5頃からaurに変更)。Debianは12から,ubuntuは22.10からaptでインストールできるようになった。但し、Debianではインストールすると、デフォルトターミナルがこれに切り替わる。|
| yaft | X | aur | ○ | 256 | ○ | ビットマップ(BDFを変換し埋め込む？) | 開発者日本人。[unifont](https://unifoundry.com/unifont/)に変更すると世界の文字が表示できる。フォント変更するには再コンパイル必要。FreeBSDも注意事項を確認・設定しコンパイルで使える。 |
| mlterm-fb| X | aur | ○ | 256 | △ | ベクター/ビットマップ | どのディストリビューションも公式バイナリはX版のみ、fb版やsiexl対応にするためにはmlterm(Archはaur)のconfigur条件を設定しコンパイルする必要あり。 |
| zhcon | ○ | aur | ○ | ?(16?) | X | ビットマップ？ | 開発者中華系の人らしい |
| vt(4)| - | - | ○ | 16 | X | ビットマップ(fnt形式のフォント) |番外：FreeBSDのみ。ver11頃からの標準ターミナル。日本語を含むフォントに変更すればすぐ表示可。256色表示はカーネルから再コンパイルすればできるらしい。|

:::note info
・sixelに対応していなくても画像表示・動画再生は可能です。sixelについては関連URLを参照下さい。
・sixelに対応してるターミナルでも、tmux/screenと組み合わせて使う場合は、以下のようになります。tmuxでは2019/12頃以降sixel関係が追加され、最新ソース(tmux3.4)でかつコンパイル時のオプションでsixelを有効(./configure --enable-sixel)にすればsixel対応になります。但し、各ディストロの標準パッケージの元となっているリリース版tmux3.3aはsixel対応になってません(2024/2頃に最新リリース版は3.4になりました。ubuntu24.04LTSではsixel対応してるようです)。screenの場合はsixel関連URLのfork版をコンパイルすればOKの様です。
・表示色やsixel対応などは、細かく確認してませんので、間違っているかもしれません。
・その他に、Gentoo Linux では、カーネルにパッチを当てたlinux-cjkttyを使えばUTF-8な日本語が表示できるようです(Plamo Linux7以降やqbilinuxでも採用してるらしいですが詳細は不明です）。又、fbpad、bogl-bterm、noshもあるようですが、マイナーで情報が非常に少くなく、マルチバイト文字も表示できるか不明です。jfbtermやunicon も検索すると出る事がありますが、古くて現状では対応してないです。
・emacs使いの方は、日本語入力までいける様です。ただ、全く使わないので調べていません（自分はvi系しか使わない）。
:::

## 日本語入力

CUIのみ環境での日本語の入力方法は非常に限られていて、IMFのuim-fepとIMEのanthy(uim-anthy)かmozc(uim-mozc,uim-mozc-ut2)の組み合わせがほとんどです。まとめると以下の様になります。skk系はほとんど調査してません。

| 名称 | Debian | Arch | Free BSD | 備考 |
|:-:|:-:|:-:|:-:|--|
| uim-fep | ○ | aur | ○ |IMF。ArchLinux/FreeBSDは uimで一緒に入る。Archの場合は(FreeBSDも？)そのままだとqt系のパッケージも入るので、嫌ならconfigure条件を見直して入れた方が良い。|
| uim-mozc | ○ | aur | ○ |IME。anthyより変換にクセが少なく、実質的にはこれ一択かも。2023.2確認でArchではmozc関係がfcitxのみになった模様(aur含め)。|
| uim-mozc-ut2 | X | aur | X |IME。Mozcのシステム辞書を拡張したもの。|
| uim-anthy | ○ | ○ | ○ |IME。Archは anthy で入れる。|
| yaskk | X | X | X |yaftの開発者(日本人)が作っている。skk系のようですが、辞書も自分で作らなければならない？らしく、実際に使ってる情報も見つからずよくわかりません。|

:::note info
・uim-fepはターミナルの種類やターミナルマルチプレクサ(tmux,screen)との相性？設定の問題？とかある様で、実行順を変えたりしないと、画面の一部が乱れたりして、一筋縄で行かない場合もある様です。
・mlterm-fb　を使うなら　ibus/fcitx とかのGUI と同じものが使える様でが、設定が上手く無いのか、自分の環境では上手くいってません。
・その他に、kon、kkc、kinput2、whizがあるようですが、古くて使えなかったり、情報が少なくてよく分かりません。
:::

## メールクライアント
ArchLinux の List of applications 等を見ると結構あります。一部のみピックアップします。
| 名称 | Debian | Arch | FreeBSD | 備考 |
|:-:|:-:|:-:|:-:|--|
| Alpine | ○ | aur | ○ |Archのaurはapline-git。設定しやすい。|
| Mutt | ○ | ○ | ○ |外部アプリケーションと組み合わせで色々できる。自由度が高い分、設定に難儀してしまう(自分にとっては)。|
| NeoMutt | ○ | ○ | ○ |Muttの全てのパッチを取り込んだもの。同上。|
| aerc | ○ | ○ | ○ |発展途上の様ですが、設定もしやすいです。初期設定ではimapしか無く、pop3はgetmailなどで取得すれば見れると思われます。詳細は確認中。|
| Himalaya | X | ○ | X |Rustで書かれた新しい？CLIメーラーの様です。詳細は不明。|
| meli | ○ | aur | X |Rustで書かれた新しい？CLIメーラーの様です。詳細は不明。公式サイトでシュミレーションできる。|

:::note info
・GUIの多機能メールクライアントと違い、単体では多くの機能が無かったり、あってもおまけ程度だったりします。但し、単機能の外部アプリケーションと組み合わせると、多量のメールでも高速に処理ができるようになります。
・今時CLIメーラーを使う人は英語圏も含めてレアなため、新しめの下の３つ(aerc,Himalaya,meli)は公式サイト以外の情報が少なく、結構大変かもしれません。
:::

## Web閲覧
ターミナル上でWebページの閲覧にはかなり制限があります。ほとんどがcss、javascript、画像表示に対応しておらず、レイアウトが崩れ、GUIなアプリと比べるとかなり見にくくなります(その分動作は軽いですが)。
| 名称 | Debian | Arch | FreeBSD | 備考 |
|:-:|:-:|:-:|:-:|--|
| w3m | ○ | ○ | ○ |開発者が日本人。tableタグに対応。ページャーにも使える。画像表示のできる w3m-img もあるが色々必要らしい。X上のターミナルで動かす分には画像は表示される。他に、configureオプションで --enable-image が設定されてコンパイルされてると、sixel を使って画像表示もできるらしい(起動は $ w3m -sixel http://...)。Archは設定されている様だが他のデストリは未確認。|
| lynx | ○ | ○ | ○ |日本語表示も問題無い。古くからあり、今でも修正されており一番安定してると思われます。tableタグに対応してない。|
| elinks | ○ | ○ | ○ |日本語表示も問題無い(linksからのフォーク,本家linksは日本語表示できない)が、日本語検索は一手間設定しないと上手くできないかもしれない。cssにも一部対応しているらしい。メニュー表示できる。|
| netsurf-fb | ○ | aur | X |netsurfのフレームバッファ版。単純起動だとDebian11/12で動作せず、フレームバッファ関係の設定が必要と思われる。独自のWebエンジンを持ってる。|

:::note info
番外
・browsh：Firefoxをヘッドレスモード(簡単に言うと非表示モード)で動かして、それを元に表示させているらしいです。この為レイアウト崩れはほとんど無いと思われます(画像はASCIIアート？で粗い)。Firefoxのインストールとそれを問題なく動作させる環境も作る必要があるので、そのままではGUI環境もかなり入る様です。但し、Browshが配布するDockerイメージを使うとCLIオンリー環境のままでも使える様です。詳細は[Gigazineサイトを参照](https://gigazine.net/news/20201119-browsh/)してください。(Deb/Ubntu:X、Arch:aur、FreeBSD:○)
・cutycap：webkitのエンジンを使用してXの無い環境でもWebページを画像キャプチャできる。一部Qt関係のパッケージはインストールされる。キャプチャした画像を、静止画画像の表示方法で見れば、GUI環境に近い表示が見られるかも。常用は厳しいと思いますが、どうしてもテキストブラウザだと分かりにくいページを見るには解決策になるかもしれません。(Deb/Ubntu:X、Arch:aur[cutycapt-qt5-git]、FreeBSD:X)。
・seleniumでGUIブラウザ(FireFox,chromium等)をheadlessモード動かせれば、Webページを画像キャプチャできるので、上と似たことができるとは思います。
:::


## 静止画像の表示
sixelを使わない・使えない場合は、フレームバッファ領域を直接操作し描画するものがほとんどの為、ユーザーがrootやvideoなどの権限のあるグループに入ってないと表示できない場合があります（入れない場合はsudo経由等で実行する必要があります)。制限があるので自分自身で組み合わせを色々試して許容できるものを見つけるしかありません(tmux/screenで画面分割するなら尚更です)。まとめると以下の様になります。
| 名称 | Debian | Arch | FreeBSD | 備考 |
|:-:|:-:|:-:|:-:|--|
| fbi | ○ | aur | X |ArchLinuxは他のツールも含んだfbidaで入る。別画面で全画面表示。kmsconとの併用ではフレームバッファ関係の設定が必要と思われる（そのままだと表示されない）。|
| chafa | ○ | ○ | ○ |sixel対応のターミナルと合わせるとかなり綺麗に表示される様。それ以外は粗くなる。|
| tiv | X | aur | X |表示画像は粗い。ターミナル上で表示可能。|
| timg | X  | aur | ○ |表示画像は粗い。ターミナル上で表示可能。|
| catimg | ○ | X | X |表示画像は粗い。ターミナル上で表示可能。|
| pxl | X | aur | X |アスペクト比が若干崩れる様。別画面で表示らしい。|
| fbv | X | X | X |調査不足で?|
| jfbview | X | aur | X |フレームバッファ上でPDFと画像が表示できるらしい。|
| sixel系 | ○ | ○ | ○ | ←はlibsixel。対応するターミナルを使いimg2sixelコマンド等でターミナル上で画像表示ができる。ImageMagickとlsixでサムネイルで一覧も表示できる。さらに色々やれば動画も含めた様々な応用ができるようになる。|

:::note info
番外：画像をアスキーアートに変換して表示するなら以下のものがあります。
・jp2a(Deb/Ubntu/Arch/FreeBSD全て○)
・cacaview(Deb/Ubntu[caca-utils]、Arch/FreeBSD[libcaca]で入る)
又[エスケープシーケンスとスクリプトで表示させるという手](https://qiita.com/woxtu/items/f049bf5f89003fb52fdd "ターミナルに画像を表示する")もあります。
:::

## 動画/音声再生
以下のものがあります。動画の場合はほとんどが全画面での再生となります。分割した画面内での再生はsixel系でかつ色々の事をしないと難しい様です。GPU動画再生支援は環境による様です。又インストールする際も依存関係でどこまでGUI関係のパッケージが入るのか不明です。音楽・音声まではいいのですが、動画再生はあまり期待しない方がいいです。
| 名称 | Debian | Arch | FreeBSD | 備考 |
|:-:|:-:|:-:|:-:|--|
| mpv | ○ | ○ | ○ |実行時又は設定で出力先をフレームバッファ領域などに設定する必要がある。|
| mplayer | ○ | ○ | ○ |同上。|
| vlc-nox | X  | aur | X |vlcをX関係無しでインストールできる。再生はcvlcコマンドを使うと思われる(vlcのインストールでもcvlcは使えるが、Xの依存関係も多くインストールされる)。|
| cmus | ○ | ○ | ○ |音声専用プレーヤー。|
| omxplayer | △ | △ | X |raspberry pi の旧32bitOSの場合のみ。ハードウェア動画再生支援も効きFHDもスムーズに再生できる。ライセンスキー購入(2.4ユーロ,約320円)でmpeg2もハードウェア動画再生支援できる様になる。Raspberry Pi OSでは無くなった模様。|

:::note info
番外：動画をアスキーアートに変換して再生。
コマンドを内包させれば、アスキーアートで再生できます。以下はmplayerとcaca、youtube-dlを組み合わせた再生例（mpvでもcacaと組み合わせ可。※youtube-dlはもう動作しなくなっている。フォークのyt-dlpでできるかは未確認)。
mplayer -quiet -vo caca \`youtube-dl -o test1.mp4 "https://www.youtube.com/(動画アドレス)"`
:::

## その他のCUI/CLIツール
個人的に使うものや、有用そうなものをとりあえずリストアップしてみました(メジャーなものは除く)。それぞれのディストロにバイナリーがあるかまで細かく調べてないので了承下さい。
| 種類 | 名称 | 備考 |
|:-:|:-:|--|
| クラウドストレージマウント|rclone|Deb/Ubuntu:○、Arch:○,FreeBSD:○。google drive,onedrive等のクラウドストレージをマウントする。マウントされればターミナルより通常のコマンドでファイル操作等ができるようになる。|
|google サービス |google-cloud-cli|google社によるgoogleクラウドサービスを管理できるツール類。pythonベースのためそのバージョンにも依存する様。詳細確認中。|
| スクリーンショット|fbgrab|Deb/Ubuntu:X、Arch:○,FreeBSD:X。Debian11以上では↓のfbcatをインストールすると入る。|
| スクリーンショット|fbcat|Deb/Ubuntu:○、Arch:aur、FreeBSD:X。|
| スクリーンショット|raspi2png|raspberry pi専用|
| google検索|googler|ターミナル上でgoogle検索できるコマンドラインツール。|
| wiki検索|wikit|ターミナル上でwiki(ウィキペディア)を検索できるコマンドラインツール。検索結果は概要のみの表示らしい。|
| youtube関係|yewtube|Youtubeの動画・音楽の検索と再生(mps-youtubeはメンテされてなく動作しなくなっている様)。再生までするにはmplayerかmpvが必要。|
| youtube関係|yt-dlp|Youtubeの動画のダウロード(youtube-dlのフォーク、youtube-dlは開発が止まっている様で、Youtubeの動画をダウンロードできなくなっている)。オプションで動画のみ音声のみ等指定できる。|
| ファイル操作|ranger|キー操作でファイルのコピー・移動・削除等が行える。個人的にはほとんど使わなくなった。|
| ファイル操作|fd|同上。|
| csvデータ操作|csvkit|csv/tsvデータを表形式で表示したり、抽出、加工等行えるツール。awkと違いフィールド内にカンマや改行が入っていても問題なく扱える。|
| csvデータ操作|visidata|csv/tsvデータを表計算ソフトの様に扱えるpythonプログラム（日本語は？詳細未確認）。|
| 表計算|sc|GUIの表計算ソフトや旧Lotus1-2-3までの機能は無いらしい。|
| SNS/twitter|RainbowStream|Twitterストリーミング・クライアント。|
| SNS/facebook|fbcmd|Facebookクライアント。|
| SNS/LINE|(LINE Notify)|LINE Notifyのマイページからトークンを発行すると、curlコマンドでメッセージが送信できる。|

## 参考サイト
・[Arch Linux アプリケーション一覧](https://wiki.archlinux.jp/index.php/アプリケーション一覧)
・[sixel (libsixel) 関係](https://github.com/libsixel/libsixel)
・[u+のブログ　ターミナル上に画像を表示する方法いろいろ](https://u10e10.hatenablog.com/entry/2016/12/14/033342)
・[俺的備忘録 〜なんかいろいろ〜　Linuxのターミナルコンソール（CUI）上でYoutubeやTwitter、Facebookを利用する方法](https://orebibou.com/ja/home/201409/20140907_001/)
・その他、Debian、Ubuntu、ArchLinux,FreeBSD等本家のフォーラムやドキュメント、Reddit、stackoverflowなどなど。