写给root用户
1 | We trust you have received the usual lecture from the local System |
系统安装
按照以上步骤安装系统一般不会出问题, 但是需要注意两点:
- 双系统的时间不同步问题
ubuntu与windows双系统时间同步问题——简明指南里详细介绍了该问题产生的原因,即 Windows
与 Linux
对 RTC
差异处理。解决思路有两种,一是让 Linux
将硬件时钟当成系统时间,二是让 Windows
修改硬件时钟为 UTC
时间。第一种方法可能会导致 Linux
出问题,采用第二种方式较稳妥。参考 Linux Windows 双系统时间不一致 里面的修改方式,在 Windows
上以管理员打开 PowerShell
, 输入 Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
,重启 Windows
,联网更新时间(这一步一定要做,因为联网更新时间后,Windows
会重写硬件时钟)。这样再进入 Linux
时时间即可恢复正常。
- 双系统的 grub 引导
多系统boot的时候比较麻烦,按照简明指南中的方式,生成 grub
所需配置文件时,使用 grub-mkconfig -o /boot/grub/grub.cfg
并没有显示出 Windows Boot Manager
的项,此时不用担心,完成安装后,拔掉u盘,重启进入安装好的系统,再次执行一遍 grub-mkconfig -o /boot/grub/grub.cfg
即可。
查看系统信息
-
查看版本当前操作系统内核信息
uname -a
-
查看当前操作系统版本信息
cat /proc/version
-
RedHat查看版本当前操作系统发行版信息
cat /etc/redhat-release
-
查看CPU 信息
cat /proc/cpuinfo
还有其他一些,可参考Linux查看系统基本信息,版本信息(最全版)
字体安装
安装一些支持中文的字体
1 | sudo yay -Syu nerd-fonts-complete |
系统工具
截图工具
1 | sudo pacman -Syu flameshot |
网络工具
1 | sudo pacman -Syu net-tools |
修改无线网卡名
1 | 获取网卡的mac 地址 |
nmcli 的使用
1 | 连接wifi |
如果想删除所有的 wifi 连接记录,可以使用下面的脚本:
1 | 获取所有wifi记录的uuid |
无线网卡同时连接 wifi和开启热点(目前仅在 ubuntu下测试过)。
这里需要借助一个工具 create_ap。
1 | sudo apt install procps hostapd iproute2 iw iwconfig haveged |
查看一下当前的网卡:
1 | lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 |
我这台笔记本电脑没有有线网卡,只有一个无线网卡 wlp0s20f3
,如果想更改网卡名,可以参考上面的内容。
测试 create_ap
是否工作正常:
1 | create_ap wlp0s20f3 wlp0s20f3 test 123456789 |
这将会创建一个名称为 test
,密码是 123456789
的热点。
常见错误排查:
ERROR: Failed to initialize lock
。删除/tmp/create_ap.all.lock
Your adapter can not transmit to channel xxx, frequency band 5GHz
。参考 issues 107,将create_ap
中的函数is_wifi_connected
改为:
1 | is_wifi_connected() { |
重新编译安装。该方法在我这里是 work 的。
通过配置文件对 wifi
信息进行配置。编辑 /etc/create_ap.conf
。
该文件的解析如下:
1 | CHANNEL=default #无线热点的频道设置为默认信道。 |
如果只是开一个2.4GHZ的热点,只需要修改下面的内容:
1 | WIFI_IFACE=wlp0s20f3 |
开启和关闭 wifi
:
1 | sudo systemctl start create_ap |
查看创建的热点:
1 | create_ap --list-running |
该指令会显示一个热点的 id。
查看连接的设备:
1 | create_ap --list-clients 6138 # 该 id 可由上一步的命令查看得到 |
疑难问题请参考 Xubuntu16.04系统中create_ap开启5G网络的踩坑记录,这里面列出了11个大坑及解决方法,尤其是我想开一个5GHZ频段的热点开不出来的时候,是这篇文章救了我。
魔法上网
采用v2ray,客户端使用v2rayA,设置透明代理的方式翻墙
蓝牙
蓝牙问题,使用 bluetoothctl
来控制连接,但是如果是头戴耳机,还需要安装 pulseaudio
,记得开启服务,systemctl --user enable pulseaudio.service
使用简明指南:
1 | bluetoothctl |
dwm
安装 dwm,借助插件 auto-start 来运行一些开机命令,如开机自启动fcitx5,需要新建 ~/.dwm
文件夹,在下面新建 autostart.sh
,填入 fcitx5 -d
我这里遇到个很奇怪的问题,我之前把 autostart.sh
等这些脚本文件备份到 Github中了,重装系统的时候想直接git下来把相关的脚本放到对应位置,但是 dwm 始终不去执行这些脚本,我检查过脚本的位置、权限、所属用户,都没有问题。自己把这些脚本重新新建一遍,dwm就可以执行了,甚是奇怪。
开机自动启动startx,我试过在 .xinitrc
中添加 startx
的方式,但是无效。我的做法是在~/.zshrc中加入
1 | if [ -z "${DISPLAY}" ] && [ "${XDG_VNTR}" -eq 1 ];then |
自定义状态栏,内存占用量、网速、音量 参考脚本
使用前安装一个 sudo pacman -Sy bc
工具用于计算网速
dwm 快捷键
具体的快捷键要看 config.def.h
中自定义的,我这边只记录自己使用的。
Win+数字
,切换标签页
Win+l
,两个窗口左右分屏的情况下,向左缩屏幕
Win+h
,两个窗口左右分屏的情况下,向右缩屏幕
Win+Shift+c
,关闭当前窗口
Win+d
,窗口横向排列(上下排列)
Win+i
,窗口纵向排列(左右排列)
Win+Enter
,窗口位置互换
Win+j
,在多个窗口之间切换(顺时针)
Win+k
,在多个窗口之间切换(逆时针)
Win+t
,平铺模式
Win+m
,单窗口模式
Win+f
,浮动模式
tty 自动登录
实现方式是使用 systemed
服务。
参考:
Arch Wiki: getty
执行 systemctl edit getty@tty1
命令,这会生成一个 /etc/systemd/system/getty.target.wants/getty@tty1.service
文件, 输入以下内容:
1 | [Service] |
注意,第二行的 ExecStart=
不能省,一定要有。
重启系统,如果还是需要手动登录的话,去检查一下生成的文件中是否有以上内容。
输入法
安装fcitx5输入法时,要记得在 /etc/environment
中添加
1 | GTK_IM_MODULE=fcitx5 |
否则在终端、emacs等环境中无法调出输入法来。
在我安装好 emacs 后,发现一些快捷键无法使用,例如emacs 跳转到文件末尾的快捷键 M->
无效。我开始还以为是 fcitx5 拦截了一些快捷键,在fcitx5 的各种快捷键里找了半天也没找到,直到把 fcitx5 开机自启关闭后问题仍在,我才意识到是 dwm 将 Alt
键拦截了。dwm 默认切换窗口的快捷键是 Alt+数字
,导致 Alt
这个键在其他程序中失效。在 suckless 官网中找到 Change Mod1 key to the Windows key in config.h,里面提到目前已知的 GNU 程序中并没有使用 Win
键作快捷键的,因此将 Alt
键改为 Win
键盘是个较好的做法,在 config.h
中将 #define MODKEY Mod1Mask
改为 #define MODKEY Mod4Mask
即可。
这样以来,所有的 dwm 中默认使用 Alt
键的行为都改为使用 Win
键,例如切换窗口现在是 Win+数字
。但是我切换输入法的键是 Win+Spec
,这样一改输入法无法切换了,而 Ctrl+Spec
又与 emacs 中的块选择快捷键一致,权衡之下,只能把输入法切换的快捷键改为其他(或者去dwm的配置文件 config.h
中把含有 MODKEY+Spec
的代码行改为其他按键)。
旋转屏幕
通过 xrandr
查看当前连接屏幕的分辨率
1 | > xrandr 09:01:26 |
DP-2是我当前的屏幕,通过下面这条命令设置屏幕旋转:
1 | xrandr --output DP-2 --rotate left |
--output
指定的是屏幕,--rotate
指定的是旋转方向,这个参数可以设置成:normal
, left
, right
,inverted
。
如果是多个屏幕,可通过下面的命令设置屏幕位置:
1 | xrandr --output DP-2 --right-of DP-1 |
--right-of
还可以换成 --left-of
,--above
,--below
,--same-as
指定主屏幕:
1 | xrandr --output DP-2 primary |
rofi
sudo pacman -Sy rofi
emacs
参考我的另一篇博客。
系统迁移
这里所说的系统迁移,不是将一块硬盘里的系统换到另一块新的较大的硬盘中,插到电脑中继续使用,而是将该系统想办法复制到一块新的硬盘中,在完全新的硬件环境中成功启动。
假设你旧电脑中的系统已经是 Win
和 Arch
的双系统了(这样我就省去了描述配置 GRUB
的步骤)。
我的 Arch Linux 使用的是 btrfs 文件系统,旧电脑的配置如下:
硬盘的分配情况如下:
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
其中,sda
是一个 3T 的机械存储盘,sdb
是一个2T的机械存储盘,sdc1
是双系统的引导分区,sdc2
是Arch
的交换分区,sdc3
是 Arch
所在的系统盘,nvme0n1
是 Win11
所在的系统盘。
新电脑的配置如下:
硬盘的分配如下:
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
其中,nvme1n1
是新电脑中自带的硬盘,nvme1n1p1
是启动分区, nvme1n1p3
是 Win 11
的系统盘,nvme1n1p4
是存储盘。 nvme0n1
是在新电脑中加的新硬盘,准备将新的电脑也变成 Arch
和 Win11
双系统。
将原来设备双系统中的 Arch
迁移到新设备上来,主要参考这几个网站:
使用 Btrfs 快照进行增量备份,使用 Btrfs 快照备份,archlinux 基础安装。
基本思路是,将新硬盘先插入到旧电脑中,进入旧电脑的 Arch
系统中,使用 cfdisk
格式化新硬盘为 btrfs 文件系统。然后,在旧电脑的 Arch
系统中创建快照,发送到新硬盘中。之后,创建新硬盘中快照的快照(原因后面再讲)。将新硬盘插入新电脑上,进入u盘的 Arch
系统,将新硬盘中快照的快照作为子卷挂载。
在旧系统中格式化新硬盘
先将新硬盘插到旧电脑的主板上,开机进入 Arch
。使用 lsblk
查看当前硬盘,假设新硬盘显示为 /dev/nvme0n1
。
1 | sudo cfdisk /dev/nvme0n1 |
建立两个分区,一个作为 swap
分区,一个为 btrfs
格式的系统分区.
分别格式化。
1 | sudo mkswap /dev/nvme0n1p1 |
格式化好的分区如下所示。
1 | nvme0n1 259:0 0 476.9G 0 disk |
将 btrfs
分区挂载到 /mnt
下
1 | sudo mount -t btrfs -o compress=zstd /dev/nvme0n1p2 /mnt |
创建并转移快照
由于我们要将快照转移到新硬盘中,使用的命令是 btrfs send
和 btrfs receive
,btrfs send
要求待转移的快照只能是只读的,因此我们要先创建系统的只读快照。
在根目录下新建 /snapshot
目录,用于存放快照
1 | sudo mkdir /snapshot |
新建根目录 /
和 /home
的只读快照:
1 | sudo btrfs subvolume snapshot -r / /snapshots/root_snap |
其中,-r
是只读的意思。
将这两个快照转移到新硬盘中:
1 | sudo btrfs send /snapshots/root_snap | sudo btrfs receive /mnt/ |
新的快照是不占空间的,但迁移时候的速度取决于 /
和 /home
的大小。
由于这两个快照是只读的,你不能直接将新硬盘中的两个只读快照挂载为子卷,否则无法写入。因此我们要对快照再创建一个快照。
1 | sudo btrfs subvolume snapshot /mnt/root_snap /mnt/@root |
通过命令查看快照的情况:
1 | sudo btrfs subvol list -p /mnt |
你应该能看到4个条目,分别是 root_snap
,home_snap
,@root
,@home
。
卸载新硬盘,将其从旧电脑的主板上拆下,安装到新电脑中。
1 | sudo umount /mnt |
新电脑中的系统配置
进入 u盘的 Arch
,使用 lsblk
查看硬盘,假设新硬盘显示为 /dev/nvme0n1
。
开始挂载子卷:
1 | mount -t btrfs -o subvol=/@root,compress=zstd /dev/nvme0n1p2 /mnt # 挂载根目录 |
使用 genfstab
自动根据当前挂载情况生成并写入 fstab
文件:
1 | genfstab -U /mnt > /mnt/etc/fstab |
然后,切换到新硬盘的系统中:
1 | arch-chroot /mnt |
按照新电脑的CPU来选择微码并安装:
1 | sudo pacman -S intel-ucode # Intel |
为grub引导双系统作准备:
1 | sudo pacman -S grub efibootmgr os-prober |
最后生成 GRUB
所需的配置文件:
1 | sudo grub-mkconfig -o /boot/grub/grub.cfg |
注意,此时并不会找到 Windows Boot Manager
项,即无法将 Win
的启动项添加到 GRUB
中,原因本篇博客开始的时候有说,需要拔掉 U 盘重启系统,进入 Arch
后再执行一遍 grub-mkconfig
。
关于显卡驱动
2023-10-23 更新
经评论区老哥提醒,笔记本的显卡驱动有两种情况:只有独显的笔记本电脑显卡驱动的安装方式与台式机一样,独显直通屏幕;对于既有核显又有独显的笔记本电脑,绝大多数的独显将渲染后的画面送到集显,由集显输出到屏幕,因此要让独显与核显协同工作。
经摸索,使用 optimus-manager
成功切换到独显。
安装过程参考 Arch Linux 的双显卡配置,optimus-manager,archlinux 显卡驱动。
首先,intel cpu安装如下的驱动:
1 | sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel |
对于 Turing (NV160/TUXXX) 系列或更新的显卡,需要安装 nvidia-open
驱动。
1 | sudo pacman -S nvidia-open-dkms nvidia-settings lib32-nvidia-utils # 必须安装 |
然后安装 optimus-manager
:
1 | yay -S optimus-manager |
注意,一定要认真阅读 optimus-manager
的 github
上的说明。
博客 Arch Linux 的双显卡配置 中提到,电源管理工具 bbswitch
已经很久没有更新了,对于新的电脑来说,使用它可能会出问题;acpi_call
也是一个用于电源管理的工具,但是我没研究明白怎么用的;另外,optimus-manager wiki
A guide to power management options 提到:
It’s better than nothing, though not as good for power consumption as completely turning the card off.
反正我大多数时候都是插着电源使用笔记本电脑,电源管理什么的,不要也罢😆。
安装 nvidia-prime
:
1 | sudo pacman -S nvidia-prime |
安装好 optimus-manager
后,默认的显示模式还是集显, 可以通过 optimus-manager --status
查看。
如果直接在终端里切换的话,sudo optimus-manager --switch nvidia
,下次重启系统还是默认集显,我们需要设置一下,让系统每次开机都自动使用独显。
PS:我这里执行这条命令还报了错,参考 issue
GPU setup was initiated but Xorg post-start hook did not run,粗略的查到在执行 sudo optimus-manager --switch nvidia
之前要先执行 prime-offload
。下面是我的做法:
将 /usr/share/optimus-manager.conf
复制到 /etc/optimus-manager
下。
1 | sudo cp /usr/share/optimus-manager.conf /etc/optimus-manager/ |
编辑这个文件,sudo vim /etc/optimus-manager/optimus-manager.conf
,将 [AMD]
有关的内容注释掉,并且修改 startup_mode=integrated
这句为 startup_mode=nvidia
。
该文件的注释非常详细,每条指令的含义以及可选参数都写得很清楚,按需修改。
最后,修改 ~/.xinitrc
文件,添加这句:
1 | /usr/bin/prime-offload & |
重启系统,通过 optimus-manager --status
查看到如下信息:
1 | Optimus Manager (Client) version 1.5 |
另外,通过 nvidia-smi
查询到如下信息:
1 | Mon Oct 23 15:34:31 2023 |
独显驱动安装及切换成功!
1 | 一个一个地手动确保下面的包都被卸载 |
重启系统