Nvidia API không khớp


27

Tôi đã lên kế hoạch một ngày thư giãn với Portal 2 nhưng khi bắt đầu Steam (lần đầu tiên sau một vài tuần) tôi đã được chào đón với thông báo sau trong thiết bị đầu cuối:

Error: API mismatch: the NVIDIA kernel module has version 270.41.19,
but this NVIDIA driver component has version 270.41.06.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.

Tôi sẽ thú nhận rằng tôi không thực sự biết những gì nó nói về khi nó nói lái xe. Các verion của nvidia-current270.41.19. Tôi nghĩ rằng đó là trình điều khiển và mô-đun, tất cả trong một.

Tôi sử dụng PPA X-SWAT và tôi đã lưu ý rằng nvidia-settingsgói đã được tăng cường 275.09.07. Vì đây chỉ là một ứng dụng cài đặt, tôi không nghĩ rằng sự không phù hợp này có liên quan đến điều này. Đây cũng không phải là phiên bản giống như vấn đề được mô tả.

Tôi không muốn quay trở lại trình điều khiển Nvidia tiêu chuẩn vì nó không ổn định trên GTX580 của tôi. Tôi sẽ chấp nhận một câu trả lời có thiết lập thủ công và làm cho nó biên dịch lại khi kernel biên dịch lại (nghĩa là một số thuật sĩ DKMS) nhưng nó phải hoạt động. Tôi không muốn quay lại chế độ văn bản mỗi lần tôi khởi động lại sau khi nâng cấp kernel.

Chỉnh sửa: Minecraft hoạt động mà không có một khiếu nại nào về các phiên bản trình điều khiển. Penumbra chết với lỗi tương tự khi vào game.

Chỉnh sửa: Đây là những gì tôi đang xử lý về các tệp 32 bit. Tất cả dường như ở đúng phiên bản.

ls -l /usr/lib32/nvidia-current/ | awk '{ print $8 " " $9 " " $10 }'

libcuda.so -> libcuda.so.270.41.19
libcuda.so.1 -> libcuda.so.270.41.19
libcuda.so.270.41.19  
libGL.la  
libGL.so -> libGL.so.1
libGL.so.1 -> libGL.so.270.41.19
libGL.so.270.41.19  
libnvcuvid.so -> libnvcuvid.so.1
libnvcuvid.so.1 -> libnvcuvid.so.270.41.19
libnvcuvid.so.270.41.19  
libnvidia-cfg.so -> libnvidia-cfg.so.1
libnvidia-cfg.so.1 -> libnvidia-cfg.so.270.41.19
libnvidia-cfg.so.270.41.19  
libnvidia-compiler.so -> libnvidia-compiler.so.1
libnvidia-compiler.so.1 -> libnvidia-compiler.so.270.41.19
libnvidia-compiler.so.270.41.19  
libnvidia-glcore.so.270.41.19  
libnvidia-ml.so -> libnvidia-ml.so.1
libnvidia-ml.so.1 -> libnvidia-ml.so.270.41.19
libnvidia-ml.so.270.41.19  
libnvidia-tls.so.270.41.19  
libnvidia-wfb.so.1 -> libnvidia-wfb.so.270.41.19
libnvidia-wfb.so.270.41.19  
libOpenCL.so -> libOpenCL.so.1
libOpenCL.so.1 -> libOpenCL.so.1.0
libOpenCL.so.1.0 -> libOpenCL.so.1.0.0
libOpenCL.so.1.0.0  
libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.270.41.19  

Chỉnh sửa 2: Tôi có thể đã tìm thấy một cái gì đó.

Lẩn khuất trong /usr/lib32/đúng (không phải là thư mục con nvidia-current) Tôi tìm thấy như sau:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libcuda.so.270.41.06  
libGL.so.1 -> libGL.so.270.41.06
libGL.so.270.41.06  
libnvidia-compiler.so.270.41.06  
libnvidia-glcore.so.270.41.06  
libnvidia-tls.so.270.41.06  
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau.so.270.41.06  
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

Vì một số lý do, mọi thứ trong đó /usr/lib32/nvidia-current/đều là phiên bản phù hợp nhưng có một khối lượng lớn trong /usr/lib32/đó có thể sẽ phá hỏng bữa tiệc.

Chỉnh sửa 3: Cố gắng theo dõi gói nào sở hữu các tệp này đã thất bại:

find /usr/lib32 -iname '*270.41.06*' -exec dpkg -S "{}" \;

dpkg-query: no path found matching pattern /usr/lib32/libnvidia-compiler.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libGL.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_nvidia.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_trace.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libvdpau.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/tls/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libcuda.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-glcore.so.270.41.06.

Bất kỳ lời khuyên về cách tôi nên đối phó với các phiên bản bị hỏng này? Xóa chúng? Xóa rồi symlink đến ./nvidia-current/phiên bản?


Bạn có đang sử dụng hệ thống 64 bit không? Nếu vậy, sự khác biệt giữa các trò chơi bị hỏng và làm việc là liệu chúng là 32 bit hay 64 bit? Nếu đó là trường hợp, thì có thể các thành phần không gian người dùng 32 hoặc 64 bit đã hết hạn.
James Henstridge

Tôi đang trên 64 bit. Điều này nghe có vẻ như là một chẩn đoán tốt. Trine (cũng là 64bit bản địa) cũng hoạt động.
Oli

@James có ý kiến ​​gì về cách người ta sẽ sửa nó không?
Oli

Tôi không có hệ thống Nvidia xung quanh, vì vậy đây là một phỏng đoán. Các thư viện không gian người dùng 32 bit có lẽ ở đâu đó bên dưới /usr/lib32. Kiểm tra xem chúng có giống phiên bản tương tự như phiên bản 64 bit chính không. Nếu chúng khác nhau, hãy tìm hiểu gói nào sở hữu chúng và tìm kiếm một bản cập nhật.
James Henstridge

Câu trả lời:


17

Làm như sau đã giải quyết nó cho tôi trên Ubuntu 12.04 64 bit với kernel 3.0,29. Hy vọng nó giúp.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current

4
Sử dụng dpkg --get-selections | grep nvidiađể tìm các gói nvidia khác mà bạn phải thanh lọc
Christopher Manning

Cảm ơn GSBabil, đã khắc phục sự cố tương tự cho tôi. Cần khởi động lại sau đó mặc dù trước khi nó "mất".
Tro

5
@Christopher Quản lý một cách dễ dàng hơn để làm điều đó sẽ là sudo apt-get remove --purge nvidia *
Ben McCann

Làm việc rực rỡ cảm ơn bạn! Cuối cùng cũng có trình điều khiển cập nhật, Steam rất vui: D
Ads20000

@GSBabil Tôi muốn mua cho bạn một cốc bia quá tệ.
Matthew Scragg

14

Khi phát hiện ra có một tải các tập tin cũ bay lên / usr / lib32 / Tôi đã di chuyển chúng ra ngoài bằng lệnh sau:

sudo find /usr/lib32 -iname '*270.41.06*' -exec mv {} {}.old \;

Và khởi động lại X. Điều này đã phá vỡ mọi thứ 3D. Huzzah. Sử dụng một lời khen trước đây tôi có thể thấy có bốn liên kết bị hỏng:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libGL.so.1 -> libGL.so.270.41.06
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

Thay vì tự thay thế các liên kết cho bốn tập tin, tôi đã đến Elrond, Lord of Rivendell và giao cho anh ta thiết lập một mối quan hệ có thể đi vào Morhdorh, chập chững lên Mount Doom và tạo cho tôi một lệnh để đưa tôi (và nhờ đó tôi có nghĩa là tất cả chúng ta) và trong bóng tối ràng buộc chúng ta.

Đủ rồi đó. Đây là một lệnh:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270 | cut -d' ' -f1 | xargs -l1 sudo bash -c "rm /usr/lib32/\$0 && ln -s /usr/lib32/nvidia-current/\$0 /usr/lib32/\$0"

Không phải cô ấy ngoạn mục. Va no đa hoạt động. Bây giờ tôi có 4 liên kết mới sáng bóng:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current'

libcuda.so.1 -> /usr/lib32/nvidia-current/libcuda.so.1
libGL.so.1 -> /usr/lib32/nvidia-current/libGL.so.1
libOpenCL.so -> nvidia-current/libOpenCL.so
libvdpau.so.1 -> /usr/lib32/nvidia-current/libvdpau.so.1
libvdpau_trace.so -> /usr/lib32/nvidia-current/libvdpau_trace.so

Sau đó tôi kiểm tra xem mọi thứ đã hoạt động chưa. Trước khi khởi động lại, tôi nghĩ rằng tôi nên kiểm tra xem các liên kết có đúng không:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:      symbolic link to `libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:        symbolic link to `libGL.so.270.41.19'
/usr/lib32/nvidia-current/libvdpau.so.1:     ERROR: cannot open `/usr/lib32/nvidia-current/libvdpau.so.1' (No such file or directory)
/usr/lib32/nvidia-current/libvdpau_trace.so: ERROR: cannot open `/usr/lib32/nvidia-current/libvdpau_trace.so' (No such file or directory)

Tuyệt quá. Vì vậy, lệnh mega chỉ thực hiện hai liên kết đúng. Sau khi nhìn xa hơn một chút, có vẻ như các libvdpautập tin thực sự sống /usr/lib32/nvidia-current/vdpau/. Không có gì lộn xộn về thời gian này:

sudo rm /usr/lib32/libvdpau{,_trace}.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau_trace.so*

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:                      symbolic link to `libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:                        symbolic link to `libGL.so.270.41.19'
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.19:       ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.19: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

Ít nhất là chúng đúng (nếu hơi vô duyên) được liên kết trong. Thời gian để kiểm tra.

Chỉnh sửa: Điều này đã làm việc nhưng học hỏi từ cuộc đấu tranh của tôi: Giữ cho nó đơn giản.


Tôi nhớ rất rõ loại địa ngục này - chỉ có điều tôi không mạo hiểm khi sử dụng dòng lệnh (trong trường hợp nhập sai thứ gì đó) để sửa lỗi của tôi: P.
RolandiXor

7

cũng chỉ làm điều này:

$ dpkg --get-selections | grep nvidia

nvidia-common                   install
nvidia-current                  install
nvidia-current-updates              install
nvidia-experimental-x...            install
nvidia-settings                 install
nvidia-settings-updates             install

và sau đó:

$ sudo apt-get purge nvidia-experimental-x...
...
$ sudo reboot

mọi thứ ổn cả!


2
Điều này rất hữu ích khi nó hiển thị các phiên bản cũ hơn đã được cài đặt. Khi tôi thanh trừng họ, mọi thứ khởi động tốt. Cảm ơn!
Josh Johnson

được. Tôi rất vui mừng cho nó.
shgnInc

Câu trả lời chính xác. Tôi đã xem qua danh sách của mình và dọn dẹp nó, sau đó cài đặt lại những gì tôi cần và khởi động lại. Voila! +1
nicorellius

7

Tôi đã có vấn đề này một lần, và nó rất dễ để sửa chữa.

Sau đây là dựa trên bộ nhớ chắp vá vì vậy hãy cẩn thận!
Trước tiên, bạn cần thấy rằng các thư viện nvidia trong / usr / lib32 / match:

/usr/lib32/libOpenCL.so  
/usr/lib32/nvidia-current  
/usr/lib32/nvidia-current/libGL.la  
/usr/lib32/nvidia-current/libGL.so  
/usr/lib32/nvidia-current/libGL.so.1  
/usr/lib32/nvidia-current/libGL.so.270.41.06  
/usr/lib32/nvidia-current/libOpenCL.so  
/usr/lib32/nvidia-current/libOpenCL.so.1  
/usr/lib32/nvidia-current/libOpenCL.so.1.0  
/usr/lib32/nvidia-current/libOpenCL.so.1.0.0  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.1  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.270.41.06  
/usr/lib32/nvidia-current/libXvMCNVIDIA_dynamic.so.1  
/usr/lib32/nvidia-current/libcuda.so  
/usr/lib32/nvidia-current/libcuda.so.1  
/usr/lib32/nvidia-current/libcuda.so.270.41.06  
/usr/lib32/nvidia-current/libnvcuvid.so  
/usr/lib32/nvidia-current/libnvcuvid.so.1  
/usr/lib32/nvidia-current/libnvcuvid.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-cfg.so  
/usr/lib32/nvidia-current/libnvidia-cfg.so.1  
/usr/lib32/nvidia-current/libnvidia-cfg.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-compiler.so  
/usr/lib32/nvidia-current/libnvidia-compiler.so.1  
/usr/lib32/nvidia-current/libnvidia-compiler.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-glcore.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-ml.so  
/usr/lib32/nvidia-current/libnvidia-ml.so.1  
/usr/lib32/nvidia-current/libnvidia-ml.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-wfb.so.270.41.06  
/usr/lib32/nvidia-current/tls  
/usr/lib32/nvidia-current/tls/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/vdpau  
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.1  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.06  
/usr/lib32/vdpau 

Theo những gì bạn mô tả, rất có thể chúng không khớp với những thứ này. Nếu đây là trường hợp, thì bạn cần xóa chúng (cẩn thận - sử dụng trình quản lý tệp, đừng cố rm -rf !!!!!!!!! ), sau đó cài đặt lại nvidia-current :).
Điều này sẽ cung cấp cho bạn các phiên bản phù hợp của các thư viện và cung cấp cho bạn một hệ thống làm việc.


4

Tôi đã có vấn đề này đã ảnh hưởng đến launcher SWTOR của tôi trong rượu vang. Đọc phần trên tôi quyết định thử và làm mọi thứ thông qua giao diện người dùng Ubuntu. Đây là giải pháp đơn giản phù hợp với tôi;

Xóa và cài đặt lại trình điều khiển bổ sung thông qua UI:

  1. Chuyển đến Hệ thống -> Quản trị -> Trình điều khiển bổ sung
  2. Chọn trình điều khiển đồ họa tăng tốc NVIDIA và nhấn nút "loại bỏ". KHÔNG REBOOT NGAY LẬP TỨC SAU.
  3. Sau khi xóa, chọn cùng trình điều khiển và nhấp vào "kích hoạt".
  4. Bây giờ khởi động lại.
  5. Nên sửa.

3

Sau một số thử nghiệm tôi thấy rằng các gói:

nvidia-current
nvidia-304
nvidia-settings
nvidia-settings-304

làm việc cho tất cả các nhân 3.2.0- * và 3.8.0- *,

trong khi các gói:

nvidia-current-updates
nvidia-experimental-304
nvidia-304-updates
nvidia-settings-updates
nvidia-settings-experimental-304
nvidia-settings-304-updates
nvidia-319
nvidia-experimental-310
nvidia-319-updates
nvidia-settings-319
nvidia-settings-experimental-310
nvidia-settings-319-updates

chỉ làm việc cho Kernel 3.8.0- *.

Trình điều khiển Ubuntu vẫn đề xuất phiên bản 319 khi chỉ có kernel 3.2.0- *. Vì vậy, một lỗi ở đây.

Hơn nữa, các lệnh:

$ sudo apt-get purge nvidia-current
$ sudo apt-get install nvidia-current

hoặc là

$ sudo dpkg-reconfigure nvidia-current

chỉ cài đặt trình điều khiển cho một phiên bản kernel cho mỗi phiên bản nhỏ và xóa nó cho tất cả các phiên bản khác.

Vì vậy, trong trường hợp của tôi, tôi đã cài đặt các hạt nhân sau:

3.8.0-32-generic
3.2.0-55-generic-pae
3.2.0-55-generic
3.2.0-54-generic-pae
3.2.0-54-generic
3.2.0-53-generic-pae
3.2.0-53-generic
3.2.0-52-generic-pae
3.2.0-52-generic
3.2.0-51-generic-pae
3.2.0-51-generic
3.2.0-49-generic-pae
3.2.0-49-generic

Tôi chỉ có trình điều khiển cho:

3.8.0-32-generic
3.2.0-55-generic-pae

Trong khi khởi động với các nhân khác, kết quả trình điều khiển không được cài đặt.

Dường như với tôi rằng một nơi nào đó trong gói có một dấu hiệu sai để xây dựng và cài đặt chỉ cho một số kernel.

Bất cứ nơi nào, ban hành lệnh sau khắc phục tình huống:

$ sudo dkms install nvidia-304/304.88 -k 3.8.0-32-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic-pae

cho đến khi apt-get tiếp theo cài đặt nvidia-current hoặc cấu hình lại

Chủ đề: Trình điều khiển Nvidia được cập nhật - các phiên bản hỗn hợp 304,88 và 319,32 có liên quan đến cùng, nhưng tôi không có đủ tín dụng để đăng ở đó.


1

Điều này đã xảy ra với tôi sau khi tôi cài đặt trình điều khiển Nvidia thử nghiệm mới nhất. Tôi vẫn muốn thử trình điều khiển mới nhất nếu có thể thay vì quay lại trình điều khiển cũ hơn, vì vậy đây là điều làm việc cho tôi:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot

0

Loại bỏ tất cả các gói nvidia và cài đặt lại thực sự là cách dễ nhất để khắc phục điều này.

Trước hết tôi đã xóa tất cả các gói nvidia bằng lệnh bên dưới:

$ dpkg --get-selections | grep nvidia | awk '{print $1}' | xargs sudo apt-get -y purge

Sau đó, tôi đã thực hiện khởi động lại chỉ vì sự tò mò của chúng tôi, để xem giao diện đồ họa của tôi trông như thế nào - độ phân giải kém và chậm, như mong đợi.

Sau khi mở shell tôi chạy lệnh bên dưới để cài đặt lại nvidia:

$ sudo apt-get install nvidia-current
$ sudo reboot

Mọi thứ hoạt động trở lại. Chúc may mắn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.