搞机男  订阅  何许人也  

ArchLinux Manjaro Xfce 首装配置

昨天给家里那台老 X220 装了个 Manjaro 的 XFCE 版, 这里记录一下安装完成之后的配置过程。

硬件

版本

配置国内源

sudo pacman-mirrors -i -c China -m rank

在弹出的对话框里面选择中科大(USTC)和清华(Tsinghua)源。

添加 ArchLinuxCN 中文源

sudo vi /etc/pacman.conf

在文件的末尾添加

[archlinuxcn]
SigLevel = Optional TrustedOnly
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn//$arch

更新源和密钥环

sudo pacman -Syy
sudo pacman -S archlinux-keyring archlinuxcn-keyring

安装无线网卡驱动

接下来需要将无线网卡给它驱动起来,我这块无线网卡默认在 Linux 内核下是无法驱动的。

首先升级内核并安装对应的内核头文件

sudo pacman -S linux54 linux54-headers
sudo reboot

重启后查看内核版本为 5.4.18,然后安装无线网卡驱动,我这张无线网卡驱动是在这个包里,看名称就知道是基于动态内核模块(DKMS)的,这也就是为什么需要安装内核头文件的原因。

sudo pacman -S broadcom-wl-dkms
sudo reboot

重启后无线网卡驱动搞定,断开网线,连上 WiFi 继续操作。

删除用不到的自带软件并更新系统

sudo pacman -Rsn firefox audacious xfburn pidgin hexchat
sudo pacman -Syu
sudo reboot

安装 Google Chrome

sudo pacman -S google-chrome

安装搜狗输入法

搜狗输入法 Linux 版基于 QT4,但是目前 fcitx-im 的包已经取消了 QT4 支持,转而支持 QT5 了,因此需要曲线救国。

如果之前安装了 fcitx-im 或者相关的包,直接删除。

sudo pacman -Rsn fcitx-im fcitx-configtool

然后从 ArchLinuxCN 中文源里安装 fcitx-lilydjwg-git 和搜狗输入法的包, fcitx-lilydjwg-git 这个包里默认是包含 fcitx-qt4 的。

sudo pacman -S fcitx-lilydjwg-git fcitx-sogoupinyin fcitx-qt5 fcitx-configtool

这里需要安装 fcitx-qt5 的原因是 fcitx-configtool 这个包依赖于 QT5。
安装完成后手动添加用户变量,编辑 ~/.pam_environment 这个文件,如果没有就手动创建

vi ~/.pam_environment
---------------------
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

有些教程里推荐修改 ~/.xprofile 这个文件,但是我看了最新的 ArchWiki ,上面建议修改 ~/.pam_environment

这里需要注意的是,重启系统之后,搜狗输入法的选词框会出现问题,变成一个小矩形框。解决方法是打开搜狗输入法的设置界面,重新选择一次皮肤就 OK 了,这是一个已知 Bug

安装 WPS For Linux 中文版

sudo pacman -S wps-office-mui-zh-cn ttf-wps-fonts wps-office-cn

安装完成后 WPS 文字、WPS 表格、WPS 演示对应的启动文件分别为 /usr/bin/wps、/usr/bin/et、/usr/bin/wpp。

安装 shadowsocks-libev 和 glider

shadowsocks

sudo pacman -S shadowsocks-libev

创建配置文件

sudo mkdir /etc/shadowsocks
sudo vi /etc/shadowsocks/client.json
------------------------------------
{
    "server":"remote-shadowsocks-server-ip-addr",
    "server_port":443,
    "local_address":"127.0.0.1",
    "local_port":1081,
    "password":"your-passwd",
    "timeout":300,
    "method":"aes-128-gcm",
    "fast_open":true,
    "workers":1
}

设置开机自启动

sudo systemctl enable shadowsocks-libev@client
sudo systemctl start shadowsocks-libev@client

glider

首先从 Github 下载最新版并解压,然后安装

sudo cp glider /usr/bin/
sudo mkdir /etc/glider/
sudo cp config/glider.conf.example /etc/glider/server.conf

编辑 /etc/glider/server.conf,按照需要进行修改,注意 FORWARDERS 项应配置为 forward=socks5://127.0.0.1:1081,然后设置开机自启动

sudo cp systemd/glider@.service /etc/systemd/system/
sudo systemctl enable glider@server
sudo systemctl start glider@server

安装 yay 并修改 AUR 源

sudo pacman -S yay
yay --aururl "https://aur.tuna.tsinghua.edu.cn" --save

修改家目录下的文件夹名称为英文

默认安装完 Manjaro 并设置中文之后,家目录下的文件夹都是中文名称,例如“桌面”“下载”“文档”等,终端下操作很不方便,可以修改为英文以提高效率。

sudo pacman -S xdg-user-dirs-gtk
export LANG=en_US
xdg-user-dirs-gtk-update
#选择 Update Name
export LANG=zh_CN.UTF-8
sudo pacman -Rsn xdg-user-dirs-gtk

将自带截图工具替换为深度截图(炒鸡好用)

sudo pacman -Rsn xfce4-screenshooter
sudo pacman -S deepin-screenshot

安装 dmenu 作为启动器并安装插件

git clone https://git.suckless.org/dmenu --depth 1
cd dmenu

编辑config.mk,修改第八和第九行为如下内容

X11INC = /usr/include/X11
X11LIB = /usr/lib/X11

修改字体和字号,编辑config.h,修改第七行为

"Source Code Pro Regular:size=18"

打上 center 和 border 补丁

mkdir patches
cd patches
wget https://tools.suckless.org/dmenu/patches/border/dmenu-border-4.9.diff
wget https://tools.suckless.org/dmenu/patches/center/dmenu-center-4.8.diff
cd ..
patch < patches/*.diff
sudo make clean install

最后在系统设置 -> 键盘中将 Alt+Space 设置为启动 dmenu-run 即可。

以 EFISTUB 启动

我对比了 EFISTUB 和 systemd-boot 这两种直接引导内核的方式,发现与其使用 systemd-boot 还不如直接使用 EFISTUB。对于我来说,由于我的 ESP 分区是挂载在 /boot/efi 下的,这两种方式都需要处理内核更新后的拷贝问题,而 systemd-boot 似乎除了配置文件独立一点再没有任何优势了。

首先确定各分区的 PARTUUID

sudo fdisk -l
ls -la /dev/disk/by-partuuid

然后复制内核和 initramfs 至 ESP 分区或分区下的子目录,因为 EFISTUB 只能从 EFI 分区去读取内核文件,我这里放在了 ESP/efi-stub 下面

su
mkdir /boot/efi/efi-stub
cp /boot/vmlinuz-5.4-x86_64 /boot/efi/efi-stub
cp /boot/intel-ucode.img /boot/efi/efi-stub
cp /boot/initramfs-5.4-x86_64.img /boot/efi/efi-stub

创建 EFI 引导菜单启动项

efibootmgr -d /dev/mmcblk0 -p 1 -c -L "Manjaro" -l /efi-stub/vmlinuz-5.4-x86_64 -u "root=PARTUUID=be203318-498c-45dd-bdeb-46679b25bf39 resume=PARTUUID=9dff8cbe-456e-4524-b404-08a6168f8705 rw quiet initrd=/efi-stub/intel-ucode.img initrd=/efi-stub/initramfs-5.4-x86_64.img"

其中

-d 指定 ESP 所在磁盘
-p 指定 ESP 分区位置,1 代表第一个分区
-c 代表创建 EFI 引导菜单项
-L 为引导菜单中显示的名称
-l 指定 vmlinuz 文件位置,相对于 ESP 分区根目录而言,对于我来说就是 /boot/efi
-u 为启动参数,我这里指定了 root 分区的 PARTUUID,resume 即 swap 分区的 PARTUUID, Intel CPU 的微码 intel-ucode.img 和 initramfs.img 的位置,rw 为可读写, quiet 为安静模式

执行成功之后运行efibootmgr,确认无误即可重启测试。

接下来配置一个 pacman-hook,确保每次内核更新后能自动复制到 /boot/efi/efi-stub 中,这里我参考了 ArchWiki 上的脚本,有现成的直接用就行。

首先创建 pacman hook 文件,主要是监视 vmlinuz 和 initramfs 的变化,如果发生变化则执行拷贝脚本

vi /etc/pacman.d/hooks/999-kernel-efi-copy.hook
----------------------------------------------
[Trigger]
Type = Path
Operation = Install

Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/initcpio/*
Target = boot/*-ucode.img

[Action]
Description = Copying vmlinuz and initramfs to ESP/efi-stub...
When = PostTransaction
Exec = /usr/local/bin/kernel-efi-copy.sh

然后创建拷贝脚本,并赋予可执行权限

vi /usr/local/bin/kernel-efi-copy.sh
------------------------------------
#!/usr/bin/env bash
#
# Copy kernel and initramfs images to EFI directory
#

ESP_DIR="/boot/efi/efi-stub"

for file in /boot/vmlinuz*
do
        cp -af "$file" "$ESP_DIR/$(basename "$file").efi"
        [[ $? -ne 0 ]] && exit 1
done

for file in /boot/initramfs*
do
        cp -af "$file" "$ESP_DIR/"
        [[ $? -ne 0 ]] && exit 1
done

[[ -e /boot/intel-ucode.img ]] && cp -af /boot/intel-ucode.img "$ESP_DIR/"
[[ -e /boot/amd-ucode.img ]] && cp -af /boot/amd-ucode.img "$ESP_DIR/"

exit 0

另外,Grub2 的 EFI 文件可以保留在 /boot/efi/EFI/Manjaro 中,以备不时之需。

未完待续


Carpe Diem.
Contact me at tink.im. 回到顶部