web-dev-qa-db-ja.com

デュアルブート環境でビデオドライバーを切り替える

NVIDIAカードがインストールされているネイティブコンピューターとVMwareゲストの両方でUbuntuを起動する最も簡単な方法は何ですか。 nvidia-304ドライバーパッケージをインストールした後、VMwareにロードできません。 .xsession-errorsに次のエラーが表示され、ログインループが発生しました。

Xlib:ディスプレイ「:0」に拡張子「GLX」がありません。

私が見つけた唯一の関連する答えは this ですが、私にはうまくいきません。 NVIDIAドライバーにはswitchlibglxはありません。

EDIT:私の調査結果。 NVIDIAは、システムディレクトリlibglx.soのシンボリックリンクを介してOpenGLモジュールでシステムを台無しにしました。それらのモジュールは、明らかに異なるビデオアダプターでシステムを起動した場合にロードされないNVIDIAドライバーでのみ動作します。ロードされるドライバーに応じて、使用するOpenGLモジュールを選択するデフォルトの簡単な方法はありません。これは、古典的なUNIXロジックです。困難な状況では、APIとオプションを発明する必要はありません。グローバルディレクトリのデフォルトのシンボリックリンクを上書きし、ユーザーがこの混乱に対処できるようにします。 NVIDIAは、標準の松葉杖を使用してドライバーとモジュールをインストールします。次の3つの回避策があります。

1)VMwareで使用するたびにnvidiaドライバーをインストールおよびアンインストールします

2)スクリプトを実行し、存在するアダプターに応じてブート中にシンボリックリンクを上書きする複雑な構成ファイルを作成します(以下の回答を参照)

3)XサーバーでGLX拡張機能の使用を無効にし、VMwareにロードする

5
ZAB

X構成がnvidiaドライバーをロードしようとしており、互換性のあるnvidiaデバイスを探しているため、この問題が発生しています。そのようなデバイスはゲスト環境に存在せず、代わりにVMware仮想グラフィックスデバイスが代わりに表示されるため、nvidiaドライバーはゲストOSの正しいドライバーではありません。

Vmware仮想グラフィックインターフェイスの正しいドライバーは、xserver-xorg-video-vmwareパッケージで提供されるもので、nvidia- *パッケージで提供されるものではなく、GPUへの直接アクセスにのみ適しています。ゲストで次のコマンドを使用して、正しいドライバーをインストールできます。

Sudo apt-get install xserver-xorg-video-vmware

また、仮想マシンの構成で3Dアクセラレーションが有効になっていることと、vmwareゲストの追加が正しくインストールされていることを確認してください。また、nvidiaドライバーを明示的に選択するxorg.confファイルがないことを確認する必要があります。これは失敗します。

Lightdmが開始される前のブート時に実行するように設定できるスクリプトが必要な場合は、次のようなものを試すことができます。

#!/bin/bash
# Vendor identifiers
nvidia=\"10de\"
vmware=\"15ad\"

# Detect NVIDIA driver
nvidia_driver=`dpkg --get-selections | awk '/nvidia-[0-9]+\t+install/ { print $1 }'`

# Detect PCI bus ID
vga_bus_id=`lspci | awk '/VGA/ { print $1 }'`

# Detect VGA vendor identifier
vga_vendor=$(lspci -nm | awk "/$vga_bus_id/ { print \$3 }")

if [ $vga_vendor == $nvidia ]; then
   # Configure for nvidia GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/${nvidia_driver}/alt_ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/${nvidia_driver}/alt_ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/${nvidia_driver}/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/${nvidia_driver}/ld.so.conf
Elif [ $vga_vendor == $vmware ]; then
   # Configure for mesa GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/i386-linux-gnu/mesa/ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/i386-linux-gnu/mesa-egl/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/x86_64-linux-gnu/mesa-egl/ld.so.conf
else
   # Configure for mesa GLX via update-alternatives
   update-alternatives --set i386-linux-gnu_gl_conf /usr/lib/i386-linux-gnu/mesa/ld.so.conf
   update-alternatives --set i386-linux-gnu_egl_conf /usr/lib/i386-linux-gnu/mesa-egl/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_gl_conf /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf
   update-alternatives --set x86_64-linux-gnu_egl_conf /usr/lib/x86_64-linux-gnu/mesa-egl/ld.so.conf
fi

スクリプトは、グラフィックカードで検出されたベンダー識別子を確認します。nvidiaが提供するOpenGLライブラリを使用するようにldを構成しますが、vmwareデバイスが検出された場合、mesaを構成します。

ここでいくつかの仮定が行われていますが、そうでない場合、スクリプトは正しく動作しません。

  1. Multilibインストールが想定されているため、i386とx86_64の両方の設定
  2. Ubuntuが提供するnvidiaドライバーがインストールされていると想定されますが、aptを使用せずにnvidiaドライバーを手動でインストールした場合、これは機能しません。

ただし、VMwareをインストールしていないため、nvidiaデバイスが検出され、ubuntuが提供するnvidiaドライバーがインストールされている場合にのみ、正しく動作することをテストおよび確認できます。

2
MttJocy