Nvidia APIの不一致


27

Portal 2でリラックスした1日を計画していましたが、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。これは単なる設定アプリケーションであるため、この不一致はこれとは関係ないと思います。また、説明されている問題と同じバージョンではありません。

GTX580では安定性が低いため、標準のNvidiaドライバーに戻すことは避けたいです。手動セットアップを使用して、カーネルの再コンパイル時に再コンパイルする(つまり、一部の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ビットのユーザースペースコンポーネントが古くなっている可能性があります。
ジェームズ・ヘンストリッジ

私は64ビットです。これは良い診断かもしれません。Trine(ネイティブ64ビットでもあります)も動作します。
オリ

@ジェームズは、それを修正する方法を考えていますか?
オリ

私はNvidiaシステムを持っていないので、以下は推測です。32ビットのユーザー空間ライブラリはおそらくのどこかにあり/usr/lib32ます。プライマリ64ビットバージョンと同じバージョンに見えるかどうかを確認します。それらが異なる場合、どのパッケージがそれらを所有しているかを調べ、更新を探します。
ジェームズヘンストリッジ

回答:


17

3.0.29カーネルを搭載したUbuntu 12.04 64ビットで、以下を実行することで解決しました。それが役に立てば幸い。

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

4
dpkg --get-selections | grep nvidiaパージする必要がある他のnvidiaパッケージを見つけるために使用する
クリストファーマニング

GSBabilに感謝します。私のために同様の問題を修正しました。「実行」する前に再起動が必要でした。

5
@Christopherそれを行うより簡単な方法は、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がすべて壊れました。ハザ。以前の称賛を使用すると、4つのリンクが壊れていることがわかりました。

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

4つのファイルのリンクを手動で置き換えるのではなく、Rivendellの主であるElrondに行き、Morhdorhにtrapき、Doom Mountに寄り添い、私に1つのコマンドを作成できるフェローシップを設定するよう依頼しました。暗闇の中で私たちを縛ります。

それで十分です。コマンドは次のとおりです。

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)

すばらしいです。したがって、メガコマンドは2つのリンクのみを正しく実行しました。少し詳しく見てみると、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
これは、インストールされた古いバージョンを公開するのに役立ちました。それらを削除すると、すべてが正常に起動しました。ありがとう!
ジョシュジョンソン

OK。私はそれをとてもうれしく思います。
shgnInc

素晴らしい答え。リストを調べて整理し、必要なものを再インストールして再起動しました。出来上がり!+1
nicorellius 14

7

この問題は一度発生しましたが、驚くほど簡単に修正できます。

以下は、不完全なメモリに基づいているため、注意してください!
まず、/ usr / lib32 /のnvidiaライブラリが一致することを確認する必要があります。

/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 UIを使用して操作を行うことにしました。ここに私のために働いた簡単な解決策があります。

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- *のみで動作します。

カーネル3.2.0- *のみが存在する場合も、Ubuntu jockeyは319バージョンを推奨します。ここにバグがあります。

さらに、コマンド:

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

または

$ sudo dpkg-reconfigure nvidia-current

マイナーバージョンごとにカーネルの1つのバージョンのみにドライバーをインストールし、他のすべてのバージョンに対しては削除します。

したがって、私の場合、次のカーネルがインストールされています。

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

すべてが再び機能します。がんばろう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.