GNU/Linux >> Linux の 問題 >  >> Linux

Steam ゲームはサンドボックス化されていますか?

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_joysticksjoin 、および 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/

頑張ってください!


Linux
  1. ソフトウェアセンターで、一部のソフトウェアが見つかりませんか?

  2. Ubuntu から Steam を完全にアンインストールする方法は次のとおりです

  3. Steam ゲームを Win7 から Linux に転送できますか?

  1. Wine などを使って Steam ゲームを Ubuntu で実行するにはどうすればよいですか?

  2. Steam から Linux コンピューターに Windows ゲームをダウンロードする方法は?

  3. ゲームディレクトリ?

  1. Linuxでプレイする私のお気に入りのカジュアルゲーム

  2. Linuxでビデオゲームをプレイする3つの方法

  3. SLSKでSteamforLinuxゲームのセーブデータをバックアップする