如何使得支援 OpenGL 的 Flatpak 應用和遊戲在專有 Nvidia 圖形驅動下工作

2019-03-14 11:45:00

一些支援 OpenGL 並打包為 Flatpak 的應用和遊戲無法使用專有 Nvidia 驅動啟動。本文將介紹如何在不安裝開源驅動(Nouveau)的情況下啟動這些 Flatpak 應用或遊戲。

這有個例子。我在我的 Ubuntu 18.04 桌面上使用專有的 Nvidia 驅動程式 (nvidia-driver-390),當我嘗試啟動以 Flatpak 形式安裝的最新版本 Krita 4.1 (構建了 OpenGL 支援)時,顯示了如下錯誤:

$ /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=krita --file-forwarding org.kde.kritaGtk-Message: Failed to load module "canberra-gtk-module"Gtk-Message: Failed to load module "canberra-gtk-module"libGL error: No matching fbConfigs or visuals foundlibGL error: failed to load driver: swrastCould not initialize GLX

Winepak 遊戲(以 Flatpak 方式打包的系結了 Wine 的 Windows 遊戲)似乎也受到了這個問題的影響,這個問題從 2016 年出現至今。

要修復使用 OpenGL 和專有 Nvidia 圖形驅動時無法啟動的 Flatpak 遊戲和應用的問題,你需要為已安裝的專有驅動安裝一個執行時環境。以下是步驟。

1、如果尚未新增 FlatHub 倉庫,請新增它。你可以在此處找到針對 Linux 發行版的說明。

2、現在,你需要確定系統上安裝的專有 Nvidia 驅動的確切版本。

這一步取決於你使用的 Linux 發行版,我無法涵蓋所有??情況。下面的說明是面向 Ubuntu(以及 Ubuntu 風格的版本),但希望你可以自己弄清楚系統上安裝的 Nvidia 驅動版本。

要在 Ubuntu 中執行此操作,請開啟 “軟體與更新”,切換到 “附加驅動” 索引標籤並記下 Nvidia 驅動包的名稱。

比如,你可以看到我的是 “nvidia-driver-390”:

這裡還沒完成。我們只是找到了 Nvidia 驅動的主要版本,但我們還需要知道次要版本。要獲得我們下一步所需的確切 Nvidia 驅動版本,請執行此命令(應該適用於任何基於 Debian 的 Linux 發行版,如 Ubuntu、Linux Mint 等):

apt-cache policy NVIDIA-PACKAGE-NAME

這裡的 “NVIDIA-PACKAGE-NAME” 是 “軟體與更新” 中列出的 Nvidia 驅動包名稱。例如,要檢視 “nvidia-driver-390” 包的確切安裝版本,請執行以下命令:

$ apt-cache policy nvidia-driver-390nvidia-driver-390:  Installed: 390.48-0ubuntu3  Candidate: 390.48-0ubuntu3  Version table: *** 390.48-0ubuntu3 500        500 http://ro.archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages        100 /var/lib/dpkg/status

在這個命令的輸出中,查詢 “Installed” 部分並記下版本號(不包括 “-0ubuntu3” 之類)。現在我們知道了已安裝的 Nvidia 驅動的確切版本(我例子中的是 “390.48”)。記住它,因為下一步我們需要。

3、最後,你可以從 FlatHub 為你已安裝的專有 Nvidia 圖形驅動安裝執行時環境。

要列出 FlatHub 上所有可用的 Nvidia 執行時包,你可以使用以下命令:

flatpak remote-ls flathub | grep nvidia

幸運地是 FlatHub 上提供這個 Nvidia 驅動的執行時環境。你現在可以使用以下命令繼續安裝執行時:

針對 64 位系統:

flatpak install flathub org.freedesktop.Platform.GL.nvidia-MAJORVERSION-MINORVERSION

將 “MAJORVERSION” 替換為 Nvidia 驅動的主要版本(在上面的範例中為 390),將 “MINORVERSION” 替換為次要版本(步驟2,我例子中的為 48)。

例如,要為 Nvidia 圖形驅動版本 390.48 安裝執行時,你必須使用以下命令:

flatpak install flathub org.freedesktop.Platform.GL.nvidia-390-48

對於 32 位系統(或能夠在 64 位上執行 32 位的應用或遊戲),使用以下命令安裝 32 位執行時:

flatpak install flathub org.freedesktop.Platform.GL32.nvidia-MAJORVERSION-MINORVERSION

再說一次,將 “MAJORVERSION” 替換為 Nvidia 驅動的主要版本(在上面的範例中為 390),將 “MINORVERSION” 替換為次要版本(步驟2,我例子中的為 48)。

比如,要為 Nvidia 圖形驅動版本 390.48 安裝 32 位執行時,你需要使用以下命令:

flatpak install flathub org.freedesktop.Platform.GL32.nvidia-390-48

以上就是你要執行支援 OpenGL 的 Flatpak 的應用或遊戲的方法。