在Archlinux中使用平铺式窗口管理器 - dwm

1,335 阅读22分钟

官方安装指南

1. 启动盘制作

1.1 下载镜像

archlinux.org/download/

1.2 开始制作

  • 方式一: 在 Linux 系统上制作

    # 查看 U 盘设备(例如:/dev/sdb) 或者使用 lsblk 命令查看
    sudo fdisk -l
    ​
    # 使用 dd 命令制作启动盘
    sudo dd if=archlinux-x86_64.iso of=/dev/sdb bs=4M status=progress oflag=sync
    
  • 方式二:在 windows 上制作

    使用了 rufus 工具其他工具也可以,官网下载-Rufus

PS: 这里就不一一赘述,请读者自行查找相关资料。

注意:选择启动盘引导方式, UEFI 引导或者 BIOS 引导 (请记住你的引导方式:本教程采用 UEFI 方式)。

2. 启动&网络&时间

2.1 开机进入live环境

# 查看有 efi,就可以使用 UEFI(gpt) 来安装启动,否则使用传统DOS(mbr)方式安装。
ls /sys/firmware/efi/efivars

2.2 连接网络

Arch Linux 的安装需要良好的网络连接,有线网络由 systemd-networkd 自动配置(dhcp动态IP),无线网络请使用 wpa_supplicant 连接。

连接到网络前情提要

a. 对于无线局域网(Wi-Fi)和无线广域网(WWAN),请确保网卡未被 rfkill 禁用。

b. 有线以太网 -- 连接网线。

c. WiFi -- 使用 iwctl 验证无线网络。

d. 移动宽带调制解调器(移动网卡) -- 使用 mmcli 实用程序连接到移动网络

检测是否禁用网卡

这里使用无线网络接口(网卡) wlp2s0(不同机器可能不一样)为例,如果查看到网路接口没有开启,就需要先开启。在开启之前,先要激活它(取消禁用,通过 rfkill list 查看到,我的机器默认是禁用的,看到 blocked: yes 字样,说明无线连接被禁用),因此需要启动:

# 查看无线网卡是否被禁用
rfkill list
​
# 首先:启用 wifi 设备
rfkill unblock wifi
​
# 开启网络接口 wlp2s0
ip link set wlp2s0 up

配置网络连接

a. DHCP: 对于有线以太网、无线局域网(WLAN)和无线广域网(WWAN)网络接口来说,动态 IP 地址和 DNS 服务器分配(由 systemd-networkdsystemd-resolved提供功能)能够开箱即用。

b. 静态 IP 地址:按照静态 IP 地址进行操作。

# 1. 检查网络接口是否启动
ip link # 记住网卡设备的名字 (例如:wlan0)# 2. 启动网络设备
ip link set <设备名> up  # (设备名,例如:wlan0)# 测试否连接网络
ping baidu.com
​
# 如果还是 ping 不通,尝试继续下面的添加国内镜像源后,执行 `pacman -Syy` 如果成功就继续往下吧。

使用 iw 方式连接无线网络,以后装完系统可以选择其他管理工具:如 NetworkManager

a: 获取接口名
 iw dev # 显示出网卡设备的信息
b: 查看网络状态
 iw dev <设备名> link # (设备名,例如:wlan0)
 显示“Not connected.”,表示网络未连接
c: 如果要连接的是无密码的网络那就很省事了
 iw <设备名> connect <网络名称>
d: 如果要连接WPA2加密的网络,可以使用 wpa_supplicant 这个工具
 wpa_supplicant -i <设备名称> -c <(wpa_passphrase <网络名称> <密码>)
 或者
 wpa_supplicant -D wext -B -i <设备名> -c <(wpa_passphrase <wifi 名称> <wifi 密码>)
 -D wext 的意义是使用 wext 驱动网卡,
 -B 是后台运行,
 -i 是指定设备,
 -c 是指定配置文件,而后面的内容是根据网络情况生成配置文件,这条长命令本质是两条段命令结合而成的,配置文件不会生成为文件而是直接使用。
e: 再次查看网络状态
 iw dev <设备名> link
 如果连接成功,应该会显示连接的网络状态
f: 尝试ping百度
 ping www.baidu.com

使用 iwctl 方式连接无线网络

a. 列出网卡设备无线网卡
 iwctl device list
b. 扫描Wi-Fi热点
 iwctl station wlan0 scan # iwlist wlan0 scan
c. 列出Wi-Fi热点
 iwctl station wlan0 get-networks
d. 加载wifi网络,确认后输入密码,熟悉自己硬件后可忽略上面3步
 iwctl station wlan0 connect wifiname
 # iwctl --passphrase wifi密码 station wlp2s0 connect wifi名称
f: 尝试 ping 百度
 ping www.baidu.com

测试一下是否连接网络

# 如果能更新,就没必要 ping 了
pacman -Syy
​
ping baidu.com # ping 网络是否连接

注意:如果还 ping 不同,检查一下防火墙设置。

2.3 校准时间

a. 使用 timedatectl 修改时区

timedatectl set-timezone Asia/Shanghai
​
# 启动网络时间同步
timedatectl set-ntp true

b. 检查时间是否正确

date

3. 更新镜像源

3.1 手动添加

手动添加一个或几个国内镜像源

vim /etc/pacman.d/mirrorlist

Server = https://mirrors.163.com/archlinux/$repo/os/$arch

3.2 通过 reflector 统一修改

reflector --country China --age 72 --sort rate --protocol https --save /etc/pacman.d/mirrorlist

# 查看一下
cat /etc/pacman.d/mirrorlist

ps: 筛选中国的在 72 小时内,速率最快的 https 协议的镜像源,到 /etc/pacman.d/mirrorlist 文件里

3.3 更新源

pacman -Syy

4. 磁盘分区、格式化、挂载

注意:分区操作涉及到 SSD 和 机械硬盘,会对里面的数据清除,请务必想清楚(备份好数据)再开干 :)

4.1 查看硬盘情况

lsblk
# 或
fdisk -l

例如:

NAME        MAJ:MIN  RM    SIZE  RO  TYPE MOUNTPOINTS
loop0           7:0   0    680M   1  loop /run/archiso/airootfs   # iso 镜像
sr0            11:0   1   1024M   0  rom
sda             8:0   0  119.2G   0  disk            # 119.2G 的机械硬盘 sda
├─sda1          8:1   0    512M   0  part /boot/efi  # efi 的 boot(/boot/efi)分区 sda1
├─sda2          8:2   0      8G   0  part [SWAP]     # 交换(swap)分区 sda2
└─sda3          8:3   0  110.7G   0  part /          # 根(/)分区 sda3
sdb            8:16   1    3.8G   0  disk                      # 挂载的 U 盘
└─sdb1         8:17   1    3.7G   0  part /run/archiso/bootmnt # U 盘的 sdb1 分区
nvme0n1         9:0   0  119.2G   0  disk                 # 119.2G 固态硬盘 nvme0n1
├─nvme0n1p1   259:1   0    100G   0  part /mnt            # 固态硬盘第一个分区 nvme0n1p1
└─nvme0n1p2   259:2   0   19.2G   0  part  /mnt/boot/efi  # 固态硬盘第二个分区 nvme0n1p2

4.2 创建分区

可以使用 cfdisk 和 fdisk 命令来实现

# 使用 cfdisk, 比较直观一些
cfdisk /dev/sda # UEFI 模式下选择 gpt 分区模式
# 或
fdisk /dev/sda

fdisk 分区的相关命令:

d delete a partition 删除分区

l list known partition types 显示分区类型

n add a new partition 新建分区

p print the partition table 显示分区信息

q quit without saving changes 退出不保存

t change a partition's system id 设置分区号

v verify the partition table 进行分区检查

w write table to disk and exit 保存修改

这里通过cfdisk 创建三个分区:交换分区(swap),根目录分区(/),启动分区(/boot/efi)

设置 EFI 分区:通过键盘移动光标到 New,输入磁盘大小(默认全部磁盘,删除后输入,我输入 512M),按回车;再将光标移动 Type 设置类型,移动光标到 EFI System,再按回车。页面显示了新建的磁盘分区。

设置 swap 分区:移动光标到未分区的磁盘,输入磁盘大小(默认剩余全部磁盘,删除后输入,我输入 8G),按回车;再将光标移动 Type 设置类型,移动光标到 Linux swap,再按回车。页面显示了新建的磁盘分区。

设置主分区(root):移动光标到未分区的磁盘,输入磁盘大小(默认剩余磁盘),按回车;再将光标移动 Type 设置类型,默认类型 Linux filesystem,再按回车。页面显示了新建的磁盘分区。

保存分区。光标移动到 Write,回车之后输入 yes,即可保存。

退出分区。光标移动到 Quit。

4.3 格式化分区

创建分区完成后,需要对指定的分区格式化特定类型生成对应的文件系统格式,如果不格式化或格式化类型错误都会导致后面 grub 引导错误,从而导致安装失败。

注意:格式化是对硬盘分区操作的,不是硬盘,别看错了,(例如:/dev/sdax , x 表示分区编号,而不是硬盘 /dev/sda)

# 格式化 EFI Boot 分区(512M)
mkfs.fat -F 32 /dev/sda1 # 或 mkfs.vfat -F 32 /dev/sda1
# 格式化 swap 分区(8G)
mkswap -f /dev/sda2
# 格式化根分区,设置为 ext4 格式
mkfs.ext4 /dev/sda3 # 根分区

4.4 挂载分区

挂载分区:就是把一块分区指定在某个文件夹下,当我们打开这个文件夹的时候,文件夹的空间大小就是使用该分区的存储空间(文件夹不占空间,/mnt 文件夹是启动盘中的引导文件夹,由于我们目前所有操作都还在启动盘里,所以需要把硬盘分区挂载到启动盘下的 /mnt 下,才能进入硬盘进行系统安装和配置,/mnt 就相当于打开新系统的大门或者钥匙。

# 一定要注意挂载顺序

swapon /dev/sda2 # 挂载启用 swap 分区(8G)

mount /dev/sda3 /mnt  # 根分区挂载到 /mnt

mkdir -p /mnt/boot/efi   # 创建 boot 文件夹及其子文件夹 efi
mount /dev/sda1 /mnt/boot/efi  # EFI分区挂载到 /mnt/boot/efi

PS:此时通过lsblk -f查看分区情况有对应的 UUID 信息了。

确认分区是否成功挂载

lsblk -f
# 或
fdisk -l

输出如下类似结果,就成功挂载了,接下来就可以在硬盘上安装系统了。

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 119.2G  0 disk
├─sda1   8:1    0   512M  0 part /mnt/boot/efi
├─sda2   8:2    0     8G  0 part [SWAP]
└─sda3   8:3    0 110.7G  0 part /mnt
sr0     11:0    1  1024M  0 rom

ps: 此时通过lsblk -f查看分区情况有对应的 MOUNTPOINTS 信息了。

5. 安装系统

基本系统版本类型(包括linux内核以及基础软件包)

  1. 普通内核(linux linux-headers): 做好随时滚挂的准备。
  2. lts 稳定版内核(linux-lts linux-lts-headers): 希望稳定就是用该内核, 并且支持nvidia 显卡,可以安装相应的 nvidia-lts 驱动。
  3. zen 内核(linux-zen,linux-zen-headers): 不支持 nvidia 显卡。

5.1 安装最小系统软件

# 安装 base 软件包和 Linux 内核以及常规硬件的固件
pacstrap /mnt base base-devel linux-lts linux-lts-headers linux-firmware #(LTS内核)注意:linux-firmware,在虚拟机不安装也不影响,这是硬件固件需要
# 或者
pacstrap /mnt base base-devel linux linux-headers linux-firmware #(普通内核)注意:linux-firmware,在虚拟机不安装也不影响,这是硬件固件需要

# base-devel不是必须安装的,但是它包含了很多常用的功能,像是gcc,grep,pacman,sudo,systemd,which,所以还是安装,因为有很多开发工具

# 可以在此时安装常用软件: dhcpcd、iwd 用来连接网络的, vim 编辑器, sudo 调权,有些工具已经包含在 base-devel 中了。
pacstrap /mnt vim sudo dhcpcd openssh networkmanager git iwd

# 如果安装报错 ERROR: Failed to install packages to new root,尝试以下命令再继续安装:
pacman -Sy archlinux-keyring

5.2 生成文件系统配置表文件 fstab

fstab 存放上面分区且挂载后的信息,尤其 UUID 要一致。

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

# 查看
cat /mnt/etc/fstab  # fstab 存放上面分区且挂载后的信息,尤其 UUID 要一致

lsblk -f

6. 进入刚才安装在硬盘中的系统

Linux chroot (英文全称:change root) 命令用于改变根目录。

chroot 命令把根目录换成指定的目的目录。

arch-chroot bash 脚本是软件包arch-install-scripts 的一部分,在运行 /usr/bin/chroot 前,这个脚本会挂载/proc api 文件系统,建立可用的 /etc/resolv.conf 配置文件。

# 切换到系统中,从此以后的操作都是在硬盘中了。
arch-chroot /mnt

6.1 查看系统相关的信息

  • uname -r: 显示操作系统的发行版号。
  • uname -a :显示系统名、节点名称、操作系统的发行版号、内核版本等等。
  • 此时也可以查看刚才生成的文件系统配置表文件 fstab,cat /mnt/etc/fstab

6.2 设置系统所在时区和语言

  • 时区

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  # 设为上海时间
    
    hwclock --systohc --utc     # 设置硬件时间
    
  • 语言

    # 编辑 locale.gen 文件,找到 `en_US.UTF-8 UTF-8` 和 `zh_CN.UTF-8 UTF-8`,把前面的#号删除,保存退出。
    vim /etc/locale.gen
    
    # 生成 locale
    locale-gen
    
    # 生成 locale.conf 文件
    # echo LANG=zh_CN.UTF-8 > /etc/locale.conf # 中文的
    echo LANG=en_US.UTF-8 > /etc/locale.conf # 英文的
    
    locale
    cat /etc/locale.conf    # 查看一下
    

6.3 设置系统主机名和 root 用户密码

  echo arch > /etc/hostname   # 这里的 arch 就是自定义的主机名

  vim /etc/hosts  # 编辑 hosts 文件

/etc/hosts

  127.0.0.1   localhost
  ::1         localhost
  127.0.1.1   arch # 127.0.1.1   arch.localdomain    arch

6.4 设置 root 超级用户的密码

passwd # passwd root, 不加用户名,就是默认 root 用户

# 接下来,根据提示输入您的密码后确认即可

6.4.1 添加一个用户

# 添加用户 timly
useradd -m -G wheel timly

# 查看
id timly

# 记得提权
# 在 /etc/sudoers 中配置 %wheel ALL=(ALL) ALL
EDITOR=vim visudo (新用户提权)# 相当与 sudo vim /etc/sudoers

# 设置用户 timly 的密码
passwd timly
# 接下来按照提示输入即可

# 查看 timly 用户
cat /etc/passwd | cut -f 1 -d : # cat /etc/passwd

ls /home

6.5 安装引导程序

需要安装 Linux 引导加载程序,才能在安装后启动系统。这里使用grub,你也可以用别的。

  • 安装引导程序软件包和 CPU 微码

    # 安装工具。其中“GRUB”是启动引导器,“efibootmgr”被 GRUB 脚本用来将启动项写入 NVRAM。对话直接回车
    pacman -S grub efibootmgr
    
    # pacman -S intel-ucode os-prober [intel-ucode | amd-ucode]
    # os-prober 可以配合 grub 检测已存在的系统,自动设置启动项
    
  • 安装

    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
    
  • 系统的启动引导文件(grub.cfg)生成

    # 生成启动引导文件 grub.cfg
    grub-mkconfig -o /boot/grub/grub.cfg
    

    注意:这里会有一个是否解决需要检测多系统的警告,根据需要修改

    # Archlinux 安装引导过程中出现警告,需不需要检查其他系统(多系统中需要设置):
    # Warning: os-prober will not be executed to detect other bootable partitions
    
    # 解决方法:
    # 在 /etc/default/grub 文件中添加:
    
    # 让 grup 识别其他其他系统
    GRUB_DISABLE_OS_PROBER=false # true 表示不需要识别其他系统,多系统就需要设置为 false,需要识别其他系统
    
    # 更新 grub 的配置:
    # grub-mkconfig -o /boot/grub/grub.cfg
    

    显然可以在 /etc/default/grub 文件中修改一些配置信息,例如,这里修改了:

    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    # info -f grub -n 'Simple configuration'
    
    # 默认启动项(就是我要的开机默认启动系统)
    GRUB_DEFAULT=0      // * 默认启动项,按menuentry顺序,从0开始;若改为saved,则默认上次启动项
    
    #GRUB_HIDDEN_TIMEOUT=0      // - 隐藏菜单,0:不隐藏,1:隐藏, grub2不再使用
    GRUB_HIDDEN_TIMEOUT_QUIET=true      // - 是否显示等待倒计时, true:不显示倒计时,屏幕将会是空白的;false:空白屏幕上有计时器
    GRUB_TIMEOUT=3      // * 设置进入默认启动项的等候时间,默认值10秒;若为-1则一直等待
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    
    GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet splash"     // *添加内核启动参数,这个为默认
    GRUB_CMDLINE_LINUX="acpi_osi=Linux"     //* 手动添加内核启动参数,以 “name=value” 的格式添加,多个参数用空格隔开, 比如 acpi=off noapic等可在这里添加
    
    # Uncomment to enable BadRAM filtering, modify to suit your needs
    
    # This works with Linux (no patch required) and with any kernel that obtains
    
    # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
    
      #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
    
    # Uncomment to disable graphical terminal (grub-pc only)
    
      #GRUB_TERMINAL=console      // - 设置是否使用图形介面。去除前面#,仅使用控制台终端,不使用图形介面
    
    # The resolution used on graphical terminal
    
    # note that you can use only modes which your graphic card supports via VBE
    
    # you can see them in real GRUB with the command `vbeinfo'
    
      #GRUB_GFXMODE=640x480       // * 设定图形介面分辨率,如不使用默认,把前面#去掉,分辨率按需修改
    
    # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
    
      #GRUB_DISABLE_LINUX_UUID=true   // - 设置grub命令是否使用UUID,去掉#,使用root=/dev/sdax而不用root=UUDI=xxx
    
    # Uncomment to disable generation of recovery mode menu entries
    
      #GRUB_DISABLE_RECOVERY="true"       // - 设定是否创建修复模式菜单项, true:禁用,false:使用,默认false
    
    # Uncomment to get a beep at grub start
    
    # GRUB_INIT_TUNE="480 440 1"  // 默认不发声,去掉“#”则发声,值是什么意思不明白(应该是发出声音方式吧)
    

    注意:每当修改 /etc/default/grub 或者 /etc/grub.d/中的文件之后,都需要再次生成主配置文件。

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

6.6 网络工具

pacman -S networkmanager dhcpcd openssh git

# pacman -S networkmanager dhcpcd openssh wpa_supplicant

# 此时最好把网络服务启动

# 设置开机自启
systemctl enable NetworkManager dhcpcd sshd

6.7 退出系统

退出/mnt的系统,即退出chroot,回到 live 环境。重启系统即可

# 退出 chroot
exit

# 卸载 /mnt
# 如果是虚拟机记得移除 iso 镜像,
# 如果是实体机器记得移除 USB 启动盘
umount -R /mnt

# 重启
# 关机 poweroff
reboot

重启以后, Archlinux 系统就可以进入 tty 命令行界面了

如果没有网络,可以设置网路管理工具。

# 若没有安装网络管理工具 NetworkManager,就安装,最好在安装系统到/mnt的时候安装上。
# pacman -S NetworkManager
# 查看网络状态
systemctl status NetworkManager
# 设置开机自启
systemctl enable NetworkManager
# 现在启动
systemctl start NetworkManager

# pacman -S dhcpcd
# 查看网络状态
# systemctl status dhcpcd
# systemctl enable dhcpcd
# systemctl start dhcpcd

7. 其他一些配置

7.1 bash 简单配置

sudo vim /etc/skel/.bashrc  或者 vim ~/.bashrc

添加:
# 设置 bash 默认文本编辑器为vim
export EDITOR=vim

# 让 grep 搜索出来的东西带上颜色
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

# [脚本]设置看到的文件夹带上颜色
[ ! -e ~/.dircolors ] && eval $(dircolors -p > ~/.dircolors)
[ -e /bin/dircolors ] && eval $(dircolors -b ~/.dircolors)

重启后执行命令验证:
ls -al /
grep root /etc/passwd

7.2 简单配置 pacman

sudo vim /etc/pacman.conf

内容:

# 配置
Color

[multilib]
Include = /etc/pacman.d/mirrorlist

[archlinuxcn]
SigLevel = Never
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

更新:

pacman -Sy archlinuxcn-keyring

pacman -Syy

7.3 paru 助手

paru 社区的包管理工具。安装 yay 助手也可以

pacman -S paru
pacman -S yay

8. DWM 窗口管理器

8.1 X 窗口服务安装

# 通过 startx 进入窗口管理界面
pacman -S xorg-server xorg-xinit xorg-apps # xorg

终端内网页浏览器,便于下载 dwm 源码:

# w3m、surf 都是终端网页
sudo pacman -S w3m # 可以不用装,其他方式下载,例如 git lone

# 进入 dwm 的官网 suckless
w3m suckless.org # 或者直接指定 wget https://dl.suckless.org/dwm/dwm-6.4.tar.gz

# 解压
tar -xf dwm-6.4.tar.gz

三种方式下载 dwm 源码:

  1. git clone https://git.suckless.org/dwm
  2. w3m suckless.org,通过 w3m 终端网页找到 dwm 的下载页面下载
  3. wget https://dl.suckless.org/dwm/dwm-6.4.tar.gz

8.2 编译、安装 dwm

  • 修改 Makefile 文件
# 进入刚才解压好的 dwm 中, 修改 Makefile 文件的 clean 位置处代码:
clean:
 rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz

# 添加了 config.h *.o *.orig *.rej 如下:
clean:
 rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz config.h *.o *.orig *.rej
  • 编译安装 dwm
sudo make clean install
  • 添加 .xinitrc 配置
# 可以 cp /etc/X11/xinit/xinitrc ~/.xinitrc 一份
# 也可以直接创建
vim  ~/.xinitrc # 加入 exec dwm 最后面,然后保存退出
  • 启动 dwm 界面
# tty 终端执行 startx 命令,启动 dwm
startx
  • 退出 dwm 桌面

    shift + alt + q即可退出 dwm 桌面

8.3 安装终端 st

也可以是其他的终端,比如 kitty、alacritty, tmux、termite(前两个有GPU加速)

最好先装一下字体:比如,pacman -S adobe-source-code-pro-fonts

查看字体名称,从字体列表当中找一个喜欢的字体名称,比如我使用的是 Source Code Pro

fc-list
# 或者
fc-list | grep "Source"
  • 修改 Makefile 文件,与 dwm 一样配置

  • 下载 st 源码

    1. git clone https://git.suckless.org/st
    2. w3m suckless.org,通过 w3m 终端网页找到 st 的下载页面下载
    3. wget https://dl.suckless.org/st/st-0.9.tar.gz
  • 修改 config.mk 文件

    #X11INC = /usr/X11R6/include
    #X11LIB = /usr/X11R6/lib
    
    # 以上两行改成下面两行
    X11INC = /usr/include/X11
    X11LIB = /usr/include/X11
    
  • 编译并且安装 st

    sudo make clean install
    

附加 - 音量

  • pulseaudio-alsa,一个配置文件
  • pavucontrol,图形界面的音量调节工具
# alsa 安装,音量设置
sudo pacman -S alsa-utils

# alsamixer 调试音量
# 左右键选择调哪个,将Master和PCM按“m”解除静音(下边MM变成00),使用上下键调大音量,基本放歌就能听到声音了
alsamixer

# Esc 退出,
# 保存设置
sudo alsactl store

reboot

附加 - Virtualbox 实用扩展工具

在 Virtualbox 虚拟机中,为了方便使用,装一下 virtualbox 的扩展工具。

sudo pacman -S virtualbox-guest-utils # virtualbox

# 加载 VirtualBox 内核模块
# sudo modprobe -a vboxguest vboxsf vboxvideo

sudo systemctl enable vboxservice

reboot

附加 - 实用操作

  • 解压:tar -xzvf xxx-*.tar.gz
  • 打补丁:patch -p1 < patches/dwm-xxx.diff
  • 获取窗口xprop,来自 x11-apps/xprop
  • 获取键盘按键编码xev,来自 x11-apps/xev

附加 - 字体和字体图标

# 查询某字体
sudo pacman -Ss font | grep nerd-fonts

# 字体
pacman -S adobe-source-code-pro-fonts nerd-fonts-fira nerd-fonts-fira-code ttf-fira-code wqy-microhei wqy-zenhei

# nerd-fonts-complete 这就是 nerd-fonts 的全部字体了

# 字体图标
paru -S ttf-symbola  ttf-nerd-fonts-symbols-2048-em noto-fonts-emoji unicode-emoji

# 安装好后,清缓存,让配置生效
fc-cache -vf

# 查看字体
fc-list :lang=zh # fc-list :lang=en

fc-list | grep Fira

附加 - 资源管理器

  • pcmanfm、thunar、Nautilus、Konqueror、Dolphin、Krusader
  • ranger:终端的资源管理器

附加 - fcitx5 以及拼音输入法

fcitx5 只是提供了基本框架,基本框架只对英文提供了输入支持,如果需要输入其他语言,则需要安装相应的输入法引擎:

  • 中文

    • fcitx5-chinese-addons 包含了大量中文输入方式:拼音、双拼、五笔拼音、自然码、仓颉、冰蟾全息、二笔等。
    • fcitx5-rime 对经典的 Rime IME 输入法的包装,内置了繁体中文和简体中文的支持。
    • fcitx5-chewing 对注音输入法 libchewing 的包装。
  • 日文

    • fcitx5-anthy 一种流行的日语输入引擎。
    • fcitx5-skk 一个日文片假输入法。
    • fcitx5-mozc Google 日文输入法的开源版本。
  • 其他语言

    • fcitx5-hangul 用于输入韩文。
    • fcitx5-unikey 用于输入越南语字符。
  • 安装

    pacman -S fcitx5-chinese-addons fcitx5-rime
    # paru -S fcitx5-git fcitx5-gtk fcitx5-qt kcm-fcitx5
    
    # 离线的联想字库
    sudo pacman -S fcitx5-pinyin-moegirl fcitx5-pinyin-zhwiki
    

    fcitx5-qt:对 Qt5 程序的支持。

    fcitx5-gtk:对 GTK 程序的支持。

    fcitx5-qt4-gitAUR:对 Qt4 程序的支持。

    注意: 一般情况下,只安装 fcitx5-qt 和 fcitx5-gtk 就行了

  • 配置

    fcitx5 的配置文件位于 ~/.local/share/fcitx5

  • 词库

    • citx5-pinyin-zhwiki
    • citx5-pinyin-moegirl
  • 添加环境变量

    1、通过修改文件vim /etc/profile 或者 vim /etc/environment

    vim /etc/environment
        GTK_IM_MODULE=fcitx
        QT_IM_MODULE=fcitx
        XMODIFIERS="@im=fcitx"
        INPUT_METHOD=fcitx
        SDL_IM_MODULE=fcitx
        GLFW_IM_MODULE=ibus
    
    vim /etc/profile
        export INPUT_METHOD="fcitx5"
        export XMODIFIERS="@im=fcitx5"
        export GTK_IM_MODULE="fcitx5"
        export QT_IM_MODULE="fcitx5"
    

    2、在 ~/.xinitrc 的 exec dwm 之前添加,fcitx5 -d &

    3、通过 fcitx5-configtool 打开配置界面来配置需要输入的输入法。

    4、重启以后,Ctrl + 空格键就可以切换输入法了。

注意:如果是中文输入或其他输入,请先安装对应的字体库

附加 - 蓝牙

安装蓝牙

sudo pacman -S bluez bluez-utils

如果需要图形化管理工具,安装

sudo pacman -S bluedevil
# 或者,自己用 blueman
sudo pacman -S blueman

开启蓝牙

sudo systemctl start bluetooth

# 开机自启动
sudo systemctl enable bluetooth

此时可通过 bluetoothctl 进入蓝牙控制台

注意:若要连接蓝牙音频,还需安装

sudo pacman -S pulseaudio-bluetooth

附加 - 截图,看图并设置壁纸,U盘自动挂载

截图 flameshot

sudo pacman -S flameshot

# 在 ~/.xinitrc 的 exec dwm 之前添加
flameshot &

看图和壁纸 feh

# 看图的工具,它可以设置壁纸:feh
sudo pacman -S feh

# 在 ~/.xinitrc  的 exec dwm 之前添加
feh --bg-fill --randomize image-path # image-path 壁纸存放的路径

USB 识别工具

sudo pacman -S udisks2 udiskie

附加 - 终端美化 fish + starship

  • 第一种:zsh + oh-my-zsh
  • 第二种:fish + starship
  • oh-my-zsh 或 starship 来修改 zsh或者fish 的主题和安装常用的插件
  1. 查看 shell

    # 查看系统所有的 shell
    cat /etc/shells
    
    # 查看当前使用的 shell
    echo $SHELL
    
  2. 设置为系统默认 shell

    # zsh
    chsh -s /bin/zsh
    # fish
    chsh -s /bin/fish
    # bash
    chsh -s /bin/bash
    # tmux
    chsh -s /bin/tmux
    
    # 注意:只要安装了,就任意选一种自己喜欢的
    
    # 输入对应shell 的命令,即可进入对应的 shell。
    # 比如:
    fish
    

这里选择第一种: fish + starship

  • 安装 fish

    sudo pacman -S fish
    
  • 安装 starship

    sudo pacman -S starship
    
    # 或者如下安装
    
    # 国外
    curl -sS https://starship.rs/install.sh | sh
    
    # 国内
    curl -o install.sh -sS https://starship.rs/install.sh && sed -i "s/https://github.com/https://ghproxy.com/https://github.com/g" install.sh && sudo sh install.sh
    
  • 设置你的终端以使用 Starship

    vim ~/.config/fish/config.fish
    
    # 最后添加
    starship init fish | source
    

终端以使用 Starship

注意普通用户和root用户需要分别配置。

# zsh 终端

在 ~/.zshrc 的最后,添加以下内容:
 eval "$(starship init zsh)"
启用配置:
 source ~/.zshrc

# fish 终端

在 ~/.config/fish/config.fish 的最后,添加以下内容:
 starship init fish | source

配置 Starship

如果你想进一步配置 Starship,查阅下列内容:

  • 配置:学习如何配置 Starship 来调节提示符到你喜欢的样子。
  • 预设:从其他构建好的配置中获取灵感。

普通用户

这里选择预设 Pastel Powerline

starship preset pastel-powerline > ~/.config/starship.toml

# 如果 nerd-font-symbols 使用预设需要提前安装 Nerd 字体
starship preset nerd-font-symbols > ~/.config/starship.toml

root用户

这里选择纯文本符号

su root

starship preset plain-text-symbols > ~/.config/starship.toml

附加 - 窗口合成器 picom

picom 是 Xorg 的独立合成器,适用于不提供合成功能的窗口管理器(如:i3,dwm),可以给窗口设置淡入淡出、半透明、阴影等视觉效果。

注意: dwm需要对应的也要打补丁。dwm.suckless.org/patches/alp…

sudo pacman -S meson cmake uthash libconfig libev

补丁-半透明背景(alpha)

在虚拟机中欧给你可能不起作用,设置一下:sudo vim /etc/xdg/picom.conf 中的 vsync 配置注释掉

源码构建picom:

git clone https://github.com/yshui/picom.git

cd picom

rm -rf build
LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" meson --buildtype=release . build
ninja -C build
sudo ninja -C build install

picom --experimental-backends -b --config  picomPath # picomPath表示配置文件路径 picomPath:~/scripts/picom.conf

或直接通过 pacman 安装,在 ~/.xinitrc 中配置 picom &

picom.conf的配置内容

# 基础设置
# backend = "glx";
backend = "xrender";
mark-wmwin-focused = true;
mark-ovredir-focused = true;
detect-client-opacity = true;
unredir-if-possible = true;
vsync = true;
dbe = false;
detect-transient = true;
detect-client-leader = true;
invert-color-include = [ ];
glx-copy-from-front = false;

# 圆角
corner-radius = 0.0;
round-borders = 0;
rounded-corners-exclude = [
    "class_g *= 'dwm'",
    "class_g *= 'fcitx'",
];

# 阴影
shadow = false;
detect-rounded-corners = false;
shadow-radius = 4;
shadow-offset-x = 0;
shadow-offset-y = 0;
shadow-opacity = 0.25;
shadow-ignore-shaped = false;
shadow-exclude = [
    "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'",
    "_GTK_FRAME_EXTENTS@:c",
    "override_redirect = 1 && !WM_CLASS@:s",
    "name = 'Notification'",
    "class_g ?= 'Dmenu'",
    "class_g *= 'dwm'",
    "class_g *= 'Wine'",
    "name = 'Dunst'",
    "class_g *= 'float'"
];

# 透明,指定哪些应用程序窗口可以透明,需要用到 xorg-xprog 工具包,在命令行可以通过  xprop 命令打印一些信息  WM_CLASS(STRING) 后面的窗口名字
active-opacity = 0.93;
opacity-rule = [
    "80:class_g = 'dwmsystray'",
    "100:class_g = 'mpv'",
    "100:class_g = 'org.remmina.Remmina'",
    "100:class_g = 'Surf'",
    "100:class_g = 'qutebrowser'",
    "100:name *? = 'Sunflower'",
    "100:WM_NAME@:s *= 'bilibili'",
    "100:class_g = 'obs'",
    "100:class_g = 'Gimp'",
    "100:WM_CLASS@:s *= 'tim.exe'",
    "95:class_g = 'Wine'",
    "100:class_g *= 'crx_'",
    "100:WM_CLASS@:s *= 'vncviewer'",
];

# 淡入淡出
fading = true;
fade-delta = 2;
fade-in-step = 0.01;
fade-out-step = 0.01;
fade-exclude = [
    "class_g *= 'fcitx'"
];

# 动画
animations = true;
animation-window-mass = 1;
animation-stiffness = 180;
animation-dampening = 25;
animation-for-open-window = "zoom";
animation-exclude = [
    "class_g = 'fcitx'",
    "class_g = 'flameshot'",
    "class_g = 'Dunst'",
];

# 模糊
blur-method = "dual_kawase";
blur-strength = 3;
blur-kern = "3x3box";
blur-background-exclude = [
    "window_type = 'dock'",
    "window_type = 'desktop'",
    "_GTK_FRAME_EXTENTS@:c",
    "class_g *= 'dwm'",
    "name *? = 'Sunflower'",
];

# 针对窗口类型的设置
wintypes :
{
    normal = { fade = true; shadow = false; opacity = 0.75; };
    tooltip: { fade = true; shadow = false; opacity = 0.75; focus = true; };
    fullscreen: { fade = true; shadow = false; focus = true; opacity = 0.83; };
    dock = { shadow = false };
    dnd = { shadow = false};
    popup_menu = { opacity = 0.7 };
    dropdown_menu = { opacity = 0.7 };
};

.xinitrc 中加入 picom 启动

# 简单启动
picom -b & # 每次启动图形界面的同时自动启动它

# 指定配置文件启动
# picom --experimental-backends -b --config ~/scripts/pi-com.sh

附加 - 工具

终端

  • kitty、alacritty (具有 GPU 加速)

  • tmux

  • Konsole,xfce4-terminal

  • st

  • xdg-user-dirs

    # 自动在 home 目录下生成一些默认文件夹
    # Desktop、Documents、Downloads、Music、Pictures、Public、Templates、Videos
    sudo pacman -S xdg-user-dirs
    
  • git 、lazygit

  • fzf

  • 终端的文件管理器:ranger

    sudo pacman -S libcaca highlight atool lynx elinks mediainfo w3m poppler
    sudo pacman -S ranger
    
    # 执行 ranger 就可以启动
    

    ranger 默认是没有开启图片预览的,图片预览功能需要自己手动配置打开。 ranger 文件浏览器配合 w3m 终端式的浏览器预览图片:

    # 修改 ~/.config/ranger/rc.conf
        set preview_images true
        set preview_images_method w3m
    ​
    # 如果没有找到rc.conf文件,则可以
        cp /usr/share/doc/ranger/config/rc.conf ~/.config/ranger/
    #  或者
        ranger --copy-config=all # all/rc
    

程序启动器

  • dmenu
  • rofi

Shell

  • fish - starship
  • zsh - oh-my-zsh - starship