🐜 fix(runner): Workaround for NVIDIA driver issue (#180)

Co-authored-by: DatCaptainHorse <DatCaptainHorse@users.noreply.github.com>
This commit is contained in:
Kristian Ollikainen
2025-02-03 18:00:10 +02:00
committed by GitHub
parent 9d084011a2
commit 4546eb6767
4 changed files with 8 additions and 5 deletions

View File

@@ -120,7 +120,8 @@ RUN sed -i \
RUN pacman --noconfirm -Sy && \
# Core system components
pacman -S --needed --noconfirm \
archlinux-keyring mesa steam steam-native-runtime \
archlinux-keyring vulkan-intel lib32-vulkan-intel mesa \
steam steam-native-runtime \
sudo xorg-xwayland labwc wlr-randr mangohud \
pipewire pipewire-pulse pipewire-alsa wireplumber \
noto-fonts-cjk supervisor jq chwd lshw pacman-contrib && \

View File

@@ -38,7 +38,8 @@ get_gpu_info
# Check vendors in priority order
if [[ -n "${vendor_devices[nvidia]:-}" ]]; then
echo "NVIDIA GPU detected. Assuming drivers are linked"
echo "NVIDIA GPU detected, assuming driver is linked and applying Vulkan fix..."
echo "{\"file_format_version\":\"1.0.0\",\"ICD\":{\"library_path\":\"libGLX_nvidia.so.0\",\"api_version\":\"1.3\"}}" > /usr/share/vulkan/icd.d/nvidia_icd.json
elif [[ -n "${vendor_devices[intel]:-}" ]]; then
echo "Intel GPU detected, installing required packages..."
pacman -Sy --noconfirm gstreamer-vaapi gst-plugin-va gst-plugin-qsv

View File

@@ -46,7 +46,7 @@ start_nestri_server() {
for _ in {1..15}; do # Wait up to 15 seconds
if [ -e "$WAYLAND_SOCKET" ]; then
echo "Wayland display 'wayland-1' is ready."
sleep 1 # necessary sleep - reduces chance that non-ready socket is used
sleep 5 # necessary sleep - reduces chance that non-ready socket is used
start_compositor
return
fi
@@ -127,7 +127,7 @@ start_steam() {
fi
echo "Starting Steam with -tenfoot..."
WAYLAND_DISPLAY=wayland-0 steam -tenfoot &
WAYLAND_DISPLAY=wayland-0 steam-native -tenfoot &
STEAM_PID=$!
# Verify Steam started successfully

View File

@@ -10,6 +10,7 @@ mod proto;
use crate::args::encoding_args;
use crate::nestrisink::NestriSignaller;
use crate::websocket::NestriWebSocket;
use crate::gpu::GPUVendor;
use futures_util::StreamExt;
use gst::prelude::*;
use gstrswebrtc::signaller::Signallable;
@@ -54,7 +55,7 @@ fn handle_gpus(args: &args::Args) -> Option<gpu::GPUInfo> {
gpu = filtered_gpus.get(args.device.gpu_index as usize).cloned();
} else {
// get first GPU
gpu = filtered_gpus.get(0).cloned();
gpu = filtered_gpus.into_iter().find(|g| *g.vendor() != GPUVendor::UNKNOWN);
}
}
if gpu.is_none() {