問題 1. なぜ私の Steam はターミナルで起動できるのに、デスクトップではできないのですか?#
そこで私は操作をして、Linux 初心者として考えました —— ログアウトして x11 に切り替えました。
実際の根本的な原因は Wayland/X11 ではなく、「デスクトップランチャーが取得する環境変数」 ≠ 「ターミナルの環境変数」です。
ターミナルで起動できるのは、bash があなたのために~/.bashrc、/etc/profile.d/ のさまざまな export を読み込んでいるからです;
アイコンをダブルクリックすると、systemd-/plasma-/gnome-session は最小限の環境しか提供しないため、Steam はライブラリを見つけられず、グラフィックカードも見つけられず、さらには PATH も見つけられず、直接 abort します。
問題 2. では、このデスクトッププログラムを Bash で起動するにはどうすればよいですか?#
操作は簡単です:.desktop を変更します。
AI の指示に従って「ターミナル環境」を全体的に dump します。
まず、起動できるターミナルで実行します:
# 現在の環境をすべてファイルにエクスポート
env | grep -E '^(PATH|LD_|GTK_|QT_|XDG_|GALLIUM|VK_|DRI|LIBGL)' > ~/.steam_env
# さらにSteam用に一行追加します
echo 'export GDK_BACKEND=x11' >> ~/.steam_env
「環境を持つ」ラッパースクリプトを作成します
mkdir -p ~/.local/bin
nano ~/.local/bin/steam-wrapper
以下の内容を追加します:
#!/bin/bash
# 先に先ほどdumpした完全な環境を読み込みます
set -a
source ~/.steam_env
set +a
# その後、本物のsteamを起動します
exec /usr/bin/steam "$@"
権限を付与します
chmod +x ~/.local/bin/steam-wrapper
デスクトップランチャーがこのスクリプトを呼び出すようにし、裸の steam ではなくします
デスクトップファイルをローカルにコピーします:
cp /usr/share/applications/steam.desktop ~/.local/share/applications/
sed -i 's|Exec=/usr/bin/steam|Exec=/home/'$USER'/.local/bin/steam-wrapper|' \
~/.local/share/applications/steam.desktop
実際に効果を確認しました~