Wine

在沒有使用者互動的情況下使用 wine

  • March 4, 2015

我想從 shell 腳本執行 Windows 執行檔(控制台應用程序)。該腳本是自動建構包的更大項目的一部分,因此我需要避免使用者互動。

實際上我使用這樣的東西:

export WINEARCH=win64
export WINEPREFIX=/somewhere/$WINEARCH
wine pgen.exe

它基本上可以工作,但存在以下問題:

  1. 如果WINEPREFIX為空(第一次執行就是這種情況),則會出現一個對話框,顯示等待配置。我想避免依賴執行的 X 伺服器。
  2. 如果以前未安裝,wine則會顯示一個視窗,要求安裝 Gecko 並要求使用者干預。
  3. WINEPREFIX需要由呼叫wine的使用者擁有,所以我不知道如何提供系統範圍的包裝器來執行上述應用程序。

除了後一個問題(我可以沒有),其他問題都在阻止。最後我只想執行一個控制台應用程序。

如果您wine使用空執行$DISPLAY,它將跳過顯示任何對話框並在沒有使用者互動的情況下執行:

DISPLAY= wine pgen.exe

為了避免前綴所有權問題,我通常指向WINEPREFIX一個臨時目錄,因此每次都會重新創建前綴(但這很慢)。

您可以通過從 X 會話執行一次來“啟動”您的 wine 環境,讓它配置單聲道等。之後,備份整個.wine目錄並將其用作每個需要執行控制台應用程序的使用者的基礎。

您可以xvfb用作虛擬 X 伺服器;有關如何自動啟動它的範例,請參見此處。然後export DISPLAY=:1在開始葡萄酒之前。我需要這個來關閉沒有顯示器的葡萄酒,即使我只執行控制台執行檔。YMMV。

我不確定WINEPREFIX樹是否需要由執行 wine 的使用者擁有,或者只需要對某些位置(例如.reg文件、臨時位置)的寫權限。

引用自:https://unix.stackexchange.com/questions/188146