2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux で exe を実行する wine

Posted at

Linux 上で Windows のファイル (.exe、.msi まど) を実行できるソフトウェア Wine(ワイン) は、Linuxユーザーにとってとても便利なツールです。

Wine(Wine Is Not an Emulator) は、「WindowsアプリケーションをLinux上でネイティブのように実行するための互換レイヤー」です。名前の通り「エミュレータではない」のがポイントです。

1. 特徴

項目 内容
開発元 WineHQプロジェクト(オープンソース)
種類 Windows APIの互換レイヤー
ライセンス LGPL(自由に利用・改変可)
主な対応OS Linux, macOS, BSD, Solarisなど
実行対象 .exe.msi 形式のWindowsアプリ

2. 概要

WineはWindows用のアプリケーションに必要な「Windows API(Application Programming Interface)」を、Linuxや他のOSで動くように再実装しています。

つまり、仮想マシンやエミュレーターのように「Windows OS全体を起動する」のではなく、Windowsアプリの呼び出す関数をLinuxの関数に置き換えて処理する仕組みです。

Wine の仕組みは非常に興味深く、Linux などの非Windows環境で Windowsアプリケーションを「ネイティブのように」実行できる理由が、この仕組みにあります。

3. Wineの基本的な仕組み

Wine(Wine Is Not an Emulator)は、「Windowsアプリをエミュレートする」のではなく、「Windows API(Application Programming Interface)」をLinuxなどの環境上に再実装して提供する互換レイヤーです。

なぜ「エミュレータではない」のか?

Wineは、仮想マシン(VirtualBoxやQEMUのような)やエミュレータ(例えばDOSBoxなど)のように、Windows OSそのものを実行しているわけではありません。

代わりに:

  • Windowsアプリが呼び出すAPI関数(例:CreateFile、MessageBox、DirectX関数など)を
  • WineがLinux上で動作するように作り直した関数群置き換えることで、
  • アプリをまるでWindows上にいるようにだましながら動作させるのです。

つまり、Linuxネイティブでバイナリを直接実行しているのが大きな違いです。

4. Wineの内部構造(高レベル)

以下のようなレイヤーで構成されています:

Windowsアプリケーション(.exe/.dll)
        ↓
Windows API 呼び出し
        ↓
Wine DLL(再実装された Windows API群)
        ↓
Wine Server(仮想レジストリ・デバイス管理など)
        ↓
LinuxのカーネルやX11/Wayland、ALSA/PulseAudioなど

各コンポーネントの役割

(1) Wine DLLs(再実装API)

  • Windowsの各種DLL(kernel32.dlluser32.dllgdi32.dllntdll.dll など)をWine用に再実装
  • 例:MessageBox()user32.dll.so にあるWine独自関数を呼び出す

(2) Wine Server

  • Windowsのレジストリ、スレッド、同期、ウィンドウ、ファイルハンドルなどの状態管理を担当
  • 複数のWineプロセス間で共有される中心的なプロセス

(3) NTDLLレベル

  • Windows NTカーネルに近い機能も Wine 上で一部再現されており、低レベルAPIを提供
  • 例:プロセス生成や仮想メモリ制御(WindowsとLinuxで挙動が大きく異なるため重要)

(4) ライブラリのマッピング

  • Windowsの gdi32.dll など → Linuxの Xlib, Wayland, FreeType, Mesa などにマッピング
  • Direct3D → Vulkan 変換(最近は DXVK などで実現)

(5) ファイル構造の例(~/.wine/)

Wineはユーザーごとに仮想的なWindows環境を次のような形で管理します:

~/.wine/
├── drive_c/          ← 仮想Cドライブ(Program Filesなど)
├── system.reg        ← レジストリ(System)
├── user.reg          ← レジストリ(User)
├── userdef.reg       ← デフォルトレジストリ
└── dosdevices/       ← ドライブ割り当て(例:d: → /media/usb)

変換の具体例(MessageBox)

Windowsでのコード:

MessageBox(NULL, "Hello", "Title", MB_OK);

この関数呼び出しは本来 Windows の user32.dll によって処理されます。

Wineでは次のような流れになります:

  1. Windowsアプリが MessageBox() を呼び出す
  2. Wineが用意した user32.dll.so の MessageBox 関数が呼ばれる
  3. それが Linux の X11Wayland のAPIを使ってウィンドウを描画
  4. 結果:Linux上に「Hello」と書かれたダイアログが出る

5. 補助技術との連携

技術 用途
DXVK DirectX → Vulkan に変換(高速でゲーム向き)
vkd3d DirectX 12 → Vulkan に変換
Winetricks ランタイムやDLLの追加・管理
Proton WineベースのSteam用ゲーム互換レイヤー(DXVKなど内蔵)
Bottles / PlayOnLinux WineをGUIで管理・複数バージョン併用

6. Wineが苦手なもの

  • ドライバを直接操作するタイプのアプリ(USBデバイス制御など)
  • 一部の 64bit .NETアプリ(特に最新の.NET Core/5+)
  • Windowsに深く依存するセキュリティソフト、ドングル付きのアプリ

7. まとめ

特徴 内容
互換性の仕組み Windows APIをLinux用に再実装(ネイティブ実行)
エミュレーターとの違い OS全体を仮想化しない、より軽量・高速
重要コンポーネント Wine DLL群、Wine Server、再現されたレジストリ
実現手段 Windows関数をLinuxシステムコールやライブラリに翻訳

Wineはシンプルに見えて、実はOSの境界を越える高度な互換技術の結晶です。
必要であれば、特定のAPIやDLLの内部動作など、より専門的な解説もできます。興味ありますか?


使い方の基本

1. Wineのインストール(例:Ubuntu)

$ sudo -E apt update
$ sudo -E apt install -y wine

Wineの開発版を使いたい場合は、公式サイト(https://www.winehq.org/)のリポジトリを追加してインストールします。

起動してみたら wine32 もインストールすればと言われたので、表示されているコマンドをそのまま実行します。

$ wine --version
it looks like wine32 is missing, you should install it.
multiarch needs to be enabled first.  as root, please
execute "dpkg --add-architecture i386 && apt-get update &&
apt-get install wine32:i386"
wine-9.0 (Ubuntu 9.0~repack-4build3)

$ sudo -E su
# dpkg --add-architecture i386 && apt-get update && apt-get install wine32:i386
# eixt

$ wine --version
wine-9.0 (Ubuntu 9.0~repack-4build3)

32ビット版もインストールされました。


2. Windowsアプリの実行

たとえば setup.exe を実行したい場合:

$ wine setup.exe

すでにインストール済みの .exe ファイルも同じように実行できます。
試しに Widows コマンドプロンプトを起動してみました。

$ cmd.exe
Microsoft Windows [Version 10.0.26100.4349]
(c) Microsoft Corporation. All rights reserved.

C:\temp>date
現在の日付: 2025/06/23
新しい日付を入力してください: (年-月-日)

C:\temp>
C:\temp>time
現在の時刻: 13:07:27.24
新しい時刻を入力してください:

C:\temp>exit
$

3. Wineで仮想的な「C:\」にアクセス

Wineはホームディレクトリ内に「仮想的なWindows環境」を作成します:

~/.wine/drive_c/

この中に、Program Files や Windows フォルダがあり、まるで本物のWindowsのような構造になっています。

4. 設定ツール(winecfg)

winecfg

このコマンドでWindowsのバージョン(例:Windows 10/7)を指定したり、DLLの動作、ドライブ割り当てなどを設定できます。

補足ツール

ツール 概要
Winetricks ランタイム(.NET Framework、DirectX など)を簡単に追加できるスクリプト集
PlayOnLinux GUIでWineの設定やアプリごとの環境を個別に管理できる便利ツール
Bottles 近年人気のWine GUI管理ツール(PlayOnLinuxよりモダン)

⚠️ 注意点・限界

  • すべてのWindowsアプリが動くわけではありません(特に重いゲームや最新の.NETアプリは動作が不安定)
  • 特定アプリ向けにWineバージョンやライブラリを調整する必要があることも
  • 日本語の表示や入力に問題が出る場合は、フォントやIMEの設定が必要

ゲーム用途:Protonとの違い

SteamではWineをベースにした「Proton」という互換レイヤーが使われています。Protonはゲーム専用に最適化されていて、Steam上の多くのWindowsゲームがLinuxでも遊べるようになっています。

参考サイト


Wine Configuration(winecfg)の各タブ説明

Wine の設定ツール winecfg(Wine Configuration)にはいくつかのタブがあり、それぞれが Wine の動作に重要な役割を持っています。以下にそれぞれのタブについて説明します。

タブ名 主な役割
① Applications アプリごとの設定、Windowsバージョン指定
② Libraries DLLの挙動制御(builtin/native)
③ Graphics ウィンドウ表示やDPIの調整
④ Desktop Integration Windowsアプリのデスクトップ統合
⑤ Drives ドライブレターとLinuxパスの関連付け
⑥ Audio サウンド出力設定
⑦ About バージョン確認

①【Applications(アプリケーション)】

概要:

アプリケーションごとに動作する Windowsのバージョン を指定できます。

1.png

主な項目:

  • Default Settings(既定設定):すべてのアプリに適用されるデフォルトの動作
  • Add Application...:特定の .exe ファイルを追加し、そのアプリだけの設定を行う
  • Windows Version:そのアプリが使用するWindowsのバージョンを指定(Windows 10 / 7 / XPなど)

活用例:

古いソフトで「Windows XPでしか動作しない」とされる場合、そのアプリだけにXPを指定できる。


②【Libraries(ライブラリ)】

概要:

特定の Windows DLL(動的リンクライブラリ) をどう扱うかを指定します。

2.png

主な操作:

  • 新しいオーバーライドを追加(Add):DLL名を入力して追加
  • 編集(Edit):DLLの扱いを「builtin(Wine独自実装)」または「native(本物のWindows DLL)」に変更

活用例:

  • dinput(DirectInput)や msxml3.dll などをネイティブDLLに切り替えることで一部ソフトが安定動作することがある。
  • .NET Framework を使うアプリでは gdiplus を native に指定することが多い。

③【Graphics(グラフィックス)】

概要:

Wineアプリの ウィンドウ表示や描画方法 の設定を行います。

3.png

主な項目:

  • Allow the window manager to decorate the windows

    • ウィンドウの枠(タイトルバーなど)をLinuxのウィンドウマネージャで管理するかどうか
  • Allow the window manager to control the windows

    • 移動・リサイズなども含め、ウィンドウ全体の制御をLinux側で行うか
  • Emulate a virtual desktop

    • 仮想デスクトップで Wine を動かす(解像度を指定)
  • Screen resolution(DPI設定):フォントの大きさなどに影響

活用例:

  • ゲームやフルスクリーンで不具合があるときに「仮想デスクトップ」を有効にすると安定することが多い。
  • 高DPIディスプレイ使用時に文字が小さいときは DPI を大きくする。

④【Desktop Integration(デスクトップ統合)】

概要:

このタブでは、Wineで実行されるWindowsアプリが、どんな見た目で表示されるか(テーマやアイコンなど)、また**「マイドキュメント」や「デスクトップ」などのフォルダがLinux上のどこに対応付けられるか**などを管理します。

4.png

主な項目:

1. Theme settings(テーマの設定)
  • Windowsアプリの見た目(ウィンドウ装飾やボタンのスタイル)に使う「テーマ」を指定できます。
  • winecfgではあまりテーマの切り替えは直接できませんが、GTKやKDEのスタイルにある程度連動します。

💡一部のカスタムテーマや msstyles を使いたい場合は、Winetricks やレジストリ設定が必要になることがあります。

2. Folder settings(フォルダーの統合)

Wineの仮想Windows環境では、次のような「Windows風のユーザーフォルダー」があります:

Windows名 Wineの初期マッピング先(例)
デスクトップ ~/Desktop
マイドキュメント ~/Documents
マイピクチャ ~/Pictures
マイミュージック ~/Music
マイビデオ ~/Videos
Application Data(AppData) ~/.wine/drive_c/users/あなたの名前/Application Data

この画面では、それらをどのLinuxフォルダにマッピングするかを手動で変更できます。

設定方法:

  • フォルダを選択 → 「参照(Browse)」ボタンを押して新しいフォルダを指定
例:
  • 「マイドキュメント」を外付けHDDの /media/user/data/documents に設定するなど
活用例
  • Wineアプリ(たとえばメモ帳など)でファイルを保存するとき、Linuxのどのフォルダに保存されるかを制御できる
  • Wineアプリがユーザーフォルダにアクセスするとき、Linux側の実フォルダと連携できる
  • Windows風の使い慣れた構造にカスタマイズできる
  • データのバックアップや共有をしやすくなる
注意点
  • フォルダの場所を変更する際、実際のLinuxのフォルダを上書き・削除しないように注意してください。
  • アプリによってはフォルダ名が「日本語」だとうまく認識されないこともあるので、なるべく英語名が無難です。
補足:コマンドラインで確認する方法

Wineのフォルダ統合設定は、レジストリファイル user.reg に保存されています(~/.wine/user.reg)。

cat ~/.wine/user.reg | grep Personal

などで、仮想「マイドキュメント」などの場所を確認できます。


⑤【Drives(ドライブ)】

概要:

Wine環境における Windows風のドライブ(C:, D: など)とLinuxの実フォルダとの対応付け を行う。

5.png

主な操作:

  • ドライブレター(例:Z:)と、実際のパス(例:/home/username/)のマッピング
  • 自動検出でLinux側のフォルダをWineに登録可能

活用例:

  • 外部メディア(USBやDVD)を D:E: として登録
  • Z: ドライブは基本的にLinux全体(/)を指すので、誤って削除しないよう注意

⑥【Audio(オーディオ)】

概要:

Wineが使用する サウンドシステムの選択と設定 を行う。

6.png

主な項目:

  • サウンドドライバの選択:PulseAudio, ALSA, JACK など(システムによって異なる)
  • テストボタン:サウンド出力確認

活用例:

  • 音が出ないときはここでドライバを切り替えてテストする。
  • PulseAudio に問題がある環境では ALSA を選ぶことで音が出る場合がある。

⑦【About(バージョン情報)】

概要:

Wineの バージョン情報 を表示するだけのシンプルなタブ。

7.png


2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?