无鼠标窗口管理器 i3
我目前正在写一本书来构建您自己的无鼠标开发环境,其中我解释了如何结合强大的工具来改进和定制您的开发工作流程。
这篇博客文章最初发表在The Valuable Dev上。
您认为在桌面上随处放置图标并配有漂亮的开始菜单是与计算机交互的更好且唯一的方法吗?
许多 Linux 发行版,以及许多操作系统(OS),例如 Windows 或 macOS,都有自己的桌面环境。它基本上是一组图标、窗口、工具栏、小部件、壁纸和其他功能,为用户提供“简单”的方式来做他们想做的事情。
这些桌面旨在供所有人使用。然而,每个人在使用计算机时都有不同的需求和愿望,对于我们开发者来说更是如此。
如果你经常使用终端(你应该经常使用),那么桌面环境可能对你来说没什么用,即使你没有意识到这一点。事实上,多亏了终端,开发人员已经可以使用一个足够强大的工具来完成大部分工作,而无需一个功能齐全的桌面环境。
今天我将向您介绍桌面环境的替代方案:窗口管理器。更准确地说,我将向您展示 i3 窗口管理器 (i3wm) 的工作原理。它将为您提供惊人的灵活性,让您无需使用鼠标即可完全控制您的系统!
“但我爱我的鼠标!”你可能会想,悲伤却袭上心头。相信我,如果你的手指不用离开键盘,你的快乐就会飙升。你只需要尝试足够长的时间,就能信服。
在本文中,我们将:
- 了解如何安装 i3。
- 了解为什么使用 i3 非常高效。
- 了解 i3 的工作原理。
- 一起配置并试用 i3。
准备好了吗?出发!
安装 i3
首先:i3 仅适用于 Linux。抱歉,各位 Mac 用户。
如果您已经安装了 Linux 发行版,并且想要尝试 i3,那么您可以在实际的桌面上进行操作。具体操作起来会比较简单,具体取决于您的发行版。
例如,在 i3 上使用Lubuntu非常简单:安装后会自动显示使用 i3 登录的选项。如果您使用其他发行版,则可能需要进行一些简单的配置。
我个人在 Arch Linux 上使用 i3,我建议在尝试 i3 之前先使用你熟悉的 Linux 发行版。这样你就能更专注于 i3 本身,而不用费力适应新的 Linux 发行版。
您也可以使用虚拟机在 Windows、macOS 或其他任何操作系统上安装 Linux 并试用 i3。如果您打算采用这种方式,免费的VMWare Player是最佳选择。已测试并认可!
要安装 i3 本身,只需使用包管理器即可。例如:
- Debian / Ubuntu / Lubuntu:
sudo apt-get install i3
- Arch Linux:
sudo pacman -S i3
安装并启动 i3 后,会弹出一个窗口询问您是否要自动创建配置。请直接回答“是”。我们将在下面直接修改此配置。
健谈的 i3 可能会询问您是否mod4
需要此修改器。同样,请回答“是”。我们稍后会讨论此修改器。
为什么使用 i3?
轻巧却强大
使用 Windows 管理器 (WM) 替代完整桌面环境的第一个优势在于其轻便性。i3 占用的资源很少,因此您可以将内存和 CPU 留给其他任务。简而言之,它不会妨碍您的工作。
我的经验告诉我,资源永远不够用,尤其是当你习惯同时运行 23098832 个 docker 容器的时候。现在很多桌面环境(比如 Unity?)都很笨重,而且 bug 很多。
i3 的简洁性将使您的头脑获得应有的平静,从而专注于更重要的问题。比如您的代码。
极简主义者
桌面环境有很多我们不一定用到的功能。有趣的是:在尝试像 i3 这样轻量级的电脑之前,我并不知道这是一个问题。
我使用 i3 的体验与使用 Vim 非常相似:IDE 和桌面环境自带全套软件包和选项,无需您自行选择。相反,Vim、tmux 或 i3 则带有一个相当空白的状态,需要您进行个性化设置。
您无需尝试关闭繁琐的功能(这并不总是可行的),只需添加真正需要的功能即可。
像 i3 这样的 Windows 管理器显示状态栏和应用程序启动器就足够了。值得庆幸的是,i3 两者都有。
灵活的
常规桌面环境的另一个烦恼是:窗口定位,尤其是当您打开新窗口时。
我总是觉得它很随意,这意味着你总是需要用神圣的鼠标打开窗口后手动定位它们。当然,我们都习惯了这样做;但这并不意味着没有更好、更高效、更舒适的窗口管理方法。
出色的 i3 始终会按照特定的布局来定位窗口。不出所料,窗口的定位高度一致。
更棒的是,你可以通过特定的按键轻松更改此布局。乍一看,它可能有些局限,但最终它会让系统比传统的桌面环境更加简洁,速度也更快。
这是 i3 最大的优势之一。别再浪费时间翻找窗户了,赶紧处理重要的事情吧!
最后,正如我日常使用的许多工具一样,您可以轻松配置 i3 以满足您的个人需求。如上所述,您可以更改任何按键设置、在启动时启动特定应用程序、始终在特定虚拟桌面(称为工作区)上启动特定应用程序,以及配置所有您需要的配置。
本文将展示 i3 的可能配置,同时解释每个步骤,以便您之后能够对其进行个性化设置。
老鼠不是你最好的朋友
长期阅读《The Valuable Dev》的读者们应该不会惊讶于 i3 完全不需要鼠标就能使用。手一直放在键盘上,这种舒适感在体验了足够长的时间后,你再也无法放弃。
老实说,这是我过去十年来在编程工作流程中发现的最深刻的发现之一。
使用 i3,可以快速启动应用程序、在工作区中移动窗口、调整窗口大小以及通过几次击键执行许多其他操作。
如何使用 i3?
编写自己的备忘单
在学习和修改 i3 的按键时,把它们记录下来会很有帮助。这不仅适用于 i3,也适用于任何大量使用按键的应用程序,例如Vim或tmux。
为了做到这一点,我个人使用Joplin,这是一款免费、开源且功能强大的笔记应用程序,类似于 Evernote,用来记录我需要的每个按键。当我忘记哪个按键代表什么操作时,它可以作为我的参考。
一般组织
与 tmux 类似,i3 将其信息存储在树形数据结构中。让我们看看每个节点代表什么。
工作区
在树形数据结构的顶部,您会找到工作区。它相当于一个虚拟桌面。您可以拥有任意数量的工作区。
创建工作区很简单:你只需切换到该工作区并在其中创建容器以使其持久化即可。更多详情请见下文。
容器
一个容器包含一个或多个窗口。其窗口将根据容器的布局进行定位。
有三种不同的布局可能:
- 拆分- 每个窗口共享容器空间,并水平( split)或垂直(splitv )拆分。这是默认布局。
- 堆叠- 获得焦点的窗口可见,其他窗口堆叠在后面。您可以通过按键轻松更改窗口的焦点。您还可以访问位于容器顶部的已打开窗口列表。
- 选项卡式- 此布局与堆叠布局类似,不同之处在于窗口列表是垂直分割的,而不是水平分割的。
请注意,一个容器也可以包含其他容器;然而,在实践中,您通常不会考虑容器,而是更多地考虑窗口。
视窗
您可以在容器中创建一个窗口,用于运行应用程序。窗口会根据容器的布局自动定位并聚焦。您可以移动窗口,甚至可以通过按键更改容器的布局。
窗口有两种类型:固定窗口(默认)和浮动窗口。您可以指定哪个应用程序应该使用浮动窗口。在这种情况下,浮动窗口的行为与其他桌面环境中的窗口相同:您可以将其设置为焦点,并用鼠标移动它们。
请注意,浮动窗口不受容器布局的影响。
浮动窗口对于不需要全屏窗口的应用程序很有用,例如弹出窗口或颜色抓取器。
默认快捷方式
与 tmux 或 Vim 类似,i3 几乎每个按键都使用一个特殊键。这个键叫做modifier
。默认情况下,它是Windows或cmd键。在大多数键盘上,它上面有一个 Windows 标志。
您可以在配置中更改此修饰键。我个人喜欢使用Windows键。
在本文中,修饰键将针对$mod
使用它的每个击键进行设计。
废话少说,开始练习吧。我强烈建议你现在打开 i3,跟着我一起练习,亲自尝试一下我们做的修改。
让我们输入 来创建一个新的终端$mod + Enter
。你知道吗?让我们再创建一个!$mod + Enter
再次点击。如你所见,容器的默认布局将自动适应工作区中运行两个终端的两个窗口。
现在,尝试使用 来关注第二个窗口$mod + arrow key
。很简单,不是吗?
您现在可以移动窗口并查看它们如何自动调整大小:点击$mod + shift + arrow key
。
你可能会觉得这个系统简直蠢透了。别撒谎!我第一次尝试的时候非常失望,因为我以前习惯用鼠标移动窗口。现在,除了 i3 这样的窗口管理器,我很难用其他东西了!
让我们尝试改变容器的布局。你可以使用:
$mod + e
- 切换到分割布局(splith 或 splitv 取决于您的屏幕)$mod + s
- 切换到堆叠布局$mod + w
- 切换到选项卡式布局
您可以尝试使用每种布局创建和移动窗口来查看差异。
最后,让我们看看编写和尝试新的 i3 配置所必需的其他有用的按键:
$mod + shift + r
- 重新加载 i3 的配置。每次修改配置文件时都需要使用它,以便将更改应用到当前的 i3 会话。$mod + shift + e
- 注销并退出 i3。我们稍后会修改。
配置 i3
配置文件
i3 将按照精确的顺序加载不同的配置文件,并相互覆盖:
~/.config/i3/config
(或$XDG_CONFIG_HOME/i3/config
如果设置)~/.i3/config
/etc/xdg/i3/config
(或$XDG_CONFIG_DIRS/i3/config
如果设置)/etc/i3/config
如果您选择在第一次运行 i3 时生成配置文件,则需要修改该文件~/.i3/config
。
默认配置
让我们更深入地了解 i3 的配置,以便您了解它的可能性。首先,使用您想要的任何编辑器打开您的配置文件。
在本小节中,我们将回顾配置文件的开头。
如果您想要一份优质完整的 i3 文档,这里就是。本文简要概述了 i3,帮助您了解它为何对您有用。之后,该文档应该可以作为您其他一切的参考。
配置的第一行将定义你的修饰键($mod
),正如我上面解释的那样。如果你愿意,可以在这里修改它。
您可以看到,您可以在 i3 的配置中使用关键字set
后跟变量名($mod
此处)及其值(Mod4
)来定义变量。这非常实用,因为您不必在每次更改修饰符时都修改每个按键。
要查看 i3 修饰键的所有可能值,您可以在终端中运行xmodmap
。
在文件下方,你会看到一行bindsym $mod+Return exec i3-sensible-terminal
. ,bindsym
它允许你将符号绑定到命令。在内部,一个符号会映射到一个键码(键盘上的一个按键)。要查看此映射,你可以在终端中运行xmodmap -pke | less
.
这里使用了 符号Return
。如果您更喜欢直接使用键码而不是符号,可以使用 命令bindcode
代替bindsym
。
此击键将执行(使用命令exec
)i3-sensible-terminal
,包装脚本将尝试查找并打开终端的实例。
让我们继续探索。下面你会发现一行代码bindsym $mod+Shift+q kill
,它允许你关闭一个窗口。根据该窗口中运行的应用程序,关闭之前可能会执行一些操作。例如,Firefox 会保存当前会话。
程序启动器
i3 没有开始菜单,无法找到系统上安装的应用程序。您可以使用程序启动器来启动您喜欢的软件。
这行代码bindsym $mod+d exec dmenu_run
定义了一个按键来启动dmenu
,这是一个简单而强大的菜单创建应用程序。我们下面还会再次使用它。
要启动程序启动器,只需点击$mod+d
。您会看到屏幕顶部出现一个独立的栏。从那里,您可以搜索应用程序,然后通过搜索并点击 来启动它Enter
。
如果您不喜欢这种启动软件的方式,您可以稍后添加自己的启动器,甚至是开始菜单。
聚焦和移动窗口
您可以使用或来聚焦或移动当前工作区中的不同窗口。不过,由于我经常使用 Vim,所以我喜欢使用来移动窗口。别忘了,许多其他 CLI 也使用这些键!$mod+jkl;
$mod+shift+jkl;
hjkl
我们现在将修改 i3 的默认配置。别忘了点击$mod + shift + r
“应用”按钮。
让我们修改聚焦窗口的绑定如下:
# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
在文件下方,您将找到用于移动窗口的按键。您也可以更改它们:
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
就这样!现在,你可以使用 Vim 键来更改焦点或移动窗口了。
拆分容器
有时,您可能想在已打开窗口的侧面或下方打开新窗口。默认情况下,要水平打开窗口,我们需要按。但是,我们使用此按键来聚焦窗口。$mod+h
让我们重新配置分割如下:
# split in horizontal orientation
bindsym $mod+Ctrl+h split v
# split in vertical orientation
bindsym $mod+Ctrl+v split h
请注意,更改方向会创建一个新的容器。您可以通过更改其布局来查看其边界。我个人喜欢只有一个容器(这样更容易管理)。因此,我从不使用这些按键。
我们现在可以继续修改我们的配置:让我们进入工作区配置。
工作区
定义工作区
您可以使用相同的按键打开并切换到工作区。以下是您通常在当前配置文件中找到的默认配置:
# Define names for default *workspaces* for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
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"
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
这是什么意思?
- 第一部分定义了每个工作空间的变量。默认情况下,有 10 个变量。
- 第二部分定义切换到这些工作区的按键。
- 第三部分定义将窗口移动到特定工作区的按键。
从这里,您可以根据需要配置工作区。以下是我的配置示例:
set $terms "1: terms"
set $web "2: web"
set $db "3: db"
set $file_manager "4: files"
set $mail "5: mails"
set $documents "6: documents"
set $mindmap "7: mindmap"
# switch to workspace
bindsym $mod+1 workspace $terms
bindsym $mod+2 workspace $web
bindsym $mod+3 workspace $db
bindsym $mod+4 workspace $file_manager
bindsym $mod+5 workspace $mail
bindsym $mod+6 workspace $documents
bindsym $mod+7 workspace $mindmap
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $terms
bindsym $mod+Shift+2 move container to workspace $web
bindsym $mod+Shift+3 move container to workspace $db
bindsym $mod+Shift+4 move container to workspace $file_manager
bindsym $mod+Shift+5 move container to workspace $mail
bindsym $mod+Shift+6 move container to workspace $documents
bindsym $mod+Shift+7 move container to workspace $mindmap
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
如果您安装了Font Awesome,您甚至可以添加一些精美的图标。
我发现另一个实用的功能是:可以用相同的按键返回上一个工作区。例如,如果您在工作区 1中按下$mod+2
,就会切换到工作区 2。
然后,如果再次点击$mod+2
,您将返回到之前的工作区,即工作区 1。
要启用此功能,您需要在配置中添加:
workspace_auto_back_and_forth yes
在特定工作区中打开应用程序
您还可以始终为定义的工作区分配精确的应用程序。假设您始终希望在工作区 2中打开 Firefox ,$web
就像上面示例中那样。您可以在配置中添加:
assign [class="firefox" instance="Navigator"] → $web
您可以使用应用程序的类(其通用标识符)、其实例(特定于某些窗口的标识符)或两者来分配该应用程序。
要获取应用程序的class
名称和精确的窗口名称,您需要运行应用程序本身,打开终端并运行以下命令:instance
xprop | grep WM_CLASS
然后,点击应用程序正在运行的窗口。类似下面一行的内容将出现在你的终端中:
WM_CLASS(STRING) = "Navigator", "firefox"
第一个元素始终是instance
,第二个元素始终是class
。注意:大小写很重要。
调整窗口大小
如果您继续进行配置,您会发现全屏的按键和重新加载 i3 配置的多种方法。
下面,你会看到调整窗口大小的按键。让我们再次修改它们,使其与 Vim 的hjlk键绑定相匹配。
bindsym h resize shrink width 10 px or 10 ppt
bindsym j resize grow height 10 px or 10 ppt
bindsym k resize shrink height 10 px or 10 ppt
bindsym l resize grow width 10 px or 10 ppt
你会注意到,你需要先进入“调整大小”模式才能调整大小。这意味着你需要先点击(你会看到屏幕底部出现“调整大小”$mod+r
字样),然后才能使用。$mod + hjkl
我们也可以设置focus_follows_mouse
为no
。否则,每次鼠标悬停在窗口上时,它都会自动聚焦。这对我来说很烦人。
锁定屏幕
为了防止同事在 Slack 上替你发送尴尬消息,你需要一款软件来锁定你的屏幕i3lock
。你可以尝试启动它,看看它是否已安装;如果没有,只需安装即可。
默认情况下,锁屏是单调的白色,会伤眼。如果不介意的话,可以保持原样。
否则,您可以按如下方式配置它以显示精彩的壁纸:
set $i3lockwall i3lock -i /path/to/my-wonderful-image.png -t
需要注意的是,您只能使用png文件i3lock
。不支持jpeg!
我自己的壁纸稍微复杂一点。我用一个脚本截取当前屏幕的屏幕截图,自动“像素化”后保存,然后用作锁屏。有了这么好的锁屏,每个同事都会为你的技术、你的风格点赞。而且,你还能期待大幅加薪。
要运行该脚本,您需要安装imagemagick
和scrot
。脚本如下:
img=/tmp/i3lock.png
scrot $img
convert $img -scale 10% -scale 1000% $img
i3lock -u -i $img
只需将此脚本保存在某个地方(我喜欢script
在中有一个子目录~/.config/i3
)并在 i3 的配置文件中创建一个新变量:
set $i3lockwall sh ~/.config/i3/scripts/lock.sh
最后,添加一个按键来锁定屏幕:
bindsym $mod+Ctrl+Shift+l exec --no-startup-id $i3lockwall
我们会发现,你也可以使用这个软件来锁定屏幕dmenu
(你知道的,我们已经在应用程序启动器中使用了这个软件)。更多详情请见下文。
最后但同样重要的一点是:要解锁您的计算机,请输入您的用户密码并按Enter。
锁定、关机和重启菜单
让我们找到并删除以下行:
bindsym Mod1+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
这样您就可以退出 i3。不过,我们现在将实现一种更好的方法。
让我们创建一个菜单,dmenu
以便以一种良好而独立的方式锁定您的屏幕、注销 i3、挂起您的计算机、休眠、重新启动、关闭所有内容或征服世界。
只需将以下内容添加到您的配置中:
# shutdown / restart / suspend...
set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Ctrl+s) shutdown
mode "$mode_system" {
bindsym l exec --no-startup-id $i3lockwall, mode "default"
bindsym e exec --no-startup-id i3-msg exit, mode "default"
bindsym s exec --no-startup-id $i3lockwall && systemctl suspend, mode "default"
bindsym h exec --no-startup-id $i3lockwall && systemctl hibernate, mode "default"
bindsym r exec --no-startup-id systemctl reboot, mode "default"
bindsym Ctrl+s exec --no-startup-id systemctl poweroff -i, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+BackSpace mode "$mode_system"
现在,重新加载配置后,如果您点击$mod+BackSpace
,您将在屏幕底部看到一条消息,详细说明您可以执行的操作。您可以根据自己的需要点击l
、e
、s
、或。h
r
Ctrl+s
如果您只想关闭菜单,请按Esc或Return。
墙纸
当你切换到一个还没有任何窗口的工作区时,拥有一张精美的壁纸真是太好了。最简单的解决方案:使用一个可以显示图像的简单软件。feh
首先,您需要安装它。
然后,您可以添加到您的配置中:
exec --no-startup-id feh --no-fehbg --bg-fill '/path/to/your-favorite-holiday-picture.jpg'
浮动窗口
有些应用程序使用浮动窗口会更方便。简而言之,浮动窗口就是可以用鼠标移动的窗口。
例如,弹出窗口和任务对话框应该浮动。为此,请在配置文件中添加以下两行:
# floating pop up automatically
for_window [window_role="pop-up"] floating enable
for_window [window_role="task_dialog"] floating enable
您可以使用应用程序的和来指定哪个应用程序应该自动以浮动窗口打开,如上所述(请参阅工作区部分)。class
instance
例如:
for_window [class="Keepassx"] floating enable
有了这一行,应用程序Keepassx
就会自动在浮动窗口中打开。
颜色和风格
您可以直接在配置文件中配置 i3 的颜色和样式。如果您在 Xresources 文件中定义了终端颜色(通常为~/.Xresources
),则可以使用set_from_resource
指令直接在 i3 中重用它们。
例如,set_from_resource $foreground foreground #C6C6C6
将定义一个变量$foreground
,该变量将使用foreground
中定义的颜色Xresources
,如果未定义,则使用后备颜色#C6C6C6
。
$foreground
然后,您可以在配置中的任何需要的地方使用该变量。这是我自己的一个例子:
# get color from XResource configuration - variable_name XResource fallback
# special
set_from_resource $foreground foreground #C6C6C6
set_from_resource $background background #1C1C1C
set_from_resource $cursorColor cursorColor #C6C6C6
# black
set_from_resource $black1 color0 #303030
set_from_resource $black2 color8 #444444
set $trueblack #000000
# red
set_from_resource $red1 color1 #d75f5f
set_from_resource $red2 color9 #d75f5f
# green
set_from_resource $green1 color2 #87AF87
set_from_resource $green2 color10 #87AF87
# yellow
set_from_resource $yellow1 color3 #ffd75f
set_from_resource $yellow2 color11 #ffd75f
# blue
set_from_resource $blue1 color4 #87afd7
set_from_resource $blue2 color12 #87afd7
# magenta
set_from_resource $cyan1 color5 #afafd7
set_from_resource $cyan2 color13 #afafd7
# cyan
set_from_resource $cyan1 color6 #afd7ff
set_from_resource $cyan2 color14 #afd7ff
# white
set_from_resource $white1 color7 #4E4E4E
set_from_resource $white2 color15 #ffffff
当然set_from_resource
,您也可以定义自己的变量,例如set $black #000000
。
i3 Bar 的配置
当然,您也可以使用其他配置文件来配置屏幕底部的状态栏。您可以在下面找到一个示例,将其复制到一个新文件中,例如~/.config/i3/i3status.conf
。当然,您可以随意修改它。
您也可以使用 shell 脚本自定义栏中显示的数据。
# i3status configuration file.
# see "man i3status" for documentation.
# It is important that this file is edited as UTF-8.
# The following line should contain a sharp s:
# ß
# If the above line is not correctly displayed, fix your editor first!
general {
interval = 1
colors = true
color_good="#FFFFFF"
color_degraded="#ffd75f"
color_bad="#d75f5f"
}
order += "volume master"
order += "battery 0"
order += "disk /"
order += "disk /home"
order += "cpu_usage"
order += "load"
order += "tztime local"
tztime local {
format = " %Y-%m-%d %H:%M:%S "
}
disk "/home" {
format = " %avail "
}
disk "/" {
format = " %avail "
}
cpu_usage {
format = " %usage "
}
load {
format = " %5min 5min "
}
volume master {
format = " %volume "
format_muted = " %volume "
device = "default"
mixer = "Master"
mixer_idx = 0
}
battery 0 {
format = "%status %percentage "
format_down = " DOWN "
status_chr = " CHARGING "
status_bat = " BATTERY "
status_unk = " UNKNOWN "
#last_full_capacity = true
status_full = " FULL "
path = "/sys/class/power_supply/BAT%d/uevent"
}
要使用此状态栏,您需要在 i3 的配置文件中指定文件路径。通常情况下,该块bar
已经存在,您只需根据需要进行修改即可。
例如:
bar {
status_command i3status --config ~/.i3/i3status.conf
# Disable all tray icons
tray_output none
colors {
background $black2
statusline $white2
separator $white2
# border background text
focused_workspace $background $background $red1
active_workspace $black2 $black1 $white2
inactive_workspace $black1 $black2 $foreground
urgent_workspace $red1 $red1 $white2
binding_mode $background $red2 $white2
}
}
你会注意到,我们使用了上面定义的颜色变量,让进度条看起来更漂亮!太棒了!
管理您的屏幕
如果您有两个、三个或 389 个屏幕,您可能会发现您无法配置它们。
安装arandr
可以在这方面为您提供帮助。您需要安装它。
然后,让我们让它的窗口浮动:
for_window [class="Arandr"] floating enable
您现在可以运行它(使用您的应用程序启动器,记得吗?)并根据需要配置屏幕方向和位置。
这很好,但是这个配置不是持久的。这里有一个解决方法:
arandr
按照您的意愿配置- 保存布局
arandr
。这将创建类似以下内容的脚本:
xrandr --output VGA-1 --off --output eDP-1 --primary --mode 1600x900 --pos 0x0 --rotate normal --output HDMI-2 --off --output HDMI-1 --off --output DP-2 --off --output DP-1 --off
然后,我用它dmenu
来创建一个菜单来管理不同的屏幕配置。例如,你可以在 i3 的配置中添加:
set $mode_display Config monitor resolution - My first config (d) - My second config (t)
mode "$mode_display" {
bindsym d exec --no-startup-id xrandr --output VGA-1 --off --output eDP-1 --primary --mode 1600x900 --pos 0x0 --rotate normal --output HDMI-2 --off --output HDMI-1 --off --output DP-2 --off --output DP-1 --off && ~/.fehbg, mode "default"
bindsym t exec --no-startup-id xrandr --output eDP-1 --primary --mode 1600x900 --pos 0x809 --rotate normal --output VGA-1 --mode 1920x1080 --pos 2800x420 --rotate normal --output DP-1 --off --output HDMI-1 --mode 1920x1200 --pos 1600x0 --rotate left --output DP-2 --off --output HDMI-2 --off
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+x mode "$mode_display"
- 首先,我们设置一个变量
$mode_display
来显示我们想要的菜单。 - 然后,我们将
d
和绑定t
到之前创建的脚本的内容。
使用此方法,您可以创建许多屏幕配置并轻松地从一个屏幕配置切换到另一个屏幕配置。
您会继续使用 i3 吗?
好了,各位!通过对 i3 的初步了解,您应该可以做任何您想做的事情,而不必再受繁琐的桌面环境的困扰。
在本文中,我们了解到:
- i3 是一款非常轻巧、简约的窗口管理器,但功能强大且灵活。
- 什么是工作区、容器、固定和浮动窗口。
- 如何配置 i3。
- 如何配置锁屏i3lock。
- 如何创建关机菜单。
- 如何个性化状态栏。
- 如何使用arandr管理您的屏幕配置。
关于 i3 还有更多内容有待发现,我再次邀请您阅读其非常完整的文档。