由于我是archlinux机器,所以我使用pacman
sudo pacman -S i3
其他发行版例如debian/ubuntu
sudo apt-get install i3
i3的配置文件在~/.config/i3/config
可以参考:https://wiki.archlinuxcn.org/wiki/I3#(arch官方wiki)
如果要自行理解,我很难把我心里的话全部说出来而且保证你可以理解,下面我把其中的大部分i3的配置段放出来加上注释来帮助你理解:
# 这个文件由 i3-config-wizard(1) 自动生成。
# 它不会被覆盖,所以你可以根据自己的喜好进行编辑。
# i3 配置文件 (版本4)
#
# 请参考 https://i3wm.org/docs/userguide.html 获取完整的参考文档!
# 设置超级键为 Mod1 (通常是 Alt 键)
set $mod Mod1
# 窗口标题的字体。除非在下面的 bar {} 块中使用了不同的字体,
# 否则这也将用于状态栏。
font pango:monospace 8
# 这个字体被广泛安装,提供了许多 unicode 字符,支持从右到左的文本渲染,
# 并能在视网膜/高清显示器上缩放(感谢 pango)。
#font pango:DejaVu Sans Mono 8
# 使用 dex 启动 XDG autostart .desktop 文件。更多信息请参见
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3
# xss-lock、nm-applet 和 pactl 的组合是一个受欢迎的选择,因此这里作为一个示例。
# 请根据你的需求进行修改。
# xss-lock 获取一个 logind 挂起禁止锁,并将在挂起前使用 i3lock 锁定屏幕。
# 使用 loginctl lock-session 锁定你的屏幕。
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# NetworkManager 是在 Linux 上管理无线网络最受欢迎的方式,
# nm-applet 是一个独立于桌面环境的系统托盘 GUI。
exec --no-startup-id nm-applet
# 使用 pactl 调整 PulseAudio 的音量。
set $refresh_i3status killall -SIGUSR1 i3status
# 增加音量
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
# 减少音量
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
# 静音
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
# 麦克风静音
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# 使用鼠标+超级键将浮动窗口拖动到想要的位置
floating_modifier $mod
# 通过左键点击标题栏或按住浮动修改键的同时左键点击窗口的任何地方,
# 来移动平铺窗口。
tiling_drag modifier titlebar
# 启动一个终端
bindsym $mod+Return exec konsole
# 杀死聚焦的窗口
bindsym $mod+q kill
# 启动 dmenu (一个程序启动器)
bindsym $mod+d exec --no-startup-id dmenu_run
# 一个更现代的 dmenu 替代品是 rofi:
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# 还有 i3-dmenu-desktop,它只显示提供 .desktop 文件的程序。
# 它是 dmenu 的一个包装器,所以你需要安装 dmenu。
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
# 改变焦点
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
# 或者,你可以使用光标键:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# 移动聚焦的窗口
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
# 或者,你可以使用光标键:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# 水平方向分割
bindsym $mod+h split h
# 垂直方向分割
bindsym $mod+v split v
# 切换全屏模式
bindsym $mod+f fullscreen toggle
# 改变容器布局(堆叠、标签、切换分割)
bindsym $mod+s layout stacking # 堆叠布局
bindsym $mod+w layout tabbed # 标签布局
bindsym $mod+e layout toggle split # 切换分割布局
# 切换平铺/浮动窗口
bindsym $mod+Shift+space floating toggle # 切换浮动模式
# 在平铺/浮动窗口之间切换焦点
bindsym $mod+space focus mode_toggle # 切换焦点模式
# 聚焦父容器
bindsym $mod+a focus parent # 聚焦到父容器
# 聚焦子容器
#bindsym $mod+d focus child # 取消注释后可聚焦到子容器
# 为默认的工作区定义名称,我们稍后在配置键绑定时会用到它们。
# 我们使用变量以避免在多个地方重复名称。
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# 切换到工作区
bindsym $mod+1 workspace number $ws1 # 切换到工作区 1
bindsym $mod+2 workspace number $ws2 # 切换到工作区 2
bindsym $mod+3 workspace number $ws3 # 切换到工作区 3
bindsym $mod+4 workspace number $ws4 # 切换到工作区 4
bindsym $mod+5 workspace number $ws5 # 切换到工作区 5
bindsym $mod+6 workspace number $ws6 # 切换到工作区 6
bindsym $mod+7 workspace number $ws7 # 切换到工作区 7
bindsym $mod+8 workspace number $ws8 # 切换到工作区 8
bindsym $mod+9 workspace number $ws9 # 切换到工作区 9
bindsym $mod+0 workspace number $ws10 # 切换到工作区 10
# 将聚焦的容器移动到工作区
bindsym $mod+Shift+1 move container to workspace number $ws1 # 移动容器到工作区 1
bindsym $mod+Shift+2 move container to workspace number $ws2 # 移动容器到工作区 2
bindsym $mod+Shift+3 move container to workspace number $ws3 # 移动容器到工作区 3
bindsym $mod+Shift+4 move container to workspace number $ws4 # 移动容器到工作区 4
bindsym $mod+Shift+5 move container to workspace number $ws5 # 移动容器到工作区 5
bindsym $mod+Shift+6 move container to workspace number $ws6 # 移动容器到工作区 6
bindsym $mod+Shift+7 move container to workspace number $ws7 # 将当前容器移动到工作区7
bindsym $mod+Shift+8 move container to workspace number $ws8 # 将当前容器移动到工作区8
bindsym $mod+Shift+9 move container to workspace number $ws9 # 将当前容器移动到工作区9
bindsym $mod+Shift+0 move container to workspace number $ws10 # 将当前容器移动到工作区10
# 重新加载配置文件
bindsym $mod+Shift+c reload # 重新加载i3的配置文件
# 在不重启的情况下重启i3(保留你的布局/会话,可用于升级i3)
bindsym $mod+Shift+r restart # 重新启动i3,保留当前的窗口布局和会话
# 退出i3(这将结束你的X会话)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m '你按下了退出快捷键。你真的想要退出i3吗?这将结束你的X会话。' -B '是的,退出i3' 'i3-msg exit'"
# 当按下快捷键时,显示一个警告栏,确认是否真的要退出i3
# 调整窗口大小(你也可以使用鼠标进行操作)
mode "resize" { # 定义一个名为"resize"的模式,用于调整窗口大小
# 进入调整模式后,以下绑定将立即触发
# 按下'j'键将缩小窗口的宽度
bindsym j resize shrink width 10 px or 10 ppt
# 按下'k'键将增加窗口的高度
bindsym k resize grow height 10 px or 10 ppt
# 按下'l'键将缩小窗口的高度
bindsym l resize shrink height 10 px or 10 ppt
# 按下';'键将增加窗口的宽度
bindsym semicolon resize grow width 10 px or 10 ppt
# 使用方向键进行相同的调整操作
bindsym Left resize shrink width 10 px or 10 ppt # 方向键左,缩小窗口宽度
bindsym Down resize grow height 10 px or 10 ppt # 方向键下,增加窗口高度
bindsym Up resize shrink height 10 px or 10 ppt # 方向键上,缩小窗口高度
bindsym Right resize grow width 10 px or 10 ppt # 方向键右,增加窗口宽度
# 返回正常模式:按Enter、Escape或$mod+r
bindsym Return mode "default" # 按回车键返回默认模式
bindsym Escape mode "default" # 按Esc键返回默认模式
bindsym $mod+r mode "default" # 按$mod+r快捷键返回默认模式
}
# 启动调整模式
bindsym $mod+r mode "resize" # 按$mod+r快捷键进入"resize"调整模式
(这是由chatgpt翻译的,不然我可没有这么多精力去一个一个翻)
是不是读起来十分灾难所以我尽量不把配置文件放在文章里,不然阅读起来太过头疼
下面我只放出我的配置文件gitee仓库
https://gitee.com/script-beimen/someconfig
(为什么不用github?照顾一些对于github在国内环境不熟悉的新人考虑,当然gitee可以clone)
先要知道,i3不像是kde gnome一样把很多功能和软件包含到一块,许多组件都是要自己亲手从零开始配置的
但是还是有一些先驱者会给你把粗粮做成细糠给你吃,但是细糠你能不能吃,喜不喜欢吃都需要你二次加工
所以这里就只是粗略讲解配置方法,剩下的你可以看下面我的配置里面的注释(原配置文件内只标住重要选项)
1.polybar
2.picom
3.rofi
4.flameshot
5.fcitx
6.feh
这些都是在i3上最常用的软件,其他软件你们在原先的桌面上肯定有遗留下的软件,这些软件在i3中全部都是可以运行的
除去些部分强制浮窗模式的窗口,他们都可以正常显示,所以由桌面到wm,只要会配置,你也不需要担心软件问题
你只需要在未来的wayland上担心x11显示兼容问题(但是我的xwayland在许多软件显示上都没什么问题)
就是一个状态栏显示软件,直接运行的话就是他的实例版本配置,比较丑,所以polybar的好看与否完全取决于自己的配置能力,然而能够徒手去撸一个和自己预期完全一样的配置对于大部分不接触代码的朋友来说根本不友好,所以github上就有一群人写了一些polybar的预配置来供人们修改配置,这里我把他们的仓库网址放出来
https://github.com/adi1090x/polybar-themes
当然有些小伙伴可能不会用github那么这里我放出我的gitee镜像仓库
https://gitee.com/script-beimen/polybar-themes
我用的是其中的colorblocks,我自己的配置也发到了gitee仓库中,想要的可以自己去看,polybar的配置文件繁琐太多,我就不发在这里看了,想要注释版本配置文件的同学们自己去我配置文件仓库里面的注释版本去看吧
下面我列出我的配置文件格式
❯ tree ~./.config/polybar/colorblock/
.
├── bars.ini
├── colors.ini
├── config.ini
├── launch.sh
├── modules.ini
├── preview.ini
├── preview.sh
├── scripts
│ ├── checkupdates
│ ├── colors-dark.sh
│ ├── colors-light.sh
│ ├── color-switch.sh
│ ├── launcher.sh
│ ├── powermenu.sh
│ ├── pywal.sh
│ ├── random.sh
│ ├── rofi
│ │ ├── colors.rasi
│ │ ├── confirm.rasi
│ │ ├── launcher.rasi
│ │ ├── message.rasi
│ │ ├── networkmenu.rasi
│ │ ├── powermenu.rasi
│ │ └── styles.rasi
│ └── updates.sh
└── user_modules.ini
是不是一目了然?只要你了解一些polybar的配置原理并且翻译你就可以看出其中的意思,这里我只会将config和modules的作用讲出
首先是config.ini,这是polybar配置文件体的主要配置文件,主要负责polybar的大体配置和主干的排列,例如这个状态栏的高度是多少?左边右边中间该怎么排列模块?状态栏的显示位置?状态栏的宽度?等等都在里面配置,而config.ini的主体代码太大太多,我并不能把注释全部翻译所以注释的理解还需要你们去自行翻译
polybar的结构
是先配置polybar的主体
然后再创建模块
再应用到主体bar
这么说可能确实有些难以理解,但是polybar的大致配置就是这样,而且这算是中等难度,后面的系统配置更需要理解去打磨
再说道config.ini,你如果懒得再分开配置你也可以只在config.ini中配置,但是我的这个主题模板就是这样,而且这样的模板的可控性易读性大大增加,所以我还是建议这样配置polybar
然后modules其实就是存储其中大部分模块的一个配置文件,config就是要读取这个文件来应用模块
color就是配色配置文件,主要是其中的一些配色变量就取自这里,而配色方案的应用就需要去更改这个文件,所以要改颜色就直接来这里就可以
picom
(原名为compton
)是一个X11 compositor,它为窗口管理器提供窗口透明、阴影、模糊和其他效果。在i3窗口管理器上使用picom
可以带来以下作用:
窗口透明度:picom
可以让你为窗口设置透明度,这意味着你可以看到窗口背后的内容。这对于创建平滑的用户界面非常有用。
窗口阴影:它为窗口添加阴影效果,这可以增强视觉深度,使窗口看起来不那么平坦。
窗口模糊:picom
可以模糊背后的窗口,这可以改善专注于当前窗口的视觉体验。
动画效果:picom
支持窗口打开、关闭和移动时的动画效果,这可以使窗口管理器的外观更加现代和流畅。
优化渲染:picom
通过只重新绘制变化的部分来优化渲染,这可以提高性能。
后台透明支持:它支持应用程序使用后台透明度,例如终端、聊天应用程序等。
减少撕裂:通过使用双重缓冲和异步更新,picom
可以减少屏幕撕裂,特别是在使用多个显示器时。
无缝集成:picom
可以很好地与i3集成,不需要额外的配置就能工作,但也可以通过配置文件进行深度定制。
(哈哈这段ai写的)
picom有许多分支版本(fork)而我现在用的就是yshui picom,他的动画观赏性很强大,而且延迟和流畅度都有很大的提升
这个我没什么好说的,配置文件就用仓库里给出的picom.conf就好(picom --config /xxx/picom.conf 来应用配置文件),构建安装在readme里面有说
原仓库
https://github.com/yshui/picom
这是镜像仓库
https://gitee.com/script-beimen/picom
这些配置文件自己就有英文注释,可以自行翻译
feh在本质上来说其实就是一个图片查看软件,但是有在背景显示图片的功能就被当作壁纸软件来用
使用方式也很简单
feh --bg-scale /path/to/image.jpg
就可以设置壁纸,如果想要设置成随机式的也可以
feh --bg-random /path/to/image1.jpg /path/to/image2.jpg /path/to/image3.jpg
或者
feh --bg-random /path/to/*
rofi也可以用dmenu
都可以作为软件启动器运行
如果要在i3启用只需要修改即可
bindsym $mod+d exec dmenu #或者rofi