跳到主内容

(Arch) Linux 个人电脑设置

之前的文章写的是服务器电脑配置,这篇文章稍微记录一下个人日用电脑(Arch Linux / EndeavourOS)的配置。

1. Arch Linux 安装

就跟着官方的安装步骤来吧,这里不多细述。最近切换到了 EndeavourOS,是基于 Arch Linux 的发行版,提供了图形化的安装界面,并且预装了包括 yay 以及(印象中) tldr 等算是比较有用的软件。用起来体验还不错。

之后打算装双系统的话建议使用 GRUB 进行系统引导。

1.1. 更新系统软件源

EndeavourOS 会自动选取更快的软件源,但普通的 Arch Linux 发行版的话需要自己决定。 另外因为个人用的 AUR 软件比较多,推荐额外添加 Arch Linux 中文社区仓库 的软件源, 其中包含了很多 AUR 里的软件。(我个人还会把 Arch4edu 软件源也加上。)

1.2. Locale

毕竟是多语言环境,把 /etc/locale.gen 里自己可能用到的语言给取消注释,之后更新一下:

# locale-gen

2. 配置 Secure Boot

因为之后要用双系统所以这里就直接假设系统引导用的是 GRUB 了。这里可以参考 GRUB#SecureBootsupport 里的内容。

总之,需要安装 shim-signed 包(应该在 AUR 里)和 sbsigntools 。(请理解代码之后再进行操作,因为还是比较危险的操作的。)这里假设 EFI 分区(ESP)挂载在 /boot/efi 下。安装后命令如下:

  1. 创建用于签名的密钥,这里放到了 /usr/local/share/shim 里:

    # mkdir -p /usr/local/share/shim
    # chmod 0700 /usr/local/share/shim
    # openssl req -newkey rsa:4096 -nodes -keyout /usr/local/share/shim/MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out /usr/local/share/shim/MOK.crt
    # openssl x509 -outform DER -in /usr/local/share/shim/MOK.crt -out /usr/local/share/shim/MOK.cer
    

    把生成的证书复制到 EFI 分区里,之后重启的时候需要导入这个证书:

    # cp /usr/local/share/shim/MOK.cer /boot/efi/
    
  2. pacman 在每次更新内核时给内核签名:

    /etc/pacman.d/hooks/999-sign_kernel_for_secureboot.hook 里添加以下内容:

    [Trigger]
    Operation = Install
    Operation = Upgrade
    Type = Package
    Target = linux
    Target = linux-lts
    Target = linux-hardened
    Target = linux-zen
    
    [Action]
    Description = Signing kernel with Machine Owner Key for Secure Boot
    When = PostTransaction
    Exec = /usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key /usr/local/share/shim/MOK.key --cert /usr/local/share/shim/MOK.crt --output {} {}; fi' ;
    Depends = sbsigntools
    Depends = findutils
    Depends = grep
    
  3. 给现在的内核签名:

    $ ls /boot/vmlinuz-*
    /boot/vmlinuz-linux
    # sbsign --key /usr/local/share/shim/MOK.key --cert /usr/local/share/shim/MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux
    $ # 如果还装了其它内核的话,把命令里内核文件名称给改一改之后进行同样操作
    
  4. GRUB 进行签名:

    $ GRUB_MODULES="all_video boot btrfs cat chain configfile echo efifwsetup efinet ext2 fat font gettext gfxmenu gfxterm gfxterm_background gzio halt help hfsplus iso9660 jpeg keystatus loadenv loopback linux ls lsefi lsefimmap lsefisystab lssal memdisk minicmd normal ntfs part_apple part_msdos part_gpt password_pbkdf2 png probe reboot regexp search search_fs_uuid search_fs_file search_label sleep smbios squash4 test true video xfs zfs zfscrypt zfsinfo"
    # grub-install --target=x86_64-efi --efi-directory=/boot/efi --modules="${GRUB_MODULES}" --sbat /usr/share/grub/sbat.csv
    # cp /boot/efi/EFI/endeavouros/grubx64.efi /boot/efi/EFI/Boot/
    # sbsign --key /usr/local/share/shim/MOK.key --cert /usr/local/share/shim/MOK.crt --output /boot/efi/EFI/Boot/grubx64.efi /boot/efi/EFI/Boot/grubx64.efi
    
  5. shim 需要的文件复制到 EFI 分区里,并创建启动项:

    # cp /usr/share/shim-signed/shimx64.efi /boot/efi/EFI/Boot/bootx64.efi
    # cp /usr/share/shim-signed/mmx64.efi /boot/efi/EFI/Boot/
    # efibootmgr --unicode --disk /dev/sdX --part Y --create --label "Shim" --loader /EFI/Boot/bootx64.efi
    

    最后那个命令需要把 XY 给相应改成自己的硬盘和分区序号(当然 NVME 盘的硬盘路径稍有不同)。

  6. 重启,到 BIOS 里把 Secure Boot 打开,正常启动电脑。此时应该会进入到 Shim 的界面,显示签名出错,之后提示要录入证书。进入查找文件的界面后找到第一步里我们复制的 MOK.cer 文件,录入之后就可以正常启动了。
  7. 如果没法正常启动的话就关掉 Secure Boot,找到 GRUB 启动项启动再来一次吧。
  8. 之后如果 GRUB 更新了的话需要手动进行签名操作。并且,因为 GRUB 会默认把自己的启动优先级调到最高,我们需要每次 GRUB 更新的时候把启动顺序给调回来。

    # efibootmgr  # 查看当前启动顺序
    # efibootmgr -o 0002,0001  # 自定义启动顺序,请按自己机器的情况调整
    

另外需要注意的是,有些 BIOS 在掉电之后会直接丢失我们设置好了的 UEFI 引导项,此时可能实现开机开不了、Windows(双系统)提示 PIN 丢失等等问题。请做好心理准备……我的经历请见BIOS 掉电中恢复,也许会对你有所帮助。

2.0.1. GRUB 外观调整

开启 Secure Boot 之后,目前 GRUB 不能正常加载字体,接连着就是无法调整分辨率。字体的话暂时没有简单一点的方法(见 [SOLVED] prohibited by secure boot policy after grub update)。分辨率的话,如果能看得懂 /etc/grub.d/00_header ,建议把里面 set gfxmode=${GRUB_GFXMODE} 这一行的位置挪出 if 块。改动后重新生成配置即可:

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

2.1. 网络配置

请务必把 systemd-networkd 禁用( mask )掉。它和 NetworkManager 实际上是有冲突的(例如二者都启动的话 network-online.target 就会延迟两分钟才能完成)。虽然理论上 systemd-networkd 一般是已经被 disable 了的,但是通过例如 systemd-network.socket 或者是DBus 那边的 dbus-org.freedesktop.network1.service 都能够把它启动起来,而且这种方式你甚至基本查不到是哪个天杀的程序启动的它。

总之,解决这个问题最简单的方法就是 mask 彻底禁用:

# systemctl mask systemd-networkd.service

3. 个人常用软件

如果在官方源和 Arch Linux 中文社区仓库里都找不到的话就去 AUR 里看一下吧。(虽然 EndeavourOS 下 yay 命令查找起来的确非常方便。)另外,下面提到包名其实也可能会变动,届时就各种变通搜索一下吧。

3.1. 中文字体

毕竟也是直接从包管理器安装的,所以也就直接放在软件一节里了。

  • Noto 系列字体:Google 出品。目标是消除□□□这种缺失字体的“豆腐块”(Noto 即 No Tofu)。有衬线和无衬线的字体都包括了。
    • noto-fonts: 拉丁字体
    • noto-fonts-cjk: CJK 指中文(C)、日文(J)、韩文(K),包括这几种东亚语言的字体。
    • noto-fonts-emoji: 大家都喜欢的 Emoji。电脑上至少需要装一款 Emoji 字体才能显示 Emoji,默认好像没有装,如果没有其它偏好的话不妨就先装上这款吧。
    • noto-fonts-extra: 不知道是啥。
  • Source Han Sans/Serif 系列字体:Adobe 出品。

    不同的东亚语言对应的字体包也不同(简体中文、繁体中文(香港台湾也不同)、日文、 韩文等等),这里就不列举的。搜 source-han 一般可以搜出所有变种的包。(FYI, Sans 指无衬线字体,Serif 指有衬线字体。)

  • Sarasa Gothic:更纱黑体,个人用的编程字体,能够使一个中文和两个英文字符等宽。 包名是 ttf-sarasa-gothic

3.2. 桌面环境

个人现在用的是 LXQt + i3,其中前者是用 EndeavourOS 安装程序安装的,后者想要和前者一起使用则需要一些配置。可以参考 i3/Sway + LXQt

3.3. 日用软件

3.3.1. 命令行运维相关

小工具的话我应该会更多在 Linux 小小笔记那边更新,这边是一些日用软件的记录。

  • emacs: 个人用的编辑器,其实配置好后命令行里我也会 alias vim=emacs

    个人用的是 Spacemacs,推荐安装的版本以及其它常用配置方案请看 Emacs 笔记

    顺便一提,Emacs 可以用来“远程”(广义)访问文件,所以配置好本地的 Emacs 之后就可以用它通过 SSH 来操作服务器上的文件,或是通过 sudo 来跨权限编辑等等。非常推荐。例子:

    • emacs /sudo::/etc/hosts : 用当前用户的 Emacs 配置来编辑 /etc/hosts 文件, 但是使用 root 权限来读写。
    • emacs '/ssh:you@remotehost|sudo:remotehost:/path/to/file' : 同上,但是通过 SSH 在远程机器上使用 root 权限来读写。
  • vim: 在没有 Emacs 条件的时候个人用的命令行编辑器,无需多解释。
    • (脏话)我不敢想象 Vim 的默认配置没法直接用 /etc/vimrc 来覆盖。(可以,但不太直接。)Unix 系软件大多都是遵从着<默认配置> -> <系统级配置> -> <用户配置 > 的逻辑的,后者可以覆盖前者。(虽然说是大多,但除了现在的 Vim 我是想不到一个反例就是了。)Vim 这种 <系统级配置> -> <默认配置> 异或 <用户配置> 的反人类设计我是的的确确无法理解。算了之后还是用 Emacs TRAMP 吧……非要用的话可以在配置里加两行:

      unlet! skip_defaults_vim
      runtime! defaults.vim
      let skip_defaults_vim=1
      
    • 个人习惯禁用鼠标操作,因为与其记住一大堆注意事项还需要额外记两个随意的 register,不如直接鼠标在终端里选中复制。特别是隔着一层 SSH 的时候也只能后者, 很多发行版上 Vim 的这种默认处理 cursor 事件的行为就有点恼人了……两种方法:
      • /etc/vimrc : 加上 set mouse=set ttymouse= 两行。
      • 运行 Vim 后使用 :set mouse-=a 命令。
  • zsh: Shell。配合 Oh My Zsh 使用。

    注意迁移环境变量(因为 .zshrc 似乎默认不会执行 .profile 等文件)。

    • 个人会加上 zoxide 插件,原来用的是 fasd 但是和 zsh-autocomplete 不兼容。 需要安装 zoxidefzf 包。另外, oh-my-zsh 虽然有 zoxide 包但是没什么可以自定义的,感觉还是手动 eval "$(zoxide init zsh --cmd=j)" 更好些(个人习惯用 j )。再另外, zoxide 的自动补全有点别扭,需要加个空格,不能直接 <tab> 而需要 j foo<space><tab>
  • etckeeper: 记录 /etc 里配置文件的变化,说不定哪天会用上?(也说不定哪天都用不上。)
  • diffuse 1 (虽然其实可能可以用 Emacs 的 ediff 来替代,另外也可以考虑一下更重量级的 Meld。)
  • ncdu 1
  • ripgrep: Grep 的平替?
  • screen: 用 SSH 远程连过来的时候会用到。
  • xclip 1
  • xdotool 1
1

已记录在 Linux 小小笔记

下面是有 GUI 的。

  • gparted: 硬盘分区程序。
  • gsmartcontrol: 硬盘 S.M.A.R.T. 信息查看程序,但是似乎暂时只支持 SATA 硬盘 (也就是说 NVME 等的不行)。

Office 与多媒体 =============

  • AlphaPlot: 个人处理数据时有时会用它来处理(特别是不想码 Python 的一些时候)。
  • Calibre: 电子书管理以及格式转换软件,印象中也有一些用于 DeDRM 的插件,总之是各种功能都可以有。
  • easyeffects: 调整音效(似乎需要确认一下系统音频使用的是 pipewire )。我个人因为用的耳机坏了半边,所以想要把双声道变成单声道,可见 How can I downmix stereo audio output to mono in PipeWire。EndeavourOS 上默认用的音频似乎就是 pipewire 所以可以直接用,转单声道需要额外安装 calf 包(Calf Studio Gear)。
  • Feishin: Jellyfin(一个可以自建的多媒体服务器)客户端。
  • ffmpeg: 视频/音频文件格式转换以及处理。命令行的,功能极多,但是常用命令应该都可以在网上找到。
  • Flacon: 音乐 CUE 分段。
  • GeoGebra: 简单数学绘图。但是它的许可证有些问题(说是 GPL,但附加了条款,而 GPL 是不允许附加条款的,而且条款似乎是禁止盈利使用来着),个人不推荐使用。
  • GoldenDict: 词典程序。
  • gThumb: 图片管理。
  • Kalzium: 元素周期表。
  • KDEConnect: 手机到电脑的互联,但会受限于网络条件。如果实在没办法的话可以尝试一下 WebWormhole
  • LibreOffice: 勉强能够代替 Microsoft Office 的全家桶。

    中文用户别忘了在设置( Tools -> Options )里找到 Language Settings -> Language 然后把=Default Languages for Documents= 里的 Asian 给勾选上改成中文。另外个人也习惯到设置里的 LibreOffice Writer -> Basic Fonts 里把默认字体改成 Times New RomanSimSun (需要自行安装对应字体)。

    如果系统用的是黑暗模式然后 LibreOffice 里的图标和暗色背景融为一体了的话,可以到=Tools -> Options= 设置里找到 LibreOffice -> ViewAppearance 里的 Mode 改成 Dark

  • picard: 音乐元信息管理。
  • qBittorrent: BitTorrent 客户端,听说性能好一些。
  • sagemath: 符号数学计算。其实 sympy + TeXmacs 基本上也可以用了。
  • TeX: 现在都没弄懂怎么比较方便地把中文文档搭建起来……建议没有特殊要求(期刊、合作写作等等)就用下面那个。
  • TeXmacs: 怎么介绍好呢?既然 Emacs 是个操作系统,那么可以说 TeXmacs 就是立志做一个科学排版用的操作系统?更多介绍可以见豆瓣上的 TeXmacs 图文介绍(新增CV效果)

    虽然说期刊可能也会有投稿格式的要求,不一定认(或者说是大概率不认)TeXmacs,但是像我这样懒得记 LaTeX 命令(而且被 LaTeX 时不时出现的找不到来由的错误折腾了遍) 的人,用来导出 LaTeX 还是很不错的。

  • VLC: 算是比较万能的视频/音频播放器。
  • Zotero: 文献管理程序,建议配合浏览器插件使用。

    Zotero 有个非常影响使用体验的点:PDF 阅读器的最右边不是滚动条而是一个可以拉出来的侧边栏…… 真正的滚动条在最右边往回几个像素。暂时没有找到解决方法,反正我每次拉滚动条都会把侧边栏拉出来……

    41hst7Jyzq6wIpW.gif

    The Frustration.gif

    临时的解决办法是到菜单的 Tools -> Developer -> Run JavaScript 里面去执行下面的代码,但是一重启 Zotero 就会还原,而且 PDF 阅读器这样不知道为什么就没法做笔记了。

    document.getElementById('zotero-context-splitter').style.display = 'none'
    

3.3.2. 系统相关

  • Fcitx 5: 输入法。中文的话装 fcitx5-imfcitx5-chinese-addons

    环境变量建议放在 ~/.xprofile 里,不要忘了格式是 export 变量名=值

    另外,如果用 Emacs 的话可能会发现有时候输入不了中文。(我的情况是 Emacs 以 daemon 启动,然后似乎不知道怎么样就通过 DBus 启动了 Fcitx。这在一般的 Xorg 下使用还好,但是如果是通过 TTY 使用的话,因为那个时候没有 Xorg 进程,所以 Fcitx 没法绑定到 XIM,最终进入到 Xorg 之后,除非手动退出再重新运行,否则无法在使用 XIM 的应用程序里使用 Fcitx。)其实也有人对 DBus 这种不分三七二十一胡乱启动程序的“功能” 有些微辞啦。无论如何,解决办法之一就是直接让 DBus 不再能够启动 Fcitx, 删除 /usr/share/dbus-1/services/org.fcitx.Fcitx5.service 这个文件。然后如果是 Arch Linux 的话,建议在 /etc/pacman.conf 里加上 NoExtract = usr/share/dbus-1/services/* 禁止安装 DBus 的启动文件。

  • GNOME Keyring: 似乎挺多软件都要用到的提供密码、密钥管理功能的程序。

    建议安装 gnome-keyring 以及图形界面的 seahorse

  • Optimus Manager: 用于笔记本的核显 + Nvidia 显卡的切换。

3.3.3. 互联网

  • Firefox: 不需要解释了,浏览器。

    当然,浏览器缺了插件不太行,除此之外 Firefox 的 about:config 还有一大堆可以调的东西。

  • xray: 也不需要解释国内网络现状。
  • Thunderbird: 邮件客户端,也可以当 RSS 浏览器来用,附带日历可以用一些 CalDAV 服务来与手机同步。

建议 Firefox 和 Thunderbird 都配合 profile-sync-daemon 来使用。 profile-sync-daemon 并没有提供 Thunderbird 的配置,需要从 Firefox 的配置修改而来。

  1. profile-sync-daemon

    https://wiki.archlinux.org/title/Psd 。是一个把浏览器的用户数据(部分)搬到内存里以减少硬盘读写的程序。配置方法还是看 Wiki 更好,这里不细说。推荐使用 Overlayfs 模式。

    因为 profile-sync-daemon 并没有提供 Thunderbird 的配置,要想对 Thunderbird 也用的话,你可以从 AUR 安装 profile-sync-daemon-thunderbird 。或者你也可以手动设置,在 /usr/share/psd/browsers/thunderbird 里写入下面内容:

    if [[ -d "$HOME"/.thunderbird ]]; then
        index=0
        PSNAME="$browser"
        while read -r profileItem; do
            if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
                # path is not relative
                DIRArr[$index]="$profileItem"
            else
                # we need to append the default path to give a
                # fully qualified path
                DIRArr[$index]="$HOME/.thunderbird/$profileItem"
            fi
            (( index=index+1 ))
        done < <(grep '[Pp]'ath= "$HOME"/.thunderbird/profiles.ini | sed 's/[Pp]ath=//')
    fi
    check_suffix=1
    

    无论哪种方法,之后在配置文件的 BROWSERS=(...) 里面加入 thunderbird 即可。 (Zotero 其实也类似,参见 AURprofile-sync-daemon-thunderbird 。)

3.3.4. 开发

  • Godot (mono)
  • IPython
  • IntelliJ IDEA

    基本上是最常用的 Java IDE 了吧,之前竟然忘了装了。个人习惯装 IdeaVIM,加上 intellimacs(Spacemacs 快捷键),然后配合 Emacs 快捷键。

  • JDK
  • Octave
  • PDM
  • Yarn

VS Code 会单独开一节来安装和配置。

  1. Go (The Language)

    起因是我平等地讨厌所有不遵守 XDG Directory Spec 的程序:

    $ ls ~
    Desktop
    Documents
    Downloads
    go <----------
    Library
    Music
    Pictures
    Public
    Templates
    Videos
    Workspaces
    

    ……Golang 你好意思么。要解决的话下面选一行执行即可。

    $ go env -w GOPATH=$HOME/.cache/go
    $ go env -w GOPATH=$HOME/.local/share/go
    

3.4. Windows 双系统安装

工作学习还是需要用到一些 Windows 下的软件所以还是需要双系统。安装时有几个要点:

  • Windows 11 会自动重复利用现有的 EFI 分区来存放自己的启动文件。所以如果你有个没清理完的硬盘里面留了个 EFI 分区,那到时可能会比较难办……
  • 如果有光盘或是 U 盘刻录倒还好,如果想直接把安装文件放硬盘上的话,你就需要把大于 4 GBinstall.wim 文件给想方设法放到 FAT32 分区上。

    如果用的是 Windows 系统,那么可以搜索一下用 DISM 命令行来分割 wim 文件的命令。如果用的是 Linux 的话,可以尝试一下 wimlib 包里的 wimsplit 来把文件分割成小于 4 GB 的小块,之后把分割好的 swm 文件作为 install.wim 的代替给复制过去就好了。

    $ wimsplit /mnt/sources/install.wim /tmp/install.swm
    

    另外,我不清楚是不是不同电脑都会自动扫描启动项。如果需要在 Linux 下手动添加启动项的话,可以了解一下 efibootmgr

  • Linux 下默认会往硬件时钟里储存 UTC 时间,而 Windows 则会储存当地时间。在中国, 这两种时间会有八小时的差别。

    建议是把 Windows 的储存变更为 UTC 来统一两个系统下的时间。设置方法见 Systemtime#UTCinMicrosoftWindows

3.4.1. Windows 软件

不太想给 Windows 单独一篇文章,所以也写在这里吧。

  1. UEFI 营救

    之前说了 BIOS 掉电可能会出引导问题。我的主板似乎就算掉电了也会自动启动 Windows, 因此救援是从 Windows 下进行的。主要用到的软件有两个:

    • Ext2fsd: 最原先的版本已经没人维护了,现在主要用的都是后人的 Ext3fsd/Ext4fsd 的分支。在救援时主要用来挂载 EFI 分区,也可以用 WinEFIMounter
    • BOOTICE: 用于修改 UEFI 启动项,主要就是打开 EFI 分区之后选中对应的 .efi 文件。 这个软件并不开源,而且原作者网站也没有了,所以网上到处搜然后希望不会下到病毒…… 所以最好的办法还是弄一个救援 Linux USB 镜像。当然你也可以使用一下 EasyUEFI。
  2. Office 设置
    • 关闭领英功能。
    • 关闭“选定时自动选定整个单词”。是人能想出来的功能?
    • 关闭“默认情况下,自动保存的文件储存在云中的 PowerPoint”,打开“默认情况下保存到计算机”。

评论

This one-pixel image serves as a page view tracker and nothing more. This feedback keeps me motivated, because very few people ever comment.