ManjaroでCLIまたはWine実行可能ファイルを検出する

ManjaroでCLIまたはWine実行可能ファイルを検出する

私のLinux Mintインストールでは、PE実行可能ファイルをコマンドラインから直接実行できます。.NET / CLI実行可能ファイルの場合はMonoを使用して自動的に実行され、それ以外の場合はWineを使用して自動的に実行されます。

これはうまくいきます。binfmt/usr/lib/binfmt-support/run-detectorsCLIおよびWineの実行可能ファイルに対して実行するように構成されています。これは、設定された一連の検出器を実行して/var/lib/binfmtsPE実行可能ファイルの種類を決定し、それを実行するために適切なコマンドを実行します。

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-cli0ファイルが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

関連情報