Steam はサンドボックスを使用しません。たとえば、Windows では、Steam ゲームは通常、マイ ドキュメント、Appdata、独自のインストール フォルダー、または Steam の Steam クラウド フォルダー (保存、構成、およびその他のユーザー データのオンライン ストレージ サービスに同期されます) にデータを保存します。マルチプレイヤー コンポーネントのライブラリなど、他のプログラムをインストールするものもあります (例:Games for Windows - LIVE)。
ただし、Valve は、ゲームがパブリッシャーのゲーム マーケットプレースを要求せずにインストールするなど、望ましくない動作を防ぐためにいくつかの制限を設けています。これに最も近いのは、Ubisoft がゲームの更新に使用したいと考えていた Ubisoft の uPlay だけです。そのため、各ゲームには、完全なクライアントを出荷する代わりに、マーケットプレイスがなく、関連するゲームを開始したときにのみ開始できるミニ バージョンが付属しています。 .
Steam 上のゲームは、小売版とほとんど同じですが、Steam の認証 DRM を使用するようにわずかに変更され、Steam のサーバーからダウンロードできるようになっています。
Steam は見返りに、自動更新、ゲーム ユーザー データのクラウド同期、実績、リーダーボード、その他の個人データ (ユーザーの Team Fortress 2 の統計を例に見てください) などの追加サービスを提供します。
Steam は、信頼できないゲームやそれ自体からシステムを保護しません。
これを行うための LXC の使用に関する Stéphane Graber の記事と、その目的のために彼が作成した steam-lxc プロジェクトに興味があるかもしれません。
2014 年 9 月の更新:
私は最終的にこれを自分で設定するようになりました。上記のリンクは少し古くなっていますが、Stéphane が LXC 1.0 に関する最新の一連の記事を投稿しており、非常に役に立ちました。それらと少しの実験の間に、非特権コンテナで Steam を動作させましたが、かなりうまく動作しました。
警告: Steam (およびそのゲーム) をコンテナーで実行しても、通常は X プロトコルを介して画面、マウス、およびキーボードにアクセスできます。この問題を軽減するための X 拡張機能がいくつか存在しますが、Steam を信頼できない X クライアントとして実行することはまだ試していません。この露出を制限する簡単な方法の 1 つは、Steam コンテナー用に別の Linux ユーザー アカウントを作成し、デスクトップ環境の「ユーザーの切り替え」機能を使用して、ゲームをプレイするためにそのユーザーとしてログインし、そのデスクトップ セッションと通常のデスクトップ セッションを切り替えることです。必要に応じて。このアプローチは Steam 用に別の X サーバー セッションを使用するため、X プロトコル スニッフィングは可能ではありませんが、GPU とそのドライバーは X サーバー間で依然として悪用される可能性があります。
コンテナーを作成するためのコマンド ライン:
lxc-create -n steambox -t download -- -d ubuntu -r trusty -a amd64
コンテナー構成ファイルを次のように編集しました:
# Distribution configuration
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.include = /usr/share/lxc/config/ubuntu.userns.conf
lxc.arch = x86_64
# Container specific configuration
lxc.id_map = u 0 100000 1000
lxc.id_map = g 0 100000 1000
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 101001 64535
lxc.id_map = g 1001 101001 64535
lxc.rootfs = /home/myusername/.local/share/lxc/steambox/rootfs
lxc.utsname = steambox
# Network
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.hwaddr = 00:16:3e:77:88:99
# Video
lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
#lxc.cgroup.devices.allow = c 195:* rwm
# video0 doesn't exist on my system.
#lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file
# Sound
lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir
# Game Controllers
# Steam uses SDL for controller support; SDL uses udev and /dev/input/*
lxc.mount.entry = /dev/input dev/input none bind,optional,create=dir
#lxc.cgroup.devices.allow = c 13:* r
# uinput might be needed for gamepad support with streaming
#lxc.mount.entry = /dev/uinput dev/uinput none bind,optional,create=file
#lxc.cgroup.devices.allow = c 10:223 rwm
# for debugging
#lxc.aa_profile = unconfined
# EOF
これは、開始することのみを目的としています。記事で説明されているように、ホスト システムをセットアップする必要があります。また、機能する前に、おそらく再起動する必要があります。システムのトラブルシューティングを私に依頼しないでください。
nVidia カードを使用して Ubuntu を実行しています。ディストリビューションやビデオ カードが異なると、いくつかの異なるパス、デバイス ファイル名、およびデバイス番号が必要になる可能性があります。
lxc.cgroup.devices.deny = a
を設定していないことに注意してください それでも、コンテナは可能な限りロックダウンされていません。 (実験が終わったら変更します。)
ホストにあるコンテナーに同じ nVidia ドライバー パッケージをインストールする必要がありました。 (マイナーなバージョン番号の不一致でも、Steam がドライバーを使用しようとしたときにエラーが発生しました。)
Valve は i386 と Precise しかサポートしていませんが、意図的にコンテナーに amd64 アーキテクチャーと Ubuntu Trusty リリースを使用しました。私がこれを行ったのは、Valve のスパイウェアに、最新の OS を使用しているユーザーの中に私を数えてもらいたいからです。彼らがより早くサポートを開始することを期待しています.
コンテナー内で Steam を動作させたら、ホスト システムにランチャー スクリプトをセットアップしました。名前は steam
です 私のPATH
に住んでいます であるため、Steam コマンド ラインは、Steam が通常どおりにインストールされている場合とほとんど同じように機能します。スクリプトは次のとおりです:
#!/bin/sh
CONTAINER=steambox
RUNASUSER=ubuntu
STEAMCOMMAND=/usr/games/steam
# Execute a command in the container, with X display support
run_in_container() {
lxc-attach --clear-env -n $CONTAINER -- sudo -u $RUNASUSER -i \
env DISPLAY="$DISPLAY" "[email protected]"
}
# Find joystick devices so we can tell Steam's old SDL library to use them
# https://github.com/ValveSoftware/steam-for-linux/issues/1894#issuecomment-25295972
enum_joysticks() {
local joyprop=ID_INPUT_JOYSTICK=1
for f in /dev/input/*; do
if [ ! -c "$f" ]; then
continue
elif udevadm info --query=property --name="$f" | grep --quiet $joyprop; then
echo "$f"
fi
done
}
# Use the first arg as a separator to join the remaining args
join() {
local IFS="$1"
shift
echo "$*"
}
# Use an environment variable to help Steam's old SDL version find gamepads
run_steam_with_joysticks() {
run_in_container SDL_JOYSTICK_DEVICE="$(join : $(enum_joysticks))" \
$STEAMCOMMAND "[email protected]"
}
STARTED=false
if ! lxc-wait -n $CONTAINER -s RUNNING -t 0; then
lxc-start -n $CONTAINER -d
lxc-wait -n $CONTAINER -s RUNNING
STARTED=true
fi
run_in_container xauth add $(xauth list | sed 's/^.*\///')
run_steam_with_joysticks "[email protected]"
if [ "$STARTED" = "true" ]; then
lxc-stop -n $CONTAINER -t 10
fi
enum_joysticks
、 join
、および SDL_JOYSTICK_DEVICE=
これらのパーツは、Ubuntu Trusty システムで Big Picture Mode がゲーム コントローラーを検出できないという Steam のバグを回避するためだけに存在します。コンテナーが Ubuntu Precise を実行している場合、または Big Picture Mode を使用していない場合は、おそらくスクリプトからこれらの部分を削除できます。
そのスクリプトを PATH
にインストールすると 、各ゲームの .desktop ファイルをコンテナーからホスト システムにコピーして、アプリケーション メニューにゲームを表示することができます。 (通常、アイコンもコピーするか、.desktop ファイルを編集して、ホストにインストールされているアイコンに名前を付けます。)
cp /home/myusername/.local/share/lxc/steambox/rootfs/home/ubuntu/.local/share/applications/thegame.dekstop /home/myusername/.local/share/applications/
頑張ってください!