前言
故事的背景是,我的笔记本在宿舍放着,接着两个显示器和一堆音响键鼠等 USB 线和扩展坞等等。所以我平常不会将这个笔记本拿走,而是使用 Pad 进行公网串流使用(见之前公网串流的坑那一篇文章)。
但毕竟 Pad 不是电脑,键盘不好用,鼠标延迟也比较大,屏幕小且比例不一样,更重点的是 Wireguard 总自动断开,烦死了。总之我还是希望有一台便携的笔记本电脑进行串流。
于是我掏出了尘封已久的古早 Thinkpad。考虑到 Windows 电池使用太快了,决定通过高度精简的 Linux 系统进行串流。
当然了,真正推动我做这个的是高数复习的时候需要 Pad 写题,电脑看 AI 讲解,之前总需要切换,有了这个方案就方便多了。
配置
安装 Alpine Linux
先从官网上下载 iso 镜像然后用 Rufus 做到 U 盘里。但是 AI 让我关闭 Secure Boot 和 CSM,只通过 UEFI 启动。
启动安装环境后用 root 无密码登录。然后运行setup-alpine。
后续按提示设置即可,但是有几个坑。 第一,mirror 建议自己去网上找一下阿里云、清华等源,不要自动检测,不然后面下载有可能会卡死。 第二,disk 要选择 sys 模式,但重点是回车之后就会直接清空磁盘,没有二次确认。
安装完之后reboot并拔掉 U 盘即可。
基本系统配置
# 更新并安装必要工具
apk update && apk upgrade
apk add doas pciutils usbutils lm-sensors
echo "permit persist :wheel" >> /etc/doas.conf
图形化
首先确认mkinitfs中启用了KMS功能。
编辑/etc/mkinitfs/mkinmitfs.conf,确保features=中包含kms。此处可以按需删除部分无用内容以提升开机速度。
该文件修改后记得重新构建 initramfs。
mkinitfs -c /etc/makinitfs/mkinitfs.conf $(ls /lib/modules)
编辑/etc/default/grub,确保modules=中有i915。修改后依旧需要重建 grub。
接下来安装 Intel 图形驱动。
apk add mesa-dri-gallium mesa-va-gallium mesa-vulkan-intel linux-firmware-i915 intel-media-driver libva-intel-driver
安装 Sway
# 安装基础包
apk add sway foot wmenu swaylock swaylockd swaybg swayidle grim wl-clipboard
# 座椅管理
apk add seatd
rc-update add seatd
rc-service seatd start
adduser $USER seat
我们还需要配置SCG_RUNTIME_DIR,在~/.profile中手动添加如下内容。
if test -z "${XDG_RUNTIME_DIR}"; then
export XDG_RUNTIME_DIR=/tmp/$(id -u)-runtime-dir
if ! test -d "${XDG_RUNTIME_DIR}"; then
mkdir -m 0700 -p "${XDG_RUNTIME_DIR}"
fi
fi
接下来是 Sway 的配置。创建并编辑~/.config/sway/config文件。下面是我的配置。
(下次电脑开机再粘贴过来吧)
并配置若非 SSH 连接则自动启动 Sway,在~/.profile加入如下内容。
(依旧下次再说)
音频
# 安装基础包
apk add pipewire wireplumber pipewire-pulse pipewire-alsa pipewire-spa-bluez alsa-utils alsaconf
# 将用户加入 audio 组
adduser $USER audio
# 音频服务都在Sway配置中启动,不在开机过程中进行。
# 但此时无法识别声卡,下面是修复
apk add udev
rc-update del mdev sysinit
rc-update add udev sysinit
rc-update add udev-trigger sysinit
# 记得重启来刷新 mdev 和 udev 服务
可以通过alsamixer调节音量。
创建/etc/asound.conf设定默认声卡。(卡号通过cat /proc/asound/cards查看)
defaults.ctl.card 0
defaults.pcm.card 0
网络
apk add wpa-supplicant
编辑/etc/network/interfaces,确认wlan0是如下配置。
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
按如下格式编辑/etc/wpa_supplicant/wpa_supplicant.conf。
network={
ssid="家庭WiFi"
psk="密码1"
priority=10
}
network={
ssid="手机热点"
psk="密码2"
priority=5
}
network={
ssid="公司WiFi"
psk="密码3"
priority=1
}
Wireguard 和 Moonlight 配置
apk add moonlight-qt wireguard-tools font-dejavu font-noto font-noto-cjk
# 编辑 /etc/eireguard/wg0.conf
rc-update add wg-quick.wg0
rc-service wg-quick.wg0 start
优化
OpenRC 并行启动
sed -i 's/#rc_parallel="NO"/rc_parallel="YES"/' /etc/rc.conf
精简 initramfs
这一条在上面 mkinitfs 中已经说过了,不再赘述。
精简系统服务
通过rc-update show查看现有服务状态,可以将不必要的服务(例如cron等)关闭。
省电
apk add tlp brightnessctl
rc-update add tlp
rc-service tlp start
rc-update add brightnessctl
brightnessctl --help
总体成果
现在电脑开机 15 秒进串流界面,关机 5 秒关掉。实测续航可以达到将近 10 小时,这个续航能力已经赶超 Pad 的串流了,舒服了。