前言

在下载安装好arrayfire这个库之后,运行了一个示例程序,提示

1
2
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

google发现说的是显卡驱动需要更新,我的显卡驱动是381.xx最新的是384.98 因此我就开始更新显卡驱动。使用命令

1
zypper update nvidia*

之后显示说缺少几个包,因此我就顺着它装

1
zypper install nvidia-glG04-384.98-29.1.x86_64 nvidia-computeG04-384.98-29.1.x86_64

安装好之后并没有发现我的显卡驱动的版本提升,故直接使用了

1
zypper install nvidia*

这下直接各种包与之前安装的冲突,导致无法进入图形界面,驱动无法运行。ctrl+alt+f7从终端切换到图形界面,显示错误信息,重新登录还是如此。 遂决定重新安装驱动,因为我的显卡驱动是在安装cuda的时候顺带安装好了,我怕把cuda环境玻怀了,比较小心。(事实证明重新安装驱动不会破坏cuda环境)

重新安装显卡驱动

关闭x server

好在之前在官网上下载好了最新的显卡驱动.run文件,即使在只有终端下安装应该也很方便,终端输入

1
2
cd Downloads
sh NVIDIA-Linux-x86_64-384.98.run

可以打开驱动安装程序,但是有一个错误提示:ERROR:You appear to be running an X server;please exit Xbefore installing. 大意是需要关闭X server服务,google一搜,找到几个关闭x server的命令

1
2
3
4
5
6
7
service lightdm stop
service kdm stop
service gdm stop
service mdm stop
/etc/init.d/gdm stop
/etc/init.d/kdm stop
/etc/init.d/mdm stop

(使用service –status-all命令查看运行的所有服务) 仍然关不掉X server,因为init.d文件夹里没有这几个服务只有下面几个,可能我是openSUSE和gnome桌面吧。gnome桌面按理说应该会有gdm,kde桌面应该会有kdm

1
2
after.local    boot.d      cifs    halt.local  jexec  rc1.d  rc3.d  rc5.d  rcS.d
boot.apparmor  boot.local  esound  hddtemp     rc0.d  rc2.d  rc4.d  rc6.d  rpmconfigcheck

我还尝试过通过安装驱动错误的log文件找到X server的PID使用kill -s 9 PID杀掉进程,虽然有用但是会造成系统重新载入,x server又复活了。 最终在linux 怎样关闭x server 安显卡驱动这个回答下发现了关闭x server服务的方法

1
init 3

这个种命令还有一系列,参考init 0 init1 init 3 init 5 init 6 这几个启动级别都代表什么意思 现在终于可以进行下一步安装了

安装kernel headers

正当我再次运行驱动安装程序,却又提示需要安装kernel headers,因为之前安装cuda的时候有这一步,以为是查看kernel版本的就掠过了。。。 这里参考NVIDIA CUDA Installation Guide for Linux openSUSE下先查看kernel版本

1
2
uname -r
4.4.92-31-default

安装kernel headers这需要核心的版本信息,sudo zypper install kernel--devel=然后替代(尖括号一并替换掉)

1
zypper install kernel-default-devel=4.4.76-1

安装好之后终于可以正常安装显卡驱动了

安装显卡驱动的时候有几个选项,只要注意不要选择使用nvidia的x server来链接与更新系统自带的x server服务即可,否则可能无法进入图形界面,一启动就是终端ctrl+alt+f7无法进入图形界面 终端输入xinit提示x server connect refuse(我重新安装一遍驱动才解决) 重新安装好显卡驱动后,最后运行arrayfire示例程序终于没有报错,折腾没有白费。。。欣慰

2018.1.14更新

老问题又发生了,这次重新安装驱动不行,我估计要安装最新的驱动,于是在其他电脑上到NVIADIA官网下载好了最新的驱动到u盘里。插上电脑,执行以下命令查找u盘位置

1
fdisk -l

我的u盘在/dev/sdc1 使用以下命令挂载u盘到/media以及进入目录读取u盘文件,运行驱动程序安装,重启后应该就能进入桌面了。

1
2
3
4
mount -t vfat /dev/sdc1 /media
cd /media
ls
sh NVIDIA-Linux-x86_64-384.111.run