Steam nepoužívá sandboxy. Například ve Windows hry Steam obvykle ukládají svá data do složky Moje dokumenty, Appdata, vlastní instalační složky nebo složky Steam Cloud (která se synchronizuje zpět se službou online úložiště pro vaše uložení, konfigurace a další uživatelská data). Někteří dokonce instalují další programy, jako je knihovna komponent pro více hráčů (např.:Games for Windows – LIVE).
Společnost Valve však zavedla určitá omezení, aby zabránila nežádoucímu chování, jako je například hra, která bez ptaní instaluje tržiště her vydavatele. Jediná věc, která je k tomu nejblíže, je uPlay od Ubisoftu, kterou chtěl Ubisoft použít pro aktualizaci svých her, takže namísto dodání úplného klienta každá hra přichází s mini verzí, která postrádá tržiště a lze ji spustit, pouze když spustíte související hru. .
Hry na Steamu jsou většinou stejné jako jejich maloobchodní protějšky, jen mírně upravené tak, aby využívaly autentizační DRM Steam a byly ke stažení přes servery Steamu.
Steam na oplátku nabízí další služby, jako jsou automatické aktualizace, cloudová synchronizace herních uživatelských dat, úspěchy, výsledkové tabulky a další personalizovaná data (viz například statistiky uživatele Team Fortress 2) a další.
Steam nechrání váš systém před nedůvěryhodnými hrami ani před sebou samým.
Mohl by vás zajímat článek Stéphana Grabera o použití LXC k tomuto účelu a projekt steam-lxc, který pro tento účel vytvořil.
Aktualizace ze září 2014:
Konečně jsem se dostal k tomu, abych to zařídil sám. Výše uvedené odkazy jsou trochu zastaralé, ale Stéphane zveřejnil novější sadu článků o LXC 1.0, které byly velmi užitečné. Mezi tím a trochou experimentování jsem nechal Steam pracovat v neprivilegovaném kontejneru a funguje to docela dobře.
Upozornění: I když spustíte Steam (a jeho hry) v kontejneru, normálně bude mít stále přístup k obrazovce, myši a klávesnici přes protokol X. Existují některá rozšíření X pro zmírnění tohoto problému, ale ještě jsem nezkoušel spustit Steam jako nedůvěryhodný X klient. Jedním jednoduchým způsobem, jak omezit toto vystavení, je vytvořit samostatný linuxový uživatelský účet pro váš kontejner Steam, použít funkci „přepnout uživatele“ vašeho desktopového prostředí k přihlášení jako tento uživatel pro hraní her a přepínat mezi touto relací na ploše a běžnou relací na ploše. podle potřeby. Protože tento přístup používá samostatnou relaci X serveru pro Steam, nemělo by být možné sniffování protokolu X, ačkoli GPU a jeho ovladače mohou být stále zneužitelné na X serverech.
Můj příkazový řádek pro vytvoření kontejneru:
lxc-create -n steambox -t download -- -d ubuntu -r trusty -a amd64
Upravil jsem svůj konfigurační soubor kontejneru, aby vypadal asi takto:
# 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
Toto je určeno pouze k tomu, abyste mohli začít. Stále budete muset nastavit svůj hostitelský systém, jak je popsáno v článcích, a pravděpodobně jej restartovat, než bude fungovat. Prosím, nežádejte mě o řešení problémů se systémem.
Používám Ubuntu s kartou nVidia. Různé distribuce a grafické karty budou pravděpodobně vyžadovat několik různých cest, názvů souborů zařízení a čísel zařízení.
Všimněte si, že jsem nenastavil lxc.cgroup.devices.deny = a
přesto kontejner není tak zamčený, jak by mohl být. (Po dokončení experimentování to změním.)
Musel jsem nainstalovat stejný balíček ovladače nVidia do kontejneru, který mám na hostiteli. (Dokonce i malá neshoda čísla verze způsobila chyby, když se Steam pokusil použít ovladač.)
Záměrně jsem pro svůj kontejner použil architekturu amd64 a vydání Ubuntu Trusty, a to navzdory skutečnosti, že Valve podporuje pouze i386 a Precise. Udělal jsem to, protože chci, aby mě spyware od Valve započítával mezi ty, kteří používají moderní OS, v naději, že jej začnou podporovat dříve.
Jakmile jsem v kontejneru pracoval se steamem, nastavil jsem na svém hostitelském systému spouštěcí skript. Jmenuje se steam
a žije v mém PATH
, takže příkazové řádky steamu fungují v podstatě stejně, jako kdyby byl Steam nainstalován normálně. Zde je 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
enum_joysticks
, join
a SDL_JOYSTICK_DEVICE=
části jsou zde pouze proto, aby obcházely chybu Steamu, která brání režimu Big Picture Mode detekovat herní ovladače v systému Ubuntu Trusty. Tyto části byste pravděpodobně mohli ze skriptu odstranit, pokud váš kontejner používá Ubuntu Precise nebo nepoužíváte režim velkého obrazu.
S tímto skriptem nainstalovaným v mém PATH
, mohu zkopírovat soubor .desktop každé hry z mého kontejneru do svého hostitelského systému, aby se hra objevila v nabídce mých aplikací. (Obvykle zkopíruji také ikonu nebo upravím soubor .desktop tak, abych pojmenoval ikonu, která je nainstalována na mém hostiteli.)
cp /home/myusername/.local/share/lxc/steambox/rootfs/home/ubuntu/.local/share/applications/thegame.dekstop /home/myusername/.local/share/applications/
Hodně štěstí!