透過Bottles,我們就可以在Linux執行Windows的exe,請先看 如何安裝Bottles
一般版的Bottles是用圖形界面操作,開發者2023年又另外加入了Bottles-cli的命令行界面,可以用指令操作Bottles容器。
Bottles-cli有何用處?有時用指令操作更為快速,你可以用指令稿批次建立Bottles容器。透過Bottles-cli,達成自動化安裝exe是有可能的。
此外,有時候你會想要讓系統其他程式也能存取容器裡面的Wine,Bottles-cli能派上用場。有沒有可能,不要在系統全域安裝Wine,只把Wine關在Bottles容器裡面呢?答案是可以的。
1. Bottle-cli基本用法#
詳細用法參考 官方文件
Bottles我是用Flatpak安裝的,因此執行指令前都要加上flatpak run
,最後面才是加上操作與引數
flatpak run --command='bottles-cli' com.usebottles.bottles
輸出Help訊息:
flatpak run --command='bottles-cli' com.usebottles.bottles --help
info
會印出目前環境的資訊:
flatpak run --command='bottles-cli' com.usebottles.bottles info bottles-path
list
列出目前已安裝的Bottles容器
flatpak run --command='bottles-cli' com.usebottles.bottles list bottles
programs
列出容器內已安裝的exe程式,後面要加上-b
選取容器名稱
flatpak run --command='bottles-cli' com.usebottles.bottles programs -b Line
add
可以往容器直接新增exe
flatpak run --command='bottles-cli' com.usebottles.bottles add -b Line -n "exe捷徑名稱" -p "要安裝的exe路徑"
new
可以建立新容器
flatpak run --command='bottles-cli' com.usebottles.bottles \
new --bottle-name WinRAR \
--environment gaming \
--arch win64 \
--runner soda-8.0.2
run
執行容器裡面的特定exe
flatpak run --command='bottles-cli' com.usebottles.bottles run -b Line -e "exe路徑"
# 或者
flatpak run --command='bottles-cli' com.usebottles.bottles run -b Line -p "exe捷徑名稱"
reg
編輯容器內部的登錄檔數值,例如下面的例子,新增seguiemj的登錄檔數值到Line容器的HKEY_LOCAL_MACHINE...
下面。
flatpak run --command='bottles-cli' com.usebottles.bottles \
reg -b Line \
-k "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts" \
-v "seguiemj" \
-t REG_SZ \
-d seguiemj.ttf \
add
edit
編輯容器設定檔,例如新增環境變數
flatpak run --command='bottles-cli' com.usebottles.bottles edit -b Line --env-var LANG=zh_TW.UTF-8
shell
進入Wine的命令提示字元並執行指令
flatpak run --command='bottles-cli' com.usebottles.bottles shell -b Line -i winecfg
tools
能夠啟動Wine的相關工具,例如winecfg
flatpak run --command='bottles-cli' com.usebottles.bottles tools -b Line winecfg
2. 讓系統存取容器的Wine指令#
執行此操作前,請確認系統沒有安裝任何Wine的套件。
- 將Bottles裡名為「Line」容器的Wine做成執行檔
cat << "EOF" > ~/.local/bin/wine
#!/bin/sh
flatpak run --command='bottles-cli' com.usebottles.bottles run -b Line -e "$@"
EOF
chmod +x ~/.local/bin/wine
- 加入到系統PATH (
~/.local/bin/
)
echo "PATH=$PATH:~/.local/bin" >> ~/.bashrc
source ~/.bashrc
- 之後執行
wine
就會使用容器內的Wine來跑了,不過如果像Winetricks程式要求存取wineserver的話可能就會有問題
wine ~/Downloads/installer.exe
3. Winetricks搭配Bottles Wine使用#
Bottles開發者目前說 不會支援Winetricks,但Dependencies收錄的套件又有缺,該怎麼辦呢?
所以我們要自己想辦法,用hacky的方式讓Winetricks運作。
因為Bottles只是用於建立Wine環境而已,你還是能用Winetricks來安裝套件。
- 在 系統安裝最新版Wine,注意版本必須跟Bottles內的一致
wine --version
- 接著就能用Winetricks裝套件了:
# 取得最新Winetricks指令稿
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo mv winetricks /usr/bin
# 將Wine的C槽目錄指向Bottles的容器路徑
export WINEPREFIX=~/.var/app/com.usebottles.bottles/data/bottles/bottles/Line
# 開始安裝依賴套件
winetricks vcredist cjkfonts