Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arch Linux 系统配置篇 #75

Open
lei4519 opened this issue May 11, 2024 · 0 comments
Open

Arch Linux 系统配置篇 #75

lei4519 opened this issue May 11, 2024 · 0 comments

Comments

@lei4519
Copy link
Owner

lei4519 commented May 11, 2024

2024-04-23

书接上回 Arch Linux 系统安装篇

进入系统之后需要对新系统进行设置

Tip

里面有些软件是 wayland 下的,如果是其他的窗口系统需要寻找对应的安装配置

必要系统设置

要先保证电脑的 wifi/键盘/鼠标 等可以正常使用,不然一切都是空谈

联网

Tip

如果有网线跳过这一步

NetworkManager - ArchWiki

因为之前选的是 NetworkManager 管理网络,所以可以以下步骤任选其一

  • 命令行操作:nmcli device wifi connect <网络名> password <密码>
  • TUI 操作:nmtui
  • 图形界面操作:nm-connection-editor

还可以安装 networkmanager-dmenu: Control NetworkManager via dmenu ,可以通过 dmenurofi 管理 NetworkManager

Tip

如果你是用 iwd 管理网络,可以安装
iwgtk: Lightweight wireless networking GUI (front-end for iwd)

蓝牙

Bluetooth - ArchWiki

有几种方式

bluetoothctl

这里以最基础的 bluetoothctl 为例

安装
pacman -Syu bluez bluez-utils  
systemctl enable bluetooth.service  
systemctl start bluetooth.service  
使用
bluetoothctl  
default-agent  
power on  
# 扫描  
scan on  
# 设备开启蓝牙,会看到 [NEW] Device MAC_address Name  
# 找到自己的设备  
# 配对  
pair MAC_address  

系统升级和备份

这位同学你也不想辛辛苦苦装好的系统又被玩崩了吧~

Important

升级前备份! 备份! 备份!

建议安装 informant: An Arch Linux News reader and pacman hook

这是一个 pacman hook,可以保证你在升级系统前必须先阅读 Arch Linux 的新闻,否则就会中断升级动作

升级之后 检查孤立包和丢弃的包,命令在下面 [ > [Pacman](https <//wiki.archlinux.org/title/Pacman>) 速览](Arch%2520Linux%2520%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E7%AF%87.md##%5BPacman%5D(https%2520%3C//wiki.archlinux.org/title/Pacman%3E)%2520%E9%80%9F%E8%A7%88)

Timeshift

sudo pacman -S timeshift  
# 参考 https://github.com/linuxmint/timeshift/issues/147  
# 它在 Wayland 中运行正常,只是它当前的启动方式(以 root 身份)正在丢失 Wayland 环境  
# 并且会回退到 x11。通过运行 sudo -E ,它可以在启动时保留 OP 的环境(因此它作为 wayland 客户端运行)  
sudo -E timeshift-launcher  

启动之后选择 Wizard 根据自己的需要配置,我选择每天进行一次快照,保留 15 天的记录

与计划在一天中的固定时间进行备份的类似工具不同,Timeshift 设计为每小时运行一次,并且仅在快照到期时才拍摄快照。

这更适合每天打开笔记本电脑和台式机几个小时的台式机用户。

为此类用户安排固定时间的快照将导致备份丢失,因为在安排快照运行时系统可能尚未运行。

通过每小时运行一次并在到期时创建快照,Timeshift 可确保不会错过备份。

其他系统设置

Pacman 速览

pacman

# 安装  
pacman -S package_name  
# 删除,保留依赖项  
pacman -R package_name  
# 删除,不保留依赖项(推荐)  
pacman -Rs package_name  
  
# 升级包/系统  
pacman -Syu  
  
# 查询  
# queries the local package database with the `-Q` flags  
pacman -Qs package_name  
# the sync database with the `-S` flag  
pacman -Ss package_name  
# files database with the `-F` flag  
pacman -F string  
  
# 列出所有显示安装的包  
pacman -Qqe  
  
# query package information  
pacman -Si package_name  
pacman -Qi package_name  
  
# 列出不再需要作为依赖项(孤立项)的所有包  
pacman -Qdt  
  
# 列出所有显式安装且不需要作为依赖项的包:  
pacman -Qet  
  

系统升级后的清理动作

# 列出不再需要作为依赖项(孤立项)的所有包  
pacman -Qdt  
# 对于递归删除孤立包及其配置文件  
pacman -Qdtq | pacman -Rns -  
# 如果某些包不希望被当作孤立包,可以改为显示安装  
pacman -D --asexplicit package  
# 找到所有损坏的软链接  
find / -xtype l -print  

清理包缓存

pacman - ArchWiki

sudo systemctl enable paccache.timer  
sudo systemctl start paccache.timer  

yay

# 安装 yay,ARU 助手 或者可以选择 paru  
# 但是 hyprland 中推荐使用 yay  
git clone https://aur.archlinux.org/yay.git  
cd yay  
makepkg -si  
# 首次安装后配置  
yay -Y --gendb  
yay -Syu --devel  
yay -Y --devel --save  
  
yay -S google-chrome  
yay -S rofi  

Hyprland 配置

Arch Linux 系统安装篇 里已经选了 hyprland,所以这里基本的配置应该已经完成了

我们直接进行配置的安装即可,可以在 hyprland · GitHub Topics · GitHub 中挑选自己喜欢的配置,我选择的方案和配置参考 dotfiles#hyprland

Tip

热门的配置方案中,会把相关的系统配置、软件都安装好
建议再进行其他配置之前,先把 hyprland 配置安装好,这样就可以省去一些工作

基本上安装完这个之后,系统就已经完全可用了

按键映射

底层映射

我习惯把 ctrl 放在 altcommand)的位置,所以要改一下按键

对于这种无脑重映射,最好是从底层修改,以不需要用运行程序的方法以提高性能 Map scancodes to keycodes - ArchWiki

步骤如下

查找键盘设备

Tip

后面涉及到键盘配置的都需要先找到自己的设备号

先安装 pacman -S evtest 用来查看按键的 scancode,安装好后,执行 sudo evtest

先选择自己的键盘设备 /dev/input/event$,如果不确定就一个一个试,试对了按键后屏幕会有输出

输出内容格式如下:

Event: time 1628668903.193667, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039  
Event: time 1628668903.193667, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0  

其中 KEY_CAPSLOCK 表示我按下的是 capslock 键,MSC_SCAN 后面的 value 70039scancodecode 58keycode

有了按键信息之后还需要设备信息做匹配,上面我们已经找到了自己的设备号了,通过以下命令查看设备

把 event$ 中的 $ 换成具体的设备号

cat /sys/class/input/event$/device/modalias  

/etc/udev/hwdb.d/ 中创建一个 90-remap-keyboard.hwdb 的文件

Tip

如果你想所有的键盘都交换,而不只是这一个键盘,可以写 evdev:input:b000*,而不具体指定到具体的设备上

evdev:input:b0003v05ACp0259*  
  # leftalt 和 leftctrl 交换  
  KEYBOARD_KEY_700e2=leftctrl  
  KEYBOARD_KEY_700e0=leftalt  
  # capslock 映射到 leftmeta  
  KEYBOARD_KEY_70039=leftmeta  

保存退出,更新 hwdb 数据库:

systemd-hwdb update  

激活配置

udevadm trigger  

程序映射

我喜欢把 ctrl 单击映射为 esc 按键,而与其他键组合时仍然是 ctrl 键,参考 Vim ESC 键的解决方案,这种功能就必须使用程序来实现了

最终选用了 kanata,因为我对 rust 比较熟。也可以看看 kmonad

kanata

具体配置和使用参考 dotfiles


Tip

以下内容仅为参考使用

evremap

参考 Input remap utilities - ArchWiki

这种方案的问题是,一旦换了键盘或者连接方式,就要重新修改配置文件

安装 evremap
yay -S evremap  
配置 evremap

copy https://github.com/wez/evremap/blob/master/pixelbookgo.toml 内容至自己本地,命名为 evremap.toml,记住存放的路径,后面要用

修改 evremap.toml ,参考 GitHub - evremap 进行个人配置,主要是 device_name 要配置对,不然会报错无法启动

配置好之后先测试一下

sudo evremap remap evremap.toml  

如果没有报错就可以正常使用了,可以去其他地方试一下按键有没有生效

开机自启动

udev

参考

这种方式可以在设备(蓝牙)触发相应事件时(自动连接后)执行命令

Tip

可以运行 udevadm monitor 后,把设备断开并重新链接,来查看具体的事件名称

查看设备信息,$device_name 就是上面 查找键盘设备 中的路径 eg: /dev/input/event18

udevadm info --attribute-walk --name=$device_name  

然后找到可以唯一标识自己设备的一些信息,比如 id/productid/vendorphys 之类的,用于规则匹配使用

编写规则

sudo nvim /etc/udev/rules.d/90-evremap.rules  

写入规则

ACTION=="add", SUBSYSTEM=="input", ATTRS{id/product}=="0220", ATTRS{is/vendor}=="05ac", ATTRS{phys}=="64:49:7d:a2:7d:34", RUN+="/usr/bin/evremap remap /evremap.toml"  

根据自己的设备情况把匹配条件写好

Important

注意,这里的 evremap.toml 路径不能放到自己的家目录,不然会无法正常启动

😭 我卡在这里好久

放在根目录最省事,也可以软连接到根目录 ln -s /home/lay/dotfiles/linux/evremap.toml /evremap.toml

然后重启测试


systemd

也是 evremap Readme 中推荐的方式,但是!

Important

如果设备在开机的时候没有挂载的话(比如蓝牙还没有连上),通过这种方式 evremap 会启动失败,还需要手动重启

所以这种方法对于蓝牙键盘来说完全不能用,因为系统没启动前蓝牙肯定没有连上啊,但如果你是有线键盘,这种还是比较省事

使用如下命令创建 systemd service

sudo nvim /etc/systemd/system/evremap.service  

https://github.com/wez/evremap/blob/master/evremap.service 中的内容写入,并把 evremap.toml 的绝对路径替换成你自己的本地路径

然后使用 systemctl 控制开机自启动

sudo systemctl daemon-reload  
sudo systemctl enable evremap.service  
sudo systemctl start evremap.service  

Dotfiles

TUI、shell、输入法、nvim、terminal 等安装和配置,可以参考 GitHub - lei4519/dotfiles: vim、linux、mac 配置,这里不再赘述

有用的软件

我平时喜欢用终端,所以比较钟意 TUI

awesome-tuis
awesome-shell
awesome-zsh-plugins
awesome-cli-apps

固态硬盘清理

Solid state drive - ArchWiki

sudo systemctl enable fstrim.timer  
sudo systemctl start fstrim.timer  

睡眠和休眠

完善的 dots 配置应该会自动配置好睡眠和休眠

Power management/Suspend and hibernate - ArchWiki

中文字体设置

Tip

建议先安装 Hyprland 配置 ,如果你选择的配置没有自动帮你配置字体,再进行如下操作

参考:

# 安装中文字体  
sudo pacman -S ttf-roboto noto-fonts noto-fonts-cjk adobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts ttf-dejavu  
# 配置字体  
nvim ~/.config/fontconfig/fonts.conf  

复制以下内容,然后重启电脑即可

<?xml version="1.0"?>  
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">  
<fontconfig>  
  <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">  
    <its:translateRule  
      translate="no"  
      selector="/fontconfig/*[not(self::description)]"  
    />  
  </its:rules>  
  
  <description>Android Font Config</description>  
  
  <!-- Font directory list -->  
  
  <dir>/usr/share/fonts</dir>  
  <dir>/usr/local/share/fonts</dir>  
  <dir prefix="xdg">fonts</dir>  
  <!-- the following element will be removed in the future -->  
  <dir>~/.fonts</dir>  
  
  <!-- Disable embedded bitmap fonts -->  
  <match target="font">  
    <edit name="embeddedbitmap" mode="assign">  
      <bool>false</bool>  
    </edit>  
  </match>  
  
  <!-- English uses Roboto and Noto Serif by default, terminals use DejaVu Sans Mono. -->  
  <match>  
    <test qual="any" name="family">  
      <string>serif</string>  
    </test>  
    <edit name="family" mode="prepend" binding="strong">  
      <string>Noto Serif</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>sans-serif</string>  
    </test>  
    <edit name="family" mode="prepend" binding="strong">  
      <string>Roboto</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>monospace</string>  
    </test>  
    <edit name="family" mode="prepend" binding="strong">  
      <string>DejaVu Sans Mono</string>  
    </edit>  
  </match>  
  
  <!-- Chinese uses Source Han Sans and Source Han Serif by default, not Noto Sans CJK SC, since it will show Japanese Kanji in some cases. -->  
  <match>  
    <test name="lang" compare="contains">  
      <string>zh</string>  
    </test>  
    <test name="family">  
      <string>serif</string>  
    </test>  
    <edit name="family" mode="prepend">  
      <string>Source Han Serif CN</string>  
    </edit>  
  </match>  
  <match>  
    <test name="lang" compare="contains">  
      <string>zh</string>  
    </test>  
    <test name="family">  
      <string>sans-serif</string>  
    </test>  
    <edit name="family" mode="prepend">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match>  
    <test name="lang" compare="contains">  
      <string>zh</string>  
    </test>  
    <test name="family">  
      <string>monospace</string>  
    </test>  
    <edit name="family" mode="prepend">  
      <string>Noto Sans Mono CJK SC</string>  
    </edit>  
  </match>  
  
  <!-- Windows & Linux Chinese fonts. -->  
  <!-- Map all the common fonts onto Source Han Sans/Serif, so that they will be used when Source Han Sans/Serif are not installed. This solves a situation where some programs asked for a font, and under the non-existance of the font, it will not use the fallback font, which caused abnormal display of Chinese characters. -->  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>WenQuanYi Zen Hei</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>WenQuanYi Micro Hei</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>WenQuanYi Micro Hei Light</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>Microsoft YaHei</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>SimHei</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Sans CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>SimSun</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Serif CN</string>  
    </edit>  
  </match>  
  <match target="pattern">  
    <test qual="any" name="family">  
      <string>SimSun-18030</string>  
    </test>  
    <edit name="family" mode="assign" binding="same">  
      <string>Source Han Serif CN</string>  
    </edit>  
  </match>  
  
  <!-- Load local system customization file -->  
  <include ignore_missing="yes">conf.d</include>  
  
  <!-- Font cache directory list -->  
  
  <cachedir>/var/cache/fontconfig</cachedir>  
  <cachedir prefix="xdg">fontconfig</cachedir>  
  <!-- the following element will be removed in the future -->  
  <cachedir>~/.fontconfig</cachedir>  
  
  <config>  
    <!-- Rescan configurations every 30 seconds when FcFontSetList is called -->  
    <rescan>  
      <int>30</int>  
    </rescan>  
  </config>  
</fontconfig>  

Ref

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant