在 18.04 上安装 nvidia 驱动程序

Jar*_*zen 51 nvidia drivers 18.04

全部。我正在尝试修复我的系统,以便我可以安装 nvidia 驱动程序,但它似乎由于某种原因卡住了。我尝试手动删除下载的文件

/var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_i386.deb
/var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_amd64.deb
Run Code Online (Sandbox Code Playgroud)

...为了让他们再次下载但无济于事。有没有人最近尝试在 18.04 上安装这些驱动程序?

~$ sudo apt --fix-broken install
[sudo] password for jarl: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  lib32gcc1 libc6-i386
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libnvidia-gl-390 libnvidia-gl-390:i386
The following NEW packages will be installed
  libnvidia-gl-390 libnvidia-gl-390:i386
0 to upgrade, 2 to newly install, 0 to remove and 4 not to upgrade.
3 not fully installed or removed.
Need to get 0 B/29,1 MB of archives.
After this operation, 147 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 214344 files and directories currently installed.)
Preparing to unpack .../libnvidia-gl-390_390.48-0ubuntu3_i386.deb ...
diversion of /usr/lib/i386-linux-gnu/libGL.so.1 to /usr/lib/i386-linux-gnu/libGL.so.1.distrib by nvidia-340
dpkg-divert: error: mismatch on package
  when removing 'diversion of /usr/lib/i386-linux-gnu/libGL.so.1 by libnvidia-gl-390'
  found 'diversion of /usr/lib/i386-linux-gnu/libGL.so.1 to /usr/lib/i386-linux-gnu/libGL.so.1.distrib by nvidia-340'
dpkg: error processing archive /var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_i386.deb (--unpack):
 new libnvidia-gl-390:i386 package pre-installation script subprocess returned error exit status 2
Preparing to unpack .../libnvidia-gl-390_390.48-0ubuntu3_amd64.deb ...
diversion of /usr/lib/x86_64-linux-gnu/libGL.so.1 to /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib by nvidia-340
dpkg-divert: error: mismatch on package
  when removing 'diversion of /usr/lib/x86_64-linux-gnu/libGL.so.1 by libnvidia-gl-390'
  found 'diversion of /usr/lib/x86_64-linux-gnu/libGL.so.1 to /usr/lib/x86_64-linux-gnu/libGL.so.1.distrib by nvidia-340'
dpkg: error processing archive /var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_amd64.deb (--unpack):
 new libnvidia-gl-390:amd64 package pre-installation script subprocess returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_i386.deb
 /var/cache/apt/archives/libnvidia-gl-390_390.48-0ubuntu3_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

小智 111

在 ubuntu 论坛上找到了这个命令,对我来说效果很好:

跑:

LC_MESSAGES=C dpkg-divert --list '*nvidia-340*' | sed -nre 's/^diversion of (.*) to .*/\1/p' | xargs -rd'\n' -n1 -- sudo dpkg-divert --remove
sudo apt --fix-broken install
Run Code Online (Sandbox Code Playgroud)

第一个命令将从nvidia-340. 如果您有其他 nvidia 版本“改道”,请更改它;阅读错误代码以了解哪个版本正在转移。

资料来源:https: //ubuntuforums.org/showthread.php ? t = 2388026 & p = 13761809#post13761809 对 stutteringp0et2 的赞美 :)

  • 如果您不使用英文版的 Ubuntu,则需要将 `awk '{print $3}'` 中的数字更改为其他内容,例如我必须将其更改为 `awk '{print $2}' `. 或者您可以将区域设置更改为英语(`for FILE in $(LANG=en dpkg-divert --list | grep nvidia-340 | awk '{print $3}'); do dpkg-divert --remove $FILE; done `)。 (2认同)
  • 你把我从痛苦中救了出来,我在这里注册了一个账号只是为了投票 (2认同)

小智 18

这是另一个论坛完整答案

答案的基本前提是:

  1. 您有要删除的旧依赖项
  2. 你想清理烂摊子
  3. 你想安装新的驱动程序

我假设您安装了 340 驱动程序中的 cr*p - 这是我的问题

  1. 删除旧的依赖项

    LC_MESSAGES=C dpkg-divert --list '*nvidia-340*' | sed -nre 's/^diversion of (.*) to .*/\1/p' | xargs -rd'\n' -n1 -- sudo dpkg-divert --remove
    
    Run Code Online (Sandbox Code Playgroud)
  2. 干净的烂摊子 - 取决于您安装的烂摊子,如果开箱即用,请找出它;)

    sudo dpkg --force-all -P nvidia-390 nvidia-compute-utils-390 nvidia-dkms-390 nvidia-prime nvidia-settings nvidia-opencl-icd-340 nvidia-opencl-icd-384 nvidia-kernel-source-390 nvidia-kernel-common-390 libnvidia-cfg1-390 libnvidia-common-390 libnvidia-compute-390 libnvidia-decode-390 libnvidia-encode-390  libnvidia-fbc1-390 libnvidia-ifr1-390
    sudo apt purge --autoremove '*nvidia*'
    sudo apt-get update
    sudo apt-get upgrade
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装新的推荐驱动程序

    ubuntu-drivers devices
    nvidia-settings
    
    Run Code Online (Sandbox Code Playgroud)

我的建议是:
不要仅仅为了检查是否安装了这个 cr*ppy 驱动程序中的设置:)

  • **请不要无缘无故地建议`dpkg --force-all`!** 遇到的错误中止是为了保护包管理系统的完整性,不应该不加思索地压制!-1 (3认同)

小智 10

我通过删除 nvidia-340 的转移解决了这个问题。希望我不需要使用nvidia-340. 下面是一个例子:

dpkg-divert --package nvidia-340 --remove /usr/lib/i386-linux-gnu/libGL.so.1
Run Code Online (Sandbox Code Playgroud)

只要有冲突,您就可以继续删除。


小智 2

我会运行 apt auto-clean 看看它是否像我想象的那样,一个混乱的包。

sudo apt auto-clean
sudo apt update
sudo apt upgrade
sudo apt install nvidia-driver-390 libvulkan1
Run Code Online (Sandbox Code Playgroud)

编辑:回答你的另一个问题,当我前几天安装 18.04 时,390 工作正常,但转到 396 有点“有趣”。这为我解决了这个问题。