禁用Nouveau,安装Linux Nvidia 显卡驱动

2023-05-16

https://blog.csdn.net/misiter/article/details/7652731
干掉Nouveau安装Linux Nvidia显卡驱动

首先说明下什么是Nouveau,为什么有些系统安装N卡驱动的时候会提示“ERROR: The Nouveau kernel driver is currently in use by your system. This
driver is incompatible with the NVIDIA driver……”之类的错误。

Nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动,也没能得到NVIDIA的认可与支持。虽然Nouveau Gallium3D在游戏速度上还远远无法和NVIDIA官方私有驱动相提并论,不过确让Linux更容易的应对各种复杂的NVIDIA显卡环境,让用户安装完系统即可进入桌面并且有不错的显示效果,所以,很多Linux发行版默认集成了Nouveau驱动,在遇到NVIDIA显卡时默认安装。企业版的Linux更是如此,几乎所有支持图形界面的企业Linux发行版都将Nouveau收入其中。

不过对于个人桌面用户来说,处于成长阶段的Nouveau并不完美,与企业版不一样,个人用户除了想让正常显示图形界面外很多时候还需要一些3D特效,Nouveau多数时候并不能完成,而用户在安装NVIDIA官方私有驱动的时候Nouveau又成为了阻碍,不干掉Nouveau安装时总是报错。报错提示见文第一段。

一般安装Linux显卡驱动的步骤是:

(1)下载合适的驱动,无论是NVIDA还是ATI都推荐去官方下载
(2)如果下载的是源码文件则需要编译安装,不过现在官方提供的Linux显卡驱动多是以.run为后缀的,这种直接在命令行中 ./softname.run 运行即可安装。
(3)一般在操作第二步的时候会提示让你关闭X window,如下图:

在这里插入图片描述

进入命令行模式Kill掉gdm或kde再安装一般就无问题,而安装Nouveau的NVDIA显卡机器还多了一个步骤就是需要关闭Nouveau,这也就是本文要解决的问题。

以下是关闭Nouveau并且安装Nvidia显卡驱动的步骤:

(1)把驱动加入黑名单

编辑 /etc/modprobe.d/blacklist.conf ,在文件后面加入blacklist nouveau

(2)root用户下运行如下两条命令:

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -v /boot/initramfs-$(uname -r).img $(uname -r)

以上两条命令分别是备份与重建initramfs,如果你的Linux是debian或ubuntu系统运行命令时需要sudo。  这段无用

(3)重启系统至init 3(文本模式),也可先进入图形桌面再运行init 3进入文本模式,再安装下载的驱动就无问题,安装命令示例:

./NVIDIA-Linux-x86-285.05.09.run

安装过程根据提示完成即可。当然在安装之前你也可以先确认下Nouveau是已经被你干掉,使用命令: lsmod | grep nouveau

安装完成后重启系统即可设置你的桌面效果了。并且在系统–首选项还有了NVIDIA X Server Settings的选择项。

当 Linux 内核启动系统时,必须找到一个根文件系统,方能成功开机,而这个文件就是init,init的PID进程恒为1。启运过程中init紧随内核,用于引导其它主程序完成开机。建议查看下有关initramfs的资料,这样便于理解为什么安装个显卡驱动还是生成(编译)initramfs。

如果驱动更新了, 有两个办法可以安装,一个是自行下载好NVIDIA-Linux-x86-*.run安装。 另外一个办法就是直接让驱动自己去更新,假设已经有了11版,但是没有19版,可以在安装的时候加上更新参数 --update,安装程序会自动连接到官方服务器去下载新版本然后安装。执行:

sh NVIDIA-Linux-x86-100.14.11-pkg1.run --update

13.OK!

14.如果要卸载nvidia官方驱动,执行:

sudo sh ***.run --uninstall

15.如果要安装受限驱动,首先要编辑blacklist.conf,执行:

sudo gedit /etc/modprobe.d/blacklist.conf

删除以下部分并保存:

blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv

然后执行:

sudo apt-get install nvidia-*
sudo apt-get install xserver-xorg-video-nouveau

重新启动后在“附加驱动”里选择相应的受限驱动,并激活。

OK!

Nouveau的DRM 组件将可能进入Kernel 2.6.33

关注我们:

Nouveau 是一个开源的 Nvidia 显卡驱动。相比之下 Nvidia 的官方驱动不是开源的,而开源的 xf86-video-nv 功能又很弱。对比官方驱动,Nouveau 的优势在于支持新内核的 Kernel Mode Setting 特性。在 Fedora 12 中,使用 Nouveau 驱动启动内核后会第一时间直接进入显示器的最佳分辨率,启动界面(不论文本还是图形)与 X、GDM 之间的切换、用 Ctrl+Alt+Fn 在 X 和终端间切换完全的"flicker free",使用体验大大增强。

但是其 DRM 模块部分一直没有进入内核的代码树。昨天在 Phoronix 网上看到一则消息,大意是说 Linus 看 Fedora 提供 Nouveau 已经很长时间了,希望 Nouveau 的 DRM 也进入内核。Nouveau 的维护者和 Fedora 的维护者则解释说主要是由于 Nouveau 是依靠反向工程来了解 NV GPU 的某些内部机制的,使用了一些 Microcode,而这些 Microcode 相关的代码进入内核可能有版权问题。Linus 回复说这些理由都是 BS(从几次 Linus 的发言来看这位还真是"牛气"啊),Fedora 是不是完全没有版权问题的发行版?是那么上述理由就是 BS,否则以后发布就别分发 Nouveau 驱动。

今天又看到上面一则消息,这件事的下文是这样:红帽公司的 David Airlie 和 Ben Skeggs 对 Nouveau 的内核部分代码进行了修改,Microcode 将使用内核的 Firmware 接口来加载。这样就避免了版权问题。

接下来引用一句原文:

In this pull request, there is the Nouveau driver that is set to go in the Linux 2.6.33 kernel under the staging area

也许 2.6.33 中,我们就能用上正式进入内核的 Nouveau 驱动,获得各种新特性了。

PS: NV 官方驱动虽然不支持 KMS,但是支持 OpenCL(G80+),视频加速方面支持 XvMC(G80-)和 Vdpau(G80+)。对于这些功能,Nouveau 并没有支持。实际上连 3D 功能 Nouveau 也不直接支持。现在的发展趋势是由 Mesa 和其中的 Gallium3D 来提供 OpenGL(也许甚至是 D3D)、OpenVG、、OpenCL 的支持。显卡驱动仅仅完成与显卡的基本交互。最近 Kernel 的图像部分发展成为了亮点,page flipping ioctl 进入 2.6.33("据说"不论对于 X 还是 Wayland 都很有用),现在 Intel/ATI/NV 的 KMS 驱动又都不断完善,Linux 用户的图形体验必将逐步增强。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用Nouveau,安装Linux Nvidia 显卡驱动 的相关文章

  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 警告:请求的映像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 docker 来自守护程序的错误响应 无法选择具有功能的设备驱动程序 gpu 我在 mac 上尝试运行此命令时遇到此
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • linux下写入后崩溃

    如果我使用 write 将一些数据写入磁盘上的文件会发生什么 但我的应用程序在刷新之前崩溃了 如果没有系统故障 是否可以保证我的数据最终会刷新到磁盘 如果您正在使用write 并不是fwrite or std ostream write 那
  • 如何使用 echo 写入非 ASCII 字符?

    如何写非ASCII http en wikipedia org wiki ASCII使用 echo 的字符 是否有转义序列 例如 012或类似的东西 我想使用以下方法将 ASCII 字符附加到文件中 echo gt gt file 如果您关
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 如何在perl中使用O_ASYNC和fcntl?

    我想使用 O ASYNC 选项 当管道可以读取时 SIGIO 的处理程序将运行 但以下代码不起作用 任何人都可以帮助我吗 bin env perl use Fcntl SIG IO sub print catch SIGIO n my fl
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E

随机推荐