Ubuntu 12.04 下安装 openGL 驱动时,究竟做了什么事

Ubuntu 下安装 openGL 驱动的确把我折腾惨了

本人机器是 HP 的使用 i5 的集成显卡

下载了 intel 的 installer (intel-linux-graphics-installer_1.0.1_amd64.deb ),他们不支持 Ubuntu 12.04, 只支持 13.x

找了个 ATI x1300 的老显卡,官方的驱动(ati-driver-installer-9-3-x86.x86_64.run)只支持了 Ubuntu 8.x 9.x (让我深感,计算机真是消费品,过时了就用不起来了 )

只好买了一个 Nvidia GT610 显卡,下载官方的 NVIDIA-Linux-x86_64-331.49.run, 顺利装上了

这驱动做了如下的事情:

1) 把驱动装到 Kernel 中 ( 我升级了 Kernel ,又了重装驱动 )

2) 把 /usr/lib/libGL.so 替换为 Nvidia 的(用 ldd 看就知道了),当然要把nvidia 自己的 so 也copy 到,这几个目录

[html] view plaincopy在CODE上查看代码片派生到我的代码片

ldd /usr/lib/libGL.so

linux-vdso.so.1 => (0x00007fffe91ff000)

libnvidia-tls.so.331.49 => /usr/lib/tls/libnvidia-tls.so.331.49 (0x00007fa1a58c0000)

libnvidia-glcore.so.331.49 => /usr/lib/libnvidia-glcore.so.331.49 (0x00007fa1a30b1000)

libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa1a2d7b000)

libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa1a2b6a000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1a27aa000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa1a25a5000)

libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa1a22a9000)

libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa1a208b000)

/lib64/ld-linux-x86-64.so.2 (0x00007fa1a5e15000)

libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa1a1e87000)

libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa1a1c81000)

对于 i386 的支持库,放在/usr/lib32中

[html] view plaincopy在CODE上查看代码片派生到我的代码片

ldd /usr/lib32/libGL.so

linux-gate.so.1 => (0xf7718000)

libnvidia-tls.so.331.49 => /usr/lib32/tls/libnvidia-tls.so.331.49 (0xf75f1000)

libnvidia-glcore.so.331.49 => /usr/lib32/libnvidia-glcore.so.331.49 (0xf53ac000)

libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf5277000)

libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf5265000)

libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf50bb000)

libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf50b6000)

libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf508a000)

libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf5068000)

/lib/ld-linux.so.2 (0xf7719000)

libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf5064000)

libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf505d000)

开发 Android 时使用 , Android 使用 i386是从 /usr/lib/i386-linux-gnu 装载

所以要把 lib32 中所有文件复制到 /usr/lib/i386-linux-gnu

3) Xorg相关

Xorg是开源的 Xserver 实现

nvidia 要与Xorg集成的库,放在usr/lib/xorg/modules下面,并改下 /etc/X11 下面的东西

xorg.conf

让 Xorg加载 so

[html] view plaincopy在CODE上查看代码片派生到我的代码片

Section "Module"

Load "record"

Load "extmod"

Load "dbe"

Load "dri2"

Load "glx"

EndSection

装载 /usr/lib/xorg/modules/extensions/ 下面的 libglx.so, libdri2.so 等

让 Xorg 加载 nvida 驱动

[html] view plaincopy在CODE上查看代码片派生到我的代码片

Section "Device"

Identifier "Card0"

Driver "nvidia"

BusID "PCI:1:0:0"

EndSection

附带转帖

Ubuntu通过重新生成/etc/X11/xorg.conf文件来调整分辨率

/uid-25909722-id-3019407.html

1. Ctrl+Alt+F1 , sudo service gdm stop

2. sudo Xorg -configure (生成文件 ~/xorg.conf.new)

3. sudo service gdm start

4. mv ~/xorg.conf.new /etc/X11/xorg.conf

5. gtf 1280 1024 60 -x

6. 然后将上一步中gtf命令生成的内容:

Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync

插入到/etc/X11/xorg.conf中:

Section "Monitor"

Identifier "Monitor0"

VendorName "Monitor Vendor"

ModelName "Monitor Model"

Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync

EndSection

重新启动X。搞定。

如果不想生成xorg.conf文件,并且只想临时的调整分辨率,那么可以按照如下方法实现:

cvt 1280 1024

sudo xrandr --newmode "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync

sudo xrandr --addmode VGA1 "1280x1024_60.00"

sudo xrandr --output VGA1 --mode "1280x1024_60.00"

就可以临时的调整分辨率到1280x1024.