如何用Alpine一步一步搭建一个完整的Linux桌面系统
0. 初衷
现代的 Linux 桌面系统,其实已经非常复杂了。不光要处理简单的用户应用程序间的协作,更要处理各种用户设备。举个简单的例子,设备的声音输出,就可能有多种途径:通过电脑有线音响输出,或者通过 HDMI 显示器的自带音响输出,还有可能通过连接的蓝牙输出。
我一直对于 Linux 是如何一步一步发展到如此完善感到好奇,也对诸如 Ubuntu 等操作系统动辄一张 DVD 大小的安装程序感到沮丧。因为在我的印象中,Linux 不该是 Windows 这样,而是几百兆大小才对。
Alpine Linux,一个最简单的 Linux 系统,安装介质不到 200M,它是否可以定制成一个完善的桌面系统呢?之前是不行的,它使用的是 musl libc 而不是传统的 glibc,所以很多程序都没有现成的包而需要自己从源码编译。你可以想象编译一个 WPS 的难度。输入法也是一个问题,在 Alpine 上,始终没有中文输入法。
但这个情况最近改变了。首先是 Alpine 的 testing 源里有了 fcitx5 和 fcitx5-chinese-addons,所以中文输入已经不成问题。另外 WPS 的问题,已经可以通过 flatpak 解决了。
所以这次尝试用 Alpine Linux 从零开始搭建一个完整的 Linux 桌面系统。说是从零打造,其实也不完全是,毕竟 Linux 系统像搭积木一般了。但如果使用 Alpine Linux,至少就不是开箱即用而是完全定制。
1. 初始化三步走
通常我会使用 Ventoy 进行 iso 安装介质的引导。Alpine 真是太不一样了,引导完成后直接进入命令行界面。这时候要运行三个组装命令来完成基本的系统搭建:
做完这三个命令,基本上就能进入桌面系统了。有人会说,啥呀,还一步一步搭建。不不不,一步一步都在于后续的填坑过程。
2. 能直接用了吗
💡 能,也不能。
能的是,如果你没有追求,它当然已经开始工作了。网络是好的,浏览器可以浏览,但是好像也没有其他工具了。
不能的是,仔细看看:
- 没有声音图标,意味者没有声音
- 没有网络图标,意味着你想切换个网络,不知道哪里去做
- 没有蓝牙设备
- 输入法没有
- 没有文件浏览器(可能你也不用)
- USB 打印机无法添加
- 命令行没有 sudo
- 显卡没有硬件加速(可能这个暂时体验不到)
- 还有很多坑……你还没发现而已
💡 所以,它其实不能用。让我们一步一步解决吧。
3. 先利其器
我喜欢用 fish,这个不难
安装 sudo
安装 yakuake,一个下拉式的终端程序,好过任何平台的任何终端程序
💡 Firefox 有个坑,打开 firefox 发现没有关闭按钮。这个问题后来发现是 firefox 自动主题导致,可能是个 bug,只需要切换 firefox 主题为 light 或者 dark 即可
4. 解决网络问题
Alpine Linux 默认使用 network 框架管理网络,但是我选择的 KDE,右下角的网络管理是需要配套 NetworkManager 来管理的。大多数现代化的 Linux 操作系统,其实都是使用 NetworkManager 来管理网络了。
到这里还是不够的,因为在 Linux 中,真正管理 wifi 连接的一般都是 wpa_supplicant 程序,需要告诉 nm 框架你用哪个管理程序:
停止原有的 network 框架
💡 重启一下电脑,网络图标应该回来了,应该可以正常切换网络了。
5. 解决声卡问题
声卡在 linux 中真是一个玄学般的存在,我真的不是很懂 pulseaudio 和 pipewire 和 alsa 之间的关系,所以就按照解决问题的思路说吧
用 lspci 查看硬件信息,可以看到我的声卡应该是 intel 的
先安装驱动看看
重启之后声音的图标出现了,但是点进去后仔细一看不对。显示的是 stereo 设备,但是我是用 HDMI 显示器的音响的,所以等于依然不工作。这里有一个巨大的坑,不是靠软件能解决的,而是要调整内核参数,原因未知,有人说是驱动 bug
重启电脑后,点击下角的声音图标,看到 hdmi 字样,以为大功告成……结果随便打开一个视频网页,发现视频没有声音且三秒后必然卡住。研究了半天 alsa 和 pulseaudio,以我之前的经验,只要碰到这两货出问题,靠补充组件或者改配置没有效果的。
💡 我知道 linux 已经开始使用新的声音方案了,pipewire,没办法只能硬着头皮试试了。
💡 重启一下真的好的,有时候 linux 就是要瞎折腾
6. 配置蓝牙
蓝牙也是 linux 系统一个头疼的问题,之前使用 manjaro 的时候,也是时不时就有问题的。这次从零装蓝牙组件,也是试一试的态度了:
这时候右下角蓝牙图标是有了,以为可以正常使用了,但是在配对后显示无法使用,一声叹息啊。使用 bluetoothctl 命令进行调试,发现在 connect 时报错:br-connection-profile-unavailable。查了各种资料,依然无解。最终还是在 alpine 的 wiki 中,看到 pipwire 后面还有一个命令,试试看:
💡 竟然工作了,把它加入 .xinitrc 文件
7. 视频加速
这个问题,对于普通轻办公的人,不那么重要,但是对于我这种使用性能孱弱的 j4125 机器的人来说,就比较重要了:
如果 vainfo 能够正常输出,说明在视频驱动上面是没有问题了。vainfo 可以看到显卡支持哪些编码的编解码。其中 Slice 是支持硬件编码。
接下来调试 Firefox,首先需要安装 intel 显卡 top 工具,才可以知道是否真的进行了硬件解码:
看看输出,其中 video 部分,就是是否在进行视频解码。这时候如果你打开 firefox 播放视频,并关闭 av1 输出(j4125 不支持 av1 硬解),通常来说,video 部分都是没有百分比的。说明 firefox 并没有调用 vaapi。
为 firefox 开启 vaapi:
再观察 intel_gpu_top 输出,发现 vaapi 工作了
💡 BRAVO
8. 配置打印机和网络打印共享服务
打印机相对简单:
为了让网络能够发现打印机,需要加入 avahi
9. 结语
基本上,这样一台用 alpine 搭建的 linux 桌面系统就可用了,而且性能还不错。安装完所有组件,发现其实大小也要到 1.5G 了。看来 linux 的 DE 是比较大的,所以安装介质才越来越大。