Steam/トラブルシューティング
メインの記事は Steam を見てください。
目次
- 1 Steam のデバッグ
- 2 Steam ランタイムの問題
- 3 マルチディスプレイの設定
- 4 ネイティブランタイム: steam.sh line 756 Segmentation fault
- 5 音声が鳴らなかったり 756 Segmentation fault が発生する
- 6 文字が化けたり表示されない
- 7 ゲームの起動時に SetLocale('en_US.UTF-8') が失敗する
- 8 起動後にすぐゲームがクラッシュする
- 9 OpenGL がダイレクトレンダリングを使わない / Steam で Xorg がクラッシュする
- 10 特定のゲームで音が鳴らない
- 11 Missing libc
- 12 Missing libGL
- 13 Missing vgui2_s.so
- 14 古い intel ハードウェアでゲームが起動しない
- 15 2K のゲームが XFS パーティションで起動できない
- 16 実行権限がないためにライブラリフォルダが追加できない
- 17 Steam コントローラーが正しく認識されない
- 18 Steam が "Installing breakpad exception handler..." でフリーズする
- 19 Bumblebee を使用している場合に 'GLBCXX_3.X.XX' not found
- 20 メモリダンプによってメモリが食い潰されるのを防ぐ
- 21 ゲームを起動する際にスタンドアロンのコンポジタを終了する
- 22 Arch Linux のホストから Arch Linux のゲストにホームストリーミングが機能しない
- 23 ダウンロード速度が非常に遅い
- 24 DRI3 を使用している場合に Symbol lookup error
- 25 ハードウェアデコードが使えない
- 26 音声ストリームを別のデバイスに移動できない
Steam のデバッグ
Steam をデバッグすることで何が原因で問題が行っているのか情報を集めることができます。
DEBUGGER
環境変数を gdb
, cgdb
, valgrind
, callgrind
, strace
のどれかに設定して steam
を起動してください。
gdb を使用する場合:
$ DEBUGGER=gdb steam
gdb
が開くので run
と入力してください。steam
が起動します。クラッシュが発生したら backtrace
と入力することでコールスタックが確認できます。
Steam ランタイムの問題
Steam は「Steam ランタイム」と呼ばれるライブラリをインストールしますが、中には古いバージョンも混ざっています。これらのライブラリは Arch Linux のライブラリと衝突することがあり、また、古いライブラリには重要な機能が含まれていないことがあります (例えば、Steam に含まれている OpenAL には HRTF や surround71 のサポートが欠けています)。
ランタイムが原因で Steam クライアントがクラッシュ・フリーズしたり、以下のような様々なエラーが発生します:
libGL error: unable to load driver: some_driver_dri.so libGL error: driver pointer missing libGL error: failed to load driver: some_driver libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast
Failed to load libGL: undefined symbol: xcb_send_fd
ERROR: ld.so: object '~/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
OpenGL GLX context is not using direct rendering, which may cause performance problems.
Could not find required OpenGL entry point 'glGetError'! Either your video card is unsupported or your OpenGL driver needs to be updated.
上流の issue #13 や以下のフォーラムスレッドも参照してください:
解決方法
steam パッケージでインストールした Steam を実行する方法は3つ存在します:
$ steam-runtime
上記のコマンドは /usr/bin/steam
で Steam を起動した時や "Steam" デスクトップエントリを使ったときに使用されるコマンドです。問題を起こすランタイムライブラリは LD_PRELOAD
環境変数で上書きすることができます (ld.so(8) を参照)。上記のコマンドでライブラリの衝突が発生する場合、/usr/bin/steam-runtime
のコピーを作成して回避策を追加することができます。
$ steam-native
上記のコマンドは "Steam (Native)" デスクトップエントリで実行されるコマンドです。強制的に Steam ランタイムを無視させシステムライブラリだけを使うようにします。Steam を完全に実行するには steam-native-runtime のインストールが必要になります。ただし、一部のゲームはさらに別のパッケージのインストールを必要とします。#欠けているランタイムライブラリの確認や Steam/ゲーム別のトラブルシューティングを参照してください。
$ /usr/lib/steam/steam
上記のコマンドは Arch 特有の設定が含まれていないノーマルな Steam ランチャーを起動します。
欠けているランタイムライブラリの確認
steam-native
を使用する場合、ライブラリが足りないせいでゲームや Steam が起動しないことがあります。必要なライブラリを確認するには、以下のコマンドを実行してください:
$ cd ~/.local/share/Steam/ubuntu12_32 $ file * | grep ELF | cut -d: -f1 | LD_LIBRARY_PATH=. xargs ldd | grep 'not found' | sort | uniq
もしくは、Steam ランタイムを使って Steam を起動 (/usr/bin/steam
) して、以下のコマンドで Steam が使用しているライブラリを確認してください (全てが Steam ランタイムに含まれているとは限りません):
$ for i in $(pgrep steam); do sed '/\.local/!d;s/.* //g' /proc/$i/maps; done | sort | uniq
NVIDIA のビデオカードを使っていて上記のコマンドで何も出力されない場合、lib32-nvidia-utils をインストールしてみてください。
マルチディスプレイの設定
マルチディスプレイを使っている場合、ERROR: ld.so: object '~/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
というエラーが発生してゲームが起動できなくなることがあります。ディスプレイを減らしてみて、ゲームを実行できないか試してみてください。ゲームが問題なく起動したらディスプレイを元に戻しても問題ありません。
また、以下のコマンドで Steam を実行してみてください:
export LD_LIBRARY_PATH=/usr/lib32/nvidia:/usr/lib/nvidia:$LD_LIBRARY_PATH
ネイティブランタイム: steam.sh line 756 Segmentation fault
- Valve の GitHub issue 3863
上記のバグレポートにあるように、STEAM_RUNTIME=0
を使って Steam を起動すると /home/<username>/.local/share/Steam/steam.sh: line 756: <variable numeric code> Segmentation fault (core dumped)
というエラーでクラッシュすることがあります。
steamclient.so
が libudev.so.0
にリンクされており (lib32-libudev0AUR)、libudev.so.1
と衝突するのが原因です (lib32-systemd)。
Steam に含まれている32ビット版の libusb と libgudev を /usr/lib32
にコピーすることで解決します:
# cp $HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libgudev* /usr/lib32 # cp $HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libusb* /usr/lib32
上記の設定は lib32-libgudev
と lib32-libusb
がインストールされている環境で必要です。
また、libudev.so.1
のロードの優先順位を変更することでも解決します (同じ issue のコメント を参照):
$ LD_PRELOAD=/usr/lib32/libudev.so.1 STEAM_RUNTIME=0 steam
音声が鳴らなかったり 756 Segmentation fault が発生する
pulseaudio と pulseaudio-alsa をインストールしてみてください。x86_64 環境なら lib32-libpulse と lib32-alsa-plugins もインストールしてください。
Steam クライアントで再生した動画の音声が流れない場合、Steam に含まれている ALSA ライブラリがおそらく原因です。
Steam クライアントで動画を再生しようとすると以下のようなエラーが出力されます:
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
解決方法は alsa-lib
フォルダ と libasound.so.*
ファイルの名前を変更、あるいは削除することです。ファイルは以下のフォルダに存在します:
~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/
libasound.so.*
ライブラリを LD_PRELOAD 環境変数に追加することでも一時的に解決できます:
LD_PRELOAD='/usr/$LIB/libasound.so.2 '${LD_PRELOAD} steam
それでも音声が鳴らない場合、LD_PRELOAD 変数に PulseAudio のライブラリを追加すると問題が解決する場合があります:
LD_PRELOAD='/usr/$LIB/libpulse.so.0 /usr/$LIB/libpulse-simple.so.0 '${LD_PRELOAD}
ライブラリの名前は変わっている可能性があります。以下のフォルダを探して新しいライブラリとバージョンを確認してください:
~/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu
バグレポートは #3376 と #3504 で報告されています。
文字が化けたり表示されない
Windows 用の Steam Support の手順が Linux でも上手くいくようです。
steam-fontsAUR パッケージをインストールするか、SteamFonts.zip をダウンロードしてインストール (/usr/share/fonts/
や ~/.fonts/
にコピー) してください。
一部のゲームは他のフォントを必要とします。Steam/ゲーム別のトラブルシューティングを参照してください。
ゲームの起動時に SetLocale('en_US.UTF-8') が失敗する
お好きなエディタで /etc/locale.gen
を編集して en_US.UTF-8 UTF-8
をアンコメントしてください。そして root で locale-gen
を実行して下さい。
起動後にすぐゲームがクラッシュする
ゲームを右クリックしてプロパティを選択して、「起動オプションを設定」ボタンをクリックしてください。そしてテキストボックスに以下のように入力してください:
LD_PRELOAD='./libcxxrt.so:/usr/$LIB/libstdc++.so.6' %command%
And try the game again. Some games work with this and some games don't.
それでもゲームがクラッシュする場合、ゲームのプロパティを開き、「一般」タブの「ゲーム中に Steam オーバーレイを有効にする」のチェックを外してみてください。
なおクラッシュが解決しないのであれば最終手段として Steam の出力を確認してゲームからエラーが吐かれていないか確認してください。以下のようなエラーが出力されていることがあります:
- munmap_chunk(): invalid pointer
- free(): invalid pointer
上記のエラーが確認できた場合、問題の起こるゲームの libsteam_api.so
ファイルを問題なく起動するゲームのファイルに置き換えてください。大抵は最近アップデートされていないゲームで Steam ランタイムを無効にしたときにエラーが発生します。エラーが発生するゲームとして AYIM, Bastion, Monaco などがあります。
OpenGL がダイレクトレンダリングを使わない / Steam で Xorg がクラッシュする
"OpenGL GLX context is not using direct rendering, which may cause performance problems" というエラーメッセージが表示されることがあります [2]。
おそらく32ビットのグラフィックドライバがちゃんとインストールされていません。Xorg#ドライバーのインストールでどのパッケージをインストールするべきか確認してください。
正しくインストールされたかどうかは lib32-mesa-demos をインストールして以下のコマンドを実行することで確認・テストできます:
$ glxinfo32 | grep OpenGL
特定のゲームで音が鳴らない
特定のゲームで音が鳴らない場合、そして Steam/ゲーム別のトラブルシューティングで書かれている方法で問題が修正されないときは、ネイティブランタイムを使うと音が鳴るようになることがあります。
FMOD サウンドエンジン
'FMOD' オーディオミドルウェアパッケージを使用する以下のゲームで問題が発生します:
- Hotline Miami
- Hotline Miami 2
- Transistor
パッケージにバグが存在するために、ゲームによっては音声に問題が起こります。
ALSA で実際は使用していないデバイスをデフォルトのサウンドデバイスとして設定している場合に発生することが多いようです。Advanced Linux Sound Architecture#デフォルトサウンドカードの設定を参照してください。
Missing libc
おそらく Steam の実行ファイルが破損しています。以下のコマンドの出力を確認してください:
$ ldd ~/.local/share/Steam/ubuntu12_32/steam
ldd
によって動的実行ファイルでないと表示される場合、アップデートによって Steam のバイナリが壊れた可能性が高いです。以下のコマンドで修復できます:
$ cd ~/.local/share/Steam/ $ ./steam.sh --reset
修復されない場合、~/.local/share/Steam/
ディレクトリを削除してもういちど Steam を起動してみてください。
$HOME
ディレクトリがスラッシュで終わっている場合にも、Steam のバグが原因でエラーメッセージが表示されることがあります (Valve GitHub issue 3730)。/etc/passwd
を編集して /home/<username>/
を home/<username>
に変更し、一度ログアウトしてからログインしなおすことで解決します。その後、Steam は自動的に修復を開始します。
Missing libGL
Steam を初めて起動したときに以下のようなエラーが表示される場合:
You are missing the following 32-bit libraries, and Steam may not run: libGL.so.1
Xorg#ドライバーのインストールに書かれているビデオドライバーの lib32
バージョンがインストールされているか確認してください。
Missing vgui2_s.so
起動時に以下のエラーが発生する場合:
Could not load module 'vgui2_s.so'.
lib32-openal
パッケージをインストールすることで解決します。詳しくは https://support.steampowered.com/kb_article.php?ref=9205-OZVN-0660 を参照してください。
古い intel ハードウェアでゲームが起動しない
古い Intel ハードウェアで、起動した途端にゲームがクラッシュする場合、おそらくあなたの使っているハードウェアが OpenGL 3 を直接サポートしていないのが原因です。/tmp/dumps/mobile_stdout.txt
には gameoverlayrenderer.so エラーとして記録されますが、/tmp/gameoverlayrenderer.log
では GLXBadFBConfig エラーとして記録されます。
ただし、ゲームに OpenGL の新しいバージョンを使うように強制させれば修正することができるかもしれません。ゲームを右クリックして、プロパティを選択し、"一般" タブの「起動オプションを設定」をクリックして以下を貼り付けて下さい:
MESA_GL_VERSION_OVERRIDE=3.1 MESA_GLSL_VERSION_OVERRIDE=140 %command%
これによってゲームが OpenGL の最新バージョンを使用するようになります。
2K のゲームが XFS パーティションで起動できない
Civilization 5 などの 2K のゲームを XFS パーティションで起動した場合、ゲームのファイルが起動時に正しくロードされず起動できないことがあります [3]。
実行権限がないためにライブラリフォルダが追加できない
他のドライブに Steam ライブラリフォルダを別に追加している場合、次のようなエラーメッセージが表示されることがあります: "New Steam library folder must be on a filesystem mounted with execute permissions"。
/etc/fstab
でファイルシステムを正しいフラグでマウントするようにしてください。マウントパラメータのリストに exec
を追加します。user
や users
パラメータを使っている場合 noexec
もその中に含まれているので必ず exec
パラメータを記述するようにしてください。
Steam が steamapps
フォルダを見つけられないときもこのエラーは発生します。前のバージョンでは SteamApps
を使っていました。名前が小文字であることを確認してください。
Steam コントローラーが正しく認識されない
ゲームパッド#Steam コントローラーを見て下さい。
Steam が "Installing breakpad exception handler..." でフリーズする
参照: BBS#177245
Steam が以下のような出力をする場合:
Running Steam on arch rolling 64-bit STEAM_RUNTIME is enabled automatically Installing breakpad exception handler for appid(steam)/version(0_client)
lib32-nvidia-*
パッケージが一致していないことが原因です。
Bumblebee を使用している場合に 'GLBCXX_3.X.XX' not found
Steam パッケージの libstdc++.so.6
が古いことが原因です。ライブラリの問題を解決する方法は #Steam ランタイムの問題 を参照してください。GitHub の issue 3773 も参照。
メモリダンプによってメモリが食い潰されるのを防ぐ
Steam はクラッシュすると、毎回 /tmp/dumps/
にメモリダンプを書き出します。Steam がクラッシュループにはまったり、頻繁にクラッシュしてしまうと、ダンプファイルの容量は莫大に増えていきます。Arch では /tmp
は tmpfs でマウントされるため、メモリやスワップファイルが不必要に消費されることになります。/tmp/dumps
から /dev/null
にシンボリックリンクを作成したり、パーミッションを変更することでメモリの浪費を防ぐことが可能です。それによって Steam はダンプファイルを書き込めなくなります。また、Steam によって Valve のサーバーにダンプがアップロードされることもなくなります。
# ln -s /dev/null /tmp/dumps
または:
# mkdir /tmp/dumps # chmod 600 /tmp/dumps
ゲームを起動する際にスタンドアロンのコンポジタを終了する
%command%
スイッチを利用することで、ゲームや環境によってはラグやティアリングの原因となるスタンドアロンのコンポジタ (Xcompmgr や Compton) を終了することができ、ゲームを終えた後に再起動できます。ゲームの起動オプションに以下を加えて下さい:
killall picom && %command%; picom -b &
上のコマンドの picom
はあなたが使っているコンポジタに置き換えてください。もちろん、オプションを %command%
や picom
に加えることもできます。
Steam は %command%
の後にプロセスは実行し Steam の状態はゲーム中になります。この例では、nohup
でコンポジタを実行するので Steam には付着されず (Steam を閉じても実行し続けます)、アンパサンドのあるコンポジタが実行されてからコマンドの行が終了して Steam の状態が戻ります。
Arch Linux のホストから Arch Linux のゲストにホームストリーミングが機能しない
lib32-libcanberra パッケージをインストールすることで解決します。
パッケージをインストールすると、ホームストリーミングでゲームを起動したときに Steam がクラッシュしなくなります。
ダウンロード速度が非常に遅い
クライアント経由での Steam のアプリ (ゲームやソフトウェア) のダウンロード速度が遅い場合、dnsmasq などの DNS キャッシュプログラムをインストールすることで解決することがあります [4]。
DRI3 を使用している場合に Symbol lookup error
Steam が以下のようなエラーを出力して終了してしまう場合:
symbol lookup error: /usr/lib/libxcb-dri3.so.0: undefined symbol: xcb_send_request_with_fds
Xorg の設定ファイルで DRI3 を無効化するか LIBGL_DRI3_DISABLE=1
を付けて Steam を起動することで解決します:
$ LIBGL_DRI3_DISABLE=1 steam
ハードウェアデコードが使えない
ホームストリーミングのハードウェアデコードは vaapi
を使用します。詳しくはハードウェアビデオアクセラレーションを参照してください。必ず lib32
バージョンのライブラリもインストールしてください。
音声ストリームを別のデバイスに移動できない
pulseaudio を使っていて別の sink に音声ストリームを移動しようとした場合、ストリームを移動できないことがあります。
新しいバージョンの OpenAL ではデフォルトで pulse ストリームの移動ができないようになっているためです。以下の内容で ~/.alsoftrc
を作成してください:
[pulse] allow-moves=true