Steam
Steam — сервис цифровой дистрибуции компьютерных игр, поддерживаемый компанией Valve. Steam предоставляет возможности технических средств защиты авторских прав (DRM), сервера подбора матчей, видеостриминг и сервисы социального взаимодействия игроков. Он обеспечивает возможности установки и автоматического обновления игр, а также различные возможности для поддержания сообществ, например списки друзей и группы, облачные сохранения, внутриигровой голосовой и текстовой чаты.
Клиент Steam не является приложением с открытым исходным кодом, а значит каждый пользователь перед использованием должен принимать Соглашение подписчика Steam, а затем — ещё и Пользовательское соглашение и Условия использования для каждой игры, которую он будет запускать через клиент Steam.
Valve Corporation сотрудничает с организациями, связанными с разработкой открытого программного обеспечения, например CodeWeavers (Wine)[1], делая всё возможное для того, чтобы игры с закрытым кодом могли запускаться в системах с открытым кодом.
Совместимость игр
С ростом популярности Steam Deck в течение нескольких лет доля способных запускаться в Linux игр Steam также растёт[2]. Разработчики игр всё больше и больше заинтересованы в поддержке Linux. «Родные» игры для Linux можно распознать по иконке SteamOS в Магазине Stream. Для игр без прямой поддержки Valve поддерживает Proton, (построенный на базе Wine), который интегрирован в клиент и предоставляет простой в использовании слой совместимости для Windows-игр в системах Linux. Те пользователи, что предпочитают свежие версии стабильным, могут попробовать активно поддерживаемый форк Proton под названием Proton-GE.
Proton является открытым проектом и поэтому может быть собран из исходных кодов, однако крайне рекомендуется использовать версии Proton, доступные в клиенте Steam[3]. Proton может быть включен для каждой отдельной игры в её свойствах во вкладке «Совместимость».
Управляемый сообществом сайт ProtonDB (подобно Wine AppDB) отслеживает совместимость игр с Steam Deck / Proton и подобными инструментами эмуляции на основе отзывов его пользователей.
Предварительные требования
Steam provides 32-bit environment for most of supported games, so client itself requires a multilib profile on amd64. That is, during Gentoo installation, when choosing profiles the no-multilib option was not selected. This prerequisite can be ignored if installing Steam in a chroot.
The Steam browser is no longer supported on 32-bit Linux distributions, and is disabled when viewing the Store, Community, or User Profile tabs in the Steam client[4], so only available architecture is amd64.
Ядро
Steam expects that /dev/shm, which requires kernel tmpfs support, is mounted prior to being started. /dev/shm should be mounted automatically by OpenRC and systemd during boot, but can also be mounted explicitly via /etc/fstab.
# To limit the size add e.g. size=1G to opts (recommended at least 2G, default is 50%)
# Please note that lower setting may randomly crash Steam and/or games.
#<fs> <mountpoint> <type> <opts> <dump/pass>
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
The following kernel option has to be set, otherwise Steam may fail to start with the error message: "The futex facility returned an unexpected error code."
General architecture-dependent options --->
[*] Provide system calls for 32-bit time_t Search for <code>CONFIG_COMPAT_32BIT_TIME</code> to find this item.
Enable user level driver support if controller support is desired.
Device Drivers ---> Input device support ---> -*- Generic input layer (needed for keyboard, mouse, ...) Search for <code>CONFIG_INPUT</code> to find this item. [*] Miscellaneous devices Search for <code>CONFIG_INPUT_MISC</code> to find this item. ---> <*> User level driver support Search for <code>CONFIG_INPUT_UINPUT</code> to find this item.
Enable user namespace support in order to support launching games in Compatibility mode (i.e. with Proton):
General setup ---> [*] Namespaces support Search for <code>CONFIG_NAMESPACES</code> to find this item. ---> [*] User namespace Search for <code>CONFIG_USER_NS</code> to find this item.
Установка
The Steam installer downloads and installs the Steam client to the user's home directory. This prevents Portage from managing the Steam client updates or the software installed by it. The Steam client is solely responsible for managing software installation and updates.
The instructions throughout this page use the typical Steam installation directory ~/.local/share/Steam.
Emerge (рекомендуется)
The steam-launcher ebuild is available from the steam-overlay repository, which is Gentoo's primary repository for the Steam client and Steam-based games. The steam-overlay repository can be added manually or with repository management tools like eselect-repository.
Install app-eselect/eselect-repository and dev-vcs/git:
root #
emerge --ask --noreplace app-eselect/eselect-repository dev-vcs/git
Add the Steam repository:
root #
eselect repository enable steam-overlay
Then sync with either specifically emaint:
root #
emaint sync -r steam-overlay
или
root #
emerge --sync
Due to the Proton runtime built into Steam, 32-bit binaries of most dependencies are included within the Steam installation. Some system dependencies remain however, but Portage should prompt for them. These packages should be added to /etc/portage/package.use/steam with their abi_x86_32
USE flag enabled. Some required changes include:
x11-libs/libX11 abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libxcb abi_x86_32
x11-libs/libXdmcp abi_x86_32
virtual/opengl abi_x86_32
media-libs/mesa abi_x86_32
dev-libs/expat abi_x86_32
media-libs/libglvnd abi_x86_32
sys-libs/zlib abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libxshmfence abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libXxf86vm abi_x86_32
x11-libs/libXfixes abi_x86_32
app-arch/zstd abi_x86_32
sys-devel/llvm abi_x86_32
x11-libs/libXrandr abi_x86_32
x11-libs/libXrender abi_x86_32
dev-libs/libffi abi_x86_32
sys-libs/ncurses abi_x86_32
dev-libs/libxml2 abi_x86_32
dev-libs/icu abi_x86_32
sys-libs/gpm abi_x86_32
virtual/libelf abi_x86_32
dev-libs/elfutils abi_x86_32
app-arch/bzip2 abi_x86_32
dev-libs/nspr abi_x86_32
dev-libs/nss abi_x86_32
net-libs/libndp abi_x86_32
x11-libs/extest abi_x86_32
dev-libs/libevdev abi_x86_32
dev-libs/wayland abi_x86_32
virtual/rust abi_x86_32
dev-lang/rust-bin abi_x86_32
x11-libs/libpciaccess abi_x86_32
sys-devel/clang abi_x86_32
media-libs/fontconfig abi_x86_32
sys-libs/libudev-compat abi_x86_32
media-libs/libpulse abi_x86_32
media-libs/libsndfile abi_x86_32
net-libs/libasyncns abi_x86_32
sys-apps/dbus abi_x86_32
dev-libs/glib abi_x86_32
dev-libs/libpcre2 abi_x86_32
sys-apps/util-linux abi_x86_32
media-libs/flac abi_x86_32
media-libs/libogg abi_x86_32
media-libs/libvorbis abi_x86_32
media-libs/opus abi_x86_32
media-sound/lame abi_x86_32
media-sound/mpg123-base abi_x86_32
media-libs/freetype abi_x86_32
media-libs/libpng abi_x86_32
virtual/libintl abi_x86_32
virtual/libudev abi_x86_32
sys-apps/systemd-utils abi_x86_32
sys-libs/libcap abi_x86_32
sys-libs/pam abi_x86_32
virtual/libiconv abi_x86_32
x11-libs/xcb-util-keysyms abi_x86_32
Add the steam overlay to package.accept_keywords:
*/*::steam-overlay
games-util/game-device-udev-rules
sys-libs/libudev-compat
Now read Steam's license terms located on /var/db/repos/steam-overlay/licenses/ValveSteamLicense and if you agree with them, then add it to portage:
games-util/steam-launcher ValveSteamLicense
The overlay enables the Steam runtime by default. If you'd like to rely solely on Gentoo packages, then disable the steamruntime
USE flag. Use the esteam utility later to scan your installed native Linux games for additional Gentoo packages required by them. Note that Gentoo packages do not cover the entirety of the runtime, so a small number of games may not work.
Once the repository has been added, install the steam-launcher ebuild:
root #
emerge --ask games-util/steam-launcher
Устранение проблем
If Steam is failing to emerge due to circular dependencies with ncurses and gpm, try:
root #
USE="-gpm" emerge --ask --oneshot sys-libs/ncurses
root #
emerge --ask games-util/steam-launcher
root #
emerge --ask --oneshot sys-libs/ncurses gpm
If Steam is failing to emerge due to soft blocking by sys-apps/systemd-utils and sys-fs/eudev, try:
root #
emerge --ask --oneshot systemd-utils
Flatpak
Довольно простым, быстрым и чистым способом установки Steam (например, 32-битные зависимости не нужно собирать) является использование Flatpak-пакета com.valvesoftware.Steam
из Flathub (также понадобится установить правила udev для игровых контроллеров):
root #
USE="X" emerge --ask sys-apps/flatpak
root #
emerge --ask games-util/game-device-udev-rules
{{{1}}}
user $
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
user $
flatpak install flathub com.valvesoftware.Steam
user $
flatpak run com.valvesoftware.Steam
Steam будет обновлять себя и устанавливать свои файлы в каталог ~/.var/app/com.valvesoftware.Steam.
Manual
Installing Steam manually is not recommended as various fixes are not applied automatically[5]. Please consider installing Steam through emerge instead as described above!
Dependencies
The following dependencies may be outdated and require verification. Some of the dependencies may be bundled by the Steam runtime, in which case the system libraries will not be used.
Create the following set of required Steam dependencies:
# обязательно!
dev-libs/glib:2
dev-libs/libgcrypt
dev-libs/nspr
dev-libs/nss
gnome-base/gconf
gnome-extra/zenity
media-libs/alsa-lib
media-libs/fontconfig
media-libs/freetype:2
media-libs/libjpeg-turbo
media-libs/libogg
media-libs/libpng-compat:1.2
media-libs/libsdl
media-libs/libtheora
media-libs/libvorbis
media-libs/openal
net-misc/curl
net-print/cups
sys-apps/dbus
virtual/libusb:1
virtual/opengl
x11-libs/cairo
x11-libs/gdk-pixbuf
x11-libs/gtk+:2
x11-libs/libX11
x11-libs/libXScrnSaver
x11-libs/libXext
x11-libs/libXfixes
x11-libs/libXi
x11-libs/libXrandr
x11-libs/libXrender
x11-libs/pango
x11-libs/pixman
# необязательно
media-sound/pulseaudio
net-misc/networkmanager
x11-misc/xdg-user-dirs
And then run:
root #
emerge --ask --noreplace @steam
Do not run emerge --unmerge @steam to remove Steam as it may make the system unusable. Instead use emerge --ask --depclean @steam for this method.
USE-флаги
To enable the required USE flags for Steam dependencies under amd64, add the following file:
app-arch/bzip2 abi_x86_32
app-arch/zstd abi_x86_32
dev-db/sqlite abi_x86_32
dev-libs/atk abi_x86_32
dev-libs/expat abi_x86_32
dev-libs/fribidi abi_x86_32
dev-libs/glib abi_x86_32
dev-libs/gmp abi_x86_32
dev-libs/icu abi_x86_32
dev-libs/libcroco abi_x86_32
dev-libs/libffi abi_x86_32
dev-libs/libpcre abi_x86_32
dev-libs/libpthread-stubs abi_x86_32
dev-libs/libtasn1 abi_x86_32
dev-libs/libunistring abi_x86_32
dev-libs/libxml2 abi_x86_32
dev-libs/lzo abi_x86_32
dev-libs/nettle abi_x86_32
dev-libs/nspr abi_x86_32
dev-libs/nss abi_x86_32
dev-libs/openssl abi_x86_32
dev-libs/wayland abi_x86_32
dev-util/pkgconfig abi_x86_32
dev-util/wayland-scanner abi_x86_32
gnome-base/librsvg abi_x86_32
media-gfx/graphite2 abi_x86_32
media-libs/fontconfig abi_x86_32
media-libs/freetype abi_x86_32
media-libs/harfbuzz abi_x86_32
media-libs/libpng abi_x86_32
media-libs/mesa abi_x86_32
media-libs/openal abi_x86_32
media-libs/tiff abi_x86_32
net-dns/libidn2 abi_x86_32
net-libs/gnutls abi_x86_32
net-misc/curl abi_x86_32
net-nds/openldap abi_x86_32
net-print/cups abi_x86_32
sys-apps/attr abi_x86_32
sys-apps/dbus abi_x86_32
sys-apps/util-linux abi_x86_32
sys-devel/gettext abi_x86_32
sys-devel/llvm abi_x86_32
sys-fs/udev abi_x86_32
sys-libs/binutils-libs abi_x86_32
sys-libs/gpm abi_x86_32
sys-libs/ncurses abi_x86_32
sys-libs/readline abi_x86_32
sys-libs/zlib abi_x86_32
virtual/libffi abi_x86_32
virtual/libiconv abi_x86_32
virtual/libudev abi_x86_32
virtual/opengl abi_x86_32
virtual/pkgconfig abi_x86_32
x11-libs/cairo abi_x86_32
x11-libs/gdk-pixbuf abi_x86_32
x11-libs/gtk+:2 abi_x86_32
x11-libs/libX11 abi_x86_32
x11-libs/libXScrnSaver abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libXcomposite abi_x86_32
x11-libs/libXcursor abi_x86_32
x11-libs/libXdamage abi_x86_32
x11-libs/libXdmcp abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libXfixes abi_x86_32
x11-libs/libXft abi_x86_32
x11-libs/libXi abi_x86_32
x11-libs/libXinerama abi_x86_32
x11-libs/libXrandr abi_x86_32
x11-libs/libXrender abi_x86_32
x11-libs/libXxf86vm abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libpciaccess abi_x86_32
x11-libs/libxcb abi_x86_32
x11-libs/libxshmfence abi_x86_32
x11-libs/pango abi_x86_32
x11-libs/pixman abi_x86_32
x11-proto/damageproto abi_x86_32
x11-proto/dri2proto abi_x86_32
x11-proto/dri3proto abi_x86_32
x11-proto/fixesproto abi_x86_32
x11-proto/glproto abi_x86_32
x11-proto/inputproto abi_x86_32
x11-proto/kbproto abi_x86_32
x11-proto/presentproto abi_x86_32
x11-proto/xcb-proto abi_x86_32
x11-proto/xextproto abi_x86_32
x11-proto/xf86bigfontproto abi_x86_32
x11-proto/xf86driproto abi_x86_32
x11-proto/xf86vidmodeproto abi_x86_32
x11-proto/xproto abi_x86_32
# If using proprietary Nvidia drivers, include these as well
media-libs/libglvnd abi_x86_32
x11-drivers/nvidia-drivers abi_x86_32
Update the system:
root #
emerge --ask --changed-use --deep @world
Users may receive an error citing circular dependencies due to gpm and ncurses. If this is the case, add
-gpm
to sys-libs/ncurses and update the @world set once more.Default installer
Fetch and extract the Steam installer:
user $
wget https://repo.steampowered.com/steam/pool/steam/s/steam/steam_1.0.0.78.tar.gz
user $
tar -xvzpf steam_1.0.0.*.tar.gz
Run the Steam installer:
user $
cd steam-launcher
user $
./steam
After invoking ./steam a libGL error may appear. See Steam/Client troubleshooting for the resolution.
If the Steam client crashes, try running:
user $
./steam -textclient
Running Steam with the -textclient
option may be necessary each time the client wants to update.
Install the above Steam installer script:
root #
cp steam /usr/local/bin
Steam can be started with:
user $
steam
Alternative installer
The following installation method is almost identical to the Default installer installation method, except that an alternative Steam installer script is used.
Fetch the Steam installer and extract the required files:
user $
wget https://repo.steampowered.com/steam/pool/steam/s/steam/steam_1.0.0.78.tar.gz
user $
tar -xvzf steam_1.0.0.*.tar.gz steam-launcher/bootstraplinux_ubuntu12_32.tar.xz
user $
tar -xvzf steam_1.0.0.*.tar.gz steam-launcher/steam.desktop
Fetch and run Julian Ospald's (hasufell) Steam installer script:
user $
cd steam-launcher
user $
wget https://gist.githubusercontent.com/hasufell/d02a93eccbe35be7a803/raw/987ea287dc81a60d2eb5fa1bb188eae0a5f1049f/steam
user $
chmod +x steam
user $
./steam
If the installer script creates broken symbolic links when run with Dash, run the installer script with Bash instead:
user $
bash ./steam
Изолированная среда
Steam can be run in a 64-bit multilib chroot on amd64. The major advantage of a chroot is that Steam and its dependencies will be isolated from the root filesystem. The Steam browser is no longer supported on 32-bit Linux distributions, so only 64-bit chroot environment is available.[4]
Create the chroot directory:
root #
mkdir /usr/local/steam64
root #
cd /usr/local/steam64
Fetch and extract the stage3 tarball.
root #
wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-20231022T164658Z.tar.xz
root #
tar xpvf stage3*.tar.xz --xattrs-include='*.*' --numeric-owner
Copy DNS information and ensure it's world-readable:
root #
cp -L /etc/resolv.conf etc
root #
chmod a+r etc/resolv.conf
Create the ebuild repository directory:
root #
mkdir var/db/repos/gentoo
Mount the necessary filesystems:
root #
mount -t proc /proc proc
root #
mount -R /sys sys
root #
mount -R /dev dev
root #
mount -R /run run
root #
mount -R /var/db/repos/gentoo var/db/repos/gentoo
Chroot with linux64 and update the environment. The use of linux64 is not required on amd64, and it is only used here for consistency.
root #
linux64 chroot .
root #
env-update && source /etc/profile
root #
export PS1="(chroot) $PS1"
The chroot should now be updated and configured accordingly. It is recommended to at least configure the timezone and enable sound support by installing media-libs/alsa-lib.
Now create the Steam user with the same UID (usually 1000) as the local user. The local UID can be determined by running id -u as the local user, outside of the chroot. Using the same UID will simplify the process of granting access to the X server from inside the chroot.
(chroot) root #
useradd -u <UID> -m -G audio,video steam
Install Steam from one of the above installation methods. When complete, exit the chroot:
(chroot) root #
exit
Unmount the chroot directories:
root #
umount -l proc
root #
umount -l sys
root #
umount -l dev
root #
umount -l run
root #
umount -l var/db/repos/gentoo
Install xhost to allow access to the X server from inside the chroot:
root #
emerge --ask --noreplace x11-apps/xhost
Logout, and then login. This allows the display manager or xinit to process /etc/X11/xinit/xinitrc.d/00-xhost and automatically grant all local connections to the X server from the local UID. This will not work if the Steam UID is different to that of the local UID. Either set the same UID when creating the Steam user, as was mentioned earlier, or if the Steam user already exists change the Steam UID with usermod -u <UID> steam to match the local UID.
Alternatively, run xhost +local: to allow all local connections to the X server from any local UID. This is a potential security risk as any user could access the X server without authentication. To revoke access run xhost -local:
Next, create the following wrapper script to setup the chroot, substitute to the Steam user, and start Steam. The wrapper script has two user defined variables: chroot_bits and chroot_dir. The chroot_bits variable must be set to 64
for a 64-bit chroot. The chroot_dir variable should be set to the location of the chroot directory.
#!/bin/sh
# steam chroot bits
chroot_bits="64"
# steam chroot directory
chroot_dir="/usr/local/steam64/"
# check if chroot bits is valid
if [ "${chroot_bits}" = "32" ] ; then
chroot_arch="linux32"
elif [ "${chroot_bits}" = "64" ] ; then
chroot_arch="linux64"
else
printf "Invalid chroot bits value '%s'. Permitted values are '32' and '64'.\n" "${chroot_bits}"
exit 1
fi
# check if the chroot directory exists
if [ ! -d "${chroot_dir}" ] ; then
printf "The chroot directory '%s' does not exist!\n" "${chroot_dir}"
exit 1
fi
# mount the chroot directories
mount -v -t proc /proc "${chroot_dir}proc"
mount -vR /sys "${chroot_dir}sys"
mount --make-rslave "${chroot_dir}sys"
mount -vR /dev "${chroot_dir}dev"
mount --make-rslave "${chroot_dir}dev"
mount -vR /run "${chroot_dir}run"
mount --make-rslave "${chroot_dir}run"
mount -vR /var/db/repos/gentoo "${chroot_dir}var/db/repos/gentoo"
# the --make-rslave flags are needed for systemd support
# chroot, substitute user, and start steam
"${chroot_arch}" chroot "${chroot_dir}" su -c 'steam' steam
# unmount the chroot directories when steam exits
umount -vl "${chroot_dir}proc"
umount -vl "${chroot_dir}sys"
umount -vl "${chroot_dir}dev"
umount -vl "${chroot_dir}run"
umount -vl "${chroot_dir}var/db/repos/gentoo"
The wrapper script bind mounts /run so Steam can connect to D-Bus if it is running on the host. Steam will work even if D-Bus is not installed, but there will be non-fatal errors relating to Steam's bundled dev-libs/libappindicator. Steam also needs D-Bus if the Remember my password option is selected at the Steam login dialog. Refer to client troubleshooting for further details.
Make the wrapper script executable:
root #
chmod +x /usr/local/bin/steam-chroot
Run the wrapper script as root to start Steam:
root #
steam-chroot
Easy Anti Cheat Support
Due to DT_HASH not being enabled by default since glibc 2.36 then the follow needs to be applied to allow EAC games to work
sys-libs/glibc hash-sysv-compat
root #
emerge -1 sys-libs/glibc
Удаление
Removing a manual installation
Remove the Steam dependencies:
root #
emerge --deselect @steam
root #
emerge --ask --depclean
Remove the Steam executable and Portage configuration:
root #
rm /usr/bin/steam
root #
rm /etc/portage/sets/steam
root #
rm -rf /etc/portage/package.*/steam
Remove the Steam directory from the user accountː
user $
rm -rf ~/.local/share/Steam
Removing an external repository installation
Remove the steam-launcher ebuild:
root #
emerge --ask --depclean --verbose games-util/steam-launcher
Устранение проблем
The most common game related issues are solved by enabling the stack-realign
USE flag on the sys-libs/glibc package and re-emerge the @world set. It is a good idea to perform this change as the first troubleshooting action item.
Some Steam and games specific troubleshooting available on Steam/Client troubleshooting and Steam/Games troubleshooting subpages.
If you want to play games through proton, don't forget to add the vulkan
USE flag on the media-libs/mesa package.
The best place to ask for help is the Steam thread on the Gentoo Forums. If a solution to an issue is confirmed by others, add it to this page or the relevant troubleshooting subpage. Please do not remove content without discussion, unless it is obviously wrong.
Смотрите также
- Games — стартовая страница для множества игр (особенно с открытым исходным кодом), доступных в основном репозитории Gentoo.
- Steam Controller — a game controller developed by Valve.
- Steam/Client troubleshooting — provides troubleshooting details for the Steam client on Linux systems.
- Steam/Games troubleshooting — provides troubleshooting details for specific games running via Steam.
Внешние ресурсы
- Gentoo Forums - Native Steam client and source game engine
- GitHub - Steam for Linux Client
- Steam Community - Steam for Linux
Ссылки
- ↑ https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561
- ↑ https://www.gamingonlinux.com/steam-tracker/
- ↑ https://github.com/ValveSoftware/Proton#introduction
- ↑ 4.0 4.1 32-bit Linux distributions are no longer supported by Steam, Steam Web Browser disabled
- ↑ Issues on 4.18.9-gentoo kernel, Steam for Linux, September 24th, 2018. Retrieved on September 25th, 2018.