Thinkpad P14s 的 archlinux 成长手册(i3-wm 窗口管理器)
Archlinux 的安装可以看我之前的博客:虚拟机内使用 archinstall 安装 arch linux 2024.01.01
- Archlinux 每个月都会发布一个版本,最终都是要升级上来的,初次安装,可以直接使用当月最新版本,安装步骤基本没差别
- 后面的操作会用到 aur 源,可以从上面的博客里面找到安装的方法
电脑信息
参考这个博客做的美化处理:i3 窗口管理器终极定制指南
配置文件也放到了 gitee 上了
i3-wm 快捷键
按键绑定 | 描述 |
---|---|
Mod + Enter |
打开终端 |
Mod + ← |
切换到左侧窗口 |
Mod + → |
切换到右侧窗口 |
Mod + ↑ |
切换到上方窗口 |
Mod + ↓ |
切换到下方窗口 |
Mod + Shift + ← |
将窗口移动到左侧 |
Mod + Shift + → |
将窗口移动到右侧 |
Mod + Shift + ↑ |
将窗口移动到上方 |
Mod + Shift + ↓ |
将窗口移动到下方 |
Mod + f |
将焦点窗口切换到全屏模式 |
Mod + v |
下一个窗口将垂直放置 |
Mod + h |
下一个窗口将水平放置 |
Mod + s |
启用堆叠式窗口布局 |
Mod + w |
启用选项卡式窗口布局 |
Mod + Shift + Space |
启用浮动窗口(针对焦点窗口) |
Mod + 鼠标左键单击 |
使用鼠标拖动整个窗口 |
Mod + 0-9 |
切换到另一个工作区 |
Mod + Shift + 0-9 |
将窗口移动到另一个工作区 |
Mod + d |
打开应用程序启动器(D 菜单) |
Mod + Shift + q |
关闭焦点窗口 |
Mod + Shift + c |
重新加载 i3 配置文件 |
Mod + Shift + r |
重启 i3 窗口管理器 |
Mod + Shift + e |
退出 i3 窗口管理器 |
分辨率调整
安装 X 窗口系统
sudo pacman -S xorg-server xorg-xrandr
查看显示器情况
xrandr
可以看到,当前的分辨率是 1024x768
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
1920x1080 60.02 + 48.00
1680x1050 60.02
1280x1024 60.02
1440x900 60.02
1280x800 60.02
1280x720 60.02
1024x768 60.02*
800x600 60.02
640x480 60.02
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)
手动修改分辨率(这里必须是字母 x,不能是 *,会无法识别),如果是分屏,哪个要设置为主窗口,只需要加上
--primary
参数
xrandr --output eDP --mode 1920x1080 --rate 60.02
在 i3 配置文件里面加上上面的命令实现永久更改分辨率
exec_always --no-startup-id xrandr --output eDP --mode 1920x1080 --rate 60.02
终端版文件管理器
ranger 是一个基于文本的文件管理器,使用 Python 编写,可以预览图片
sudo pacman -S ranger
壁纸设置
feh 可以查看图片,也可以用来设置桌面壁纸
sudo pacman -S feh
设置壁纸
feh --bg-scale /path/to/image.jpg
可以加入到 i3 的配置文件里面,这样可以保证每次开机之后,都会设置壁纸
exec_always --no-startup-id feh --bg-scale /path/to/image.jpg
触摸板配置
复制配置文件
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/
找到
touchpad
添加下面的参数
Option "Tapping" "on"
完整的配置文件参考
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "NaturalScrolling" "true"
# EndSection 前面加上下面这行内容开启触摸板轻点单击
Option "Tapping" "on"
EndSection
合盖后不休眠
- logind.conf.5
- 其中几个参数
HandlePowerKey
: 按下电源键后的行为,默认power off
HandleHibernateKey
: 按下休眠键后的行为,默认hibernate
HandleLidSwitch
: 合上笔记本盖后的行为,默认suspend
- 参数可选配置
ignore
poweroff
reboot
halt
kexec
suspend
hibernate
hybrid-sleep
suspend-then-hibernate
sleep
lock
factory-reset
sudo sed -i 's/^HandleLidSwitch=.*/HandleLidSwitch=lock/g' /etc/systemd/logind.conf
sudo sed -i 's/^#HandleLidSwitch=.*/HandleLidSwitch=lock/g' /etc/systemd/logind.conf
重启一下
reboot
i3 配置文件
mkdir ~/.config/i3
cp /etc/i3/config ~/.config/i3
截图工具
sudo pacman -S flameshot
通过 i3 配置文件,配置 flameshot 的快捷键
# flameshot
bindsym $mod+Shift+a exec flameshot gui
剪切板
i3 的工作区之间的数据是不互通的,需要通过剪切板来跨工作区复制粘贴内容
- 我这里用的是
copyq
,他支持中文
sudo pacman -S copyq
copyq 的全局快捷键会影响 vim 的列编辑,两个
ctrl+v
有冲突,可以在 copyq 的设置里面,确认程序里面有ctrl+v
快捷键,可以把全局里面的ctrl+v
快捷键删了就行
i3lock-color
自带的 i3lock 比较丑,锁屏之后是灰色的纯色页面,直接输入密码后回车,就能解锁
卸载 i3lock
sudo pacman -R i3lock
安装 i3lock-color
yay -S i3lock-color
定义配置文件
mkdir ~/.config/i3/scripts
创建一个名字是 i3lock-color 的文件(名字自己定义),里面的颜色,也可以自己配置和调整
#!/bin/sh
BLANK='#00000000'
CLEAR='#ffffff22'
DEFAULT='#00897bE6'
TEXT='#00897bE6'
WRONG='#880000bb'
VERIFYING='#00564dE6'
i3lock \
--insidever-color=$CLEAR \
--ringver-color=$VERIFYING \
\
--insidewrong-color=$CLEAR \
--ringwrong-color=$WRONG \
\
--inside-color=$BLANK \
--ring-color=$DEFAULT \
--line-color=$BLANK \
--separator-color=$DEFAULT \
\
--verif-color=$TEXT \
--wrong-color=$TEXT \
--time-color=$TEXT \
--date-color=$TEXT \
--layout-color=$TEXT \
--keyhl-color=$WRONG \
--bshl-color=$WRONG \
\
--screen 1 \
--blur 9 \
--clock \
--indicator \
--time-str="%H:%M:%S" \
--date-str="%A, %Y-%m-%d" \
--keylayout 1 \
文件增加执行权限
chmod +x ~/.config/i3/scripts/i3lock-color
i3 配置文件增加锁屏配置
# 锁屏快捷键
bindsym $mod+x exec ~/.config/i3/scripts/i3lock-color
锁屏效果(作者那边直接复制的)
i3 主题和图标修改
materia-gtk-theme
:上游推荐的 GTK 主题papirus-icon-theme
:主题的图标lxappearance
:图标的图形化管理工具- 安装后的操作就不展示了,可以看源文档
sudo pacman -S materia-gtk-theme papirus-icon-theme lxappearance
i3 工作区配置
默认的工作区是纯数字,不太好看,先安装字体
sudo pacman -S ttf-font-awesome
找到自己想要的 icon(或者直接搜索,比如 memory),点击后,选择一个喜欢的样式,单机就会复制,然后粘贴到 i3 配置文件里面
分配应用程序到工作区
打开要分配的应用,同时再打开一个终端,输入
xprop
命令,获取到应用的WM_CLASS
名称
例如这里面看到的是 firefox
WM_CLASS(STRING) = "Navigator", "firefox"
在 i3 的配置文件里面增加下面的内容,表示将
firefox
分配到工作区2
,下面的内容是做参考的,以自己实际的需要为准
- 可以在后面加上
floating enable
表示这个应用以悬浮窗的形式打开(默认是全屏,新进程以 split 的方式分屏展示)
for_window [class="firefox"] move to workspace $ws2
工作区字体修改
sudo pacman -S ttf-ubuntu-font-family
找到
font pango:monospace 8
这一行,修改成下面的内容,数字代表字体的大小,根据自己的显示情况调整
font pango:Ubuntu Regular 10
i3 启用透明效果
安装 picom 来配置透明效果和动画效果
sudo pacman -S picom
创建配置文件
mkdir ~/.config/picom
cp /usr/share/doc/picom/picom.conf.example ~/.config/picom/picom.conf
修改配置文件
rules: ({
match = "window_type = 'tooltip'";
fade = false;
shadow = true;
opacity = 0.75;
full-shadow = false;
}, {
match = "window_type = 'dock' || "
"window_type = 'desktop' || "
"_GTK_FRAME_EXTENTS@";
blur-background = false;
}, {
match = "window_type != 'dock'";
# shader = "my_shader.frag";
}, {
match = "window_type = 'dock' || "
"window_type = 'desktop'";
corner-radius = 0;
}, {
match = "name = 'Notification' || "
"class_g = 'Conky' || "
"class_g ?= 'Notify-osd' || "
"class_g = 'Cairo-clock' || "
"_GTK_FRAME_EXTENTS@";
shadow = false;
# 配置文件里面有 rules 的,可以只需要下面这一段内容
# class_g 和上面的 class 是一样的,通过 xprop 命令获取 WM_CLASS 的第二个字段
# 我这里是针对 terminal 和 vscode 以及 dock 做了透明处理
}, {
match = "window_type = 'dock' || "
"class_g = 'UXTerm'";
fade = false;
shadow = true;
opacity = 0.7;
full-shadow = false;
}, {
match = "class_g = 'code-oss'";
fade = false;
shadow = true;
opacity = 0.8;
full-shadow = false;
})
WINDOW_TYPE
总共有15 种可以选择
unknown
- 表示未知窗口类型,通常是默认值。如果窗口的类型未被明确指定,则可能使用此类型。
desktop
- 表示桌面窗口,通常用于显示桌面背景或桌面环境的根窗口。
dock
- 表示停靠栏窗口,例如任务栏或面板,通常用于显示快捷方式、系统托盘等。
toolbar
- 表示工具栏窗口,通常用于应用程序中的工具栏,提供快速访问功能的按钮。
menu
- 表示菜单窗口,通常是应用程序中主菜单栏的一个下拉部分。
utility
- 表示实用窗口,通常是辅助工具窗口,例如设置窗口或属性窗口。
splash
- 表示启动画面窗口,通常用于显示应用程序启动时的过渡画面。
dialog
- 表示对话框窗口,通常用于与用户交互的小型窗口,如 “保存文件” 或 “确认” 窗口。
normal
- 表示普通窗口,通常是用户运行的标准应用程序窗口。
dropdown_menu
- 表示下拉菜单窗口,例如从菜单栏或右键菜单弹出的下拉选项列表。
popup_menu
- 表示弹出菜单窗口,类似于右键菜单或上下文菜单,但通常是更独立的弹出菜单。
tooltip
- 表示工具提示窗口,通常是当用户悬停在按钮或控件上时出现的小提示框。
notification
- 表示通知窗口,通常是弹出的系统或应用通知提示。
combo
- 表示组合框窗口,通常是用于选择多个选项之一的控件,例如下拉框的扩展部分。
dnd
- 表示拖放窗口(Drag-and-Drop),通常用于在拖放操作中显示拖动的内容或目标位置。
修改 i3 配置文件
增加下面的内容,重启的时候都会开启 picom (picom 的配置文件修改后,会立刻生效,调试很方便)
exec_always --no-startup-id picom -f --config ~/.config/picom/picom.conf
i3status
i3 有两种状态栏,一个是 i3status,一个是 i3blocks,当然,还有第三方的 polybar,看大家自己需求去选择
特性 | i3status | i3blocks |
---|---|---|
上手难度 | 简单 | 较高 |
性能开销 | 低 | 较高 |
可定制性 | 限制较多 | 强大 |
动态更新 | 较弱 | 优秀 |
美观性 | 基本布局 | 灵活布局 |
脚本支持 | 无(或有限) | 强大,支持任意脚本语言 |
我这边需求不高,直接使用 i3status
ipv6
disk /
run_watch DHCP
run_watch VPNC
path_exists VPN
wireless wlan0
ethernet eth0
battery 0
cpu_temperature 0
memory
load
tztime local
tztime berlin
具体配置可以看官方文档,下面是我的配置文件
general {
colors = true
interval = 5
}
# order += "ipv6"
order += "wireless _first_"
# order += "ethernet _first_"
order += "load"
order += "memory"
order += "disk /"
order += "battery all"
order += "tztime local"
wireless _first_ {
format_up = " (%essid) %ip"
# format_up = "WLAN: (%quality at %essid) %ip"
format_down = "WLAN: down"
}
ethernet _first_ {
format_up = "E: %ip (%speed)"
format_down = "E: down"
}
battery all {
format = "%status %percentage"
# format = "%status/%percentage/%remaining"
status_chr = ""
status_bat = ""
}
disk "/" {
format = " %avail"
}
load {
format = " %1min/%5min/%15min"
}
memory {
format = " %used/%available"
threshold_degraded = "1G"
format_degraded = "MEMORY < %available"
}
tztime local {
format = " %Y-%m-%d %H:%M"
# format = "%Y-%m-%d %H:%M:%S"
}
i3status 的配置文件在
/etc/i3status.conf
,可以放到指定目录下,然后修改 i3 的配置文件,在bar {}
后面加上-c
来指定配置文件,修改之前,记得备份一份
bar {
status_command i3status -c /home/chenxiaodu/.config/i3/i3status.conf
}
i3blocks 可以看开头的博客里面的介绍,这个是当前的一个效果
i3 颜色方案
管理器颜色方案
- 官方 i3 配置手册
- 颜色定义
bgcolor
表示背景色in-bgcolor
表示非活动窗口的背景色text
是文本颜色u-bgcolor
表示紧急操作的背景色indicator
是标示下一个窗口位置的线条的颜色in-text
是非活动窗口的文本颜色- 类别
client.focused
定义了焦点窗口的颜色client.unfocused
定义了失去焦点时窗口的装饰client.focused_inactive
当其中一个容器处于焦点但当前没有焦点时,显示的颜色client.urgent
定义了紧急操作时的颜色
# 窗口的色彩方案
set $col_green #20b2aa
set $col_gray #525252
set $col_black #1e1e23
set $col_purple #b399ff
set $col_red #470024
set $col_pink #ff69b4
set $col_white #ffffff
# 边框 背景 文本 指示器(显示下一个窗口位置的线条)
client.focused $col_green $col_green $col_black $col_purple
client.unfocused $icol_gray $col_gray $col_gray $col_gray
client.focused_inactive $icol_gray $col_gray $col_gray $col_gray
client.urgent $col_red $col_red $col_black $col_red
bar 颜色方案
bar {
# status_command i3blocks -c /home/chenxiaodu/.config/i3/i3blocks.conf
status_command i3status -c /home/chenxiaodu/.config/i3/i3status.conf
colors {
separator $col_pink
# border background text
focused_workspace $col_purple $col_purple $col_black
inactive_workspace $col_black $col_black $col_white
urgent_workspace $col_red $col_red $col_black
}
}
效果如下
i3gaps
I3-wm 默认窗口之间是没有间隙的,如下图,i3gaps 是一个添加间隙的工具
i3 配置文件增加下面的内容
# default gaps
# 窗口之间的间隙大小(像素值)
gaps inner 10
# 屏幕边缘和窗口之间的间隙大小(像素值)
gaps outer 5
# gaps
set $mode_gaps Gaps: (o)uter, (i)nner, (h)orizontal, (v)ertical, (t)op, (r)ight, (b)ottom, (l)eft
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_horiz Horizontal Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_verti Vertical Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_top Top Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_right Right Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_bottom Bottom Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_left Left Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"
mode "$mode_gaps" {
bindsym o mode "$mode_gaps_outer"
bindsym i mode "$mode_gaps_inner"
bindsym h mode "$mode_gaps_horiz"
bindsym v mode "$mode_gaps_verti"
bindsym t mode "$mode_gaps_top"
bindsym r mode "$mode_gaps_right"
bindsym b mode "$mode_gaps_bottom"
bindsym l mode "$mode_gaps_left"
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
bindsym plus gaps outer current plus 5
bindsym minus gaps outer current minus 5
bindsym 0 gaps outer current set 0
bindsym Shift+plus gaps outer all plus 5
bindsym Shift+minus gaps outer all minus 5
bindsym Shift+0 gaps outer all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
bindsym plus gaps inner current plus 5
bindsym minus gaps inner current minus 5
bindsym 0 gaps inner current set 0
bindsym Shift+plus gaps inner all plus 5
bindsym Shift+minus gaps inner all minus 5
bindsym Shift+0 gaps inner all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_horiz" {
bindsym plus gaps horizontal current plus 5
bindsym minus gaps horizontal current minus 5
bindsym 0 gaps horizontal current set 0
bindsym Shift+plus gaps horizontal all plus 5
bindsym Shift+minus gaps horizontal all minus 5
bindsym Shift+0 gaps horizontal all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_verti" {
bindsym plus gaps vertical current plus 5
bindsym minus gaps vertical current minus 5
bindsym 0 gaps vertical current set 0
bindsym Shift+plus gaps vertical all plus 5
bindsym Shift+minus gaps vertical all minus 5
bindsym Shift+0 gaps vertical all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_top" {
bindsym plus gaps top current plus 5
bindsym minus gaps top current minus 5
bindsym 0 gaps top current set 0
bindsym Shift+plus gaps top all plus 5
bindsym Shift+minus gaps top all minus 5
bindsym Shift+0 gaps top all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_right" {
bindsym plus gaps right current plus 5
bindsym minus gaps right current minus 5
bindsym 0 gaps right current set 0
bindsym Shift+plus gaps right all plus 5
bindsym Shift+minus gaps right all minus 5
bindsym Shift+0 gaps right all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_bottom" {
bindsym plus gaps bottom current plus 5
bindsym minus gaps bottom current minus 5
bindsym 0 gaps bottom current set 0
bindsym Shift+plus gaps bottom all plus 5
bindsym Shift+minus gaps bottom all minus 5
bindsym Shift+0 gaps bottom all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
mode "$mode_gaps_left" {
bindsym plus gaps left current plus 5
bindsym minus gaps left current minus 5
bindsym 0 gaps left current set 0
bindsym Shift+plus gaps left all plus 5
bindsym Shift+minus gaps left all minus 5
bindsym Shift+0 gaps left all set 0
bindsym Return mode "$mode_gaps"
bindsym Escape mode "default"
}
配置 i3gaps 之后的效果
xterm 终端
sudo pacman -S xterm
字体安装
sudo pacman -S otf-cascadia-code
xterm 配置文件
配置文件我都是统一放
.config
目录下的
mkdir ~/.config/xterm
vim ~/.config/xterm/.Xresources
下面是我的配置文件,实现了
- 右键黏贴(默认左键选中就是复制)
- 白底黑字
- 隐藏滚动条
- 配置窗口默认尺寸
- 字体和字体大小
- 光标颜色
- 禁止光标闪烁
xterm*vt100.translations: #override \n\
<Btn3Down>: insert-selection(PRIMARY)
xterm*background: black
xterm*foreground: white
xterm*scrollBar: false
xterm*geometry: 125x45
xterm*faceName: Cascadia Code
xterm*faceSize: 11
xterm*cursorColor: #ff69b4
xterm*cursorBlink: false
electron-ssr
ssr 魔法工具,因为我用的 2024.11.01 这个版本的镜像安装,现在最新的 yay 镜像仓库已经缺失了
libappindicator-sharp
这个工具,导致安装有问题,下面记录了解决方法,对应的包我也上传到 gitee 了,以防以后又没了
# 编译 libappindicator-sharp
git clone https://aur.archlinux.org/libappindicator-sharp.git
sudo pacman -S glib2-devel
yay -S breezy
makepkg -si
# 安装 electron-ssr
yay -S python-launchpadlib
sudo pacman -U package/electron-ssr-0.2.7.pacman
音频管理 pulseaudio
安装工具和依赖
sudo pacman -S pulseaudio-alsa pulseaudio-bluetooth pulseaudio-equalizer pulseaudio-jack alsa-utils playerctl pavucontrol
启动 pulseaudio
systemctl --user enable pulseaudio --now
如果声音轻,或者没声音,可以用
pavucontrol
调出 gui 界面进行调试
微信
官方下载 AppImage 包
sudo pacman -S fuse2
chmod +x WeChatLinux_x86_64.AppImage
# 运行微信
./WeChatLinux_x86_64.AppImage
中文输入法
中文和 emoji 展示问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji
更新字体缓存
fc-cache -fv
安装中文输入法
sudo pacman -S fcitx5 fcitx5-gtk fcitx5-qt fcitx5-configtool fcitx5-chinese-addons fcitx5-pinyin-zhwiki
i3 不属于 gui 环境,在
~/.xprofile
配置下面的内容
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
启动 fcitx5
source ~/.xprofile
fcitx -d
配置输入法
fcitx5-configtool
繁体字改成简体
开启云拼音,改为百度
如果中文输入不行,reboot 一下试试