Linux dGPU Nvidia 独显运行应用

Linux dGPU Nvidia 独显运行应用

在 Ubuntu 22.04 上

系统带有工具 switcherooctl 可以切换系统使用的 gpu 卡,若默认连接显示到集成显卡,使用此工具时,将使用独显运行应用

若无法运行,可以使用 vkcube 来检查 Vulcan 的可用性,工具来自于包 vulkan-tools 直接 apt 安装即可。

可能出现无法调用情况如下:

vkEnumerateInstanceExtensionProperties failed to find the VK_KHR_surface extension. Do you have a compatible Vulkan installable client driver (ICD) installed? Please look at the Getting Started guide for additional information.

此时需要检查 icd 文件是否可用

ls /usr/share/vulkan/icd.d/nvidia_icd.json

若无文件,则需要安装库

sudo apt install vulkan-tools libvulkan1 libvulkan1:i386

若安装后仍不可用,检查是否有 Nvidia-wrapper

$ ls /usr/share/vulkan/icd.d/ 
intel_hasvk_icd.i686.json intel_icd.x86_64.json nvidia_icd.disabled_by_nv_vulkan_wrapper radeon_icd.x86_64.json intel_hasvk_icd.x86_64.json lvp_icd.i686.json nv_vulkan_wrapper.json virtio_icd.i686.json intel_icd.i686.json lvp_icd.x86_64.json radeon_icd.i686.json virtio_icd.x86_64.json

恢复配置:

sudo mv /usr/share/vulkan/icd.d/nvidia_icd.disabled_by_nv_vulkan_wrapper /usr/share/vulkan/icd.d/nvidia_icd.json

此时再切换独显运行可行。

注意,我并未发现哪部分程序给出了 nv_vulkan_wrapper,若可行,从添加 wrapper 的程序关闭可能更合理

使用环境变量运行 windows 软件

在解决 icd 问题后,环境变量也可以用作切换运行的方式,毕竟 switcherooctl launch 的原理本质也是切换环境变量。

例如使用 Steam 的 Proton 9.0-4 运行 Windows 应用,独显启动:

先要确保手动在 Steam 中添加可执行文件到游戏库中,并在命令行启动的 Steam 上获取其编号,或者在集显运行时查看其环境变量中的 SteamGameId

之后,为应用添加必要的环境变量,无需启动 Steam 即可运行应用本体

注意,最好替换 SteamGameId ,这是 Steam 做运行环境隔离的措施,使用程序自己的环境运行更稳定

此外,一定要替换 proton 的运行路径,我的路径只是 Proton 9.0 配置,随着版本更新,指令会有所不同。

此指令从 ps -aux | grep proton 获取,对于后续 Steam 启动 proton 的指令,可以通过如上方案获取启动指令模版。

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json SteamGameId=2907931734 STEAM_COMPAT_DATA_PATH=$HOME/.local/share/Steam/steamapps/compatdata/$SteamGameId STEAM_COMPAT_CLIENT_INSTALL_PATH=~/.local/share/Steam/ python3 "$HOME/.local/share/Steam/steamapps/common/Proton 9.0 (Beta)/proton" waitforexitandrun "/media/zsig/生活日常/Games/Grand Theft Auto V/GTA5.exe"

Wine 运行

Wine + dxvk 手动运行也可以,例如使用 jadeite 启动 Unity 程序

DXVK_HUD="fps,frametimes,version,gpuload" GST_PLUGIN_PATH="" HOST_LANG="zh_CN.UTF-8" HOST_LC_ALL="zh_CN.UTF-8" LANG="zh_CN.UTF-8" LC_ALL="zh_CN.UTF-8" LD_LIBRARY_PATH="/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/runners/wine-10.1-staging-tkg-amd64/lib:/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/runners/wine-10.1-staging-tkg-amd64/lib/wine/x86_64-unix:/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/runners/wine-10.1-staging-tkg-amd64/lib/wine/i386-unix" WINEARCH="win64" WINEFSYNC="1" WINEPREFIX="/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/prefix" WINE_FULLSCREEN_FSR="1" WINE_FULLSCREEN_FSR_MODE="balanced" WINE_FULLSCREEN_FSR_STRENGTH="2" JADEITE_ALLOW_UNKNOWN=1 bash -c "'/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/runners/wine-10.1-staging-tkg-amd64/bin/wine64'  '/home/zsig/.var/app/moe.launcher.the-honkers-railway-launcher/data/honkers-railway-launcher/patch/jadeite.exe' '/home/zsig/Documents/SkyLines/Cities - Skylines II/Cities2.exe' -- "