Slackware の .xinitrc 編集ツール xwmconfig と日本語キーボードのキーマップの適用の話

[当方執筆の技術情報に関するライセンス、免責事項、禁止事項](https://qiita.com/EarthSimilarityIndex/items/6b9bb2ccacb38aae15b1)

****

みなさん、好きな [Window Manager](https://ja.wikipedia.org/wiki/X%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3) は何ですか？こんにちは、EarthSimilarityIndex です。

今回のコンセプトは「システム設定をいじらずにユーザー毎の設定だけで対応する」です。結果としてやや煩雑となってしまいました。

X における日本語キーボード及び日本語入力の設定については「逆襲の Slackware」さんで書かれているやり方が素直かつわかりやすいのでおすすめです。

**X Window設定 | 逆襲のSlackware**
https://slackware.jp/configuration/x_window_configuration.html

Anthy は [G-HAL さんの patch](http://www.fenix.ne.jp/~G-HAL/soft/nosettle/im.html) をあてるとすごく強くなるとか。

最新安定版はこちら。
[anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz](http://www.fenix.ne.jp/~G-HAL/soft/nosettle/anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz)

[逆襲のSlackwareさんの記事](https://slackware.jp/packages/anthy.html)を最新安定版に適宜読み替えて実行。xz だと~~```tar -Jxfv anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz```とかかな？~~```man tar```等で確認よろです。

× ```tar -Jxfv anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz```
○ ```tar Jxfv anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz```
もしくは
○ ```tar -Jxvf anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz```

解凍先を指定しての場合、オプション指定で"-"を使うなら最後をfにしないとダメでした。ごめんなさい。

**CAUTION: バグに注意**
G-HAL さん家の patch13 系列リリースノートより
>2012Z15版より前のバージョンには学習データを壊すバグがあります。
お手数ですが 2012Z15版以降に更新の上、 学習データを削除（/bin/rm ${HOME}/.anthy/last-record*）して下さい。

# .xinitrc って？
linux コンソールで xinit とか startx とか打ち込むと読み込まれる設定ファイルです。

# xwmconfig って？
スクリーンショット
![スクリーンショット_2019-06-21_16-13-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410379/890413e0-9f2d-c228-36f3-d81c3033b286.png)


Slackware の対話的な wm 切り替えツールです。startx や xinit で X を立ち上げるユーザー向け。
※ グラフィカルなログインマネージャは .xinitrc を読まないことが多いので。

root アカウントで実行すると "/etc/X11/xinit/xinitrc" のシンボリックリンクを切り替えてシステムデフォルトの wm を設定。非ルート環境では ~/.xinitrc を生成。

# 問題点
生成された設定ファイルのみでは英語キーマップで X が起動してしまう。
xwmconfig を実行する毎に .xinitrc を編集するのは面倒くさい。

# 解決方法
xwmconfig で生成された .xinitrc は .Xmodmap を参照するのでそれを利用すれば良い。
※ .Xmodmap の X は大文字です。

日本語キーボードなら、X 上の端末エミュレータからこんな感じで設定。

```
$ setxkbmap -layout jp
$ xmodmap -pke > ~/.Xmodmap
```

## 参考資料: manpage
最新版についてはコマンドラインから man ページを引いて下さいな。

### setxkbmap
https://linux.die.net/man/1/setxkbmap
http://xjman.dsl.gr.jp/man/man1/setxkbmap.1x.html

### xmodmap
https://linux.die.net/man/1/xmodmap
http://xjman.dsl.gr.jp/man/man1/xmodmap.1x.html

## 参考資料: xfce 起動用 .xinitrc

```sh
#!/bin/sh
#  xinitrc.xfce - modified to work around xfce4session bug
#                 https://bugzilla.xfce.org/show_bug.cgi?id=8841


########################################################################
##  Merge in defaults and keymaps                                     ##
########################################################################

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap

if [ -f $sysresources ]; then
    /usr/bin/xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
    /usr/bin/xmodmap $sysmodmap
fi

if [ -f $userresources ]; then
    /usr/bin/xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
    /usr/bin/xmodmap $usermodmap
fi

########################################################################
##  Start xfce Desktop Environment                                    ##
########################################################################

if [ -z "$DESKTOP_SESSION" -a -x /usr/bin/ck-launch-session ]; then
  exec ck-launch-session dbus-launch --exit-with-session /usr/bin/startxfce4
else
  exec dbus-launch --exit-with-session /usr/bin/startxfce4
fi
```

# 日本語ロケールで起動したい

```LANG=ja_JP.UTF-8 startx```とかでおk

# インプットメソッドどうしましょ

## 標準的インストール環境
例えば [.profile や .bashrc](https://ja.wikipedia.org/wiki/Unix%E3%82%B7%E3%82%A7%E3%83%AB#%E4%B8%BB%E3%81%AAUnix%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB) で /etc/profile.d/scim.sh を source しておく。

## [SlackBuilds.org](https://slackbuilds.org/) から色々インストールした環境
例えば [.profile や .bashrc](https://ja.wikipedia.org/wiki/Unix%E3%82%B7%E3%82%A7%E3%83%AB#%E4%B8%BB%E3%81%AAUnix%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB) に~~適当~~適切な環境変数を与えておく。

※ wm によっては起動時にインプットメソッドのデーモンを呼び出しておく必要が有ります。

※ [クロの思考ノート](http://note.kurodigi.com/category/slackware/)のクロさんが [fcitx-mozc を SlackBuilds.org に投稿して下さっています](https://slackbuilds.org/repository/14.2/misc/fcitx-mozc/)。ありがたや。

### scim
```
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
export XMODIFIERS="@im=SCIM"
export DefaultIMModule="scim"
export XIM_PROGRAM="/usr/bin/scim -d"
```
### ibus
```
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export DefaultIMModule=ibus
export XIM_PROGRAM="/usr/bin/ibus-daemon --config=/usr/libexec/ibus-dconf -dxr"
```
### fcitx
```
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
export XIM_PROGRAM="/usr/bin/fcitx -dr"
```
### Daemon 呼び出し
Demon（鬼、悪魔、ひとでなし）ではないです。
[間違って呼び出さないこと。](https://qiita.com/search?q=%E9%BB%92%E9%AD%94%E8%A1%93)
#### scim
```/usr/bin/scim -d```
#### ibus
```/usr/bin/ibus-daemon --config=/usr/libexec/ibus-dconf -dxr```
#### fcitx
```/usr/bin/fcitx -dr```
## グラフィカルログイン（SDDM や GDM 等）の場合
### グラフィカルログインへの切り替え
※ [グラフィカルログインに切り替えるには、/etc/inittab を編集してデフォルトランレベルを 4 にします](http://www.slackware.com/config/init.php)。

**こんな感じで~~劇的に~~ビフォーアフターして下さい。**
>id:3:initdefault:
↓
id:**4**:initdefault:

冗談でも 0 とか 6 は指定しないこと。起動出来なくなったり終了出来なくなったりします。やっちゃった方は、例えば電源長押ししてシステム強制終了して適当な Livelinux ディストリビューションつかって Slackware のルートパーティションマウントして inittab 書き換え直して下さい。

※ Slackware の init は BSD スタイルですが OpenRC ではないっぽい？

### 環境変数の設定等
.xprofile を編集して対応しましょう。
例外的に、xdm が読み込むのは .xsession 。

このあたりのことは Arch の wiki に詳しく記載されています。ありがたや。
https://wiki.archlinux.jp/index.php/Xprofile
https://wiki.archlinux.jp/index.php/Xinitrc
https://wiki.archlinux.jp/index.php/XDM

# おまけ: Anthy 9100h + G-HAL patch 13 series + tokyocabinet
※ コンパイラに -march=native を渡しても面白いかも。
※ Slackware 14.2 では glibc-2.23 が iconv 関連機能やヘッダファイルを含むので、libiconv のインストールの必要はありません（試しに無理やり /usr/local にインストールしたところ、fcitx のビルドが通らなくなりました）。

## SlackBuilds.org の tokyocabinet パッケージのインストール
```
$ su -
# cd
# mkdir Downloads
# cd Downloads
# wget https://slackbuilds.org/slackbuilds/14.2/system/tokyocabinet.tar.gz
# tar zxf tokyocabinet.tar.gz
# cd tokyocabinet
# wget http://ponce.cc/slackware/sources/repo/tokyocabinet-1.4.43.tar.gz
# ./tokyocabinet.SlackBuild
# installpkg /tmp/tokyocabinet-1.4.43-x86_64-1_SBo.tgz
# ldconfig
# exit
```
※ SlackBuilds.org のビルドスクリプトを展開したディレクトリにオリジナルのソースをダウンロード・配置します。

※ ```su -```等で root で**ログイン**して下さい。(一般ユーザーでは参照されないPATHがある為）

※ ゼロデイアタックを警戒するなら wget は一般ユーザーで実行するのが良いかも。

※ ldconfig は念のため。

## Anthy のインストール
[逆襲のSlackwareさんの記事](https://slackware.jp/packages/anthy.html)を最新安定版（2019年6月23日時点）に読み替え、tokyocabinet を除外せずにビルドします。例えばこんな感じ。

```
$ su -
# cd
# mkdir Downloads
# cd Downloads
# wget https://osdn.jp/projects/anthy/downloads/37536/anthy-9100h.tar.gz
# tar -zxvf anthy-9100h.tar.gz
# wget http://www.fenix.ne.jp/~G-HAL/soft/nosettle/anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz
# tar -Jxvf anthy-9100h.patch13-release-2019406.alt-depgraph-120315-angie.zipdic-201101.tar.xz
# cd anthy-9100h
# ./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
# make
# make install DESTDIR=/var/tmp/anthy-9100h
# cd /var/tmp/anthy-9100h
# makepkg --linkadd y --chown y ../anthy-9100h-x86_64-2.txz
# chmod 755 ../anthy-9100h-x86_64-2.txz
# upgradepkg ../anthy-9100h-x86_64-2.txz
# ldconfig
# exit
$ cd
$ rm ${HOME}/.anthy/last-record*
$ exit
```

※ 上書き解凍することで G-HAL さん patch が適用されます。解凍順が逆だと G-HAL さん patch がオリジナルのソースで上書きされてしまい意味がなくなるので注意。

※ 32bit版の場合は --libdir の指定を変える、パッケージ名に注意する等、少し工夫が必要かも。

※ ldconfig は念のため。

※ /tmp や /var/tmp について。/tmp には蜻蛉のように短命なものを /var/tmp には蝉のように短命は短命だけど蜻蛉よりは長生きなものを置くっぽいです（比喩におけるカゲロウとセミは成虫になってからの活動時間の**イメージ**であって現実には即していません）。ところで蝉はおいしいのかな。たまにスズメが追いかけ回しているのを見かけます。

※ [rm のワイルドカード指定は危険物につき注意。](https://qiita.com/morihirok/items/48651c4c7b14cd7d5689)

※ rm 取扱者資格作るべき。

# 公式ドキュメント
Frequently Asked Questions
http://www.slackware.com/faq/

Configuration Help
http://www.slackware.com/config/