Linux あれこれ

Linux 関連の備忘録です。

VirtualBox の「Arch Linux」で「fbterm」をビルド〈H122-2〉

登録日: 2021-06-21 更新日: 2021-07-04

前回、「Xubuntu 20.04.2 LTS」に、ハードウェアの違いを仮想マシンにより吸収できる「VirtualBox」をインストール しました。

そのVirtualBox にインストールした「Arch Linux」において、仮想コンソールで日本語表示できないため、「fbterm」をビルドしてインストールすることにしました。

その備忘録です。

-

-

使用したPC は「ASUS Chromebox CN60 」で、プロセッサは第4世代の古い「Intel Celeron 2955U 」です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

「VirtualBox のインストール」

「Arch Linux のインストール」

「仮想コンソールで気づいたこと」

「日本語の文字化け対策として、「fbterm」をインストール:」

「インストール後の設定:」

「参考: VirtualBox で仮想マシンをクローンするやり方:」

「参考: 手動でビルドする場合:」

「参考: 「fbterm」で色を使う設定:」

「まとめ へ」

-

「目次詳細 へ」

-

-


VirtualBox の「Arch Linux」の画面:

-

インストール完了後の画面:

→味気ないです。画面の上下にあるのは「VirtualBox」のメニューバーと状態パネルです。

デスクトップ環境は自由に選べますし、このまま使うのもアリです。

このまま使うのなら、日本語表示できた方が便利です。

-

ホストOS : Xubuntu 20.04.2 LTS
ゲストOS : Arch Linux(2021.05.01 のiso イメージ) ←(作業時のバージョン)

→ローリングリリースにつき、バージョン表記はありません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -

-

現時点のバージョンを表示:

-

Arch Linux はローリングリリースにつき更新されて行くので、現時点のバージョンを表示しておきます:

2021-06-29 現在:

$ cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://www.archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
LOGO=archlinux

$ uname -r 
5.12.12-arch1-1

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --

-

Arch Linux について:

-

Arch Linux Wiki よりの抜粋:

-

1). 特徴:

  • Arch Linux は、「シンプルで無駄の無いシステム」を目指しているようです。

→そのためか、インストーラだけでなく、GUI 操作のデスクトップ環境も公式には提供されていません。代わりに「素早くアクセスして編集できるように配置された、能率的な構成ファイル群」になっているとのこと。

  • Arch Linux は、「ローリングリリース」と呼ばれるリリース方式を採用。

-

2). インストールについて:

Arch Linux のインストール作業は、コマンドを入力するCUI 操作になります。マウスも使えません。

インストールするときのパッケージグループの選択もですが、それだけでなく、 その後のシステムの設定やデスクトップ環境などのソフトウェアの追加は、個人が必要に応じて、手動で行ないます。

つまり、スキルがあればユーザが望むシステムを構築できます。 逆に、(どうやっていいのか最初はわからないので)敷居は高く、インストールでつまずきやすくなります。

-

3). AUR

一般ユーザ(アプリの開発者)によって作られた「PKGBUILD」スクリプトを収容するためのArch User Repository(AUR)という補完的なリポジトリが提供されています。

AURに置かれて、ユーザから十分な投票を受けると「community」リポジトリに昇格(登録)できます。それだけでなく、ライセンスの関係を避けるためワザと意図的にaur に置かれているアプリもあります(インストールするのはユーザの意思になるので、ライセンス的に難しくてもリポジトリに登録しやすくなります)。

-

4). PKGBUILD スクリプトについて:

Arch Build System (ABS) の機能で使われる「PKGBUILD」スクリプトは、依存パッケージのリスト(依存の解決に必要なパッケージのインストール)と、ソースをArch Linuxアーキテクチャx86-64)に適合させる処理(依存するパッケージと、ビルドと、パッケージ化するための情報と、インストールの手順)を開発者または登録者が記述するようにルール化されています。

これによりユーザは、ソースコードからのビルド作業を簡略化でき、さらにソフトウェアを「Pacman」のパッケージとしてインストール(パッケージ管理)できるようになります。

-

5). yay

AUR パッケージの管理を補助する「AUR ヘルパー」と呼ばれるアプリのひとつです。Arch Linux の公式リポジトリに登録はなく、非公式のAUR リポジトリにあるため、最初はAUR リポジトリを扱える管理ツールがないため、ダウンロードしてのインストールになります。

インストール後はこのツールを使うことで、AUR アプリの管理が公式リポジトリ並に楽になります。また、公式リポジトリを管理するpacman とパラメータが同じで、pacman を内部で起動しているため、使うコマンドを yay に一本化することもできます。

ただし、「Manjaro Linux」と違い、「Arch Linux」の場合は pacman をメインにした方が良かったケース(システム更新後にうまく動かないこと)が多いです。「Arch Linux」ではAUR があまり推奨されていないからだろうと思います。(というか、「Arch Linux」を選んでいる人は、アプリのビルド作業を苦にする人が少ないとも言えます)

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ---

-

「Arch Linux」のインストール

-

「前回の作業を参照:」

-

インストール完了後、仮想コンソールに、ログイン画面が表示

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----

-

Arch Linux の仮想コンソールについて

-

  • 「Arch Linux」のインストールが完了しても、デスクトップ環境は立ち上がりません。

  • 表示されるのは、「仮想コンソール」と言われるコマンド画面で、 これが「Arch Linux」のログイン画面となります。

デスクトップ環境をインストールした場合は、並行(マルチ)で切り替えできます。 Ctrl+Alt+F1 〜F7 で「tty1 〜tty7」の画面に対応しています。通常は tty7 にてデスクトップ画面が起動されています。 VirtualBox ではtty1 のようです。

ちなみに、VirtualBox での仮想端末の画面の切り替え方は不明です。ホストOS 側が切り替わってしまうので、不便です。キーの割り当てを変えることができるのかは不明。

-

もしくは、ゲストOS をクローンしておいて、VM VirtualBox マネージャで仮想マシンを切り替える やり方が使えそう。

「Arch Linux」のインストール完了時にスナップショットを取っておいても良かったかも。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -----

-

仮想コンソールで気づいたこと

-

1). マウスが使えないので不便。スクロールバーがないので表示をさかのぼれません

コンソールをメインで使うのなら、マウスのサポートアプリが必要かも。

-

2). 問題: 「仮想コンソール」が安定していません

→端末で勝手に改行が入力され(VirtualBox マネージャのビュワー画面を見ているとわかりやすいです)、ひどくなるとキーを付け付けなくなります。これが一番の問題。PC 固有の問題かはわかりません。

特にcat (less、more 等)を使うとキーを受け付けなくなるので操作性が落ちます。それらのコマンドを極力使わないでインストールしました。ライブUSB メモリで立ち上げたときも同じ現象が発生。なぜかログ記録を開始すると発生が少なくなる印象。

以前、BSD OS のインストール時に特定のマウス(M100r) が悪さをしていたことがあったので、日本語キーボードとマウスを違うタイプに交換してみましたが変化なし。

VirtualBox のみで起こるのか、他のPC ではどうなのか、日本語環境だけなのか、 英語キーボードで英語環境にするとどうか、などは未確認。

-

3). 問題: 仮想コンソールで日本語が文字化け

→仮想コンソールはマルチバイト(つまり日本語)に未対応みたい。 もしかしたら対応しているけど設定不足?。

-

→メッセージを確認したいときは英語表示にすればよいです:
# LANG=C pacman -Syu
:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multiliv is up to date
:: Starting full system upgrade...
 there is nothing to do

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

-

日本語の文字化け対策として、「fbterm」をインストール:

-

1). 「fbterm」について

CUI のデフォルトの仮想端末(VT) は、getty による「仮想コンソール」が使われていますが、これはマルチバイトに未対応なのか、日本語フォントがインストールされていても文字化けします。

  • 「fbterm」を使うと、文字化けせずに日本語表示できるとの情報。

現在、Ubuntuリポジトリには登録がありますが、Arch Linux の公式リポジトリには2021年5月時点で登録がありません。

-

2). 「fbterm」はAUR から削除されました

以前AUR にあった「fbterm-git」はメンテが停止してだいぶ経ち、AUR から削除されました。

→インストールできなくなりました。

-

追記:

2021-06-19 確認:

再び、AUR に新規に登録されました。作業が終わってから見つかったので、…。

-

3). 管理者はいませんが、GitHubアーカイブが残っていました:

GitHub fbterm-git

バージョンは、当時のv1.7 (v1.7.0 以前) のままです。更新されていません。

-

4). PKGBUILD をWeb アクセス履歴から入手:

  • PKGBUILD が無くてもビルドしてインストールできますが、「PKGBUILD」があると依存パッケージの解決が楽ですし、pacman で依存の管理や削除ができます。

-

(1). 履歴から、AUR Home の「fbterm-git」の過去のページ(2015-08-02) を表示:

→いつまで履歴が保持されるかはわかりません。早めにダウンロードしました。

依存関係 (5):
    fontconfig
    gpm (make)
    libx86 (make)
    gpm (optional) – mouse selection support
    libx86 (optional) – accelerator with VESA compatible video card

ソース:
    git+https://github.com/izmntuk/fbterm
    INSTALL

-

(2). 右の「Download tarball」をクリック

fbterm-git.tar.gz をダウンロード

-

(3). 展開:
$ cd ~/ダウンロード/
$ tar -zxvf fbterm-git.tar.gz
:
fbterm-git/
fbterm-git/INSTALL
fbterm-git/.SRCINFO
fbterm-git/PKGBUILD

-

(4). 確認:
$ cd ~/ダウンロード/fbterm-git/
$ ls -a
.  ..  .SRCINFO  INSTALL  PKGBUILD

→「INSTALL」と「PKGBUILD」がありました。

-

PKGBUILD の内容:
$ cat PKGBUILD
## Maintainer: N. Izumi aka izmntuk
pkgname=fbterm-git
pkgver=20150509
pkgrel=1
pkgdesc='A fast framebuffer-based terminal emulator for Linux'
arch=(x86_64 i686)
url='https://github.com/izmntuk/fbterm'
license=('GPL2')
depends=('fontconfig')
makedepends=('gpm' 'libx86')
conflicts=('fbterm')
provides=('fbterm')
optdepends=('libx86: accelerator with VESA compatible video card' 'gpm: mouse selection support')
install=INSTALL
source=('git+https://github.com/izmntuk/fbterm' 'INSTALL')
sha1sums=(SKIP SKIP)

pkgver() {
    cd "${srcdir}/fbterm"
    git log -1 --format="%cd" --date=short | sed 's|-||g'
}

build() {
    cd "${srcdir}/fbterm"
    ./configure --prefix=/usr
    make
}

package() {
    cd "${srcdir}/fbterm"
    install -Dm644 terminfo/fbterm "${pkgdir}/usr/share/terminfo/f/fbterm"
    make DESTDIR="${pkgdir}" TERMINFO="${pkgdir}/usr/share/terminfo" install
}

-

INSTALL の内容:
$ cat INSTALL
post_install() {
    cat <<EOF

==> To run fbterm as a non-root user, do:

sudo gpasswd -a YOUR_USERNAME video


==> To enable keyboard shortcuts for non-root users, do:

sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm

EOF
}

post_upgrade() {
    post_install $1
}

→インストール後に必要な設定みたい。

-

.SRCINFO の内容:
$ cat .SRCINFO
# Generated by makepkg 4.2.1
# Sat May  9 09:49:29 UTC 2015
pkgbase = fbterm-git
    pkgdesc = A fast framebuffer-based terminal emulator for Linux
    pkgver = 20150509
    pkgrel = 1
    url = https://github.com/izmntuk/fbterm
    install = INSTALL
    arch = x86_64
    arch = i686
    license = GPL2
    makedepends = gpm
    makedepends = libx86
    depends = fontconfig
    optdepends = libx86: accelerator with VESA compatible video card
    optdepends = gpm: mouse selection support
    provides = fbterm
    conflicts = fbterm
    source = git+https://github.com/izmntuk/fbterm
    source = INSTALL
    sha1sums = SKIP
    sha1sums = SKIP

pkgname = fbterm-git

→パッケージ化したときの情報

-

5). 「fbterm-git」のパッケージの作成の準備:

$ cd ~/ダウンロード/fbterm-git/

$ ls -a
.  ..  .SRCINFO  INSTALL  PKGBUILD

→PKGBUILD をそのまま使えば、ソース(v1.7) をリモートからダウンロードしてきます。

-

6). 「fbterm-git」のパッケージを作成:

$ cd ~/ダウンロード/fbterm-git/
$ makepkg -s

==> パッケージを作成: fbterm-git 20150509-1 (2021年06月18日 13時38分29秒)

==> 欠けている依存パッケージをインストール...
[sudo] パスワード:
パッケージ (1) libx86-1.1-8
:
configure: error: cannot find required auxiliary files: config.guess config.sub
make: *** [Makefile:232: config.status] エラー 1
==> エラー: build() で問題が発生しました。

-

7). 残念ながらビルドでエラー

「configure: error: cannot find required auxiliary files: config.guess config.sub」をネットで検索:

-

8). ビルドツールの「autoconf」を2.69 にダウングレードする必要がありました

→「downgrade」を使うと、ダウングレードできるみたい。

-

autoconf のバージョンを確認:
$ yay -Ss autoconf
:
core/autoconf 2.71-1 (645.2 KiB 2.2 MiB) [base-devel] (インストール済み)
    A GNU tool for automatically configuring source code

→バージョンは 2.71-1

-

バージョンを落とすための「downgrade」ツールの確認:
$ yay -Ss downgrade
:
aur/downgrade 10.0.0-1 (+592 9.57) 
    Bash script for downgrading one or more packages to a version in your cache or the A.L.A.

詳細表示:

$ yay -Si downgrade
:: AUR を検索...
リポジトリ           : aur
名前              : downgrade
キーワード           : なし
バージョン           : 10.0.0-1
説明              : Bash script for downgrading one or more packages to a version in your cache or the A.L.A.
URL             : https://github.com/pbrisbin/downgrade
AUR URL         : https://aur.archlinux.org/packages/downgrade
グループ            : なし
ライセンス           : GPL
提供              : なし
依存するパッケージ       : pacman-contrib
ビルド時の依存パッケージ    : なし
チェック時の依存パッケージ   : なし
任意の依存パッケージ      : sudo
衝突するパッケージ       : なし
メンテナ            : brisbin33
投票              : 592
人気度             : 9.566313
最初の投稿           : Thu 12 Nov 2009 10:48:57 AM JST
最終更新            : Thu 20 May 2021 06:06:39 PM JST
古いバージョン         : No

-

「downgrade」のインストール:
$ yay -S downgrade
:
パッケージ (1) pacman-contrib-1.4.0-3

パッケージ (1) downgrade-10.0.0-1

-

「autoconf」のダウングレード

ALAサーバーに置かれたアプリのバージョンの中から、使いたいバージョンを指定できます。

ALAサーバーの場所のデフォルトは「https://archive.archlinux.org

autoconf で指定できるバージョン: Index of /packages/a/autoconf/

-

現在のautoconf のバージョン:

$ autoconf --version
autoconf (GNU Autoconf) 2.71

-

「autoconf」をインストールした状態で実行します:

$ sudo downgrade 'autoconf=2.69-6'
:
警告: パッケージ autoconf のダウングレード (2.71-1 => 2.69-6)
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (1) autoconf-2.69-6
:
add autoconf to IgnorePkg? [y/N] 
$ autoconf --version
autoconf (GNU Autoconf) 2.69

コマンドラインオプションは、/etc/xdg/downgrade/downgrade.conf で永続的に設定できます:

$ cat /etc/xdg/downgrade/downgrade.conf

# /etc/xdg/downgrade/downgrade.conf
#
# Configuration file for downgrade
# See downgrade(8) for more information on arguments
# Defaults are shown, uncomment and define values as desired 

# --pacman pacman
# --pacman-conf /etc/pacman.conf 
# --pacman-cache /var/cache/pacman/pkg
# --pacman-log /var/log/pacman.log
# --maxdepth 1 
# --ala-url 'https://archive.archlinux.org'
# --ala-only 
# --cached-only 

-

9). 「fbterm-git」のパッケージを作成:

$ cd ~/ダウンロード/fbterm-git/
$ makepkg -s
:
vterm_states.cpp:43:1: エラー: narrowing conversion of ‘-1’ from ‘int’ to ‘u16’ {aka ‘short unsigned int’} [-Wnarrowing]
:

→ビルドでエラー

-

「vterm_states.cpp:43:1: エラー: narrowing conversion of ‘-1’ from ‘int’ to ‘u16’ {aka ‘short unsigned int’} [-Wnarrowing]」をネットで検索

→下記がヒット:

Debian Bug report logs - #811719 fbterm: FTBFS with GCC 6: narrowing conversion

→ソースに不具合があり、GCC6 ​​でビルドできません。

fbterm バージョン 1.7-2 で見つかりました(2016年1月20日 01:45)
fbterm バージョン 1.7-4 で修正済み

-

10). GitHub にあるソースは「v1.7」で不具合修正前につき、このままでは使えません

(2015年5月9日 までのマスターへのコミット)

-

11). Ubuntu ではメンテされているので、確認:

fbterm 1.7-4 source package in Ubuntu

-

ダウンロード:

fbterm_1.7-4.debian.tar.xz

-

チェックサム確認:
$ cd ~/ダウンロード/
$ sha256sum fbterm_1.7-4.debian.tar.xz
bdddf1524f40eab77e94617a747e8d0da8ae7f06686d4ece0552146a21d3e254  fbterm_1.7-4.debian.tar.xz

-

展開:
$ cd ~/ダウンロード/
$ tar xfJv fbterm_1.7-4.debian.tar.xz

$ ls
debian                                             
fbterm_1.7-4.debian.tar.xz

$ ls debian
README.Debian  changelog  control    dirs  patches  source
README.source  compat     copyright  docs  rules    watch

→展開すると「debian」フォルダが出来ました。中のソースは差分しかないみたい。

-

12). GCC6 ​​の不具合の修正差分がありました:

$ ls ~/ダウンロード/debian/patches/0001-Fix-build-with-gcc-6.patch

-

内容を確認:
$ cat ~/ダウンロード/debian/patches/0001-Fix-build-with-gcc-6.patch

From 69917d25c6f718572433262d86691bf24e72e4c8 Mon Sep 17 00:00:00 2001
From: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Date: Wed, 13 Jul 2016 12:02:10 +0900
Subject: [PATCH] Fix build with gcc-6

Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 src/lib/vterm.cpp        |  4 ++--
 src/lib/vterm_states.cpp | 18 +++++++++---------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/lib/vterm.cpp b/src/lib/vterm.cpp
index 3a5dcc7..f79f44c 100644
--- a/src/lib/vterm.cpp
+++ b/src/lib/vterm.cpp
@@ -68,13 +68,13 @@ u8 VTerm::control_map[MAX_CONTROL_CODE], VTerm::escape_map[NR_STATES][MAX_ESCAPE
 
 void VTerm::init_state()
 {
-   for (u8 i = 1; control_sequences[i].code != (u16)-1; i++) {
+   for (u8 i = 1; control_sequences[i].code != (u16)0xFFFF; i++) {
        control_map[control_sequences[i].code] = i;
    }
 
    u8 state = ESnormal;
    for (u8 i = 1; ; i++) {
-       if (escape_sequences[i].code == (u16)-1) {
+       if (escape_sequences[i].code == (u16)0xFFFF) {
            state++;
            if (state == NR_STATES) break;
        } else {
diff --git a/src/lib/vterm_states.cpp b/src/lib/vterm_states.cpp
index 49e7588..6aaa8b3 100644
--- a/src/lib/vterm_states.cpp
+++ b/src/lib/vterm_states.cpp
@@ -39,14 +39,14 @@ const VTerm::Sequence VTerm::control_sequences[] = {
    { 0x1B, 0,  ESesc },
    { 0x7F, 0,  ESkeep },
    { 0x9B, 0,  ESsquare },
-   { -1}
+   { 0xFFFF}
 };
 
 const VTerm::Sequence VTerm::escape_sequences[] = {
    {   0, 0, ESnormal },
 
    // ESnormal
-   { -1 },
+   { 0xFFFF },
 
    // ESesc
    { '[', &VTerm::clear_param, ESsquare },
@@ -65,7 +65,7 @@ const VTerm::Sequence VTerm::escape_sequences[] = {
    { '8', &VTerm::restore_cursor,  ESnormal },
    { '>', &VTerm::keypad_numeric,   ESnormal },
    { '=', &VTerm::keypad_application,  ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // ESsquare
    { '[', 0,   ESfunckey },
@@ -104,7 +104,7 @@ const VTerm::Sequence VTerm::escape_sequences[] = {
    { '`', &VTerm::cursor_position_col, ESnormal },
    { ']', &VTerm::linux_specific, ESnormal },
    { '}', &VTerm::fbterm_specific, ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // ESnonstd
    { '0' | ADDSAME(9), &VTerm::set_palette,    ESkeep },
@@ -112,25 +112,25 @@ const VTerm::Sequence VTerm::escape_sequences[] = {
    { 'a' | ADDSAME(5), &VTerm::set_palette,    ESkeep },
    { 'P', &VTerm::begin_set_palette, ESkeep },
    { 'R', &VTerm::reset_palette, ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // ESpercent
    { '@', &VTerm::clear_utf8,  ESnormal },
    { 'G', &VTerm::set_utf8,    ESnormal },
    { '8', &VTerm::set_utf8,    ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // EScharset
    { '0', &VTerm::set_charset, ESnormal },
    { 'B', &VTerm::set_charset, ESnormal },
    { 'U', &VTerm::set_charset, ESnormal },
    { 'K', &VTerm::set_charset, ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // EShash
    { '8', &VTerm::screen_align,    ESnormal },
-   { -1 },
+   { 0xFFFF },
 
    // ESfunckey
-   { -1 },
+   { 0xFFFF },
 };
-- 
2.8.1

→「diff -u」(diff --git) で作成された差分ファイルです。

2016年7月13日 作成の「src/lib/vterm.cpp」と「src/lib/vterm_states.cpp 」のgcc-6 の不具合の修正(fbterm 1.7-4)差分になります。

-

差分ファイルの位置を確認:
$ ls ~/ダウンロード/debian/patches/0001-Fix-build-with-gcc-6.patch

-

対象ファイルの位置を確認:
$ cd ~/ダウンロード/fbterm-git/src/fbterm/
$ ls -1 src/lib/vterm*
src/lib/vterm.cpp
src/lib/vterm.h
src/lib/vterm_action.cpp
src/lib/vterm_states.cpp

patch コマンドの確認:

$ patch --version
GNU patch 2.7.6

-

作業前の確認:
$ cd ~/ダウンロード/fbterm-git/src/fbterm/
$ ls -l src/lib/vterm*
-rw-r--r-- 1 ubn users 20357  6月 18 13:38 src/lib/vterm.cpp
-rw-r--r-- 1 ubn users  6992  6月 18 13:38 src/lib/vterm.h
-rw-r--r-- 1 ubn users 12058  6月 18 13:38 src/lib/vterm_action.cpp
-rw-r--r-- 1 ubn users  4387  6月 18 13:38 src/lib/vterm_states.cpp

-

13). 差分の適用:

$ cd ~/ダウンロード/fbterm-git/src/fbterm/

$ patch -p 1 <  ~/ダウンロード/debian/patches/0001-Fix-build-with-gcc-6.patch
patching file src/lib/vterm.cpp
patching file src/lib/vterm_states.cpp

→差分のパス指定をひとつズラして実行(-p 1)

-

作業後の確認:
$ cd ~/ダウンロード/fbterm-git/src/fbterm/

$ ls -l src/lib/vterm*
-rw-r--r-- 1 ubn users 20365  6月 18 17:10 src/lib/vterm.cpp   ←(変更)
-rw-r--r-- 1 ubn users  6992  6月 18 13:38 src/lib/vterm.h
-rw-r--r-- 1 ubn users 12058  6月 18 13:38 src/lib/vterm_action.cpp
-rw-r--r-- 1 ubn users  4423  6月 18 17:10 src/lib/vterm_states.cpp  ←(変更)

修正の確認:

$ xed ~/ダウンロード/fbterm-git/src/fbterm/src/lib/vterm.cpp
$ xed ~/ダウンロード/fbterm-git/src/fbterm/src/lib/vterm_states.cpp

-

14). 「.git」が邪魔しないように削除:

$ sudo rm -r ~/ダウンロード/fbterm-git/src/fbterm/.git

-

15). PKGBUILD の退避:

$ cd ~/ダウンロード/fbterm-git/
$ ls
INSTALL  PKGBUILD  fbterm  pkg  src

$ cp PKGBUILD PKGBUILD-old

-

16). PKGBUILD の修正:

$ cd ~/ダウンロード/fbterm-git/
$ xed PKGBUILD

-

(1). ローカルのソースを使うように置換え:
source=('git+https://github.com/izmntuk/fbterm' 'INSTALL')
sha1sums=(SKIP SKIP)

source=('local://fbterm-git-new.tar.gz' 'INSTALL')
sha256sums=(SKIP SKIP)

これをやらないとリモートで上書きされて、不具合の修正が元に戻ってしまいます。

-

(2). git を使わないように置換え:
pkgver() {
    cd "${srcdir}/"
    git log -1 --format="%cd" --date=short | sed 's|-||g'
}

pkgver() {
    cd "${srcdir}/"
    date +%Y%m%d
}

→リモートは当てにできないので、git を使わないように修正

-

(3). 下記の行を削除:
install -Dm644 terminfo/fbterm "${pkgdir}/usr/share/terminfo/f/fbterm"

→「fbterm-git」のインストール時に下記のエラーでインストールできなかったので、その対策:

エラー: 処理を完了できませんでした (衝突しているファイル)
fbterm-git: /usr/share/terminfo/f/fbterm がファイルシステムに存在しています (ncurses によって所有されています)

→「fbterm」と「ncurses」のパッケージが扱っているファイルが同じで衝突します。この行を削除すると「fbterm」のインストール時に余計なものがインストールされなくなります。

$ yay -Ss ncurses
:
core/ncurses 6.2-2 (1.1 MiB 3.5 MiB) (インストール済み)
    System V Release 4.0 curses emulation library

-

17). 修正したソースのフォルダを「tar.gz」に圧縮:

  • インストールパッケージを作成するときに使われるソースイメージをローカルに作成:

「fbterm-git-new.tar.gz」を新規に作成:

$ cd ~/ダウンロード/fbterm-git/src/
$ ls
INSTALL  fbterm

$ tar -zcvf fbterm-git-new.tar.gz fbterm
:
fbterm/
fbterm/configure.ac
:
fbterm/INSTALL

-

18). 修正したソースを配置:

$ cd ~/ダウンロード/fbterm-git/src/
$ ls
INSTALL  fbterm  fbterm-git-new.tar.gz

$ cp fbterm-git-new.tar.gz ~/ダウンロード/fbterm-git/

$ cd ~/ダウンロード/fbterm-git/
$ ls
INSTALL  PKGBUILD  PKGBUILD-old  fbterm  fbterm-git-new.tar.gz  pkg  src

$ sudo rm -r fbterm
$ sudo rm -r pkg
$ sudo rm -r src

$ ls ~/ダウンロード/fbterm-git/
INSTALL  PKGBUILD  PKGBUILD-old  fbterm-git-new.tar.gz

-

19). 「fbterm-git」のパッケージの作成:

$ cd ~/ダウンロード/fbterm-git/
$ makepkg -s
:
==> 作成完了: fbterm-git 20210618-1 (2021年06月18日 20時32分24秒)

-

確認:
$ ls -1 ~/ダウンロード/fbterm-git/
INSTALL
PKGBUILD
PKGBUILD-old
fbterm-git-20210618-1-x86_64.pkg.tar.zst  ←(作成されました)
fbterm-git-new.tar.gz
pkg
src

→「fbterm-git-new.tar.gz」をソースにして、ビルド、パッケージ化したのが「fbterm-git-20210618-1-x86_64.pkg.tar.zst」です。

→拡張子が「.pkg.tar.zst」になっていることに注目(新しい圧縮方式)。

-

20). 「fbterm-git」のインストール:

$ cd ~/ダウンロード/fbterm-git/
$ sudo pacman -U fbterm-git-20210618-1-x86_64.pkg.tar.zst
:
パッケージ (1) fbterm-git-20210618-1
:
==> To run fbterm as a non-root user, do:   ←インストール完了時にコメント表示

sudo gpasswd -a YOUR_USERNAME video


==> To enable keyboard shortcuts for non-root users, do:

sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm

fbterm-git の提案パッケージ
    libx86: accelerator with VESA compatible video card [インストール済み]
    gpm: mouse selection support [インストール済み]

→余計な処理が実行されないので、「$ makepkg -i」よりも速くインストールできます。

→コメントは「INSTALL」に記述されていた内容:

$ cd ~/ダウンロード/fbterm-git/
$ cat INSTALL

post_install() {
    cat <<EOF

==> To run fbterm as a non-root user, do:

sudo gpasswd -a YOUR_USERNAME video


==> To enable keyboard shortcuts for non-root users, do:

sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm

EOF
}

post_upgrade() {
    post_install $1
}

-

21). インストールの確認:

$ fbterm --version
FbTerm version 1.7

→ちなみに、PKGBUILD の 3行目が「pkgver=20210618」に更新されました。 パッケージ化が成功すると、自動的にpkgver() の設定が反映されるようです。

-

22). アプリがインストールされているかの確認:

$ yay -Ss fbterm
:
aur/fbterm 1.7_5-1 (+0 0.00) 
    Framebuffer terminal emulator
aur/fcitx-fbterm-git 20110825-1 (+2 0.00) 
    add fbterm support to fcitx

→ダウンロードしてのインストールだと、表示されません。

ちなみに、登録のなかった「fbterm」の最新版?(1.7_5-1) がいつの間にか登録されました。今までの苦労は何だったのかな。勉強になったから良いけど…。

-

ダウンロードしてインストールしたアプリの確認:
$ pacman -Qm
archlinux-appstream-data-pamac 20210612-1
downgrade 10.0.0-1   ←(注目)
fbterm-git 20210618-1   ←(注目)
i3-scrot 1.0-2
libglade 2.6.4-7
libpamac-aur 11.0.0-1
obmenu-generator 0.89-1
pamac-aur 10.1.3-1     ←(注目)
perl-linux-desktopfiles 0.25-2
yay 10.2.3-1

→デスクトップ環境があるなら「ソフトウェアの追加と削除」(pamac-aur) を起動して、「インストール済」→「外部」タブでも確認できます。

ちなみに、PKGBUILD を使わずに手動でソースをビルドしてインストールすると、実行はできても認識はされないはずです。

-

個別の表示:
$ pacman -Qm fbterm-git
fbterm-git 20210618-1

$ pacman -Qi fbterm-git
名前                   : fbterm-git
バージョン             : 20210618-1
説明                   : A fast framebuffer-based terminal emulator for Linux
アーキテクチャ         : x86_64
URL                    : https://github.com/izmntuk/fbterm
ライセンス             : GPL2
グループ               : なし
提供                   : fbterm
依存パッケージ         : fontconfig
提案パッケージ         : libx86: accelerator with VESA compatible video card
                         [インストール済み]
                         gpm: mouse selection support [インストール済み]
必要パッケージ         : なし
任意パッケージ         : なし
衝突パッケージ         : fbterm
置換パッケージ         : なし
インストール容量       : 127.60 KiB
パッケージ作成者       : Unknown Packager
ビルド日時             : 2021年06月18日 20時31分52秒
インストール日時       : 2021年06月18日 20時47分00秒
インストール方法       : 明示的にインストール
インストールスクリプト : Yes
検証方法               : なし

→「明示的にインストール」になっています。

-

23). 使うには、ユーザがグループ video に属している必要があります:

→インストール完了時のコメント表示より。

-

(1). ユーザをグループ(video) に追加:
$ sudo gpasswd -a ユーザ名 video
:
[sudo] パスワード:
ユーザ xxx をグループ video に追加

-

(2). 下記も使えますが、操作を間違えやすいので危険:
$ sudo usermod -aG video ユーザ名

→「a」を抜かして「-G」とすると、既に設定されていた他のグループの設定が上書きされて全部消え、大事(おおごと)になります。sudo が使えなくなるので復旧が面倒。

-

(3). 参考:

ubuntu14.04でusermodしてsudoできなくなったとき

ちなみに、Shift キーを押して起動してもGRUB2 のメニューが出ないときは、右のShift キーを押して起動。

-

(4). 参考:
$ id
uid=1000(ubn) gid=984(users) groups=984(users),987(storage),998(wheel)

$ groups ubn
wheel storage video users

-

(5). fbterm の実行ファイルに setuid モードを付けます:

SUID(Set User ID)が設定されたファイルでは、その実行ファイルの所有者のアカウント権限で実行されます。 通常は、実行ファイルを実行すると、そのファイルを実行したユーザーの権限で実行されます。

$ sudo chmod u+s `which fbterm`

-

24). 実行:

$ fbterm
:
stdin isn't a interactive tty!

→仮想コンソールで起動する必要があります。

実機だったら、Ctrl+Alt+F2 とすれば仮想コンソールに画面が切り替わります。

-

そのつもりでいたら、VirtualBox でCtrl+Alt+F2 としたら、ホストOS 側の仮想コンソールが起動しました。予想外だったけど、とうぜんのこと。

というわけで、確認するにはデスクトップ環境が立ち上がらないように設定変更が必要です。 日本語化しても使わないかもしれないし、面倒です。

デスクトップ環境に切り替える前に、先にやっておけば良かったけど、CUI だと作業効率は落ちます…。

-

25). ゲストOS をクローンして、VM VirtualBox マネージャで仮想マシンを切り替えるやり方で動作確認:

  • 失敗しても仮想マシンを削除するだけなので、気が楽です。ストレージ容量を倍使ってしまうのが難点。動作確認が終わったら削除の予定。

  • 項番(6) の「Slim」の隠し機能を使うことで、この作業は要りませんでした。(項番(6) 以降を参照)

-

(1). 電源オフの状態で仮想マシンを右クリック→「クローン…」

-

「新しいマシンの名前とパス」にて、

名前: 任意の名前

追加オプション:

「ディスク名を保持」のチェックなし      ←(デフォルト)
「ハードウェアUUID を保持」にチェック  ←これを忘れると、項番(3) の画面が表示されます。

→「次へ」

-

→「すべてをクローン」にチェック→「クローン」:

-

(2). 新しく出来た仮想マシンを起動:

-

(3). 起動途中で、「UEFI Interactive shell」画面表示:

Esc キー →「exit」Enter

ブート選択メニューにて、Boot Manege を選択

UEFIパーティションの切り替えメニューが表示:

一番下の「UEFI VBOX HARDDISK」を選んで、Enter

-

  • 立ち上げのたびに聞いてきます。

-

(4). いつものブート選択メニューが表示されました

その後、立ち上がりました。

-

(5). デスクトップ環境が立ち上がらないようにする、下記の設定は要りませんでした:
  • 「~/.xinitrc」でのセッションのコメント化:
$ xed .xinitrc

↓ ファイルの最後の行をコメント化:

#exec openbox-session

→これだけ行い、再起動すると、時間が来るとデスクトップのログイン画面が表示され、ログインしてもログイン画面に戻るを繰り返します。ログインできません。

-

  • ディスプレイマネージャ「Slim」の停止:
$ systemctl disable slim.service

-

下記の操作を使うなら、上記の 2つの操作は不要です。

-

(6). 「Slim」の隠し機能?を使いました:

参考:

SLiM wiki

-

  • ユーザー名にコマンドが入力できます:
reboot : 再起動
halt : シャットダウン
exit : slim を終了して bash に戻る
console : xterm を起動(/etc/slim.conf で端末を変更可能)

-

(7). ちなみに、console の設定:
$ sudo nano /etc/slim.conf

Ctrl+W →検索: console

console_cmd  /usr/bin/xterm -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/issue; exec /bin/login"
↓ 修正
console_cmd  /usr/bin/fbterm -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/issue; exec /bin/login"

Ctrl+O 保存

Ctrl+X 終了

-

(8). 「デスクトップのログイン画面が表示されたら、ユーザー名に「exit」Enter

→仮想コンソール画面に戻りました。

-

試しに、ここで cat を使ってみると、

「仮想コンソール」で勝手に改行が入力される現象を確認できました。

$ cat typescript

→内容を確認したいけど、勝手に行が送られるので確認できません。 そして、改行の入力が止まらないと、キーを受け付けなくなります。

-

(9). 「fbterm」を起動して確認
$ fbterm -s 14

→デフォルトの12 だと、文字が小さいのでフォントサイズを指定しています。無くてもOK

-

  • 日本語表示可能です。ただし、日本語はきれいなフォントではありません。

  • 一番ありがたいことは、余計な改行が入力されないので、安心して cat が使えることです。

  • そして、Ctrl+PageUP、Ctrl+PageDown で画面のスクロールが可能です。

  • 公式リポジトリにあるフレームバッファを使った端末があれば、インストールも安心してできそうです。残念ながら「fbterm」はAUR なので、インストールに手間がかかりすぎます。

-

26). ビルドが完了し動作確認できたら「autoconf」のバージョンを戻します:

ダウングレードに使っている「downgrade」をアンインストール、設定ファイルも削除、システム更新すれば良さそうですが、しばらくは保留。バージョンを最新にすることだけを行いました。

-

事前確認:
$ yay -Ss autoconf
:
core/autoconf 2.71-1 (645.2 KiB 2.2 MiB) [base-devel] (インストール済み: 2.69-6)
    A GNU tool for automatically configuring source code

Index of /packages/a/autoconf/

-

現在のautoconfのバージョン:
$ autoconf --version
autoconf (GNU Autoconf) 2.69

-

バージョンを最新にアップ?しました。(2.69-6 →2.71-1)

「autoconf」をインストールした状態で実行:

$ sudo downgrade 'autoconf=2.71-1'
:
Available packages (core):

-  1)  autoconf    2.71  1  remote
-  2)  autoconf    2.71  1  /var/cache/pacman/pkg

select a package by number: 1

パッケージ (1) autoconf-2.71-1
add autoconf to IgnorePkg? [y/N]   ←(Enter)

-

確認:
$ autoconf --version
autoconf (GNU Autoconf) 2.71

-

-


参考: 手動で「fbterm」をビルドする場合:

ソースをダウンロードして展開:

3つの依存「fontconfig、gpm、libx86」をインストール:

$ yay -Ss fontconfig
:
extra/fontconfig 2:2.13.93-4 (321.9 KiB 760.6 KiB) (インストール済み)
    Library for configuring and customizing font access

$ yay -Ss gpm
:
core/gpm 1.20.7.r38.ge82d1a6-3 (140.5 KiB 422.9 KiB) (インストール済み)
    A mouse server for the console and xterm

$ yay -Ss libx86
:
community/libx86 1.1-8 (42.1 KiB 137.5 KiB) 
    Provides an lrmi interface that works on x86, am64 and alpha

→「libx86」だけインストールすれば依存は解決しそう。

次に、ビルド「./configure --prefix=/usr、make、sudo make install」を実施で良さそう。

-

  • PKGBUILD があれば、不足している依存パッケージのインストール→ダウンロード→ビルド→パッケージ化→インストールと勝手にやってくれます。一度、パッケージ化するのは、pacman で管理できるようにするための工夫。

-


参考: 「fbterm」に色を付ける設定:

-


追記: AUR に「fbterm」が新規に登録されました:

2021-06-19 確認:

$ yay -Ss fbterm
aur/fbterm 1.7_5-1 (+0 0.00) 
    Framebuffer terminal emulator
aur/fcitx-fbterm-git 20110825-1 (+2 0.00) 
    add fbterm support to fcitx

→バージョンもUbuntu に近いみたい。

$ yay -Si fbterm
:: AUR を検索...
リポジトリ           : aur
名前              : fbterm
キーワード           : emulator  fbterm  framebuffer  terminal  tty
バージョン           : 1.7_5-1
説明              : Framebuffer terminal emulator
URL             : https://salsa.debian.org/debian/fbterm
AUR URL         : https://aur.archlinux.org/packages/fbterm
グループ            : なし
ライセンス           : GPL2
提供              : fbterm
依存するパッケージ       : freetype2  fontconfig
ビルド時の依存パッケージ    : なし
チェック時の依存パッケージ   : なし
任意の依存パッケージ      : なし
衝突するパッケージ       : fbterm
メンテナ            : ivanp7
投票              : 0
人気度             : 0.000000
最初の投稿           : Wed 19 May 2021 09:15:19 PM JST
最終更新            : Thu 20 May 2021 06:31:54 AM JST
古いバージョン         : No

→2021年5月19日の登録。依存パッケージが少なめ。

ちょうど自分のトライと重なったみたい。自分のはビルドで問題になるパッチしか当てていないので、パッチの歯抜けがなくなります。感謝。

-


「fbterm」のインストール:

-

(1). 「fbterm-git」と、そのビルドに使ったパッケージの削除:

-

「fbterm-git」をアンインストール:
$ pacman -Qm fbterm-git
fbterm-git 20210618-1

$ sudo pacman -R fbterm-git
:
パッケージ (1) fbterm-git-20210618-1

$ pacman -Qm fbterm-git
エラー: パッケージ 'fbterm-git' は見つかりませんでした

-

「downgrade」をアンインストール:
$ pacman -Qm downgrade
downgrade 10.0.0-1

$ sudo pacman -R downgrade
:
パッケージ (1) downgrade-10.0.0-1

$ pacman -Qm downgrade
エラー: パッケージ 'downgrade' は見つかりませんでした

-

設定ファイルの確認:
$ ls /etc/xdg/downgrade/
ls: '/etc/xdg/downgrade/' にアクセスできません: そのようなファイルやディレクトリはありません

-

「autoconf」の再インストール:
$ sudo pacman -R autoconf
:
パッケージ (1) autoconf-2.71-1

$ sudo pacman -S autoconf
:
パッケージ (1) autoconf-2.71-1

$ pacman -Ss autoconf
core/autoconf 2.71-1 (base-devel) [インストール済み]
    A GNU tool for automatically configuring source code

-

削除されたことを確認:
$ pacman -Qm

-

(2). 「fbterm」のインストール:

$ pacman -Ss fbterm

$ yay -Ss fbterm
:
aur/fbterm 1.7_5-1 (+0 0.00) 
    Framebuffer terminal emulator

-

インストール:
$ yay -S fbterm
:
make[1]: ディレクトリ '/home/ubn/.cache/yay/fbterm/src/fbterm-1.7' から出ます
:
==> 作成完了: fbterm 1.7_5-1 (2021年06月22日 17時48分04秒)
==> 清掃...
[sudo] パスワード:
パッケージ (1) fbterm-1.7_5-1

-

確認:
$ yay -Ss fbterm
aur/fbterm 1.7_5-1 (+0 0.00) (インストール済み)
    Framebuffer terminal emulator

-

(3). 「fbterm」の動作確認

-

ログアウト

ログイン画面のユーザ名に、「exit」Enter

-

ユーザにログイン:
$ fbterm -s 14
$ date
$ cat typescript
$ exit

-

root にログイン:
# fbterm -s 14
# date
# cat /home/ubn/typescript
# exit

→日本語入力ができますし、余計な改行も発生しません。ちなみに、typescript はログ記録したときのファイルです。確認に使うのはテキストファイルなら何でもよいです。

当たり前だけど、ビルドした「fbterm-git」と同じです。ビルドとか、ツールのダウングレードとかやらなくてもよいので楽です。日本語フォントがきれいでないのまで同じです。

-

「fbterm」から抜けると、そのとたんに、余計に改行する現象が出ました:

→めったに使うことは無いだろうけれど、仮想コンソールのそのままでの使用は(キー入力を受け付けなくなる、フリーズ?、の可能性があるので)不安が残ります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

-

仮想コンソールで気づいたことの回避策のまとめ

-

1). スクロールバーがないので表示をさかのぼれません

→仮想コンソールで「fbterm」を起動して使うと、Shift+PageUp、Shift+PageDown で画面のスクロールが可能になりました。

-

2). 問題: 「仮想コンソール」が安定していません

→端末で勝手に改行が入力されます。

特にcat (less、more 等)を使うと画面が送られてメッセージが確認できず、ファイル操作の確認にcat が使えず操作性が落ちます。また、ひどくなるとキーを付け付けず、フリーズしたのと同じです。

→仮想コンソールで「fbterm」を起動して使うと、発生しなくなりました。

-

ライブUSB メモリで立ち上げたときも発生します。

→「fbterm」を起動して使うと回避できそうですが、ライブ立ち上げてインストールするのは難しそう。 公式リポジトリの仮想端末の代替えアプリがあれば行けそうです。

-

3). 問題: 仮想コンソールで日本語が文字化け

仮想コンソールは日本語に未対応みたい。

→「fbterm」を起動して使うと日本語が表示できました。ただし日本語のフォントはきれいではありません。

-

-


まとめ

「Arch Linux」のコンソール(端末)は安定していません。なぜか、cat やless 、more などのコマンドを使うとすぐにハングします(改行が入りっぱなしでキーを受け付けなくなります)。確認作業にcat は極力使わないようにして、さっさと設定を終わらせるのがコツみたい。

「fbterm」で回避できましたが、 どちらにしても、デスクトップ環境をインストールすれば不要な作業です。

-

-


-

-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-