mattintosh note

どこかのエンジニアモドキの備忘録

AppleScript を使って MacPorts や Homebrew の Wine を起動する

Wine.app MacPorts や Homebrew でインストールした Wine を実行するアプリケーションを作成します。AppleScript を使うと Automator で作成したものよりも起動が早いです。ドラッグアンドドロップによるファイル入力の処理もできます。


以下の AppleScript はアプリケーション単体で起動すれば Wine エクスプローラーを起動し、ドラッグアンドドロップコンテキストメニューからファイル入力があった場合はそのファイルを実行するものです。AppleScript エディタに貼り付けて「アプリケーション」として保存して下さい。

Homebrew の場合は property WINELOADERコメントアウト部分(--)を MacPorts と入れ替えて下さい。WINEPREFIX は未指定なので必要なら property WINELOADER の部分を WINEPREFIX=$HOME/.mywine /opt/local/bin/wine のような感じにして下さい。

MacPorts の fontconfig はユーザーフォントディレクトリ(~/Library/Fonts)が検索対象に含まれていません。FONTCONFIG_PATH を XQuartz のものに設定することでユーザーフォントディレクトリを認識させることができます。[詳細

-- WINELOADER
property WINELOADER : "/opt/local/bin/wine" -- MacPorts 用
-- property WINELOADER : "/usr/local/bin/wine" -- Homebrew、自己ビルド用

-- wine 実行部分
on main(input)
    -- try で終了時のエラーを抑制する
    try
        do shell script WINELOADER & space & input
        -- XQuartz の fontconfig 設定ファイルを使用する場合(ユーザーフォントディレクトリを認識させる)
        -- do shell script "FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig" & space & WINELOADER & space & input
    end try
end main

-- ドラッグアンドドロップやコンテキストメニューからファイル入力があった場合
on open argv
    repeat with aFile in argv
        -- ファイルパスを alias から POSIX パスに変換し、ひとまとめにして "start /Unix" を付加する。
        main("start /Unix" & space & quoted form of (POSIX path of aFile))
    end repeat
end open

-- Wine.app を単体起動した場合
on run
    -- Wine エクスプローラを実行
    main("explorer")
end run

カスタマイズ

Wine.app 作成後に Wine.app/Contents/Resources/Scripts/main.scptAppleScript エディタで編集できます。

on run の中身は choose file でファイル選択式にすることもできたりします。その場合は start /Unixquoted form of などで処理しないと WINELOADER に正しくファイルパスが渡らないことがあります。書式は on open とほぼ同じです。with invisibles を使うことで非表示ファイルを表示できます。

main("start /Unix" & space & quoted form of (POSIX path of (choose file)))
-- 非表示ファイルを表示
-- main("start /Unix" & space & quoted form of (POSIX path of (choose file with invisibles)))

wineserver の終了が遅い(デフォルトは3秒?)ようならば wineserver -p0 を事前に実行しておくと少し早く終了できるかも。以下は MacPorts 版の例です。

do shell script "/opt/local/bin/wineserver -p0;" & WINELOADER & space & input

ログウィンドウが必要な場合は do shell script の部分を xterm -e [command] [args] のようにすれば xterm 上で実行してくれます(一部のファイルが正しく開けないことがある?)。

アイコンは Contents/Resources/droplet.icns で変更可能。Info.plistCFBundleDocumentTypes キーを追加すれば EXE ファイル等との関連付けも可能です。詳しくは以下のスクリプトを見て下さい。

Wine.app 作成用スクリプト

上記のスクリプトに EXE、MSI、LNK ファイルとの関連付けを追加した Wine.app 作成用スクリプトを書いてみました。

[view raw]リンクからファイルを保存して、引数に WINELOADER のパスを指定して bash などで実行すればカレントディレクトリに Wine.app が作成されます。

bash wine_application_bundle_creator.sh /opt/local/bin/wine