Ubuntu

安装双系统

  • 首先进入windows,创建一个系统盘(需要一个u盘,不同太大,2-4g即可),烧录linux系统
  • 进入磁盘管理(Win+X,然后找到磁盘管理,或者按键K),分割新的盘,方法:右键选中要分盘的内容压缩卷(主力推荐250G以上,体验只需要50G左右即可)
  • 然后将制作好的系统盘插入插口,重启电脑。(这一步推荐电脑不要连接任何的外界设备)

Tip

需要注意的是,重启之前要关闭BitLocker,并且推荐使用混合显卡输出或者直接使用核显

  • 进入BIOS,在启动选项中,找到u盘的位置,并将其的优先级设置为最高(目的是让系统的UEFI从u盘启动)
  • 选择try or install ubuntu
  • 默认,一直到选择如何安装界面。选择最小安装(推荐),下一步推荐使用Something else选项,手动设置启动盘的选项
  • 找到新分的区域,分盘,将16384(16G)的空间分配给交换区(Logistic,ext4,swap,当然,内存越大swap越小即可),然后剩下的都可以直接分给/分区(Logistics,ext4,/
  • 默认,提示拔出u盘后按下enter,然后强制关机即可
  • 重启后即可进入ubuntu界面

Ubuntu 键盘fn功能区

关于fn功能区的问题,有的时候腹灵键盘的fn区无法正常使用,这个时候可以通过一些手段强制让fn分区编程F键而不是功能键(当然,按住fn之后还是功能键)

更改方法如下:

echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all
reboot # 重启之后生效

然后就可以正常使用了。

更改默认的终端模拟器

sudo update-alternatives --config x-terminal-emulator

这个是用于更改x-terminal-emulator这个的选项,但是默认打开的终端不是在这里打开的,而是下面的这两行命令更改:

gsettings set org.gnome.desktop.default-applications.terminal exec $(which terminal)
gsettings set org.gnome.desktop.default-applications.terminal exec-arg "-x"

你需要把terminal改成你的终端,如,wezterm,或者terminator。当然,直接改成绝对路径也可以。

Arch Linux

安装双系统

准备一个u盘,用于装载arch安装程序

下载一个arch的镜像(最新版即可,滚动更新)

烧录进u盘中

安装arch

修改bios进入u盘搭载的安装辅助镜像

联网

使用iwctl进行连接WiFi, 或者直接连接有线网(推荐)

 station <name> scan
 station <name> get-networks
 station <name> connect <essid>

修改时区

timedatectl set-utp true
timedatectl status

分盘

使用fdisk -l查看分区,找到想要挂在的盘,记录分区编号(一般都是/dev/nvme0n1px,其中x表示数字)

使用cfdisk /dev/nvme0n1进入tui界面, 进行分盘.

一般分盘swap需要16G, 主目录自由分盘. 不需要手动创建/home的分盘(后续可以使用btrfs的subvolume进行区分)

找到对应的free space, 然后new(按下Enter键选择下方的菜单, 左右键切换下方的菜单, 上下键切换上方的partition)

然后对于new的partition可以选择type, swap分区需要选择Linux swap类型, 普通的目录保持Linux filesystem即可

格式化

对于swap分区(以上图为例, 注意硬盘和partition的序号):

# create swap partition
mkswap /dev/nvme0n1p<*>
# mount swap
swapon /dev/nvme0n1p<*>

对于Linux filesystem分区, 这里使用btrfs作为文件系统:

mkfs.btrfs -f /dev/nvme0n1p<*>

Warning

这个操作会强制抹掉所有内容, 谨慎操作

挂载

使用mount指令

# mount main filesystem
mount /dev/nvme0n1p<*> /mnt
# mount efi partition
mount /dev/nvme0n1p1 /mnt/efi --mkdir

注意efi分区的挂载路径/mnt/efi是可以改的, 只要在/mnt里即可, 但是后面需要注意路径

安装基础软件

arch linux的安装是基于Pacman的, 包括pacstrap也是使用pacman进行安装. 因此所有对pacman的配置都会起作用.

换源(加速):

使用nano(因为启动盘中没有自带VIM)编辑/etc/pacman.d/mirrorlist, 添加两行(最上面):

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

修改pacman.conf配置:

编辑/etc/pacman.conf文件:

  1. 解除Color一行的注释: 允许pacman安装指示界面有颜色
  2. 解除ParallelDownloads = 5一行的注释: 允许并行下载. 在下载小文件的时候能够利用大宽带
  3. Optional: 添加一行ILoveCandy: 变成进度条吃豆人的样式
  4. 取消掉[multilib]和下一行Include = /etc/pacman.d/mirrorlost的注释: 允许multilib这个库的软件安装

开始安装对应软件:

pacstrap -K /mnt base base-devel linux linux-headers linux-firmware nano vim sudo intel-ucode bluez bluez-utils grub efibootmgr os-prober networkmanager resolvconf iwd dhcpcd ntfs-3g btrfs-progs
  • base, base-devel: 基础安装包, 包含一些编译命令, 如makepkg, make
  • linux, linux-headers, linux-firmware: Linux本体和硬件管理. 还有别的版本如linux-zen+linux-zen-headers性能优化内核 / linux-lts+linux-lts-headers 长期支持的内核 等等
  • nano, vim: editor
  • sudo: permission control
  • intel-ucode/amd-ucode: 对于不同CPU的架构, 安装对应的ucode. microcode为CPU提供安全性和bug的补丁
  • bluez, bluez-utils: 蓝牙
  • grub, efibootmgr, os-prober: grub相关, 配置开机BIOS相关内容
  • networkmanager, resolvconf, iwd, dhcpcd: 网络配置
  • ntfs-3g, btrfs-progs: 文件系统驱动

配置自动挂载

在启动的时候, 所有linux的文件(以及内核等)都存在与/dev/nvme0n1p<*>中. 想要运行linux, 需要进入这个盘, 所以在启动的时候需要挂载这个盘才能正常进入linux. 包括一些swap分区和efi分区, 都需要在启动的时候自动挂载. 因此使用genfstab命令配置自动挂载:

genfstab -U /mnt >> /mnt/etc/fstab

注意此时还是在U盘的启动配置中, 没有进入Arch Linux本体

配置Arch Linux

安装完基础软件之后, 需要配置linux系统, 使其能够正常运行.

使用arch-chroot以root身份进入linux系统(/mnt是之前挂载系统的位置):

arch-chroot /mnt

时区

由于是双系统, 因此windows和linux的时区设置可能有所不同, 详细问题解决方案参考时区问题

设置对应地区的时间(中国时区设置为Shanghai):

# setup time zone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localetime
# sync hardware clock
hwclock --systohc

上述命令需要root权限, 但是由于是arch-chroot进入的系统, 本是是root身份, 因此无需sudo

更改语言

编辑/etc/locale.gen文件, 取消需要生成文字的类型前的注释:

(推荐使用en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8)

然后生成对应的locale信息:

locale-gen

然后编辑/etc/locale.conf, 写入需要的语言, 如:

LANG=en_US.UTF-8

修改用户信息

首先修改hostname: 在文件/etc/hostname写入的内容就是hostname, 是这台计算机的名称

修改root用户的password:

# run this command with root user
passwd

创建新用户:

useradd -m -G wheel -s /bin/fish <username>

表示创建一个wheel group的用户<username>, 默认的shell是/bin/fish. 如果没有设个shell, 可能会报一个警告, 但是无需理会

修改新用户的密码(这个新用户是日常使用的用户):

passwd <username>

修改用户权限: 使用visudo, 是使用vim对/etc/sudoers文件的编辑, 但是配备了语法检查:

visudo
# or
vim /etc/sudoers

%wheel ALL=(ALL:ALL) ALL这一行的注释删除:

配置内核initramfs

initramfs: initial RAM filesystem

在启动过程中, 会将内核和initramfs的内容加载. 使用initramfs的原因是: 对于不同的文件系统和磁盘布局, 需要不同的内核模块, 因此使用initramfs进行内核模块的加载

编辑/etc/mkinitcpio.conf, 找到HOOKS部分, 添加brtfs:

后期配置nvidia的时候会再次修改这个文件

在每次修改配置之后, 需要手动生成一边initramfs:

mkinitcpio -P

配置grub启动项

在启动的时候, 需要给内核传递参数. 比如说, nvidia显卡的modeset, 等等.

包括启动grub界面的美化, 也需要配置.

配置启动项:

编辑/etc/default/grub文件, 然后去掉最后一行的GRUB_DISABLE_OS_PROBER=false的注释(让disable os-prober=false, 即允许os-prober):

安装grub:

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=grub

Tip

  1. target对应的是电脑型号, 如果是32bit的电脑, 使用x86-efi
  2. efi-directory对应的是之前/dev/nvme0n1p1 mount的位置, 即windows system盘挂载的位置.
  3. bootloader-id可以任意取, 但是不能是EFI等, 推荐使用grub, GRUB, Grub等等

应用grub配置:

在修改/etc/default/grub文件之后, 必须应用这个配置, 写入到bios中, 才能真正使用这个配置:

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

Tip

  1. 如果你是第一次运行这个命令, 那么grub.cfg文件是不存在的, 但是/boot/grub文件夹一定存在, 可能和bootloader-id有关
  2. 第一次可能找不到windows的boot manager, reboot之后重新运行上述命令即可找到(可能需要sudo权限)

现在可以重新启动, 即可进入user用户使用linux

添加桌面环境

部分必要软件:

# update index database and upgrade softwares
sudo pacman -Syyu
# install softwares
sudo pacman -S git zsh fish openssh
# chinese font
sudo pacman -S adobe-source-han-sans-cn-fonts

Nvidia

“F**k you, Nvidia!”

对于N卡用户, linux的支持非常不友好, 需要巨多配置:

检查显卡
lspci -k | grep -A 2 -E "(VGA|3D)"

如果这里出现了问题(点名amd显卡), 那么可能是没有安装对应驱动

安装nvidia驱动
sudo pacman -S nvidia-dkms nvidia-utils nvidia-settings
配置nvidia驱动

修改/etc/default/grub: 在GRUB_CMDLINE_LINUX中写入nvidia_drm.modeset=1, 然后运行sudo grub-mkconfig -o /boot/grub/grub.cfg:

修改/etc/mkinitcpio.conf, 在MODULES中写入nvidia nvidia_modeset nvidia_uvm nvidia_drm, 然后在HOOKS中删除kms:

然后重新生成initramfs:

sudo mkinitcpio -P

现在linux的配置基本完成, 可以在tty中使用. 但是没有gui桌面环境. 下面开始配置window manager:

Hyprland

sudo pacman -S hyprland kitty sddm

然后开启sddm:

sudo systemctl enable sddm

Tip

注意这里sddm默认WM(左上角)的是Hyprland(...), 需要点击下拉框换成Hyprland才能正常进入

I3wm

使用lightdm作为启动界面:

# xorg server, using x11 environment
sudo pacman -S xorg xorg-server
# install startup page and i3
sudo pacman -S lightdm i3status i3
# install necessary softwares
sudo pacman -S alacritty rofi feh picom polybar

然后开启lightdm:

sudo systemctl enable lightdm

Swaywm

Warning

未经验证

使用sddm:

# using wayland, auto install dependencies
sudo pacman -S sway sddm

Bug

这里使用sddm会有问题(似乎是对于nvidia显卡), 需要使用—unsupported-gpu才能进入

多显示器黑屏

如果NVIDIA驱动下外置显示器黑屏,请考虑:

sudo systemctl enable nvidia-suspend
sudo systemctl enable nvidia-resume
sudo systemctl enable nvidia-hibernate

/etc/modprobe.d/nvidia.conf中加入:

options nvidia NVreg_PreserveVideoMemoryAllocations=1
options nvidia NVreg_TemporaryFilePath=/var/tmp

然后在/etc/default/grub的启动参数(GRUB_CMDLINE_LINUX)里面添加resume=UUID=<swap-uuid>

运行下面的命令更新grub启动参数:

sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo mkinitcpio -P

Commands

refer this

时区

windows在进入Linux后可能会出现时间错乱的问题,是由于双系统时区问题导致。

使用下面的命令修复:

sudo apt-get install ntpdate
sudo ntpdate -u time.windows.com
sudo hwclock --localtime --systohc

如果是arch,可以考虑使用这个:

sudo timedatectl set-local-rtc true

Localtime和Universal Time对不上

考虑时间对应的问题。首先将时区信息重新加载:

sudo rm /etc/localtime
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo hwclock --systohc

更改默认终端

注意区分终端terminal和终端模拟器terminal-emulator的区别。终端模拟器是gui壳子,内部运行的是终端。

使用下面指令更改默认终端(注意需要重启):

sudo chsh -s $(which <shell>)

<shell>是终端的名字,如zsh,sh,bash等等

更新Icon

更改gtk图标

默认的图标位置在/usr/share/icons/

可以通过更改/usr/share/icons/default/index.theme来更改默认图标

如果在图标中找不到对应的iconName那么会到hicolor里面去寻找(fallback)

手动更新图标缓存

使用命令

gtk-update-icon-cache <path/to/icons: /usr/share/icons>
gtk4-update-icon-cache <path/to/icons: /usr/share/icons>

btrfs

Btrfs是一种文件系统。不同于ext4和ntfs,这种操作系统最大的好处就是可以很方便的备份

分卷挂载

使用mount命令, 使用options:

sudo mount -o subvol=/<vol_name> /dev/nvme0n<*>p<*> </path/to/mount>

创建备份

使用命令

sudo btrfs subvolume snapshot <path/to/backup> <path/to/save> -r

通常而言,备份的路径是/,表示备份整个盘。如果/分区和/home/是两个不同的分区,也可以分别备份

参数-r表示只读。只有只读的备份才可以移动(将备份转移到其他硬盘上)

快照不会对已经存在的快照递归快照,因此可以放心将快照保存在本地的硬盘上

移动备份

sudo btrfs send <path/to/backup> | sudo btrfs receive <media/path/to/save/backup>

这里的<path/to/save>是上面<path/to/save>的位置,即已经存在的快照的位置

注意,所有保存快照的存储设备都需要是btrfs文件系统的。非btrfs系统无法保存快照。

增量备份

由于向外部存储设备迁移快照,因此可能需要多次进行快照。

增量备份的目的就是基于上一次备份,将本次备份快速传输至外部存储设备。

注意在命令中有-p参数

sudo btrfs send -p <path/to/backup1> <path/to/backup2> | sudo btrfs receive <media/path/to/save/backup>

删除备份

sudo btrfs subvolume delete <path/to/backup>

从备份中恢复

注意:这一条内容并未经过测试

更改用户名

首先更改用户名称:

sudo usermod -l <new_name> <old_name>

然后更新用户目录:

sudo usermod -d /home/<new_name> -m <new_name>

注意, 可能有很多地方都会用到这个用户名, 比如说ln的软链接, miniconda的shell.fish等等

修改hostname

尝试直接使用hostnamectl:

hostnamectl <new-hostname>

如果没有这个命令, 可以编辑/etc/hostname文件, 里面写的就是hostname.

然后, 查看/etc/hosts文件, 可能也需要更改.

修改hostname之后, 部分软件可能无法打开:

  1. google-chrome-stable: 删除locked profile即可:
    rm ~/.config/google-chrome/SingletonLock ~/.config/google-chrome/SingletonCookie ~/.config/google-chrome/SingletonSocket