Age of Empire II のWine化とマウス真ん中クリックをCtrl化するまでの長い道のり

ozy's labo.


Age of Empire II のWine化とマウス真ん中クリックをCtrl化するまでの長い道のり

はじめに

私はいまだに古い Age of Empires II をプレイしています(しかもオリジナル版).
わざわざその為にネイティブ32bit Windows7 を残していたりするのですが,マシンにケーブル類を繋ぎ変えるのが面倒なので,前からやりたいと思っていた Wine 化を施しました.
というか,以前もやっていたのですが,いつの間にか動かなくなっていたので,本腰を入れて直そうかと.

ゲームの導入そのものは,さほど苦労はしなかったのですが,それよりも,マウス真ん中ボタンをX上でうまく扱える様にするのに苦労しました.
Linux 環境 で Windows ゲームを動かす際,入力周りの差異が問題になる事がよくあります.
最終的には解決に至りますが,かなりの遠回りをしました.同様の問題に遭遇した場合の参考になれば幸いです.

AoKのインストール(Wine)

まず,既に Windows7 環境で動作しているオリジナルの AoK を丸ごと Linux に持ってきました.
元々no cd化は済ませてあります(必須).

rsync -ax --progress "/mnt/win7/Program Files/Microsoft Games/" "~/drive_c/Program Files/Microsoft Games/"

ただし,このままでは以下のようなクラッシュが発生しました.

Unhandled exception: page fault on write access

これはDirectDraw周りの問題であることが多いです.

cnc-ddrawの導入

DirectDrawの互換レイヤとして cnc-ddraw を導入します.

cd ~/drive_c/Program Files/Microsoft Games/Age of Empires II/Age2_x1/
wget https://github.com/FunkyFr3sh/cnc-ddraw/releases/latest/download/cnc-ddraw.zip
unzip cnc-ddraw.zip 

同じディレクトリに ddraw.dllddraw.ini が出てきます.
cnc-ddraw の導入で起動する様にはなりましたが,解像度が低かったので,ddraw.ini を適宜変更します.
元々AoK用の初期設定が含まれるので,以下の様に変更.

; Age of Empires II: The Conquerors                                                                                                         
[age2_x1]
nonexclusive=true
adjmouse=true
width=1920
height=1080
fullscreen=true

起動スクリプト

こんな感じに.

#!/bin/bash

AOK="${HOME}/drive_c/Program Files/Microsoft Games/Age of Empires II/Age2_x1/age2_x1.exe"

WINEDLLOVERRIDES="ddraw=n,b" \
WINEESYNC=1 WINEFSYNC=1 \
wine "${AOK}"

中クリックをCtrlにしたい

むしろこちらがこの記事の本題です.

目的:

  • 中クリック → Ctrlとして動作
  • 元のCtrl → そのまま使用可能

失敗例まとめ

xmodmap

xmodmap -e "pointer = 1 0 3 4 5"

→ 中クリック無効化は可能
→ Ctrl化は不可

AutoHotkey(Wine内)

winetricksで導入.設定ファイルを以下の様な感じに,

MButton::
Send {Ctrl down}
KeyWait, MButton
Send {Ctrl up}
return

→ AoKがDirectInputで取得するため効かない

keyd

→ 動作はするが全体に影響しすぎて危険
→ 暴走して操作不能になる

input-remapper導入

最終的にこれで解決しました.
xubuntu 20.04 には標準で入っていないため手動インストール:

wget https://github.com/sezanzeb/input-remapper/releases/download/1.4.0/input-remapper-1.4.0.deb
sudo apt install ./input-remapper-1.4.0.deb

※ 途中で dpkg の statoverride エラーが出る場合あり
(postdrop, crontab, mlocate グループ欠損など)

最大の罠:デバイス選択

ここが最重要ポイントです.
GUI上で表示されるデバイス名は信用できません.
例えば,

Barcode Reader

→ 実際はマウス

正しい判定方法は,リストされたデバイスをそれぞれ選んで,キャプチャボタンを押して真ん中クリックした時に,

BTN_MIDDLE

が出るデバイスを選ぶ

設定内容

input-remapper GUIで:

  • Device:BTN_MIDDLEが出るデバイス
  • 入力:BTN_MIDDLE
  • 出力:KEY_LEFTCTRL

もう一つの罠

単純に割り当てると 元々のCtrlが効かなくなる ハッキリ言って致命的です.
これは「置き換え」になっているためです.

解決策

ゲームは左右のCtrlを区別しないので,真ん中ボタンを KEY_RIGHTCTRL に割り当てます.これにより,

元Ctrl → そのまま
中クリック → Ctrl

が両立されます.

結論

今回の本質は以下の通りです:

入力は“どの層で処理するか”が全て
  • X層 → 弱い(ゲームに負ける)
  • Wine内 → さらに弱い
  • evdev層 → 有効
  • デバイス名は信用するな
  • evtestが真実
  • 変換はできるだけ下の層でやる

おわりに

最終的にはLinuxでもWindowsと同じ操作性を再現できました.
ただし,そのためには「どの層で入力が処理されているか」を正しく理解する必要があります.
同じ問題でハマっている方の助けになれば幸いです.


Date: 2026-04-01

Author: ozyukiwo

Created: 2026-04-02 木 01:05

Emacs 26.3 (Org mode 9.1.9)

Validate