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.
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\*