내 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
파일이 CLI 실행 파일인지 테스트하고 종료 시 예 또는 아니오를 나타내는 간단한 명령 0
입니다 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