Wine飲みてえ
飲みてえ(完全に理解してえ)。
Wineに限ったことではないのですが、数ヶ月前にデスクトップ環境で色々と不都合を感じることが多くなった折、
それを受けてOSレベルからの再セットアップを行いました。
試行錯誤……というほどでもないものの、だいぶポカも多かったので同じ轍を踏まぬようにこの記事を備忘録としておきます。
Windows boot manager(WBM) と Linux側のboot loaderのお話
Wineと言いつつまずはこちらから。
前にLinux環境をクリーンインストールし(ようとしてWindows10環境が入ったパーティションを潰してしまっ)た時、
改めてArch Wikiに目を通してみました。
すると、Linux環境を先にインストールするパターンもあることが判明。
ボクはそれまで、Windows環境をインストールした際にできたUEFIパーティションを使ってLinuxをインストールするパターンしか知らなかったもので、
その時以来新しく知った前者のパターンを使ってみることに。
で、それが案外簡単なモノだったのです。
(おそらく後述のboot loader修復コマンドbcdboot
がよしなにしてくれる)
従って今回もそのパターンで行くことにしました。
> bcdboot C:\Windows /s P:
予めLinux側からboot loader(以前はsystemd-bootで今はrEFInd)をインストールしておいたパーティションに対し
Windows10のブータブルメディアからプロンプトを起動して、
diskpart
でassign letter
(ここではassign letter=P
)した後上のコマンドを実行すると、
WBMがboot loader側から検知されるようにインストールできます。
この時注意点が3つ。
WBMをインストールすると、起動ドライブの順序が勝手に変えられます。BIOSからLinux側のboot loaderが入ったドライブを最上位にもってきます。
更にbcdboot
は他にも様々なオプションをもっており、間違ってそれを使うとboot loaderがクリーンインストールされる憂き目に合ったりします。今回はここで1ミス。
bcdboot
を直接使った記憶はあまりなかったので今回はきっちり記憶に残すことができそうです(白目)。
もう1つとして、boot loaderが入ったパーティションのマウントポイントはデュアルブート時/boot/efi
とするのが前提です。
rEFIndインストール時のルートディレクトリ指定
WBMにbcdboot
なるインストーラがあれば、Linux側のboot loaderにもインストーラは存在します。
systemd-bootの時はbootctl install
でした。最近使い始めたrEFIndだとrefind-install
がそれに当たります。
しかし、rEFIndが入ったパーティションのマウントポイントが/boot
以外だと、単純にrefind-install
してもinitramfsがきちんと認識されないことがあります(再現性が確定しているワケではありませんがその可能性もありそう、くらい)。ここで今回2ミス目。
というワケで、--root
オプションでルートディレクトリを指定してやらなければなりません。
$ refind-install --root /mnt
これはArch Linuxのインストーラ内で/mnt
に環境を作った後arch-chroot /mnt
する前に実行したコマンドだったので、
chrootした後なら--root /
としてやれば大丈夫……だと思います。
chroot
で入ってからrefind-install
するとrefind.confがarchのインストーラを起動ディスクとして扱う設定になってしまうようで(仮想環境にてテスト)、
入る前に実行するのが無難らしい。
Wine実行時の諸問題
さて、ようやくWineの話。
ボクはWindowsのみ対応のゲームをLinux側で遊ぶこともしばしばあるのですが、以前インストールした環境ではいくつか問題点を抱えていました。
- 日本語フォントが機能せず、文字化けする
- 通常の文字キーがWine上で反応しない
1点目については、日本語ロケールの解放忘れと環境変数の設定に起因する問題でした。
/etc/locale.gen
からja_JP.UTF-8
をコメントアウトしlocale-gen
をやり直すと、環境変数LANG
(あるいはLC_ALL
)の変更が有効になりました。
その上で、今回は/usr/local/bin/
にLC_ALL
を指定したシェルスクリプトファイルwine
を配置。
これで端末側からの実行でも、ファイルマネージャからの実行でも日本語が文字化けせず表示されるように。
(ちなみにLinux環境全体のロケールは英語に設定しており、それを覆したくはないのでこういう設定をしています)
2点目はまだ完全解決していない問題で、どうやらWineがキーボードを英語配列として認識していることが原因らしく……
Wine側で設定のしかたがイマイチ分からず、現状IMEに英語配列を入れておくことで対処しています。
最初に記事を書いた頃はこれ以上の解決策が浮かびませんでしたが、もう少し負担を軽減するため策で以下のようにしました。
- Xorgのキーボード配列設定を一度リセットする
wine
実行時のみ、変数XMODIFIERS
を使ってキーボード配列を英語にする
1点目は環境セットアップの際にlocalectl
で生成したXorg用のキーボード設定/etc/X11/xorg.conf.d/00-keyboard.conf
を削除。
2点目は先のwine
スクリプトに変数指定を追加(en
)することで、差し当たり常用するキーはwineでも使えるようになりました。
……まあ理想はwineでもキーボードがきちんと日本語配列として認識されることなんですけどね。