简单来说,受够了windows,买不起osx,就只能折腾linux。折腾了好几个发行版,这次换了archlinux了。理由很简单:软件版本新、滚动发行、yaourt yay一切。


折腾了一阵子MacOS,发现它的软件管理太麻烦了:

  • AppStore(系统更新、部分软件包)
  • 网络上的软件包
  • HomeBrew(GNU、Casks)

大部分Casks不能更换软件源,更新速度极慢,加上Mac机器老旧,新上市的AMD yes等原因,便回到了linux阵营。

系统安装

硬件信息

戴尔Inspiron 灵越 燃7000(Ins 14-7460-D1525S)

联想小新Pro2020锐龙版(Lenovo Ideapad S540-13ARE)

安装流程

启动安装镜像

关闭 Security Boot,跟Windows激活有关,但不影响激活使用。

https://mirrors.aliyun.com/archlinux/iso/latest/

https://mirrors.aliyun.com/archlinux/iso/latest/archlinux-2020.06.01-x86_64.iso

archlinux-2020.07.01-x86_64.iso开始,安装环境移除了netctl包,不再有wifi-menu命令,应使用iwctl来管理无线网连接。

  1. 使用grub直接引导iso镜像,其中archisolabel建议设置成iso的实际label。(manjaro的参数名称是misolabel
    menuentry 'install arch' {
        loopback loop (hd0,1)/.boot/linux/archlinux-2020.06.01-x86_64.iso
        set root=(loop)
        linux /arch/boot/x86_64/vmlinuz archisolabel=ARCH_202006
        initrd /arch/boot/x86_64/archiso.img
    }
    
  2. 启动过程中会遇到问题,停在rootfs界面。
    Waiting 30 second for device /dev/disk/by_label/ARCH_201803 Error
    
    手动挂载iso文件所在的分区,假设挂载到/usb,并加载对应的iso文件,然后退出rootfs
    losetup /dev/loop0 /usb/archlinux-2018.03.01-x86_64.iso
    

基础安装

分区以及挂载磁盘到/mnt

# 有线网会自动连接,无线网需要手动连接
# wifi连接,可能要执行 rfkill 命令,解禁无线设备(或者使用键盘快捷键解锁无线设备)
#iwctl --passphrase your_wifi_password station wlan0 connect your_wifi_name
# 分配ip
#dhcpcd

# 同步时间
timedatectl set-ntp true

# 镜像源
cat <<EOF>/etc/pacman.d/mirrorlist
Server = http://mirrors.aliyun.com/archlinux/\$repo/os/\$arch
EOF

# 分区,并挂载到`/mnt`(注意是否是efi启动),EFI分区挂载到`/boot/efi`

# base-devel包含yay所需组件
pacstrap /mnt base base-devel linux linux-firmware

# 生成分区挂载信息,如果有swapfile,注意修改路径
genfstab -U /mnt >> /mnt/etc/fstab

# chroot
arch-chroot /mnt

# ****** 以下为chroot环境 ******

# 时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 好像能避免windows、linux相差8小时的问题
hwclock --systohc

# 语言
cat <<EOF>> /etc/locale.gen
en_US.UTF-8
zh_CN.UTF-8
EOF
locale-gen
cat <<EOF>/etc/locale.conf
LANG=en_US.UTF-8
LANGUAGE=en_US
EOF

# 主机名
echo ideabook > /etc/hostname
cat <<EOF>> /etc/hosts
127.0.0.1 localhost
::1       localhost
127.0.0.1 ideabook
::1       ideabook
EOF

# LVM支持
pacman -S lvm2
# 添加lvm2钩子,HOOKS=(... block lvm2 filesystems ...)重建内核
vim /etc/mkinitcpio.conf
mkinitcpio -P

# NTFS分区支持
pacman -S ntfs-3g

# intel cpu
#pacman -S intel-ucode
# amd cpu
pacman -S amd-ucode
# 安装引导
pacman -S grub efibootmgr
# windows双系统检测
pacman -S os-prober
# 默认 --target=x86_64
grub-install
grub-mkconfig -o /boot/grub/grub.cfg

# 休眠支持
# /etc/mkinitcpio.conf
# 添加内核钩子resume,紧跟着filesystems HOOKS=(... filesystems resume ...)
# HOOKS=(base udev autodetect modconf block lvm2 filesystems resume keyboard fsck)
# /etc/default/grub
# 添加内核参数(swap分区位置信息) resume=/dev/sda4
# GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/vg0/swap loglevel=3 quiet splash"

# 网络连接
# 如:networkmanager(wicd已被弃用)
# 注意启用相应的网络服务只能启动一个
pacman -S openresolv
cat <<EOF>>/etc/resolvconf.conf
#name_servers=172.17.0.1
#name_servers_append=223.5.5.5
EOF

# NetworkManager
pacman -S networkmanager
cat <<EOF>/etc/NetworkManager/conf.d/rc-manager.conf
[main]
rc-manager=resolvconf
EOF

# iwd使用
mkdir /etc/iwd
cat <<EOF>/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=resolvconf
EOF

# 支持32位、aur源
pacman -S archlinuxcn-keyring
cat <<EOF>> /etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist

[archlinuxcn]
Server = http://mirrors.aliyun.com/$repo/$arch
EOF
pacman -Syy
pacman -S yay

退出并重启

exit
umount -R /mnt
reboot

图形界面

结构

Linux系统 <=> 显卡驱动 <=> 图形服务 <=> 桌面管理器 <=> 桌面环境姑且这么理解吧,之前总搞不懂装个图形界面怎么这么多东西。

显卡驱动

pacman -S mesa lib32-mesa
  1. intel

    pacman -S xf86-video-intel
    
  2. amdgpu

    pacman -S xf86-video-amdgpu
    

    4800U是5代GCN,非Southern Islands或Sea Islands启用内核模块
    /etc/mkinitcpio.conf

    MODULES=(amdgpu)
    

    重建内核

    mkinitcpio -P
    
  3. nvidia

    # nouveau驱动比较菜鸡,可以考虑安装nvidia包
    #pacman -S xf86-video-nouveau
    pacman -S nvidia lib32-nvidia-utils
    pacman -S bumblebee lib32-virtualgl
    systemctl enable bumblebeed
    usermod -a -G bumblebee nono
    # 重启
    pacman -S primus lib32-primus
    

    测试

    pacman -S mesa-demos
    glxgears -info
    optirun glxgears -info
    # 添加vblank_mode=0,primus才能全力运行
    vblank_mode=0 primusrun glxgears -info
    vblank_mode=0 optirun -b primus glxgears -info
    

    optirun默认使用virtualgl桥接,效率比primus低

    primus好久没人维护了,有些bug

    steam中游戏启动参数

    vblank_mode=0 primusrun %command%
    

    国服dota启动参数

    vblank_mode=0 primusrun %command% -language schinese -international -perfectworld
    

图形服务

pacman -S xorg-server

桌面环境

  1. 推荐Deepin(V20目前Bug比较多),国人开发,界面美观,工具丰富。
    pacman -S deepin deepin-extra
    
  2. KDE功能强大,配置项灵活。扩展应用包很大,包含了很多不常用的如教育、游戏的软件包。
    pacman -S plasma kde-applications
    # 不想安装mariadb时
    #pacman -S plasma kde-applications --assume-installed=mariadb
    
  3. xfce4精简好用
    pacman -S xfce4 xfce4-goodies
    # 如果是NetworkManager
    pacman -S nm-connection-editor network-manager-applet
    # 声音
    pacman -S pulseaudio pulseaudio-alsa pulseaudio-bluetooth xfce4-pulseaudio-plugin pavucontrol
    

通用部分

# 网络组件(原则同上所述)
pacman -S networkmanager
systemctl enable NetworkManager

# 蓝牙播放设备所需组件,bluez默认已经安装
pacman -S bluez pulseaudio-bluetooth
# 蓝牙服务(蓝牙图标)
systemctl enable bluetooth

桌面管理器

  1. lightdm作为deepin的依赖会自动安装,也可以给xfce4用
    启用lightdm桌面管理器
    pacman -S lightdm-gtk-greeter-settings
    systemctl enable lightdm
    
  2. sddm是kde默认的桌面管理器
    systemctl enable sddm
    

输入法

pacman -S wqy-microhei
# 中文字体 cjk(中日韩)
pacman -S noto-fonts-cjk
# yay不能以root运行
yay -S fcitx-sogoupinyin
# 用fcitx-configtool而不用kcm-fcitx(kde),会安装kwallte
# fcitx-gtk fcitx-qt能让输入法支持各个架构写的程序
pacman -S fcitx-configtool fcitx fcitx-qt5
# 设置环境变量,否则输入法切换不出来
cat <<EOF>>~/.xprofile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN
EOF
cat <<EOF>>~.pam_environment
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE  DEFAULT=fcitx
XMODIFIERS    DEFAULT=@im=fcitx
EOF

应用软件

# 工具
yay -S zsh git subversion mlocate
# 编辑器
yay -S vim sublime-text-imfix code phpstorm
# 网络
yay -S uget chromium firefox-i18n-zh-cn
# 开发
yay -S npm php mariadb-clients redis
yay -S postman-bin dbeaver docker docker-compose
#yay -S virtualbox virtualbox-host-modules-arch virtualbox-ext-oracle virtualbox-guest-iso
# 把当前用户加入virtualbox用户组,否则virtualbox识别不到usb设备
#usermod -a -G vboxusers ${USER}
# 聊天社交
yay -S thunderbird-i18n-zh-cn electronic-wechat qq-linux
# 音乐
yay -S netease-cloud-music
# wps、pdf
yay -S wps-office-cn ttf-wps-fonts foxitreader
# 图片处理
yay -S gimp
# 游戏
yay -S steam
#yay -S steam-native-runtime
#yay -S steamcmd
# 墙
#yay -S shadowsocks kcptun tsocks
yay -S v2ray
# 远程协助
#yay -S teamviewer
# 内网穿透
yay -S frpc frps
# 等宽字体
yay -S ttf-iosevka adobe-source-code-pro-fonts
# android安卓工具,adb/fastboot/driver
yay -S android-tools android-udev mtpfs gvfs-mtp gvfs-gphoto2
# 其他
yay -S sshpass
yay -S man-pages-zh_cn

开机动画

这里指的是,从grub选中以后,到出现登录界面之间的加载过程中的动画。使用KMS组件plymouth

安装

yay -S plymouth
# 以下为可选操作,plymouth-theme-arch-logo是个比较好看的动画(主题)
yay -S plymouth-theme-arch-logo
plymouth-set-default-theme arch-logo

配置plymouth参数

/etc/plymouth/plymouthd.conf

# Distribution defaults. Changes to this file will get overwritten during
# upgrades.
[Daemon]
Theme=arch-logo
ShowDelay=0
DeviceTimeout=5

配置KMS

编辑/etc/mkinitcpio.conf,把plymouth添加到HOOKS的base udev之后,示例如下

HOOKS=(base udev plymouth autodetect modconf block filesystems keyboard fsck)

重建内核

每次修改plymouth参数都需要重建内核

mkinitcpio -P

如果设置主题时加上-R参数,会自动执行上述操作

plymouth-set-default-theme -R arch-logo

修改内核参数

如果启动引导器是GRUB,编辑/etc/default/grub,给常量GRUB_CMDLINE_LINUX_DEFAULT添加quiet splash

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

然后重新生成grub配置文件

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

切换Plymouth版本的桌面管理器

能够使开机动画与登录界面平滑过度

  • lightdm
    systemctl disable lightdm
    systemctl enable lightdm-plymouth
    
  • sddm
    systemctl disable sddm
    systemctl enable sddm-plymouth
    

常见问题/FAQ

  1. yay执行安装命令后提示找不到数据库错误! 这是翻译的坑,原文是no database errors have been found,意思是没有发现数据库错误,就是没有错误,一切正常。
  2. adb shell提示一下错误信息
    error: insufficient permissions for device
    
    archlinux安装android-udev包即可。其他发行版参考在硬件设备上运行应用
  3. 安装archlinuxcn-keyring秘钥验证失败(出现类似以下错误信息)
    ==> Locally signing trusted keys in keyring...
      -> Locally signing key 02E02B85AF209AA00F784A1DD48313B447CD9E46...
    ==> ERROR: 02E02B85AF209AA00F784A1DD48313B447CD9E46 could not be locally signed.
    
    参考文章GnuPG-2.1 与 pacman 密钥环
  4. 文件管理器连接samba
    注意安装gvfs-smb

参考文章