[已解决]Leap 42.3 更新内核后 N 卡驱动出错,导致进不了图形界面

系统:42.3
显卡:N卡 GeForce 7025 / nForce 630a
显卡驱动:nvidiaG02

日常更新到 内核 4.14.9-2-default,重启后低分辨率,手贱,打了显卡驱动的设置程序,出现提示:

You do not appear to be using the NVIDIA X driver. Please edit your X configuration file (just run nvidia-xconfig as root), and restart the X server.

按提示运行了两遍,修改 /etc/X11的文件,运行结果没记下来。重启进不了图形界面了,直接进入 tty。

/var/log/Xorg.0.log

[    29.122] 
X.Org X Server 1.18.3
Release Date: 2016-04-04
[    29.122] X Protocol Version 11, Revision 0
[    29.122] Build Operating System: openSUSE SUSE LINUX
[    29.122] Current Operating System: Linux linux 4.14.9-2-default #1 SMP PREEMPT Mon Dec 25 15:42:48 UTC 2017 (9423ca2) x86_64
[    29.122] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.14.9-2-default root=UUID=ecf7a05e-bce2-4b38-a6f1-5602c23d220e splash=silent quiet showopts splash=silent quiet showopts
[    29.122] Build Date: 16 October 2017  07:19:15PM
[    29.122]  
[    29.122] Current version of pixman: 0.34.0
[    29.122] 	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
[    29.122] Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[    29.122] (==) Log file: "/var/log/Xorg.0.log", Time: Fri Dec 29 14:39:24 2017
[    29.137] (==) Using config file: "/etc/X11/xorg.conf"
[    29.137] (==) Using config directory: "/etc/X11/xorg.conf.d"
[    29.137] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[    29.192] (==) ServerLayout "Layout0"
[    29.192] (**) |-->Screen "Screen0" (0)
[    29.192] (**) |   |-->Monitor "Monitor0"
[    29.192] (**) |   |-->Device "Device0"
[    29.192] (**) |-->Input Device "Keyboard0"
[    29.192] (**) |-->Input Device "Mouse0"
[    29.192] (==) Automatically adding devices
[    29.192] (==) Automatically enabling devices
[    29.192] (==) Automatically adding GPU devices
[    29.192] (==) Max clients allowed: 256, resource mask: 0x1fffff
[    29.341] (WW) The directory "/usr/share/fonts/misc/sgi" does not exist.
[    29.341] 	Entry deleted from font path.
[    29.342] (==) FontPath set to:
	/usr/share/fonts/misc:unscaled,
	/usr/share/fonts/Type1/,
	/usr/share/fonts/100dpi:unscaled,
	/usr/share/fonts/75dpi:unscaled,
	/usr/share/fonts/ghostscript/,
	/usr/share/fonts/cyrillic:unscaled,
	/usr/share/fonts/truetype/,
	built-ins
[    29.342] (==) ModulePath set to "/usr/lib64/xorg/modules"
[    29.342] (**) Extension "XFree86-DGA" is disabled
[    29.342] (WW) Hotplugging is on, devices using drivers 'kbd', 'mouse' or 'vmmouse' will be disabled.
[    29.342] (WW) Disabling Keyboard0
[    29.342] (WW) Disabling Mouse0
[    29.342] (II) Loader magic: 0x80fce0
[    29.342] (II) Module ABI versions:
[    29.342] 	X.Org ANSI C Emulation: 0.4
[    29.342] 	X.Org Video Driver: 20.0
[    29.342] 	X.Org XInput driver : 22.1
[    29.342] 	X.Org Server Extension : 9.0
[    29.343] (++) using VT number 7

[    29.343] (II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
[    29.344] (--) PCI:*(0:0:13:0) 10de:03d6:1043:83a4 rev 162, Mem @ 0xde000000/16777216, 0xc0000000/268435456, 0xdd000000/16777216, BIOS @ 0x????????/131072
[    29.344] (II) LoadModule: "glx"
[    29.345] (II) Loading /usr/lib64/xorg/modules/extensions/libglx.so
[    29.345] (EE) Failed to load /usr/lib64/xorg/modules/extensions/libglx.so: /usr/lib64/xorg/modules/extensions/libglx.so: cannot open shared object file: No such file or directory
[    29.345] (II) UnloadModule: "glx"
[    29.345] (II) Unloading glx
[    29.345] (EE) Failed to load module "glx" (loader failed, 7)
[    29.345] (II) LoadModule: "nvidia"
[    29.346] (WW) Warning, couldn't open module nvidia
[    29.346] (II) UnloadModule: "nvidia"
[    29.346] (II) Unloading nvidia
[    29.346] (EE) Failed to load module "nvidia" (module does not exist, 0)
[    29.346] (EE) No drivers available.
[    29.346] (EE) 
Fatal server error:
[    29.346] (EE) no screens found(EE) 
[    29.346] (EE) 
Please consult the The X.Org Foundation support 
	 at http://wiki.x.org
 for help. 
[    29.346] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[    29.346] (EE)

强制安装了一遍显卡驱动,发现编译 nvidia.ko 模块失败。我把闭源驱动删除了,也进不了图形界面。请问,如何修复?如果想用开源驱动,如何启用?

谢谢!

按照 SDB:配置显卡 - openSUSE 第三招可以进入图形桌面,但卡的要死。第四招启用 nouveau
失败。现在 OS n卡 能用 nouveau 驱动吗?

@marguerite 女王出现吧! 普通用户实在没招了😢

nvidia-xconfig 改配置是有备份的。改错可以恢复。

你强制安装一遍显卡驱动是怎么安装的,官网驱动还是 nvdiaG02。nvidiaG02 是有对应的 kmp 包的,那个包名里面的内核名和你的内核能不能对上?对不上的话,你的内核是从哪里装的?

闭源驱动删除后 /etc/modprobe.d/50-blacklist.conf 里面有没有把 nouveau 那条删除?

抱歉!下午出去了现在才回。

是添加http://http.download.nvidia.com/opensuse/leap/42.3/x86_64/ 源安装的 G02
命令 zypper -f in *

源里目前的kmp是
nvidia-gfxG02-kmp-default-304.137_k4.4.76_1-12.1.x86_64.rpm

如果那个 k4.4.76 是内核版本的话,我的系统现在没有这个版本号的内核,现有的3个都比这个高。内核是系统提示更新,就更新安装的。

nouveau
/etc/modprobe.d/50-blacklist.conf 里面把 nouveau 那条注释掉了。

我想起用 nouveau
我按照 arch wiki nouveau 页面添加了这个

并通过新建文件/etc/X11/xorg.conf.d/20-nouveau.conf 来告诉Xorg引导Nouveau驱动而不是Nvidia驱动,文件内容如下:

Section “Device”
Identifier “Nvidia card”
Driver “nouveau”
EndSection

参考前边那个第四招,在 /etc/X11/xorg.conf.d/50-device.conf 添加了 Driver “nouveau”

但是没用。

还用 mkinitrd 重建 initrd 文件,有次这样才进了 fbdev 驱动下的桌面。

如果是没有对应现有内核的kmp,那能否使用 nouveau 驱动?如何启用? 谢谢!

我觉得还是bumblebee比较靠谱。最近折腾显卡驱动和cuda的经验告诉我,不要手贱运行nvidia-xconfig. 等装好了bumblebee后,用optirun -b none nvidia-settings -c :8,就能看到正常不报错的nvidia-setting了。BTRFS的话死了回滚就好了

就一个集显,能用 bumblebee ?
ext4,不能回滚。

zypper lr 看一下你都启用了什么源吧,也许你说的更新和我理解的不一样,你如果没开额外的源的话,Leap 42.3 是绝对不可能把你的内核从 4.4 更新到 4.14 的。

不要乱参考别的发行版和老版本的 wiki(现在的 openSUSE 里面已经没有 sax2 了,如果 wiki 还那么写,那么它就是 11.4 年代的了),那样只会我这边帮你修,你那边越搞越乱套。你还是把之前做过的那些都回退吧。

在 50-blacklist.conf 里面把 nouveau 取消禁用之后,重新装一下 Mesa-dri-nouveau,xf86-video-nouveau 这两个包吧。你的 Xorg 日志提示 /usr/lib64/xorg/modules/extensions/libglx.so 找不到,我记得安装 nvidia 闭源驱动会把这个 libglx.so 覆盖掉,导致闭源的卸载了开源的也没了。我忘记开源版本的 libglx.so 在哪个包里了,似乎是上面两个里面的一个。

如果不是 bumblebee 这种我没弄过的环境的话,听我的包治好。

1赞

我为了安装影梭,添加了 hillwood 的源,高版本的内核就是他的源里的。现已禁用。

别名 : http-download.opensuse.org-5e352983
名称 : home:hillwood
URI : Index of /repositories/home:/hillwood/openSUSE_Leap_42.3
已启用 : 否
GPG 检查 : ----
优先级 : 99 (默认优先级)
自动刷新 : 开
保留软件包 : 关
类型 : rpm-md

libglx.so 是 xorg-x11-server 包里的,重新安装后进入桌面正常了。
之前也能进入桌面,但跟幻灯片似的。

现在有个问题,启动时狂写硬盘,几M,或更多,好像不正常。

nouveau 可以用 vbox 吗?
我删除 4.14 的内核,再安装 openSUSE 官方的内核 4.4 内核,是不是就可以再安装闭源驱动了?
官方最旧版的是 4.4.76_1,和驱动的版本一样,需要安装这个最旧版的吗?还是说,删除 4.14 的就可以了?目前还保留了一个 4.4.103的内核。

影梭我的 home:MargueriteSu 里面也有,我的没有内核。不过最根本的是你去 /etc/zypp/zypp.conf 里把 solver.allowVendorChange 变成 false,或者是在 zypper dup 之前通过 zypper mr -d 把除了 oss 和 non-oss 以外的源禁用了,dup 完再 zypper mr -e 启用。

nouveau 不影响 virtualbox 的使用。

你现在想用闭源驱动的话,要么按照 SDB:NVIDIA 不易之路 - openSUSE 去自己编译最新的显卡驱动,要么就是降低内核版本再装源里的驱动。只要是 4.4 版本的内核都可以,不用管 kmp 是 4.4.x。

1赞

要禁止供应商更改。可能是当前为安装ss libev
版本改了供应商。看了下 wiki,dup 是将 hillwood 的源更新的高版本软件都降到官方源里的软件,是这样吗?

我用 openSUSE 就是不想再折腾了,我还是降级内核吧。

不是,原因应该是你更新时候没有暂时禁用 hillwood 的源。

dup 的意思是说用全部启用的源做发行版升级,up 是用全部启用的源尽最大可能把软件包都更新到最新版本。它们是不一样的。

发行版升级不是简单的全部更新,它甚至还可能包括降级。发行版比如 openSUSE,在某一个时间点上是有一个固定状态的,比如 kde 是什么版本,kernel 又是什么版本,是固定的。你做发行版升级就是把你的系统变成这个固定状态。好比固定状态的 kernel 是 4.4,你的是 4.14,那么它就会降级内核。

单纯更新不一样,它是更新 kde,发现要更新的 xorg,更新的 xorg 又需要更新的 gcc,更新的 gcc 又需要更新的 glib,这样依次推下去。如果比如 gimp,需要的 xorg 跟 kde 不一样,它会看能不能找到一个 xorg 让两个包都往上更新版本,哪怕都不是最新的,实在解决不了就提示。

这里有两个问题,第一个是无论如何不能串源,那样会乱套,源开启的越多,你越不知道可能会发生什么,因为你不知道除了你需要的,那个源里还有什么,比如你遇到的情况,所以 allowVendorChange 最好不要开。第二个是 dup 不能开启不必要的源,如果你开了多个源一起做 dup,就相当于让 zypper 给你去算一个状态,这个状态跟 oss 的测试过的状态并不一致。

也就是说这次你还开着 hillwood 的源 dup,结果仍然是未知的。个人觉得这时跟做 up 是差不多的效果。
所以建议你只保留 oss non-oss update update-non-oss 源进行 dup。已经添加的不需要删,可以用 zypper mr 控制源的开启和禁用。dup 完了后再开启那些源去选择性的切换/重装你需要的软件包到那个源里的版本。

2赞

按你的方法,dup 后,删除了 4.14 的内核,正常。 感谢!