Wine
在沒有使用者互動的情況下使用 wine
我想從 shell 腳本執行 Windows 執行檔(控制台應用程序)。該腳本是自動建構包的更大項目的一部分,因此我需要避免使用者互動。
實際上我使用這樣的東西:
export WINEARCH=win64 export WINEPREFIX=/somewhere/$WINEARCH wine pgen.exe
它基本上可以工作,但存在以下問題:
- 如果
WINEPREFIX
為空(第一次執行就是這種情況),則會出現一個對話框,顯示等待配置。我想避免依賴執行的 X 伺服器。- 如果以前未安裝,
wine
則會顯示一個視窗,要求安裝 Gecko 並要求使用者干預。WINEPREFIX
需要由呼叫wine的使用者擁有,所以我不知道如何提供系統範圍的包裝器來執行上述應用程序。除了後一個問題(我可以沒有),其他問題都在阻止。最後我只想執行一個控制台應用程序。
如果您
wine
使用空執行$DISPLAY
,它將跳過顯示任何對話框並在沒有使用者互動的情況下執行:DISPLAY= wine pgen.exe
為了避免前綴所有權問題,我通常指向
WINEPREFIX
一個臨時目錄,因此每次都會重新創建前綴(但這很慢)。
您可以通過從 X 會話執行一次來“啟動”您的 wine 環境,讓它配置單聲道等。之後,備份整個
.wine
目錄並將其用作每個需要執行控制台應用程序的使用者的基礎。您可以
xvfb
用作虛擬 X 伺服器;有關如何自動啟動它的範例,請參見此處。然後export DISPLAY=:1
在開始葡萄酒之前。我需要這個來關閉沒有顯示器的葡萄酒,即使我只執行控制台執行檔。YMMV。我不確定
WINEPREFIX
樹是否需要由執行 wine 的使用者擁有,或者只需要對某些位置(例如.reg
文件、臨時位置)的寫權限。