Ubuntu中讓WINE用顯示卡運作 / Run WINE with GPU in Ubuntu
Ubuntu裝了顯示卡後,WINE就無法開啟了。為什麼呢?
WINE
WINE是在Linux上用來運作Windows程式的重要核心。大多數情況下,WINE在Intel的內建顯示晶片下都能正常運作,但很多人在裝了顯示卡後,WINE就無法順利開啟。
以我目前的電腦為例,發生錯誤的環境如下:
- Ubuntu 22.04
- KDE Plasma 5.24.7 (用X11運作)
- NVIDIA Geforce RTX 3600 (ZOTAC),用Razer Core X外接顯示卡盒子連接。
執行WINE之後會遇到以下錯誤訊息:
err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
看起來WINE的視窗找不到驅動程式來開啟。有辦法可以解決嗎?
prime-run
https://www.youtube.com/watch?v=aPi8NfDyDMU
查了很多方法,最後發現必須要用prime-run來運作WINE。
prime-run並不是預先安裝的程式,需要手動設定。我參考Ricky Kresslein的整理,將建立prime-run的方法歸納為以下步驟:
- 確認NVIDIA驅動程式有正常安裝,並且已經重新啟動。
- 建立檔案「/bin/prime-run」,檔案內容如下:
- 給予執行權限:sudo chmod +x /bin/prime-run
- 接下來就能用prime-run執行WINE。例如執行WINE的設定: prime-run winecfg
#!/bin/bash
export __NV_PRIME_RENDER_OFFLOAD=1
export __VK_LAYER_NV_optimus=NVIDIA_only
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
"$@"
看到WINE畫面跑出來的時候,整個人都要哭出來了。
環境變數 / Environment Variables
prime-run裡面設定了很多環境變數,這些是什麼意思呢?
https://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html
PRIME是NVIDIA用來處理多個顯示卡時如何決定圖形化介面顯示方式的元件。PRIME render offload則是讓X視窗中特定應用程式以指定GPU運作的方式。以下就讓我們來看看prime-run設定到的環境變數。
- export __NV_PRIME_RENDER_OFFLOAD=1
開啟PRIME render offload功能。 - export __VK_LAYER_NV_optimus=NVIDIA_only
只使用NVIDIA GPU來運作Vulkan運作程式。Vulkan是一種類似OpenGL的圖形化顯示API,特色是運用少量CPU資源就能取得高效能。詳細請看NVIDIA的介紹。 - export __GLX_VENDOR_LIBRARY_NAME=nvidia
告訴X視窗,這個圖形化介面的驅動程式要用nvidia。 - export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
明確指示驅動程式要用的資訊,這邊是使用NVIDIA的驅動程式。關於ICD請看Vulkan的說明。
出乎意料之外的複雜。
後來嘗試在沒有裝顯示卡的情況下用prime-run執行,似乎還是能夠正常開啟WINE。後續還會遇到什麼問題,就讓我們繼續看下去吧。
你有用過WINE嗎?你用WINE跑什麼程式呢?
歡迎下面留言喔!