こんにちは、masm11 です。
暇に任せて Linux の生コンソール (window system が動いていない黒背景の画面を私は勝手にこう呼んでいます。window system が動いていようが、コンソールはコンソールなので…) に日本語を表示する設定をしたので、今回はそれをご紹介します。
KMSCON をインストール、起動する
https://wiki.archlinux.jp/index.php/KMSCON
archlinux を使っているので↑このページを参考にしました。
fbdev とか drm2d とか drm3d とか書いてあって、「…?」となりましたが、 自分の PC で何が動いているのかの確認方法も書かれていないので、 とりあえず無視して進めました。
まず kmscon をインストールします。
sudo pacman -S kmscon
「tty1 で」と書いてありますが、OS が起動して最初の tty は tty1 です。 何かあると詰んでしまう可能性があります。tty2 で動かしてみることにします。
sudo systemctl disable getty@tty2.service
sudo systemctl enable kmsconvt@tty2.service
tty2 に切り替えると、いつもと様子の違う画面が表示されました。 無事動いているようです。 fbdev 云々の条件もクリアしていたのでしょう。
ちょっと確認してみる
…気になりません? 私は気になりました。tty を確認してみます。
% tty
/dev/pts/0
なんと、疑似端末 (pseudo-tty, pty) を使用しているのですね。
上記ページの最初に書いてある、
カーネルの VT 実装をユーザスペースのコンソールで置き換えようという試みです。
これは、こういう意味なのでしょう。
イメージとしては、端末エミュレータを全画面で使用しているようなものでしょうか。 window system のサーバはいませんけど。
設定を続ける
ちょっと操作しづらいので、設定をしてみました。
/etc/systemd/system/kmsconvt@tty2.service.d/cmd.conf に以下のように書きました。
[Service] ExecStart= ExecStart=/usr/bin/kmscon "--vt=%I" --seats=seat0 --no-switchvt --xkb-repeat-rate=20 --xkb-options=ctrl:swapcaps --sb-size=100000 --font-size=16
下側の ExecStart=...
は、--no-switchvt
までは元のコマンドそのままで、
その後ろを追加しました。
ただ、それだけだと ExecStart=
の追加になってしまうので、
その上の行に ExecStart=
のみを書くことで、一旦クリアしています。
追加した各オプションの意味は以下のとおりです。
--xkb-repeat-rate=20
キーリピートが遅かったので 2.5倍にしました。
--xkb-options=ctrl:swapcaps
ctrl と capslock を入れ替えました。私はいつもこれです。
--sb-size=100000
バックスクロールができるんですね。ただデフォルトの1000行では少ないので、100倍しておきました。
--font-size=16
文字を大きくしました。もう歳でして…
さて、これを反映させるには、以下を実行します。
sudo systemctl restart kmsconvt@tty2.service
フォントを設定
なんかフォントが意図したものと違うな、と思ったら、 いつものフォントは ~/.config/fontconfig/fonts.conf に設定してあるので、ユーザ用の設定でした。 kmscon はシステムの一部として動いているので、システム用に設定する必要があります。
~/.config/fontconfig/fonts.conf を /etc/fonts/local.conf にコピーして、 それを反映させるために以下のコマンドを実行しました。
fc-cache -fv
フォントが綺麗になりました。
結果
これはもう、スクリーンショットでなく写真でお見せします。
いつもの端末と同じ表示です!
問題点
しかし問題もあります。
kmscon からは X は起動しません。/dev/pts/0 はコンソールでないと見なされ、startx がそもそも拒否します。 Wayfire も DRM を確保できなくて起動に失敗しました。
今回の設定では tty1 はいじっていませんので、tty1 からならどちらも起動できます。
環境変数を日本語に設定して window system を起動して、 日本語で出力されるエラーを確認したい場合もありますので、 ここは少し残念です。
tty2 以外にも反映させる
では動作が確認できたので、tty2 以外にも反映させてみます。
sudo ln -s /usr/lib/systemd/system/kmsconvt@.service /etc/systemd/system/autovt@.service
ここで注意です。先程 enable した設定はそのままにしておきます。 これを元に戻すと、autovt 設定が効きませんでした。 また autovt は enable する必要もないようです。 ちょっとよく解らないので、機会があれば仕組みを調べてみたいと思います。
先程設定したものを /etc/kmscon/kmscon.conf に移動させます。
font-name=NasuM font-size=16 xkb-repeat-rate=20 xkb-options=ctrl:swapcaps sb-size=100000
フォントはこちらに設定しましたので、/etc/fonts/local.conf は削除しました。 また、systemd 用の追加設定も削除しました。
で reboot します。
なんと、tty1 は今までどおりで、tty2 以降が kmscon になっていました。 これはこれでいいかもしれませんね。window system は tty1 から起動できます。
まとめ
kmscon を導入して生コンソールで日本語を表示できるようにしました。
tty1 は今までどおりで tty2 以降で日本語が表示できるようになりました。 ただ、曖昧幅を全角にする方法は今のところ用意されていないようです。
また、バックスクロールもできるようになりました。 最近の Linux kernel ではバックスクロールが廃止されてて、残念な思いをしていましたが、 これでようやく復活です。
しかし、いいことばかりではなく、kmscon からは X を起動できませんでした。 これについては、tty1 は元のままなので、tty1 から起動すれば良いことにします。
今回、日本語入力については扱っていません。
インゲージではこんな遊べるエンジニアも募集しています。 詳細は以下へ!