Невідповідність API Nvidia


27

Я запланував день відпочинку з Порталом 2, але на запуску Steam (вперше за пару тижнів) мене зустріли з наступним повідомленням у терміналі:

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.

Признаюсь, я не знаю, про що йдеться, коли говорить водій. Віра nvidia-currentє 270.41.19. Я думав, що це драйвер і модуль, все в одному.

Я використовую X-SWAT PPA, і я зазначив, що nvidia-settingsпакет посилився 275.09.07. Оскільки це лише програма налаштувань, я не думаю, що ця невідповідність не має нічого спільного з цим. Це також не та сама версія, що описана проблема.

Я краще не повернувся до стандартного драйвера Nvidia, оскільки він менш стабільний на моєму GTX580. Я б прийняв відповідь, яка приймає вручну налаштування і робить її перекомпіляцією, коли ядро ​​перекомпілює (тобто, деякі майстри DKMS), але воно має працювати. Я не хочу повертатися до текстового режиму щоразу, коли перезавантажуюсь після оновлення ядра.

Редагувати: Minecraft працює без жодної скарги на версії драйверів. Penumbra гине з приблизно однаковою помилкою при вступі в гру.

Редагувати: Ось що я маю справу з 32-бітовими файлами. Вони, схоже, є у правильній версії.

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  

Редагувати 2: Можливо, я щось знайшов.

Приховавшись у /usr/lib32/належному (не в nvidia-currentпіддіреку), я виявив таке:

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

Чомусь все в /usr/lib32/nvidia-current/правильній версії, але в цьому є чимало грубих, /usr/lib32/що може зіпсувати партію.

Редагування 3: Не вдалося спробувати встановити, який пакет пакетів належить цим файлам:

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.

Будь-які поради щодо того, як мені поводитися з цими зламаними версіями? Видалити їх? Видалити, потім символьне посилання на ./nvidia-current/версії?


Ви перебуваєте в 64-бітній системі? Якщо так, то чи може різниця між робочими та зламаними іграми бути 32-бітною чи 64-розрядною? Якщо це так, то, можливо, 32- або 64-бітні компоненти простору користувача застаріли.
Джеймс Генстридж

Я на 64bit. Це здається, що це може бути вдалий діагноз. Trine (який також є рідним 64-бітним) також працює.
Олі

@James будь-яка ідея, як можна було б вирішити це?
Олі

У мене немає системи Nvidia навколо, тому наступне припущення. 32-бітні бібліотеки простору користувачів, ймовірно, десь під /usr/lib32. Перевірте, чи схожі вони на ту ж версію, що і основні 64-бітні. Якщо вони відрізняються, з’ясуйте, яким пакетом належить їх, і шукайте оновлення.
James Henstridge

Відповіді:


17

Виконавши наступне, це вирішило для мене на Ubuntu 12.04 64bit з ядром 3.0.29. Сподіваюся, це допомагає.

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

4
Використовуйте dpkg --get-selections | grep nvidiaдля пошуку інших пакетів nvidia, які потрібно очистити
Christopher Manning

Дякую GSBabil, вирішили подібну проблему для мене. Потрібна перезавантаження після цього, хоча до того, як вона «взяла».
Еш

5
@ChristopherManning простіший спосіб зробити це буде sudo apt-get remove --purge nvidia *
Ben McCann

Працювали блискуче дякую! Нарешті мають сучасних драйверів, Steam радий: D
Ads20000

@GSBabil Я хочу купити вам пиво так погано.
Меттью Скрагг

14

Дізнавшись, що було завантажено старі файли / usr / lib32 /, я перемістив їх за допомогою наступної команди:

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

І перезапустив X. Це зламало все 3D. Huzzah. Використовуючи попередню хвалу, я міг помітити, що існувало чотири ламані посилання:

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

Замість того, щоб вручну замінити посилання на чотири файли, я пішов до Елронда, лорда Рівенделла, і доручив йому встановити товариство, яке могло б потрапити в Морхдорх, підробити до гори Дум і скласти мені одну команду, щоб привести мене (і цим я означають нас усіх) і в темряві нас зв'язують.

Досить цього. Ось одна команда:

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"

Хіба вона не вражаюча. І це спрацювало. Зараз у мене є 4 блискучі нові символьні посилання:

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

Потім я перевірив, чи все спрацювало. Перш ніж перезапустити, я подумав, що слід перевірити, чи правильні посилання:

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)

Чудово. Тож мегакоманда мала лише два ланки. Подивившись трохи далі, схоже, libvdpauфайли насправді живуть /usr/lib32/nvidia-current/vdpau/. Нічого не возиться з цього часу:

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

Принаймні, вони належним чином (якщо трохи ненадійно) пов'язані. Час для тестування.

Редагувати: Це спрацювало, але вчуся з моєї боротьби: Нехай це буде просто.


Я добре пам’ятаю таке пекло - тільки я не ризикнув скористатися командним рядком (у випадку, якщо щось зафіксував), щоб виправити моє: P.
RolandiXor

7

також просто так:

$ 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

і потім:

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

все добре!


2
Це було корисно, оскільки воно відкривало старіші версії, які були встановлені. Одного разу я очистив їх, і все покращилося. Спасибі!
Джош Джонсон

добре. Я так галявую за це.
shgnInc

Чудова відповідь. Я пройшов свій список і очистив його, потім перевстановив те, що мені потрібно, і перезавантажив. Вуаля! +1
nicorellius

7

У мене була ця проблема один раз, і її напрочуд легко виправити.

Далі базується на патчі, тому будьте уважні!
Спочатку потрібно переконатися, що бібліотеки nvidia у / 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 

Згідно з тим, що ви описали, вони, швидше за все, не відповідають цим. Якщо це так, то їх потрібно видалити (обережно - використовуйте файловий менеджер, не намагайтеся rm -rf !!!!!!!!! ), а потім перевстановіть nvidia-current :).
Це повинно дати вам правильні версії бібліотек і надати вам робочу систему.


4

У мене була ця проблема, яка торкнулася мого пускового пристрою SWTOR у вині. Читаючи вище, я вирішив спробувати зробити все через інтерфейс Ubuntu. Ось просте рішення, яке працювало для мене;

Видаліть та встановіть додаткові драйвери через інтерфейс користувача:

  1. Перейдіть до системи -> Адміністрація -> Додаткові драйвери
  2. Виберіть графічний драйвер NVIDIA, що прискорився, і натисніть кнопку "видалити". НЕ РЕБУТАЙТЕ НЕМОВНО ПІСЛЯ.
  3. Після видалення виберіть той самий драйвер і натисніть «активувати».
  4. Тепер перезавантажте.
  5. Слід виправити.

3

після деяких тестів я виявив, що пакунки:

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

робота для всіх ядер 3.2.0- * та 3.8.0- *,

при пакеті:

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

робота лише для Kernel 3.8.0- *

Жокей Ubuntu досі рекомендує версію 319 також, коли є лише ядро ​​3.2.0- *. Тож тут клоп.

Крім команд:

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

або

$ sudo dpkg-reconfigure nvidia-current

встановіть драйвер лише для однієї версії ядра для кожної другої версії та видаліть її для всіх інших.

Отже, у моєму випадку я встановив такі ядра:

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

Я отримав драйвер лише для:

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

під час завантаження з іншими ядрами результати драйвера не встановлені.

Мені здається, що десь у пакеті є неправильна вказівка ​​на створення та встановлення лише для ядра.

В будь-якому місці видання наступної команди виправить ситуацію:

$ 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

до наступного apt-get встановити nvidia-current або переконфігурувати

Тема: Оновлено драйвер Nvidia - змішані версії 304,88 та 319,32 пов’язані з тим самим, але мені не вистачало кредитів для публікації там.


1

Це сталося зі мною після встановлення останнього експериментального драйвера Nvidia. Я все-таки хотів спробувати найновіший драйвер, якщо можливо, замість того, щоб повернутися до старшого драйвера, тож ось що для мене спрацювало:

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

0

Видалення всіх пакетів nvidia та повторна інсталяція - це справді найпростіший спосіб виправити це.

Спочатку я видалив усі пакунки nvidia за допомогою команди нижче:

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

Тоді я перезавантажив лише цікавість, щоб побачити, як виглядатиме мій графічний інтерфейс - погана роздільна здатність та повільна, як очікувалося.

Після відкриття оболонки я запускаю команду нижче, щоб встановити nvidia назад:

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

Все працює знову. Удачі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.