不重装系统,直接从 Manjaro 切换到 Arch Linux

直接切换存在一定的“滚挂”风险,操作前建议做好重装系统的准备。

虽然本教程的方法也可以直接从 Arch Linux 切换到 Manjaro,但我建议不要这样做! Arch Linux 的软件包普遍比 Manjaro 新,从 Arch 切换到 Manjaro 很可能会因为版本问题导致依赖冲突,增加“滚挂”风险!

众所周知,Manjaro 是基于 Arch Linux 的一个发行版,但是 Manjaro 的大部分软件包的版本要低于 Arch Linux,使得 Manjaro 在获得近似 Arch 的优秀体验的同时,也保持良好的稳定性。

不过有时候总想尝试一下 Arch,重装系统又很麻烦,考虑到 Manjaro 和 Arch 的东西很接近 (不像 Ubuntu 瞎改 Debian 还加屎山进去),直接迁移是一个比较方便快捷的选择。

演示环境为一个全新安装的 Manjaro + KDE 虚拟机。

Manjaro 初始环境

操作结束前,不要重启系统

更改 pacman 设置

编辑 /etc/pacman.conf,去除所有与 manjaro 相关的内容。

要改动的地方大致有以下部分,其他地方最好也检查一下:

1
2
3
4
5
# 18 行
HoldPkg = pacman glibc

# 20 行 SyncFirst 注释掉
# SyncFirst = archlinux-keyring

更换 Arch Linux 镜像源

编辑 /etc/pacman.d/mirrorlist,将 Manjaro 镜像源删除,替换为 Arch Linux 对应的镜像源地址。我这里选择了科大和上交的源:

1
2
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirror.sjtu.edu.cn/archlinux/$repo/os/$arch

然后同步数据库,但需要注意,这个时候不要更新软件

1
sudo pacman -Syy

微调软件配置

虽然 Manjaro 基于 Arch,但在一些关键软件包上还是有区别的,针对这些软件包我们全部需要调整。

Bash

Manjaro 和 Arch Linux 的 Bash 封装不同,Manjaro 将 Bash 本身与 bash 的配置文件 bashrc 封装成了 bashbashrc-manjaro 两个软件包,而 Arch 则封装为一个包 bash 。并且,Manjaro 的 bash 包依赖于 bashrc-manjaro,所以需要对现有 Manjaro 文件系统进行微调。

移除旧的 bashrc 文件,然后重新安装 bash

1
2
3
sudo mv /etc/bash.bashrc /etc/bash.bashrc.old
sudo mv /etc/skel/.bashrc /etc/skel/.bashrc.old
sudo pacman -Sy bash

安装成功后,卸载 bashrc-manjaro 包。

卸载 Manjaro 相关包时,避免使用 -Rs-Rsn-Rsc-Rsnc 等带有 sc 的参数,防止破坏系统组件。

1
sudo pacman -Rn bashrc-manjaro

Linux 内核

Linux 内核,Arch 官方始终只提供最新版本 linux 和长期支持版本 linux-lts,但是 Manjaro 提供了多个不同的版本 linux-版本号。为了保险,我们先安装 Arch Linux 的 linux 内核,再卸载 Manjaro 的内核。

先查找 Manjaro 内核的版本:

1
sudo pacman -Qsq linux | grep linux

然后找到 linux** 这样一个包,比如 linux66linux515 之类的。

这个包后面的数字,就是版本号。记下包名,卸载 Manjaro 的 Linux 内核的时候,要全部卸载。

1
2
3
sudo pacman -S linux linux-headers
sudo pacman -Rn linux66 # 填写刚刚记下的包名
sudo pacman -S linux-firmware

如果有对应的 headers 也要全部卸载:

1
2
sudo pacman -Rn linux66-headers
# 如果有就卸载,没有就跳过

pacman-mirrors

pacman-mirrors 是 Manjaro 自己的镜像配置文件,Arch Linux 只使用 pacman-mirrorlist。由于 pacman-mirrors 和 Manjaro 的 Pacman 绑定,所以这一步我们需要先安装 Arch Linux 的 Pacman,然后通过破坏依赖的方式移除 pacman-mirrors

1
2
3
sudo pacman -S pacman
sudo pacman -Rdd pacman-mirrors libpamac python-manjaro-sdk
sudo pacman -Rn $(pacman -Qsq pamac)

Manjaro 专属软件

Manjaro 添加了自己专属的一些软件,我们也全部卸载,防止与 Arch Linux 冲突。

由于部分软件与系统组件深度绑定,为防止破坏系统组件,我们先安装部分 Arch Linux 的系统组件。

1
2
3
4
5
6
7
# base 依赖一个 manjaro 软件包,先换成 Arch 的
sudo pacman -S base

# -Qmq 参数用于查找不在软件源里的已安装的包
sudo pacman -Rn $(pacman -Qmq | grep manjaro)
sudo pacman -Rn $(pacman -Qmq | grep mhwd)
sudo pacman -Rn web-installer-url-handler

切记不要使用 -Qsq 代替 -Qmq

-Qsq 的结果包含 filesystem,这个包是系统必备的,待会重新安装 Arch 软件包的时候会自动替换为 Arch 版本。这个包能被搜到是因为描述中包含 Manjaro,而它不是 Manjaro 独有的

mhwd 是 Manjaro 检测硬件并自动安装驱动的一个库,既然你都用 Arch 了,难道还不能自己装驱动吗?

系统中可能还有 Manjaro 软件的残留,但我不建议现在一个一个查找删除,而是等到 Arch 软件包安装好之后再按需删除。

安装 Arch Linux 软件包

我们先将系统中 Manjaro 的软件包替换为对应的 Arch Linux 软件包。

1
2
3
4
# 清除以前下载的 Manjaro 的软件包
sudo pacman -Scc
# 重新安装所有已安装的库内软件包
sudo pacman -Syu $(pacman -Qnq)

修改 GRUB 主题

Manjaro 默认的 GRUB 使用的是定制主题,我们已经删掉了,对应的配置也需要移除。

编辑 /etc/default/grub,修改为其他主题,或者注释掉使用默认界面:

1
2
# 搜索 THEME 即可,一般在 47 行上下
# GRUB_THEME="/usr/share/grub/themes/manjaro/theme.txt"

我没有使用主题,直接注释掉了。

Fcitx 中文输入法

Manjaro 通过依赖的方式,在安装 Fcitx5 的时候向 /etc/xdg 添加 fcitx5 文件夹以及配置文件,自动启用了 Fcitx5 在软件中的输入功能(软件包manjaro-asian-input-support-fcitx5),因此,Manjaro 安装 Fcitx5 后开箱即用,不需要配置。

但是 Arch Linux 软件源没有这一软件包,应当手动对 Fcitx5 进行配置。

编辑 /etc/environment,加入:

1
2
3
4
5
6
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
INPUT_METHOD=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus

注意 GLFW_IM_MODULE=ibusibus 不能修改为其他的(兼容性问题)。然后保存。

Zsh

Manjaro 默认使用 Zsh 并添加了很多自己的配置,这些配置被打包成以 manjaro 开头的包,由于我们已经删掉了,因此需要重新配置。

当然不配置也能用,只不过没有原来 Manjaro 的那些“特色功能”了。

配置工作我们待切换完成后再讲。

重构 GRUB 启动菜单

由于我们重新安装了新内核,我们需要同步重构 GRUB 的配置文件 grub.cfg,以确保顺利引导。

1
sudo grub-mkconfig -o /boot/grub/grub.cfg

重启

重新启动电脑,你会发现原来 Manjaro 的主题和壁纸都变成默认的了。恭喜你,你已经成功切换到 Arch Linux 系统!

确认系统工作正常之后,就可以自行清理不需要的软件包或者 Manjaro 残留了。

全部完成后

如果不需要配置 Manjaro 原来的 Zsh,就可以结束了。如果需要恢复 Manjaro 原来的 Zsh 功能,请继续往下看。

Zsh 配置

为什么把 Zsh 配置放最后讲呢,一个是比较复杂,另一个是确保系统基本组件正常运转后,再去做这些锦上添花的工作比较保险。

Manjaro 的 Zsh 的一些快捷功能是由以下软件包实现的,它们不属于 Manjaro 本身。

软件包 功能
oh-my-zsh Zsh 高效配置框架
oh-my-zsh-powerline-theme-git Powerline 主题
zsh-syntax-highlighting 语法高亮
zsh-autosuggestions 自动补全

把这些软件包安装之后重新配置,即可使用相似功能。(可我还是喜欢 Manjaro 绿油油的主题)

配置 Arch Linux CN 源

虽说这些安装包都可以从 AUR 上获取,但是 Arch Linux CN 源为我们提供了已经打包好的软件包,可以通过 Pacman 直接拉取,快捷高效。

编辑 /etc/pacman.conf,在文件末尾添加 Arch Linux CN 源。我这里选择的是科大镜像:

1
2
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

然后安装软件源 Keyring:

1
sudo pacman -S archlinuxcn-keyring

如果遇到错误,可以参考此篇文章

安装软件包

执行以下命令安装相关软件包。相比于 Powerline 主题,我更喜欢 Powerlevel 10K 这个主题,风格几乎一模一样但性能更好。所以我选择安装 Powerlevel 10K 主题。

1
sudo pacman -S zsh-theme-powerlevel10k oh-my-zsh-git zsh-syntax-highlighting zsh-autosuggestions

配置 .zshrc

复制新的 .zshrc 配置文件:

1
2
mv ~/.zshrc ~/.zshrc.old    # 备份原来的文件
cp /usr/share/oh-my-zsh/zshrc ~/.zshrc

然后编辑 ~/.zshrc

1
2
3
4
5
6
7
8
9
# ZSH_THEME 这一行修改如下
ZSH_THEME="powerlevel10k/powerlevel10k"

# 这一行去掉注释
ENABLE_CORRECTION="true"

# plugins 这一行,添加以下两个插件
plugins=(zsh-syntax-highlighting zsh-autosuggestions)
# 其他插件如果有也保留

然后将插件链接到正确的目录下:

1
2
3
4
5
6
7
sudo ln -s /usr/share/zsh/plugins/zsh-syntax-highlighting /usr/share/oh-my-zsh/custom/plugins/

sudo ln -s /usr/share/zsh/plugins/zsh-autosuggestions /usr/share/oh-my-zsh/custom/plugins/

sudo ln -s /usr/share/zsh-theme-powerlevel10k /usr/share/oh-my-zsh/themes

sudo mv /usr/share/oh-my-zsh/themes/zsh-theme-powerlevel10k /usr/share/oh-my-zsh/themes/powerlevel10k

然后执行 source ~/.zshrc 并根据向导配置即可。

配置完成后的样式,还是很好看的,自动补全和语法高亮也生效了

完成后可以将默认 Shell 切换到 Zsh。

1
chsh -s /bin/zsh

Root 用户的 Shell 应当设定为 Bash 而不是 Zsh 等其他 Shell。我也不建议更改 Root 用户的 Shell。

就这样。


不重装系统,直接从 Manjaro 切换到 Arch Linux
https://gt610.codeberg.page/2024/02/03/migrating-from-manjaro-to-arch/
作者
GT610
发布于
2024年2月3日
许可协议