ubuntuusers.de

nvidia-vaapi-driver aus Quellcode bauen

Hinweis:

Dieses Howto wurde von trollsportverein erstellt. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich gegebenenfalls zusätzlich an den/die Verfasser des Howtos.

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Nvidia Videohardwarebeschleunigung im Firefox

Mittels nvidia-vaapi-driver und proprietärem nvidia-driver ist es möglich mit Firefox Videos mit Nvidia NVDEC Hardwarebeschleunigung abzuspielen. Für Kinetic Kudu und neuer gibt es nvidia-vaapi-driver Fertigpakete. Die Entwicklung beim nvidia-vaapi-driver ist jedoch rasant, so dass die Maintainer der Ubuntu Fertigpakete nur schwerlich mithalten können. Dieses Howto soll nun dazu dienen, den Eigenbau vom nvidia-vaapi-driver auf dem eignen System so leicht wie nur möglich zu machen. Es soll auch die Möglichkeit bieten den nvidia-vaapi-driver auch auf älteren Ubuntu Releases zu nutzen, für die es das DEB-Fertigpaket nicht gibt. Das DEB-Paketsystem wird dabei umgangen, bereits installierter nvidia-vaapi-driver muss zuvor entfernt werden und geeignete Nvidia Grafikkarte und dazu passender proprietärer nvidia-driver muss installiert sein.

Die Datei $HOME/.bashrc ist die Konfigurationsdatei des Users für die Bash-Shell. Nano ist ein einfach zu bedienender Editor für Editieraufgaben in der Shell. alias sind Kurznamen für einen oder mehrere Befehle in der Bash. Das Terminal ist die Arbeitsumgebung um hier zum Erfolg zu kommen.

Anleitung

Vorbereitung

Sichereitshalber Backup der Datei $HOME/.bashrc erstellen:

cp -v $HOME/.bashrc $HOME/.bashrc_backup1 

In die Datei $HOME/.bashrc hineinkopieren:

alias nvidia-vaapi-driver-neu='NVIDIADIR=$HOME/Installationsdisk/Nvidia && \
                        NVIDIAVAAPIDRIVERSOURCE=$NVIDIADIR/nvidia-vaapi-driver && \
                        [ ! -d $NVIDIADIR ] && mkdir -pv $NVIDIADIR ; \
                        [ ! -d $NVIDIAVAAPIDRIVERSOURCE ] && git clone https://github.com/elFarto/nvidia-vaapi-driver.git $NVIDIAVAAPIDRIVERSOURCE ; \
                        sudo apt-get install build-essential autoconf cmake curl git libtool meson ninja-build vainfo libavcodec-extra libdrm-dev \
                        libegl-dev libgl-dev libglx-dev libgstreamer1.0-dev libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-bad1.0-dev libvdpau-dev \
                        libwayland-dev libxcb-dri3-dev libxcb-present-dev libxext-dev libxfixes-dev ; \
                        printf "\n \033[45m\033[1;36m==> Aktualisiere nvidia-vaapi-driver Sourcecode. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        git -C $NVIDIAVAAPIDRIVERSOURCE pull ; \
                        printf "\n \033[45m\033[1;36m==> Räume build Verzeichnis auf. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        sudo rm -frv $NVIDIAVAAPIDRIVERSOURCE/build ; \
                        cd $NVIDIAVAAPIDRIVERSOURCE && \
                        printf "\n \033[45m\033[1;36m==> Setup nvidia-vaapi-driver. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        meson setup build || meson --reconfigure build && \
                        printf "\n \033[45m\033[1;36m==> Entferne alten nvidia-vaapi-driver. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        sudo rm -fv $(dpkg -S /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so 2>&1 | awk '\''/dpkg-query/{print $--NF}'\'') ; \
                        sudo rm -fv $(dpkg -S /usr/lib/x86_64-linux-gnu/dri/vdpau_drv_video.so 2>&1 | awk '\''/dpkg-query/{print $--NF}'\'') ; \
                        printf "\n \033[45m\033[1;36m==> Baue und installiere nvidia-vaapi-driver. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        time sudo meson install -C build && \
                        printf "\n \033[45m\033[1;36m==> Erstelle Link von nvidia_drv_video.so auf vdpau_drv_video.so. \033[0m\033[42m\033[1;36m  ==> ... \033[0m \n \n" && \
                        sudo ln -fsv /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so /usr/lib/x86_64-linux-gnu/dri/vdpau_drv_video.so && \
                        printf "\n \033[45m\033[1;36m==> Install nvidia-vaapi-driver successful. \033[0m\033[42m\033[1;36m  ==> Done.\033[0m \n \n" || \
                        printf "\n \033[41m\033[1;36m==> Install nvidia-vaapi-driver failed.\033[0m \n \n" ; \
                        cd $HOME'

... und die Datei $HOME/.bashrc neu einlesen im Terminal:

source $HOME/.bashrc 

Benötigte Einstellungen im Firefox vornehmen

Im Firefox in die Adresszeile eingeben about:config und Entertaste drücken. Dann folgende Einstellungen setzen:

media.ffmpeg.vaapi.enabled 	true
media.rdd-ffmpeg.enabled 	true
media.av1.enabled 	false ### Falls keine neueste Nvidia Grafikkarte vorhanden ist, die AV1 Hardwarebeschleunigung hat, wie etwa die Nvidia RTX 4090
gfx.x11-egl.force-enabled 	true
widget.dmabuf.force-enabled 	true

Es gibt ein Suchfeld um diese Einstellungen zu finden und dann bequem zu ändern.

Benötigte Umgebungsvariablen setzen

Dies erfolgt in der Datei /etc/environment:

MOZ_DISABLE_RDD_SANDBOX=1
LIBVA_DRIVER_NAME=nvidia
__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/10_nvidia.json
NVD_BACKEND=direct
LIBVA_MESSAGING_LEVEL=1

nvidia-vaapi-driver bauen und rebooten

Neuen nvidia-vaapi-driver im Terminal bauen und neustarten:

nvidia-vaapi-driver-neu && sleep 30 && systemctl reboot 

Funktion auf dem eignen System testen

Nachschauen, nach dem rebooten, ob der nvidia-vaapi-driver mit dem Testvideo aus den Links unten funktioniert mit nvtop oder mit nvidia-smi:

watch -n1 nvidia-smi pmon -c 1 

Das "C+G" in der Spalte "type" zeigt an dass Compute für das Testvideo auf der Grafikkarte genutzt wird.

Screenshot-nvidia-smi.png

nvidia-vaapi-driver entfernen

Zum Entfernen, falls der selbst gebaute nvidia-vaapi-driver nicht mehr genutzt werden soll, hier noch ein alias nvidia-vaapi-driver-remove:

alias nvidia-vaapi-driver-remove='sudo rm -fv $(dpkg -S /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so 2>&1 | awk '\''/dpkg-query/{print $--NF}'\'') ; \
sudo rm -fv $(dpkg -S /usr/lib/x86_64-linux-gnu/dri/vdpau_drv_video.so 2>&1 | awk '\''/dpkg-query/{print $--NF}'\'')'

Das Konstrukt mit dpkg schützt davor, dass über das DEB-Paketsystem installierte Paketbestandteile gelöscht werden. Was bereits sonst an VA-API und Mesa über das Paketsystem in diesem Verzeichnis installiert ist, lässt sich so anzeigen im Terminal:

dpkg -S /usr/lib/x86_64-linux-gnu/dri\* 

Diese Revision wurde am 1. August 2023 18:54 von karzer erstellt.