搜索

安装 EndeavourOS 桌面系统

发布于 · 更新于

本文记录我 EndeavourOS + KDE 的桌面系统配置过程

我用的是一台A卡的台式,一直以来都是 Win + wsl 命令行。去年突然想折腾折腾桌面 Linux ,研究之后选择了 Arch 作为我的第一款 Linux 桌面(上来就搞这么复杂的)。跟着B站上up的视频一行行手敲把这个 Arch 给装上了。然而,桌面环境使用的 Gnome ,一直只使用 Windows 的我感觉非常不顺手,而且也一直没有去折腾设置和美化。因此 Arch 实际上大部分时间处于吃灰的状态,只是偶尔上去更新一下,尝试些新软件或者浏览器看看网页。
至少一年了没挂过不是吗,说明稳定性其实还挺好的

但 Linux 还是吸引我的,比如软件包管理,以及游戏性能似乎是高于 win 的(而且我还是A卡呢)。于是最近决定重新拾起它试试。但 Gnome 实在用不惯,换 KDE 吧。那索性重装得了。

系统选择

虽然 wsl 和服务器我都用 Debian ,但是来到桌面系统,我依旧还是比较想选 Arch 系的。但是我现在确实是没什么兴致一行一行研究安装指令了。听说 SteamOS 挺好使的,可惜用不到于是最后决定使用 EndeavourOS ,能比较好地开箱即用,并且仍然提供未经修改的 Arch 体验。

安装流程

有 GUI 那就非常友好了,没有太多要说的

先更新一下镜像源,然后就开始安装

系统引导方式使用 grub ,会自动扫描把 Windows 启动项也加进去

桌面我选择 KDE

swap 我选择了 no swap ,之后再手动配置 zram

文件系统选择的是 brtfs ,原生支持快照,配合 Snapper ,万一系统出问题了直接回滚即可

配置系统

Shell

可以先根据 之前的文章 配置好 Shell 。切换默认 Shell 之后需要重启才会生效

但需要注意的是,在 Arch 上需要手动配置键盘模式的切换( smkx )

因此,对照那篇文章的模板,需要把上下箭头替换前缀搜索的那一段改成:

~/.zshrc
zmodload zsh/terminfo
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
_smkx() { echoti smkx }
_rmkx() { echoti rmkx }
add-zle-hook-widget -Uz zle-line-init _smkx
add-zle-hook-widget -Uz zle-line-finish _rmkx
fi
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey -- "${terminfo[khome]}" beginning-of-line
bindkey -- "${terminfo[kend]}" end-of-line
bindkey -- "${terminfo[kdch1]}" delete-char
bindkey -- "${terminfo[kcuu1]}" up-line-or-beginning-search
bindkey -- "${terminfo[kcud1]}" down-line-or-beginning-search

yay

yay 每次安装软件都会有几个交互式选项。然而大部分情况下我们的回答应该都是固定的。因此可以直接设置:

Terminal window
yay --answerclean=None --answerdiff=All --answeredit=None --save

answerclean 设为 None 表示不清理而是复用之前的构建缓存(如果有)
answerdiff 设为 All 则代表审阅所有 PKGBUILD 的 diff ,为了安全我认为人工检查是有必要的
answeredit 设为 None 则是不修改 PKGBUILD ,一般来说确实不会需要修改

使用 yay -Pg 可以查看当前设置

还可以安装 aur-scanner

Terminal window
yay -S aur-scanner

可以用来扫描 PKGBUILD (静态规则,可能误伤也可能遗漏,不能代替人工审查)

Terminal window
aur-scan check <包名> # 装之前检查
aur-scan system # 扫描已装的 AUR 包

zram

简单来说,zram 就是使用内存而不是硬盘来当 swap (相当于 win 上的虚拟内存)。它在内存里划出一块区域,把要换出的内存页先压缩,再存到这块内存区域里。这样内存的总容量就大些了,同时也不需要产生硬盘读写。

安装:

Terminal window
sudo pacman -S zram-generator

创建并编辑配置文件:/etc/systemd/zram-generator.conf:

[zram0]
zram-size = ram / 2
compression-algorithm = zstd

注意 zram-size 是未压缩数据的体积上限,而不是压缩后的

然后重启即可

Snapper

需要安装:

  • snapper — 快照引擎
  • snap-pac — pacman 钩子,装/卸/升级包时自动快照
  • grub-btrfs — 把快照挂到 GRUB 启动菜单里
  • inotify-tools 让 grub-btrfsd 监听到新快照后自动重建 GRUB 菜单。
  • btrfs-assistant — 图形界面
Terminal window
sudo pacman -S snapper snap-pac grub-btrfs btrfs-assistant inotify-tools

接下来创建 root 的 snapper 配置

Terminal window
sudo snapper -c root create-config /

然后启用 grub-btrfs 的自动刷新守护进程:

Terminal window
sudo systemctl enable --now grub-btrfsd

接下来就可以在 btrfs-assistant 中调节快照设置了

如果还想给 /home 添加快照,同样 create config 就行:

Terminal window
sudo snapper -c home create-config /home

输入法

安装 Fcitx 5 、 GTK/Qt 支持、Rime 引擎和图形配置工具:

Terminal window
sudo pacman -S fcitx5 fcitx5-gtk fcitx5-qt fcitx5-rime fcitx5-configtool

打开 KDE 系统设置 - 键盘 - 虚拟键盘,选择 Fcitx 5

然后到 系统设置 - 输入法 里确认 Rime (中州韵)是启用的

并在下面 配置附加组件 - 经典用户界面 设置 跟随系统浅色/深色设置

然后就可以使用了

默认使用 Ctrl + Space 切换中英文

Ctrl + ` 可以切换拼音方案和简繁体什么的

据我测试,这样配置完后 QQ 依旧使用不了输入法

自定义启动参数可以解决:

Terminal window
mkdir -p ~/.config
cat > ~/.config/qq-flags.conf <<'EOF'
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--enable-wayland-ime
--disable-features=GlobalShortcutsPortal
EOF

注意上面把 GlobalShortcutsPortal 给 disable 了,因为我发现我这每次启动都会有快捷键弹窗。但是禁用后快捷键就无法使用了。这个就根据个人情况处理。

Grub

编辑 /etc/default/grub的设置

# 将 Grub 的默认启动项设置为上次使用的选项
GRUB_DEFAULT='saved'
GRUB_SAVEDEFAULT=true
# 不生成 EFI BootNext 条目(即 UEFI 固件中的启动项)
GRUB_DISABLE_BOOTNEXT=true

GRUB_DEFAULT='saved' 会需要写入 grubenv 变量,而旧版本 GRUB 写入 grubenv 会出现与 btrfs 的 CoW 的冲突问题,以及 Arch 打包出来 DEFAULT_ENVBLK_PATH 是 //boot/grub/grubenv 双斜杠匹配导致单斜杠 /boot 命令不能正常运行。实测 2.16 版本可以正常使用

EFI BOOTNEXT 条目也是 2.16 版本新增的功能

接下来还要注意一个问题:

EOS 的默认情况下, Grub 的 默认启动上次选择的条目 没办法对 Windows 的条目生效。
因为 Grub 的 Windows 条目是由 EOS 特供的安装器生成,不走 os-prober ,而这个安装器安装的 Windows menuentry 体内没有 savedefault 指令,因此选择这个条目时不会刷新 saved_entry 变量

因此,如果你使用 Windows ,需要编辑 /etc/grub.d/45_eos_windows ,在 Windows menuentry 开头的 { 之后加一行 savedefault

相关的论坛帖子

最后:

Terminal window
sudo grub-mkconfig -o /boot/grub/grub.cfg

生成 grub 的配置文件即可

验证:

Terminal window
sudo grep -A8 "menuentry 'Windows" /boot/grub/grub.cfg # 确认条目里出现 savedefault 行
sudo grub-editenv /boot/grub/grubenv list # 应该出现 env_block=512+1 ,并且在重启后会有 saved_entry

其它设置

关闭 系统设置 - 显示和监视器 - 显示器配置 - 允许在全屏窗口中发生画面撕裂

其它问题

发现 /etc/vconsole.conf 中错误地被设置了:

KEYMAP=cn

使用

Terminal window
sudo localectl set-keymap us

但是调完以后终端信息也变成英文了,很奇怪