Steam tidak menggunakan kotak pasir. Misalnya, di Windows, game Steam biasanya menyimpan datanya di My Documents, Appdata, folder instalasinya sendiri, atau folder Steam Cloud Steam (yang disinkronkan kembali ke layanan penyimpanan online untuk penyimpanan, konfigurasi, dan data pengguna lainnya). Beberapa bahkan memasang program lain, seperti pustaka komponen multipemain (mis.:Game untuk Windows - LANGSUNG).
Valve, bagaimanapun, memberlakukan beberapa batasan untuk mencegah perilaku yang tidak diinginkan, seperti game memasang pasar game penerbit tanpa bertanya. Satu-satunya hal yang paling dekat untuk dilakukan adalah uPlay Ubisoft, yang ingin digunakan Ubisoft untuk memperbarui game mereka, jadi alih-alih mengirimkan klien lengkap, setiap game hadir dengan versi mini yang tidak memiliki pasar dan hanya dapat dimulai saat Anda memulai game terkaitnya. .
Game di Steam sebagian besar sama dengan rekan ritelnya, hanya sedikit dimodifikasi untuk menggunakan DRM autentikasi Steam dan dapat diunduh melalui server Steam.
Steam menawarkan layanan tambahan sebagai gantinya, seperti pembaruan otomatis, sinkronisasi cloud dari data pengguna game, pencapaian, papan peringkat, dan data pribadi lainnya (lihat statistik Team Fortress 2 pengguna sebagai contoh) dan banyak lagi.
Steam tidak melindungi sistem Anda dari game yang tidak tepercaya, atau dari dirinya sendiri.
Anda mungkin tertarik dengan artikel Stéphane Graber tentang penggunaan LXC untuk melakukan ini, dan proyek steam-lxc yang dia buat untuk tujuan itu.
Pembaruan September 2014:
Saya akhirnya berhasil mengatur ini sendiri. Tautan di atas sedikit kedaluwarsa, tetapi Stéphane memposting serangkaian artikel terbaru di LXC 1.0 yang sangat membantu. Antara itu dan sedikit percobaan, saya membuat Steam bekerja di wadah yang tidak terjangkau, dan itu bekerja dengan cukup baik.
Peringatan: Bahkan jika Anda menjalankan Steam (dan gimnya) dalam wadah, biasanya Steam masih dapat mengakses layar, mouse, dan keyboard Anda melalui protokol X. Ada beberapa ekstensi X untuk mengatasi masalah ini, tetapi saya belum mencoba menjalankan Steam sebagai klien X yang tidak dipercaya. Salah satu cara sederhana untuk membatasi eksposur ini adalah dengan membuat akun pengguna linux terpisah untuk wadah Steam Anda, gunakan fitur "ganti pengguna" lingkungan desktop Anda untuk masuk sebagai pengguna untuk bermain game, dan beralih antara sesi desktop itu dan sesi desktop normal Anda sesuai kebutuhan. Karena pendekatan ini menggunakan sesi server X terpisah untuk Steam, pengendusan protokol X seharusnya tidak dapat dilakukan, meskipun GPU dan drivernya mungkin masih dapat dieksploitasi di seluruh server X.
Baris perintah saya untuk membuat wadah:
lxc-create -n steambox -t download -- -d ubuntu -r trusty -a amd64
Saya mengedit file konfigurasi kontainer agar terlihat seperti ini:
# 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
Ini hanya dimaksudkan untuk membantu Anda memulai. Anda masih harus mengatur sistem host Anda seperti yang dijelaskan dalam artikel, dan mungkin mem-boot ulangnya, sebelum berfungsi. Tolong jangan minta saya untuk memecahkan masalah sistem Anda.
Saya menjalankan Ubuntu dengan kartu nVidia. Distribusi dan kartu video yang berbeda mungkin memerlukan beberapa jalur, nama file perangkat, dan nomor perangkat yang berbeda.
Perhatikan bahwa saya belum menyetel lxc.cgroup.devices.deny = a
belum, jadi wadahnya tidak terkunci seperti seharusnya. (Saya akan mengubahnya setelah saya selesai bereksperimen.)
Saya harus menginstal paket driver nVidia yang sama di wadah yang saya miliki di host. (Bahkan ketidakcocokan nomor versi minor menyebabkan kesalahan saat Steam mencoba menggunakan driver.)
Saya sengaja menggunakan arsitektur amd64 dan rilis Ubuntu Trusty untuk wadah saya, meskipun Valve hanya mendukung i386 dan Precise. Saya melakukan ini karena saya ingin spyware Valve menghitung saya di antara mereka yang menggunakan OS modern, dengan harapan mereka akan mulai mendukungnya lebih cepat.
Setelah Steam bekerja di wadah, saya menyiapkan skrip peluncur di sistem host saya. Namanya steam
dan tinggal di PATH
saya , jadi baris perintah steam bekerja hampir sama seperti jika Steam diinstal secara normal. Berikut skripnya:
#!/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
, dan SDL_JOYSTICK_DEVICE=
bagian hanya ada untuk mengatasi bug Steam yang mencegah Mode Gambar Besar mendeteksi pengontrol game pada sistem Ubuntu Trusty. Anda mungkin dapat menghapus bagian tersebut dari skrip jika penampung Anda menjalankan Ubuntu Precise atau Anda tidak menggunakan Mode Gambar Besar.
Dengan skrip yang terpasang di PATH
saya , saya dapat menyalin file .desktop setiap game dari wadah saya ke sistem host saya untuk membuat game tersebut muncul di menu aplikasi saya. (Saya biasanya juga menyalin ikonnya, atau mengedit file .desktop untuk menamai ikon yang dipasang di host saya.)
cp /home/myusername/.local/share/lxc/steambox/rootfs/home/ubuntu/.local/share/applications/thegame.dekstop /home/myusername/.local/share/applications/
Semoga berhasil!