Несоответствие API Nvidia

27

Я запланировал день отдыха с Portal 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 работает без единой жалобы на версии драйверов. Пенумбра умирает примерно с той же ошибкой при входе в игру.

Изменить: вот что я имею дело с 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-разрядные компоненты пользовательского пространства устарели.
Джеймс Хенстридж
Я на 64-битной. Похоже, это может быть хорошим диагнозом. Trine (который также является родным 64bit) также работает.
Оли
@ Джеймс, есть идеи, как можно это исправить?
Оли
У меня нет системы Nvidia, поэтому следующее предположение. 32-битные библиотеки пользовательского пространства, вероятно, где-то под /usr/lib32. Проверьте, не похожи ли они на ту же версию, что и основные 64-битные версии. Если они различаются, выясните, какому пакету они принадлежат, и поищите обновление.
Джеймс Хенстридж

Ответы:

17

Выполнение следующих действий решило это для меня на Ubuntu 12.04 64bit с ядром 3.0.29. Надеюсь, это поможет.

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current
gsbabil
источник
4
Используйте, dpkg --get-selections | grep nvidiaчтобы найти другие пакеты nvidia, которые вы должны очистить
Кристофер Мэннинг,
Спасибо GSBabil, исправил подобную проблему для меня. После этого потребовалась перезагрузка, прежде чем она "взяла".
Пепел
5
@ChristopherManning более простой способ сделать это будет sudo apt-get remove --purge nvidia *
Бен Макканн
Работал блестяще спасибо! Наконец-то появились новейшие драйвера, Steam рад: D
Ads20000
@GSBabil Я так хочу купить тебе пиво.
Мэтью Скрагг
14

Когда выяснилось, что старые файлы загружаются в / usr / lib32 /, я удалил их следующей командой:

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

И перезапустил X. Это сломало все 3D. Возгласы ликования. Используя предыдущий комментарий, я увидел четыре неработающие ссылки:

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

все хорошо!

shgnInc
источник
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 :).
Это должно дать вам правильные версии библиотек и дать вам работающую систему.

RolandiXor
источник
4

У меня была эта проблема, которая затрагивала мою пусковую установку SWTOR в вине. Читая выше, я решил попытаться сделать что-то через Ubuntu UI. Вот простое решение, которое сработало для меня;

Удалите и переустановите дополнительные драйверы через пользовательский интерфейс:

  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

работают только для ядра 3.8.0- *.

Ubuntu Jockey по-прежнему рекомендует 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 относятся к одному и тому же, но у меня не было достаточно кредитов, чтобы публиковать там.

EFA
источник
1

Это случилось со мной после того, как я установил последний экспериментальный драйвер Nvidia. Я все еще хотел попробовать последний драйвер, если это возможно, вместо того, чтобы вернуться к более старому драйверу, так что это то, что мне помогло:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot
bmaupin
источник
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

Все снова работает. Удачи.

Джордж Андерсон
источник