Steam/トラブルシューティング

提供: ArchWiki
2023年12月27日 (水) 14:35時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎Valve の Source エンジンベースのゲームが低 FPS でパフォーマンスが非常に悪い: サブセクション化)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

メインの記事は Steam を見てください。

ヒント: Steam のランチャースクリプトは Steam の標準出力や標準エラーを /tmp/dumps/USER_stdout.txt にリダイレクトします。そのため、出力を確認するのにターミナルエミュレータから Steam を起動する必要はありません。
ノート: ここにまとめられているものに加えて、Valve のバグトラッカーや GitHub にバグ・フィックス・エラーが報告されています。

目次

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.
ノート: ファイアウォールが正しく設定されていないせいで Steam がサーバーに接続できない可能性もあります [1]。Steam API がロードされないとほとんどのゲームはクラッシュします。

上流の 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.solibudev.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-libgudevlib32-libusb がインストールされている環境で必要です。

また、libudev.so.1 のロードの優先順位を変更することでも解決します (同じ issue のコメント を参照):

$ LD_PRELOAD=/usr/lib32/libudev.so.1 STEAM_RUNTIME=0 steam

音声が鳴らなかったり 756 Segmentation fault が発生する

pulseaudiopulseaudio-alsa をインストールしてみてください。x86_64 環境なら lib32-libpulselib32-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 が Arial フォントを見つけられないとき、fontconfig は Helvetica ビットマップフォントにフォールバックしようとします。Steam は Helvetica などのビットマップフォントを正しく表示できないため、Arial や Arial Bold フォントをインストールしなくても、問題のフォントを削除したりビットマップフォントを無効化することで問題が解決することがあります。Arial の代わりに使われているフォントは次のコマンドで確認できます: $ fc-match -v Arial

一部のゲームは他のフォントを必要とします。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 を追加します。userusers パラメータを使っている場合 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% スイッチを利用することで、ゲームや環境によってはラグやティアリングの原因となるスタンドアロンのコンポジタ (XcompmgrPicom) を終了することができ、ゲームを終えた後に再起動できます。ゲームの起動オプションに以下を加えて下さい:

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

他の問題

Valve の Source エンジンベースのゲームが低 FPS でパフォーマンスが非常に悪い

通常、この問題は Counter-Strike Source のようなゲームをカーネル 5.19 及びそれ以降で GNU/Linux 上で実行すると発生します。FPS は 30 ほどになり、パフォーマンスはプレイ不可能なほど悪くなります。[5][6]

回避策はカーネルパラメータ split_lock_detect=off を追加することです。