背景

虽然 SteamOS 基于 Arch Linux,但是它的根文件系统默认只读,且使用 A/B 分区进行系统更新。这导致在系统更新时只有部分特定目录的内容会被保留,虽然可以通过 sudo steamos-readonly disable 命令关闭目录只读,但是用户在其他目录中做的修改大概率会在系统更新时被复写、造成失效或故障,所以 Steam Deck 社群通常不推荐使用 pacman 管理系统软件包。

设置密码

SteamOS 的默认用户为 deck,初始状态无密码需手动设置:

passwd

Decky Loader

Decky Loader 是面向 SteamOS 掌机模式的插件系统,从官方下载 decky_installer.desktop 之后移动到桌面双击安装。

这些是我正在使用的 Decky Loader 插件:

可以从这里查看 Decky Loader 官方库中的所有插件

命令行

SteamOS 最新版已内置 Zsh,所以直接安装 Oh My Zsh 并切换默认 shell 即可。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

启用 SSH

sudo systemctl start sshd

软件管理

Flatpak

Steam 官方推荐使用 Flatpak 安装软件,Flatpak 类似于 Canonical 的 Snap,是沙盒化的 Linux 软件包管理工具。Steam Deck 系统内置的 Discover 软件中心就是 Flatpak 的图形化前端。

AppImage

AppImage 是 Linux 常见的便携式软件打包格式,类似于 macOS 中常见的 .app 应用。虽然 KDE 桌面没有提供像 macOS 中的 /Applications 目录让用户只要把应用拖入就可以被系统注册到应用列表,但是可以通过类似 Gear Lever 的工具来统一管理、更新 AppImage 格式的应用。

Gear Lever 提供 Flatpak 包,可以直接从 Discover 软件中心安装。

Nix

受限于 Flatpak 的沙盒性质,许多软件并没有提供 Flatpak 包,而 pacman 又会被系统更新复写,所以 Steam Deck 社群普遍使用其他包管理工具安装软件。其中 Nix 是最常见的选择,以至于 Valve 官方在 SteamOS 中专门预留了不会被系统更新覆盖的 /nix 目录。

目前市面上能找到的 Nix 安装途径有两个。虽然 Determinate System 的安装脚本有针对 Steam Deck 环境做专门处理,但目前的版本在安装时会因试图写入只读目录 /usr/local/bin/determinate-nixd 而失败。在这个错误被修复前,只能使用 Nix 官方脚本安装单用户模式:

sudo chown -R deck:deck /nix
sh <(curl -L https://nixos.org/nix/install) --no-daemon

安装后编辑配置启用 nix-commandflakes

mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf

从这里可以搜索 Nix 官方库中的所有软件包

常用软件

编辑器

Flathub 有提供 Micro,但是 Flatpak 不会像其他包管理系统一样将安装的软件按常见的名称添加进 PATH 目录,而是 io.github.zyedidia.micro 这样的反向域名标识,非常不便于 CLI 调用和管理,所以这里使用 Nix 安装:

nix profile add nixpkgs#micro

Tailscale

Tailscale 同样有两种安装方式:

这里同样使用 Nix 安装:

nix profile add nixpkgs#tailscale
micro /etc/systemd/system/tailscaled.service
[Unit]
Description=Tailscale node agent
Documentation=https://tailscale.com/kb/
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service
 
[Service]
ExecStartPre=/home/deck/.nix-profile/bin/tailscaled --cleanup
ExecStart=/home/deck/.nix-profile/bin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock $FLAGS
ExecStopPost=/home/deck/.nix-profile/bin/tailscaled --cleanup
 
Restart=on-failure
 
RuntimeDirectory=tailscale
RuntimeDirectoryMode=0755
StateDirectory=tailscale
StateDirectoryMode=0700
CacheDirectory=tailscale
CacheDirectoryMode=0750
Type=notify
 
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable tailscaled
sudo systemctl start tailscaled
sudo $(which tailscale) set --operator=$USER

执行过一次 --operator=$USER 以后无需再使用 sudo 调用 tailscale,直接使用当前用户即可。

除了使用 tailscale 命令行工具,还可以在 Flatpak 中安装第三方图形化前端 Trayscale 来进行管理。