CentOS Stream 9 のカスタマイズ

CentOS Stream 9 をデスクトップ用途に使う人は多くないでしょうが、主に日本語にかかわるカスタマイズと、キー入力絡みのトラブルへの対処を紹介していきます。
> CentOS Stream 9 は時期によって [9.0, 9.1, 9.2, ... と微妙に変化していきます](https://blog.centos.org/2021/12/introducing-centos-stream-9/)。初期には整備不足も見受けられました。また、Stream 9 はキー入力に問題をいくつも抱えています。

# レポジトリの追加とカスタマイズツールの導入
初期状態ではレポジトリがまったく足りませんので、以下のコマンドで追加します。`crb` というのは CodeReady Linux Builder の省略形で、絶対に必要です。`epel` は追加パッケージを提供して、日本語関連には必須です。`epel-next` は RHEL には不要で CentOS Stream には必要なようです。
初期（CentOS Stream 9.1 あたりまで？）は最初の２行は不要であったと思います。RHEL には必要だったのですが、CentOS にも混入したのでしょうか。
```
sudo dnf remove -y subscription-manager
sudo dnf config-manager --set-enabled crb
sudo dnf install -y epel-release epel-next-release
```
そして tweaks などのカスタマイズツールを導入しておきます。標準の設定ツールでは省略された項目の操作ができます。
```
sudo dnf install -y gnome-tweaks dconf-editor gnome-extensions-app
```

# 日本語関連の設定
`nkf` は必須です。日本語入力は `anthy` が標準ですが、EPEL で配布される `mozc` に入れ替えるほうがいいでしょう。 
```
sudo dnf install -y nkf mozc ibus-mozc vl-gothic-fonts-all
```
今では不要ですが、初期には `xrefresh` パッケージが用意されてなくて、`mozc` の導入に失敗するので、Fedora から借用する必要がありました。その際は次のコマンドでした。
```
sudo dnf install -y https://kojipkgs.fedoraproject.org/packages/xrefresh/1.0.7/3.fc38/x86_64/xrefresh-1.0.7-3.fc38.x86_64.rpm
```

そして個人設定です。「設定」→「Keyboard」の入力ソースの「＋」をクリックして追加します。「日本語 (Mozc)」を選べばいいでしょう。
>いつの頃からか「日本語 (Mozc:A_)」「日本語 (Mozc:あ)」の選択肢も増えました。`:A_` や `:あ` は初期（ログイン直後？）の入力モードを表しているようです。「日本語 (Mozc)」は、選択肢が増える前は `:あ` の動きをしていた記憶がありますが、今は `:A_` の動きと同じです。（他に違いがあるのかはわかりません。）

`vl-gothic-fonts` は `gnome-tweaks` コマンドで tweaks を起動して、「フォント」→「等幅フォント」に「VL ゴシック regular」を登録するのがよいと思うのですが、好みがあると思います。

Gnome Terminal では、「設定」のプロファイルの「互換性」で、「曖昧幅の文字」を「全角」にしておくと、矢印などの記号が全角幅になります。日本語にはこのほうが都合良いでしょう。

# キーボード・マウス関連のカスタマイズ
## Caps Lock を Ctrl に
`gnome-tweaks` コマンドで tweaks を起動して、「キーボードとマウス」→「追加のレイアウトオプション」→「Ctrl position」の「Caps Lock」をCtrlとして扱う」にチェックを入れます。
> すぐ上のオプションに、同じ効果のありそうな「Caps Lock behavior」→「Make Caps Lock an additional Ctrl」がありますが、チェック状態は連動してないようです。どちらがよいのかわかりません。

効果が現れるのは、次にログインするときです。

Ctrl と Caps Lock を入れ替える人も多いとは思いますが、私は Caps Lock がなくなって困ったことはないので、両方とも Ctrl にしています。

## 変換・無変換 も Ctrl に
私は emacs キーバインドに魂を売ったので、^P や ^N を片手で打つために、変換・無変換も Ctrl に割り当てたいのですが、さすがに tweaks にもこのカスタマイズ項目はありません。そこで、システムファイルを書き換えてしまいます。上の Caps Lock のカスタマイズが、レイアウトの差分として定義されているので、これに便乗することにします。

~~~diff:
--- /usr/share/X11/xkb/symbols/ctrl.cent9
+++ /usr/share/X11/xkb/symbols/ctrl
@@ -2,7 +2,9 @@
 partial modifier_keys
 xkb_symbols "nocaps" {
     replace key <CAPS> { [ Control_L, Control_L ] };
-    modifier_map  Control { <CAPS>, <LCTL> };
+    replace key <MUHE> { [ Control_L, Control_L ] };
+    replace key <HENK> { [ Control_R, Control_R ] };
+    modifier_map  Control { <CAPS>, <LCTL>, <RCTL>, <HENK>, <MUHE> };
 };
 
 // Make the left Ctrl key a left Meta.
~~~

効果が現れるのは、次にログインするときです。

## IME の切り替えを確定的にする
`半角/全角` キーは、IME (Input Method Editor) のオンオフをトグル動作で切り替えますから、例えばID・パスワードのように、今からアスキー文字を入力するとわかっていても、`半角/全角` を押すのかは状況次第、画面を見なければわかりません。

この点で `ひらがな` キーは確定的と言えます。それまでの状況とは無関係に、確実に IME がオン（ひらがな入力）になります。Mozc だけでなく、Windows のGoogle日本語入力などでも同じ動きをしますから、日本語変換したいときには無意識に `ひらがな` を押す習慣をつけておいてもよさそうです。

それならアスキー文字を入力する場面では、無条件に `ひらがな` `半角/全角` の２つを順に押してもいいのですが、個人的には `半角/全角` をカスタマイズして IME OFF にしています。
![mozcで全角半角キーをIME無効化に割り当てる](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907687/dd0e4bfa-e573-f896-e65a-7d435087e3c7.png)

## mouse の sloppy focus と不具合対策
マウスによるフォーカス移動の挙動を、伝統的な X11 の手法に戻している人も多いでしょう。tweaks の「ウィンドウ」→「ウィンドウフォーカス」を「ホバーでフォーカスを当てる」です。日本語訳は hover になっていますが、sloppy の単語もよく見かけます。クリックせずに（つまり最前面にウィンドウが来なくても）マウスの移動だけでフォーカスが切り替わります。

>Windows や、近頃の Gnome のディフォルトは「クリックでフォーカスを当てる」です。これだと、半分隠れているウィンドウにはどうやってもキー入力ができないので、不便だと思うのですが、見た目のわかりやすさが優先されているのでしょうか。
>ちなみに、「モーダルダイアログを親ウィンドウに結び付ける」も、Windowsの挙動を Gnome のディフォルトが真似をしたように見えて、不便になったと感じています。

![sloopy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907687/e631cff9-8d76-d640-e04f-732204a59cef.png)

ところが sloppy にしていると、今度はキー操作でのフォーカス移動が（ほぼ）役立たなくなります。本来は、`Alt`+`Tab` でウィンドウを切り替えると、sloppy にしていても、止まっているマウスにはフォーカス移動しません。マウスを操作して、初めてフォーカス移動が起こりました。しかしバグ(?)のため、マウス操作をせずとも、数秒のうちにフォーカスが移動してしまいます。（直後でないところが、いやらしいところです。）

このことは Gnome のバグレポート [Alt+Tab broken for 'sloppy' focus mode on Wayland](https://gitlab.gnome.org/GNOME/mutter/-/issues/888) に報告があって、Gnome 46 では直りそうです。それまでの回避策には、次の Gnome 拡張が役立ちます。
1. https://github.com/buzztaiki/gnome-shell-extension-alt-tab-move-mouse から ZIP をダウンロードして、展開して、make install を実行します。
2. ログインしなおします。
3. `gnome-extensions` コマンドで `拡張機能` を起動して、「Alt-Tab Move Mouse」を有効にします。

これでフォーカス移動したウィンドウの中心に、マウスカーソルが強制的に移動して、それ以上のフォーカス移動が起こらなくなります。JS で数行の簡単なものですが、マウスを見失わないので、却って便利かもしれません。

## トラックボールのスクロール
TrackMan Marble というトラックボールを愛用しています。左右対称で、スクロールボタンもついているモデルです。

> [数年前までは入手できていました](https://kohzuka-trackball.netlify.app/logi-marblemouse.html) が、2024年には本当に販売終了したようです。

Linux でスクロールの機能を使うには、昔は X11 の設定ファイルを書き換える必要がありましたが、今は Gnome の設定変更ですみます。dconf editor を起動して
`org.gnome.desktop.peripherals.trackball` の`scroll-wheel-emulation-button` を探して、「ディフォルト値を使用する」を無効にしてから、「カスタム値」に `8`（左小ボタン＝右手用）か `9`（右小ボタン＝左手用）を選びます。動作には即座に反映されます。
![trackball](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907687/63502726-9edf-e22c-ef04-d6db8c16a9e6.png)


# キー入力のトラブル
対処方法が完全にわかっているわけではありませんが、直せる場合もあります。

## `Ctrl` の押しっぱなし
不意に、`Ctrl` を押してないのに、常に `Ctrl` を押しているかのような動きになることがあります。ログインしなおせば直ります。頻度が高い（１日１回程度）ので、ログアウトせずに直したいところですが、まだ対処しきれていません。`Shift` キーでも起こったこともありますが、何度も dnf update をしてきて、頻度が下がったような気もしています。

## `右Alt` が効かない
`右Alt` は、`Alt`+`←`でブラウザの戻るボタンに相当しますから、利用頻度が高いと思います。これが無反応になることがあります。このコンビネーションだけでなく、`右Alt` 自体が反応しなくなります。（キーボードによっては省略されていて、使っていない人も一定数いそうですが。）

元に戻すには、`gnome-tweaks` コマンドで tweaks を起動して、「キーボードとマウス」→「追加のレイアウトオプション」→「Key to choose the 3rd level」で `右Alt` が選ばれているはずなので、チェックを外して、ログインしなおします。（ただし、恒久対策としては弱点があります。）

なぜこんなことになるか、ですが、https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/918 で「GUI設計バグ」と指摘があります。２ヶ所のGUIの設定項目が、裏でつながっていて、そのその片方が簡略化されすぎていています。
1. 「設定」→「Keyboard」→「代替文字キー」の設定では、割当なしにはできない。
![3rd level key](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907687/3cae5469-cc4a-7794-4689-869d90af78fb.png)
2. tweaks→「キーボードとマウス」→「追加のレイアウトオプション」→「Key to choose the 3rd level」では複数のキーが選べるし、割当なしにもできる。
3. 上記の 1. と 2. は連動している。そして、この設定が反映されるのは次にログインしたとき。
4. 上記の 1. のディフォルトは `右Alt` だが、この項目を表示したときに設定されて、表示してないうちは割当なしの動作をする。

つまり、元々割当なしだったところに、1. の設定を見てしまうと `右Alt` が設定され、次にログインしたときに発動していたのです。不用意に「設定」→「Keyboard」を見てはいけないということになりますが、それでは危険すぎます。恒久対策としては、使わないキーがあれば（`右Super` = `右Windows`でも）無駄に割り当てておくほうが安全でしょう。

>Linux（X11? Gnome?）では `Windows` キーは `Super` キーと表記されるのだそうです(https://help.gnome.org/users/gnome-help/stable/keyboard-key-super.html.ja)。

>GNOME 3.35 から始まった、簡単に直せる不具合が 40.4.0 にもなって放置されているのが解せません。

## `Windows` キーでアクティビティにならない
アクティビティは Gnome でも重要な機能ですから、常に右上隅にボタンがあったり、マウスを右上隅に移動するだけで発動するなど、複数の手段があります。`Windows` キーもそのひとつですが、不意に効かなくなることがあります。頻度は低いのですが、個人設定として記憶され、ログアウト→ログインしなおしても戻らないこともあります。

「設定」→「アクセシビリティ」→「タイピング支援」→①「固定キー」がオンになっていると効かないのは仕様のようです。その上の項目に②「キーボードから有効化できるようにする」があることから、特定のキーコンビネーションでオンになることも仕様のようです。初期設定では、①②どちらもオフですが、バグか何かで固定キー機能が（不十分に？）発動しているのでしょうか、①「固定キー」を「オン」「オフ」と切り替えると、元に戻ったことがあります。
![固定キーとキーボードから有効化できるようにする](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3907687/ac5805a3-1743-8150-08af-d954c578b53e.png)
ちなみに、アクティビティをどのキーで呼び出すかは「設定」→「Keyboard」→「Customize Shortcuts」→「システム」でカスタマイズできて、ディフォルトは `Alt`+`F1` になっています。しかし、単独の `Windows`（`Super` と表記される）はここには見当たらず、どこかでハードコーディングされている雰囲気です。