最近工作上项目对系统有些特殊要求,macOS及Windows系统都不能很好地运行,于是有想法切换到Linux系统上进行开发,再加上最近在网上看到坛友推荐i3wm,于是就想着要不借助这个机会再次尝试下ArchLinux及i3wm好了,利用晚上下班时间折腾了大概一个星期,算是配置好了一个比较满意的GUI环境,前后也走了不少弯路且遇到不少问题,期间发现我并没有搜到比较完整的配置过程,所以就想我这里做个记录,希望能为中文互联网提供一篇相对完整的ArchLinux+i3wm简单配置过程。

写在开始

我目前日常使用的是黑苹果macOS系统,前后总共使用了至少有5年了,可以说我日常的电脑使用经验大多都是基于macOS系统,包括基本的系统操作及环境配置等,所以即使是体验ArchLinux及i3wm,也难免会跟我熟悉的macOS系统对比,所以本文多少可能会夹杂我对系统的主观情绪。

我的体验平台是我日常使用的硬改的NUC8i5BEH,直接安装到硬盘上而不是虚拟机体验。

既然都选择了i3wm,所以我在整个安装过程中选择只安装必须的包,能不安装的尽量不安装,如果参考本文的朋友,可以按照自己的需求进行安装需要的包。

本文为了方便,在使用SDDM登录i3wm之前都是假设使用了root账户登录,如果不是使用root登录,可能需要在命令行前面添加sudo命令。

因个人知识有限,文章难免有误,如果遇到有错误的地方,恳请指正。

文中涉及的软件包大多可以复制相关包名到ArchLinux的wiki中查看详情,我为了方便理解,只是简单介绍让刚接触的朋友有个大概的了解。

先来个平平无奇的半成品效果:

archlinux-i3wm

ArchLinux安装及基本设置

ArchLinux安装没什么好说的,跟着ArchLinux的wiki文档一步一步走就能安装好。如果对ArchLinux系统不熟悉,建议先熟悉一下安装过程再考虑折腾i3wm。

如果是虚拟机安装或者云主机安装,可以使用ArchLinux安装镜像中自带的archinstall进行快速安装。

根据我的实际安装经验,物理机安装的时候使用archinstall并不能很好地自定义分区,所以我是选择手动安装以让ArchLinux和我的macOS及Windows系统共存,当然也可能是我对archinstall脚本不熟悉。

安装过程中建议额外安装dhcpcd及vim包,能在后续安装过程中减轻一些工作量。

如果在有网线的情况下,可以通过此命令启动DHCP服务快速完成网络设置:

systemctl start dhcpcd

后续的安装过程假设已经完成了ArchLinux系统的联网及能正常登录系统。

启用archlinuxcn源及安装yay

说句题外话,想当年我在2014年使用ArchLinux的时候archlinuxcn源还是使用的yaourt,在8年后的今天竟然变成了yay。

因为后续有些包只在archlinuxcn源里面有,比如说QQ音乐、搜狗输入法、微信、i3gaps等,所以要想安装这些额外的包,需要启用archlinuxcn源并安装yay管理器。

修改/etc/pacman.conf,在文件最后添加如下内容:

[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

上面选择的是中科大的镜像站,我个人体验来说中科大的源是速度最快的,如果实际网络情况不好,也可以选择别的源。

然后是更新源及安装yay:

pacman -Syyu //更新源,期间会自动下载archlinuxcn的源数据库
pacman -S yay //安装yay
pacman -S archlinuxcn-keyring //archlinuxcn相关GPG key,如果不安装这个包会导致后续部分包无法成功安装

相关软件包介绍

在安装之前先说一下i3wm及对应的几个大家流行的包的关系及作用。

i3wm及i3gaps介绍

i3wm是一个动态平铺 窗口管理器,后缀里面的wm全称是window manager,注意这里说的wm,跟我们平时用的DE还是有所区别的。

首先i3wm是一组窗口管理器,而且它的特点是平铺,跟我们日常在Windows或者macOS等图形化界面的体验不一样,i3wm的软件比如说终端、浏览器等默认就是像一本本书平铺在桌面上,而且默认也并不能通过鼠标进行移动,虽然说也能通过快捷键进行重叠及转成鼠标可移动的窗口,但是根据我的使用过程来说,大多数窗口还是平铺的。

所以有些刚接触的朋友可能会问,既然这么多限制,那为什么还有这么多人喜欢i3wm这种桌面环境呢?

事实是,虽然i3wm在对窗口管理上相比Windows及macOS等系统有些区别,但是i3wm提供了很大的自由让用户能通过快捷键对窗口进行操作。比如说将软件的窗口全屏、调整窗口大小、调整窗口位置或者跟某个窗口交换位置、快速分割显示区域空间、将窗口从一个工作区(workspace)移动至另一个工作区等等,可以说日常如果习惯使用快捷键进行操作的朋友,使用i3wm进行操作会更加得心应手。

除了i3wm默认配置文件预置的,我们作为用户还可以根据需要自定义配置快捷键进行我们想要的功能,这部分在后续的i3wm配置中可以体会到。

虽然标题是i3wm,但是也可以选择安装i3gaps。i3wm与i3gaps的区别是,i3wm默认是矩形,i3gaps可以说是i3wm的一个衍生版,相比i3wm,i3gaps多了一些特性,比如说,i3gaps可以通过修改配置文件使得窗口有一定的圆角效果,如果需要更好的视觉效果,可以选择i3gaps。

picom介绍

简单来说,i3wm默认并不支持窗口动画及特效,picom就是一个为i3wm提供特效支持的软件包,最简单的一个例子就是,运行picom之后,终端可以透明。

rofi介绍

rofi是一个程序启动器,类似于Windows系统的开始菜单里面的搜索框以及macOS的launchpad,i3wm默认是不带程序的开始菜单的,所以要启动Chrome、VSCode等程序,虽然终端也可以启用,但是每次都通过终端启动太麻烦了,且还要占用终端,rofi就是一个配合i3wm快速启动程序的程序(这句话怎么有点套娃的意思?)。

polybar介绍

polybar类似于与Windows的任务栏,配合i3wm,能展示一些系统信息比如窗口信息、快捷操作入口比如调整音量、显示日期时间及系统重启等快捷操作入口等。

安装软件包

下面是一些可能需要的软件包的安装命令:

pacman -S xorg-server
//sddm安装,如果通过startx命令登录i3wm也可不安装此项
pacman -S sddm
//i3wm安装
pacman -S i3wm 
//或者安装i3gaps,二选一
yay -S i3-gaps

//picom、rofi及feh
pacman -S rofi picom feh

在进入系统之前需要安装一个终端应用,否则进入系统之后是无法打开终端的,我这里选择很多网友推荐的alacritty,如果喜欢的话,安装别的终端应用比如说xterm也可以:

pacman -S alacritty

安装字体文件

安装X11过程中会安装部分字体,但是默认安装的字体可能不太够用,这里是我安装的部分字体:

pacman -S noto-fonts-cjk powerline-fonts wqy-microhei adobe-source-code-pro-fonts
yay -S ttf-apple-emoji

比我较喜欢Source Code相关字体,emoji我比较喜欢Apple的,所以emoji相关字体我也安装的是Apple的。

安装字体之后,可以通过如下命令查看系统中安装的字体信息:

fc-cat | less

为啥我会提这个命令?因为后续配置i3wm及alacritty会涉及到字体的选择,这个命令可以列出字体的名称。

通过SDDM登录i3wm

在登录图形化界面之前,建议新建一个普通用户,比如说用户名叫做zoco:

useradd -m -G wheel -s /bin/bash zoco
passwd zoco
//然后修改对应用户的权限
EDITOR=vim visudo

//把#%wheel一行前面的#去掉或者最后添加一行
%wheel ALL=(ALL:ALL) NOPASSWD: ALL

安装完成之后启动SDDM,应该就能通过图形化界面进行登录了:

systemctl enable sddm
systemctl start sddm

使用上述新建的用户登录之后即可,登录完成之后有一个快速设置向导,如果不知道有什么用,直接按两次回车即可。

快速向导中会要求选择Win或者Alt键作为MOD键,后续提到的$MOD就是这里设置的Win或者Alt键,如果忘记,可通过修改.config/i3/config文件进行修改或者执行i3-config-wizard重新配置。

设置完成之后,按$MOD+Enter即可快速打开alacritty。

i3wm相关配置

虽然到这一步就已经能使用i3wm的各项功能,但是默认设置看起来是真的丑,而且默认的设置不是很人性化,还需要进行自定义配置。

配置分为i3wm配置、alacritty配置以及polybar配置及启动。

i3wm配置

i3wm默认的快捷键我不打算一一列出了,查看i3wm的默认配置文件就能看到,i3wm默认配置文件地址:

~/.config/i3/config

如果此配置文件不存在,或者被修改出错,可以通过如下命令复制一份新的:

mkdir ~/.config/i3
cp /etc/i3/config ~/.config/i3/config

i3wm的配置文件分为两步,分别是修改原有配置及新增配置。

先是修改原有配置,下列部分是删除或者注释:

#font pango:monospace 8

#bindsym $mod+d exec --no-startup-id dmenu

#bar {
#        status_command i3status
#}

然后是新增部分配置:

//设置字体及字体大小
font pango:Source Code Pro 12,DejaVu Sans Mono 12

//设置$MOD+d为启动rofi
bindsym $mod+d exec --no-startup-id "rofi -modi drun,run -show drun"

//启动picom
exec --no-startup-id picom -b

//使用feh设置壁纸,注意壁纸文件必须存在且路径正确
exec --no-startup-id feh --bg-scale ~/zocoxx/wallpaper.jpeg

//锁屏,因Win+L快捷键在i3wm默认被占用,我设置的是$MOD+Ctrl+l为锁屏快捷键
bindsym $mod+Ctrl+l exec --no-startup-id i3lock

//去除窗口的标题栏,有利有弊,好处是窗口少了额头,坏处是去除标题栏之后部分窗口无法进行鼠标拖动
for_window [class="^.*"] border pixel 0
//设置边框为1像素
new_window pixel 1

//如果安装了输入法,可以使用此命令进行启动输入法
exec --no-startup-id fcitx &

配置完成之后,按$MOD+Shift+r可以快速重启i3wm,如果配置没问题的话,可以看到新的效果了。

alacritty配置

选择alacritty就是看重其可定制,自然不会选择默认配置了。

alacritty可选配置文件路径有很多,为了方便,我选择将配置文件放到~/.config目录里面。完整配置文件内容如下:

# ~/.config/alacritty.yml
font:
  normal:
    family: Source Code Pro
  bold:
    family: Source Code Pro
  italic:
    family: Source Code Pro
  size: 12

window:
  opacity: 0.7

env:
  TERM: xterm-256color

我选择配置alacritty使用Source Code Pro字体,且字号大小为12。

特别提醒一下,alacritty背景透明度设置不是网络流传的window.opacity或者background_opacity,要设置透明度的话建议参考我上述的格式。

保存即可看到效果。

polybar设置及启动

polybar需要有默认的配置文件才能启动,所以,创建目录并设置配置文件:

mkdir ~/.config/polybar
cp /etc/polybar/config.ini ~/.config/polybar

不知道是polybar更新版本之后配置文件名称改变还是网上的教程以讹传讹,很多都不带.ini后缀,这里建议带上。

上述config.ini默认包含了一个example的配置,命令行执行如下命令即可看到效果:

polybar example

要在启动i3wm之后默认启动polybar,需要有个启动脚本,文件名称、路径及内容如下:

# ~/.config/polybar/launch.sh

#!/bin/bash

# 终端可能已经有在运行的实例
killall -q polybar

# 等待进程被终止
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

# 运行Polybar,使用默认的配置文件路径 ~/.config/polybar/config.ini
polybar example &

echo "Polybar launched..."

然后给与启动脚本可执行权限:

chmod +x ~/.config/polybar/launch.sh

然后i3wm配置文件新加一行:

# ~/.config/i3/config

exec --no-startup-id ~/.config/polybar/launch.sh

如果觉得polybar自带的主题不够好看,可以使用这个库:https://github.com/adi1090x/polybar-themes

rofi设置

rofi可能也支持通过修改配置文件进行配置,但是我觉得rofi默认的配置已经能接受,就没有花时间进行设置了,只说一个,终端环境下可执行如下命令进行主题选择:

//rofi自带主题选择
rofi-theme-selector

使用$MOD+d即可快速打开rofi。

效果展示

这里贴一张我后续美化之后的图片,可以参考下:

archlinux-i3wm-美化

i3wm DPI设置

虽然上述设置了字体及i3wm样式,但是现在的显示器分辨率都比较高,如果使用i3wm默认设置的话,可能会出现字体非常小看起来眼镜累的情况,例如Chrome里面文字非常小,解决办法如下:

# ~/.Xresources

Xft.dpi: 128

将i3wm设置为中文

默认情况下,i3wm上面打开的程序语言例如Chrome默认都是英文,可通过如下方法修改成中文:

## ~/.xprofile
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

export GDK_SCALE=2
export GDK_DPI_SCALE=0.5
export QT_AUTO_SCREEN_SCALE_FACTOR=

配置完之后,注销重新登录i3wm打开对应的程序例如Chrome即可看到中文效果。

主题设置

i3wm默认自带的主题实在是不忍直视,可以安装额外的主题:

pacman -S arc-icon-theme adwaita-icon-theme lxappearance

安装完之后使用rofi启动lxappearance即可进行设置。

ArchLinux+i3wm使用感受

对于习惯了命令行的我来说,ArchLinux配合i3wm使用是真的舒服,原生的Linux系统,熟悉的shell环境,软件包完备,基本上要用的软件都能通过pacman/yay安装上,再加上i3wm的快捷键,就我个人来说,一半以上的场景可以使用快捷键快速切换,可以说指哪打哪。

上面说的确实很美好,我差点都想把我日常开发用的电脑重装成ArchLinux+i3wm了,但事实是,就我自己的体验过程而言,并没有我上面说的那么完美,ArchLinux+i3wm的组合确实很简洁,但是这种简洁是用我们自己配置作为代价换的,如果是不用移动且不用耳机、蓝牙等情况的台式机来说确实很美好,但是我日常办公会使用到WiFi、蓝牙耳机等外设,我折腾了一个多星期,WiFi及蓝牙等终究是没找到一种很完美的解决方式。

一句话来说,ArchLinux+i3wm效率确实高,配置过程也很有意思,能学到不少东西,一次性能配置好确实不错,但是如果使用过程中一直遇到小问题需要解决就不是那么美好了,我本打算将我办公开发的电脑由现有的黑苹果系统换成ArchLinux+i3wm,但在闲置电脑上体验一个星期之后,我最终放弃了这个想法,好用确实好用,但是小问题也确实多,实在是不值得花太多时间去研究这些,至少在当下我应该不会考虑切换到ArchLinux+i3wm。

多说一句,如果有无线网卡,可以安装network-manager-applet这个包,配合NetworkManager服务可以快速连接WiFi。