シェルから直接Windowsアプリケーションを起動できる「binfmt_misc」
Linuxカーネルに古くからある機能に「binfmt_misc」というものがあり、Linuxネイティブの「ELF」以外の形式であっても、処理をアプリケーションに渡すことで、実行ファイルをシェルから普通に実行するのと同じ感覚で起動(処理)でき、この機能を利用することで、WineでWindowsアプリケーションを実行するのが楽になる。
現在、Wineでsetup.exeなどのインストーラを実行してインストールされたものに関しては、デスクトップ環境のメニューの中に、「スタート」メニュー項目が出てくるようになっているため、それに関してはメニューからの起動でよいのだが、
といったものに対しては役に立つ。
更に、Xfce 4.4のファイルマネージャThunarでも直接起動できるようになる。*2GNOMEのNautilusの場合は別で、関連付けとして設定する(後述)。
binfmt_miscのカーネルビルド時の設定
有効もしくはモジュールになっていればよい。ディストリ付属カーネルなら、ほとんどの場合、モジュールになっているものと思われる。
Executable file formats / Emulations ---> <M> Kernel support for MISC binaries
binfmt_miscを有効にする
手動で行う場合
$ sudo mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
起動時に自動で行う場合
ファイル名: /etc/fstab
none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0
ファイルの種類ごとの設定
管理者権限で/proc/sys/fs/binfmt_misc/registerに対して値を書き込む形で設定をする。自動で行いたい場合、起動時の自動起動スクリプトに登録するとよい。Gentoo Linuxでは/etc/conf.d/local.start。
ファイルの種類は、
- ファイル先頭にある、種類ごとに特有の「マジック」によるもの(2番目のフィールドは「M」にする)
- 拡張子によるマッチング(2番目のフィールドを「E」にする)
のいずれかで指定する。
注意点としては、.NETアプリケーション(Monoを使用)とWin32アプリケーション(Wineを使用)は、マジックや拡張子では区別できないため、ここでWineに設定すると、Monoでは指定できない。*3
# echo ':Windows:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register # echo ':WindowsPE:M::PE::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
(2009/3/31)この処理については改善策がある。「.exeファイル(Windows用とMono/.NET用)の識別と関連付けについて」を参照。
書式としては
# echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register
で、詳しくはbinfmt_misc.txtの日本語訳を参照。Wineを使用するのは一例に過ぎず、この機能では、
- 音楽や動画のファイルに実行権限を付けてプレーヤーから再生する
- 画像ファイルに実行権限を付けてビューアから表示する
- スクリプトファイルに「#!」(shebang)を付けなくても、実行属性を付ければ起動できる
といったこともできる。
3番目の例として、スクリプトとは多少異なるが、VMware Playerの.vmxファイルについて、shebang行の中身(vmplayerの場所)が環境に合っていなくても、コマンドラインシェルから起動できるようにする。vmplayerの場所は環境に応じて書き換える。
# echo ':VMX:E::vmx::/opt/vmware/player/bin/vmplayer:' > /proc/sys/fs/binfmt_misc/register
binfmt_miscの項目操作
一時的に無効にする
# echo 0 > /proc/sys/fs/binfmt_misc/[有効にしたときの1番目のフィールドの名前]
無効されたものを再び有効にする
# echo 1 > /proc/sys/fs/binfmt_misc/[有効にしたときの1番目のフィールドの名前]
項目を個別に削除
# echo -1 > /proc/sys/fs/binfmt_misc/[有効にしたときの1番目のフィールドの名前]
項目を全て削除
# echo -1 > /proc/sys/fs/binfmt_misc/status
NautilusでWindowsアプリケーションを直接実行する
Nautilusファイルマネージャでは、binfmt_miscを設定しても、
xxx.exeを表示できませんでした。
というエラーダイアログが出るが、これは、ファイルの関連付けを変更することで開けるようになる。*4
まず、exeファイルを右クリックし、プロパティダイアログを開く。「開き方」のタブから「追加」ボタンをクリックし、「wine」と入力。
これで、NautilusからWineを使用してWindowsアプリケーションが開けるようになったが、ダブルクリックでは警告が出てキャンセルしかできない。その場合、右クリックメニューから「'wine'で開く」をする。
関連記事:
使用したバージョン:
- Nautilus 2.16.3