Steam verwendet keine Sandboxen. Beispielsweise speichern Steam-Spiele unter Windows ihre Daten normalerweise in Eigene Dateien, Appdata, ihrem eigenen Installationsordner oder dem Steam Cloud-Ordner von Steam (der mit dem Online-Speicherdienst für Ihre Spielstände, Konfigurationen und andere Benutzerdaten synchronisiert wird). Einige installieren sogar andere Programme, wie die Bibliothek einer Multiplayer-Komponente (z. B.:Games for Windows - LIVE).
Valve hat jedoch einige Einschränkungen eingeführt, um unerwünschtes Verhalten zu verhindern, wie z. B. ein Spiel, das den Spielemarktplatz eines Herausgebers ohne Nachfrage installiert. Das einzige, was dem am nächsten kommt, ist Ubisofts uPlay, das Ubisoft zum Aktualisieren seiner Spiele verwenden wollte. Anstatt den vollständigen Client zu liefern, wird jedes Spiel mit einer Miniversion geliefert, der der Marktplatz fehlt und die nur gestartet werden kann, wenn Sie das zugehörige Spiel starten .
Spiele auf Steam sind größtenteils die gleichen wie ihre Gegenstücke im Einzelhandel, nur geringfügig modifiziert, um Steams Authentifizierungs-DRM zu verwenden, und über die Server von Steam herunterladbar gemacht.
Steam bietet im Gegenzug zusätzliche Dienste wie automatische Updates, Cloud-Synchronisation von Spielbenutzerdaten, Erfolgen, Bestenlisten und anderen personalisierten Daten (sehen Sie sich zum Beispiel die Team Fortress 2-Statistiken eines Benutzers an) und mehr.
Steam schützt Ihr System nicht vor nicht vertrauenswürdigen Spielen oder vor sich selbst.
Vielleicht interessieren Sie sich für Stéphane Grabers Artikel über die Verwendung von LXC, um dies zu tun, und das steam-lxc-Projekt, das er zu diesem Zweck erstellt hat.
Aktualisierung September 2014:
Endlich bin ich dazu gekommen, das selbst einzurichten. Die obigen Links sind etwas veraltet, aber Stéphane hat eine neuere Reihe von Artikeln zu LXC 1.0 gepostet, die sehr hilfreich waren. Zwischen diesen und ein bisschen Experimentieren habe ich Steam in einem unprivilegierten Container zum Laufen gebracht, und es funktioniert ziemlich gut.
Warnung: Selbst wenn Sie Steam (und seine Spiele) in einem Container ausführen, kann es normalerweise immer noch über das X-Protokoll auf Ihren Bildschirm, Ihre Maus und Ihre Tastatur zugreifen. Es gibt einige X-Erweiterungen, um dieses Problem zu mindern, aber ich habe noch nicht versucht, Steam als nicht vertrauenswürdigen X-Client auszuführen. Eine einfache Möglichkeit, diese Gefährdung zu begrenzen, besteht darin, ein separates Linux-Benutzerkonto für Ihren Steam-Container zu erstellen, die Funktion „Benutzer wechseln“ Ihrer Desktop-Umgebung zu verwenden, um sich als dieser Benutzer zum Spielen anzumelden, und zwischen dieser Desktop-Sitzung und Ihrer normalen Desktop-Sitzung zu wechseln wie benötigt. Da dieser Ansatz eine separate X-Server-Sitzung für Steam verwendet, sollte das X-Protokoll-Sniffing nicht möglich sein, obwohl die GPU und ihre Treiber möglicherweise immer noch über X-Server hinweg ausgenutzt werden können.
Meine Befehlszeile zum Erstellen des Containers:
lxc-create -n steambox -t download -- -d ubuntu -r trusty -a amd64
Ich habe meine Container-Konfigurationsdatei so bearbeitet, dass sie in etwa so aussieht:
# 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
Dies soll Ihnen nur den Einstieg erleichtern. Sie müssen Ihr Host-System noch wie in den Artikeln beschrieben einrichten und wahrscheinlich neu starten, bevor es funktioniert. Bitten Sie mich nicht, Fehler in Ihrem System zu beheben.
Ich verwende Ubuntu mit einer nVidia-Karte. Unterschiedliche Distributionen und Grafikkarten erfordern wahrscheinlich einige unterschiedliche Pfade, Gerätedateinamen und Gerätenummern.
Beachten Sie, dass ich lxc.cgroup.devices.deny = a
nicht eingestellt habe aber der Container ist noch nicht so verschlossen, wie er sein könnte. (Ich werde das ändern, sobald ich mit dem Experimentieren fertig bin.)
Ich musste dasselbe nVidia-Treiberpaket im Container installieren, das ich auf dem Host habe. (Sogar eine geringfügige Nichtübereinstimmung der Versionsnummer verursachte Fehler, als Steam versuchte, den Treiber zu verwenden.)
Ich habe für meinen Container bewusst die amd64-Architektur und die Ubuntu Trusty-Version verwendet, obwohl Valve nur i386 und Precise unterstützt. Ich habe dies getan, weil ich möchte, dass Valves Spyware mich zu denen zählt, die ein modernes Betriebssystem verwenden, in der Hoffnung, dass sie es früher unterstützen werden.
Sobald ich Steam im Container hatte, richtete ich ein Launcher-Skript auf meinem Hostsystem ein. Es heißt steam
und wohnt in meiner PATH
, also funktionieren Steam-Befehlszeilen ziemlich genau so, als ob Steam normal installiert wäre. Hier ist das Skript:
#!/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
Die enum_joysticks
, join
, und SDL_JOYSTICK_DEVICE=
Teile sind nur dazu da, einen Steam-Fehler zu umgehen, der verhindert, dass der Big Picture-Modus Gamecontroller auf einem Ubuntu Trusty-System erkennt. Sie könnten diese Teile wahrscheinlich aus dem Skript entfernen, wenn Ihr Container Ubuntu Precise ausführt oder Sie den Big Picture-Modus nicht verwenden.
Mit diesem Skript in meinem PATH
installiert , kann ich die .desktop-Datei jedes Spiels aus meinem Container auf mein Hostsystem kopieren, damit das Spiel in meinem Anwendungsmenü angezeigt wird. (Normalerweise kopiere ich auch das Symbol oder bearbeite die .desktop-Datei, um ein Symbol zu benennen, das auf meinem Host installiert ist.)
cp /home/myusername/.local/share/lxc/steambox/rootfs/home/ubuntu/.local/share/applications/thegame.dekstop /home/myusername/.local/share/applications/
Viel Glück!