私のLinux Mintインストールでは、PE実行可能ファイルをコマンドラインから直接実行できます。.NET / CLI実行可能ファイルの場合はMonoを使用して自動的に実行され、それ以外の場合はWineを使用して自動的に実行されます。
これはうまくいきます。binfmt
/usr/lib/binfmt-support/run-detectors
CLIおよびWineの実行可能ファイルに対して実行するように構成されています。これは、設定された一連の検出器を実行して/var/lib/binfmts
PE実行可能ファイルの種類を決定し、それを実行するために適切なコマンドを実行します。
Manjaroにはありますが、binfmt
ありませんrun-detectors
。だから最初のゲームが勝つと思います/proc/sys/fs/binfmt_misc
。そしてMonoをインストールする前にWineをインストールしたので、そのゲームが勝つと思います。とにかくそれは私の家です。症状は、.exe
コマンドラインからファイルを実行するたびに.NET実行可能ファイルにもかかわらず、Wineが実行されることです。
run-detectors
このユーティリティを提供していると思われるパッケージが見つかりません。標準またはコミュニティリポジトリに似たものはありますか?それともArchの世界でこれを設定する他の一般的な方法はありますか?
答え1
私はまだこれを行うより慣用的な方法を知っている人からより良い答えを得ることを望んでいます。しかし、そうでない場合は、今後のGoogleスタッフのために私が今やっていることは次のとおりです。
Linux Mintのインストールでは、/usr/lib/cli/binfmt-detector-cli
このファイルはUbuntuによって提供されます。シングルランタイムパック。私は他のディストリビューションから実行可能ファイルをインポートするのが好きではありませんが、同じプラットフォームである限り、他のディストリビューション間に存在する可能性がある違いに依存しない非常に単純な実行可能ファイルである必要があります。
または、ソースコードを検索してビルドすることもできます。
git clone --filter=blob:none --depth 1 --no-checkout git://git.launchpad.net/ubuntu/+source/mono ubuntu-mono-binfmtdetect
cd ubuntu-mono-binfmtdetect
git sparse-checkout set debian/detector
git checkout
cd debian/detector
make
echo sudo install -o root -g root -m 0755 ./binfmt-detector-cli /usr/local/bin/
binfmt-detector-cli
0
ファイルがCLI実行可能ファイルかどうかをテストし、終了時にはいまたはいいえを示す簡単なコマンド1
。
/usr/lib/cli
私のManjaroインストールにはディレクトリがなかったので、このファイルを/usr/bin/
。/usr/bin/binfmt-mono-wine
#!/bin/bash
if /usr/bin/binfmt-detector-cli "$1"; then
mono "$@"
else
wine "$@"
fi
その後、編集して/usr/lib/binfmt.d/mono.conf
変更します。
:CLR:M::MZ::/usr/bin/mono:
到着
:CLR:M::MZ::/usr/bin/binfmt-mono-wine:
そして/usr/lib/binfmt.d/wine.conf
変化
:DOSWin:M::MZ::/usr/bin/wine:
到着
:DOSWin:M::MZ::/usr/bin/binfmt-mono-wine:
これで、実行するコマンドを決定するために、Ubuntuで借用した検出器を使用するシェルスクリプトによって両方の形式が処理されることがわかります。
次に、古いハンドラを登録解除し、新しいハンドラを登録する必要があります。 systemdに次のサービスがあることがわかりました。
sudo /usr/lib/systemd/systemd-binfmt mono.conf
sudo /usr/lib/systemd/systemd-binfmt wine.conf
最後にやるべきことは、将来のモノとワインのアップグレード中にbinfmt設定への変更を上書きしないようにパックマンフックを登録することです。私は/etc/pacman.d/hooks/binfmt-mono-wine.hook
次の内容でこれを作りました:
[Trigger]
Operation = Install
Operation = Upgrade
Type = File
Target = usr/lib/binfmt.d/mono.conf
Target = usr/lib/binfmt.d/wine.conf
[Action]
When = PostTransaction
Description = Updating binfmt configuration to use binfmt-mono-wine to differentiate between mono and wine executables
Exec = /usr/bin/xargs -I{} /usr/bin/sed -Ei 's_:/usr/bin/(mono|wine):_:/usr/bin/binfmt-mono-wine:_' /{}
NeedsTargets