凤头

我可以从本文中学习到什么?
学习完本文,你将学会配置一个漂亮的 I3WM 桌面,与网上其它让你照猫画虎的文章不同,本文的目标是让你及时遇上一个问题时可以独立解决.比如当网上找不到遇到同样问题的时候,你就格外需要独立解决问题的能力.

有什么要求吗?

本文需要你拥有一点 Linux 基础,比如会使用 VIM.

让我猜猜你!

你可能会不少 Linux 命令,但是你用起来没有如 Windows 那个顺手,你知道去安装一个『软件』但是不知道如何去打开一个『软件』,或者不知道去设置『开机自启』.

你还可能是一个资深的 Linux 用户,已经用过『KDE』或者『Gnome』,但是你想了解一下 I3WM,但是你在使用别人的配置时遇上各种问题,你想了解一下 I3WM 的相关好去排错.

本文是在『Manjaro』上做的,但是 I3WM 是 Linux 的『窗口管理器』而并非只属于哪个特定的 Linux 版本,所以理论上本文的内容是可以在其它版本的 Linux 上使用的.

有多漂亮呢?

这是一张成品图

finish

它来自github用户『levinit』所分享的配置,项目链接.十分感谢他分享自己的配置.

我只想快一点搞个好看的 I3 主题怎么办?

那请你使用本主题作者所使用的脚本与看他的教程,本文更多是阐述I3WM 与其相关软件更深入的一面和教导你如何使用与配置.

猪肚

那我应该怎么做?

现在这是我们现在最初的样子

Initial

我们可以看见,与上面所提到的成本品的区别,我将分别介绍如何实现它们.

怎么打开终端?

同时按下『Win 键』和『回车键』.

壁纸

我该如何设置一张壁纸?

I3WM 异或者是 Linux 均没有提供壁纸功能,所以我需要使用一款软件『feh』.

我该如何得到它?

如果你是『Arch』或者『Manjaro』的用户,可以使用sudo pacman -S feh

如果是其它的 Linux 发行版,请使用 相应的包管理器安装该软件.

我该如何设置一张图片做我的壁纸

feh --bg-scale "图片的路径"

其中--bg-scale参数将会缩放你的图片,使其填满你的桌面.

如果你不想把缩放,请使用--bg-fill

为什么我重启电脑之后我的壁纸就没有了?

如果你有过一些电脑基础,你应该知道『程序自启』这个概念,我们的壁纸程序并没有设置『自启』,我将在下一小节中讲述如何使用.

I3WM 的配置

由 Mike Gancarz 所提出的 UNIX 哲学中的第五条

1
2
5.Store data in flat text files.
五.数据应该保存为纯文本文件。

所以 I3WM 的配置也是保存在一个文本文件之中,你应该使用『VIM』或者其它文本编程器去编辑它们,并没有一个像『Windows』异或者是『MacOS』那样拥有一个『设置面板』.

那 I3WM 的配置文件在哪里呢?

它在你的home目录的configi3文件夹中.如果你知道一点 Linux 知识的话,那你应该知道可以用~代指你的home目录.

所以你可以使用cd ~/config/i3 来进入你的 I3WM 配置文件目录.

其中的个名为config的文件就是你的I3WM 的配置文件.

所以我应该如何让我的壁纸在重启之后不会消失呢?

I3WM 在启动时就会读取它的配置文件,我们当然希望我们的壁纸跟 I3 一起启动.正好 I3WM 提供了这个功能!

现在回想一下我们设计壁纸的命令是什么?

对!是feh --bg-scale "图片的路径"

我们将这段话添加到config文件之中,最好是在末尾!

exec --no-startup-id feh --bg-scale "图片的路径"

我还可以做些什么?

我觉得你可以举一反三了,exec --no-startup-id 你需要执行的命令,你可以把你想执行的命令加在config这样你的命令就会随着 I3WM 启动所执行了.

当然如果你的命令很多很长,你可以写在一个 shell文件 之中,然后通过 exec去执行你这个 shell文件 ,同时你可以在后面加上&,让你的 Shell文件 或者 命令 转入到后台执行.不会把 I3WM 阻塞住.

例如:exec --no-startup-id ~/请换成shell的名字.sh &

--no-startup-id 是什么意思啊?

有些『脚本』或者『程序』并没有『启动提醒』,就是说它们启动之后并不会告诉系统,我启动好了.这会让你的系统认为我卡住了.导致你的鼠标指针处于忙碌状态.

这个参数可以解决这种情况.

终端透明

我怎么才能把我的终端变成透明的?

我们在设置壁纸时使用了『feh』,这次我们使用『xcompmgr』这款软件.

为什么要用到这么多软件啊,有没有『全家桶』呀?

我们又要说到 UNIX 哲学了. Doug Mcllroy 这个人,和上面那个不是一个人呀,他提出了三条,其中第一条就是:

1
2
1.Write programs that do one thing and do it well
一.写一个程序做一件事和把它做好.

Linux 有太多小而美的软件,几乎没有大而全的软件.因为这一点也不 UNIX.

我装好了,怎么用呢?

请在终端中输入xcompmgr &,&是做什么用的,上文提到过了,你可以尝试把&去掉,你就会发现程序运行在 前台 ,导致你的终端不能再输入其它命令了!

也需要加入到config中让它自启吗?

完美的一次举一反三!没错!请把这个加入其中exec --no-startup-id xcompmgr &

我可以选择什么终端?

这里推荐roxtermxfce-terminalterminator,因为它们更方便设置透明度.

我使用的是 Manjaro I3,我的 xcompmgr(或者 compton) 不能启动,提示Anoter composite manager is already running(picom).

想学会『独立解决问题』就必须学会认真的看提示信息,报错写的非常清楚Anoter composite manager is already running(picom),『其它的窗口管理器已经在运行(picom)』.显然易见因为已经在运行了一款叫做『picom』的软件.

如果你尝试去卸载它时,你还会发现报错,因为它和 i3WM 居然是依赖!这是 Manjaro I3 给你们预先装好的环境.出现什么问题,当然都不奇怪.既然都是窗口管理器xcompmgr能做的事picom也能做,那我们就可以去使用它把终端变透明吧!

我要使用 urxvt 终端,怎么才能让它变透明?

或许你的版本不能安装terminator,异或者你就是想使用urxvt.但是这个不是什么问题.并且能轻易在网上找到解决方案,你可以点击这里参看一片关于配置 urxvt 的透明的教程, 它使用的是 compton(也叫 picom).感谢每位在无私在互联网上分享自己经验的人.

快捷键

我可以不用快捷键吗?

如果你使用的是『KDE』或者『Gnome』这些『窗口管理器』,你或许还可以不学,但是 I3WM 如你所见,并没有什么按钮供你去点击.所以你必须去学习与使用

我需要要去背很长的快捷键表吗?

当然不是! 我要教你的是如何设置与查看快捷键.

继续编辑我们的config,往上走.在最上面我们就能看见

1
set $mod Mod4

这句话是指把 Mod4 键设置$mod.

Mod4 是哪个键?

正常情况下是你键盘上那个『Win键』.

$mod是什么?

我们称之为『Super key』,我通常把这个键和其它键来组成使用快捷键.

里面有哪些设置好的快捷键?

我们往下翻翻,就会看见

1
2
3
bindsym $mod+s layout stacking
bindsym $mod+t layout tabbed
bindsym $mod+c layout toggle split

如果你没有改动上面所说的$mod,那这里的意思就是说同时按下『Win 键』和『S 键』时,将窗口堆叠模式改成『堆叠式』(stacking).按下『Win 键』和『 T 键』 就是『标签式』(tabbed),而『Win 键』加上『C 键』可以让你在 垂直平铺和水平平铺之间 来回切换.

动手试试吧,不要光看不用!你会爱上这种操作方式的!绝对会!

我可以让某个快捷键启动一个程序吗?

当然!我希望你能在这里继续举一反三!我们把这句添加进去.

1
bindsym $mod+F2 exec firefox

我觉得你已经能够理解了!当按下『Win 键』和『 F2 键』时, Firefox 就会启动了!把按键和软件换成你想换的吧!

举一反三

所以启动 Linux 软件就是在终端输入它的名字吗?

在上面的学习过程中,你应该知道『软件』和启动是和 执行命令 是一样,就像你启动firefox和执行其它命令是一样的.

可以在软件名后面加上&让它不阻塞我的终端吗?

是的!如果你对知识足够敏感,我觉得你已经可以从上文中学会了这种方式,在命令行中输入你软件的名字,并且在后面加个&,软件就在会后面独立运行.否则,当你关掉终端时,你的软件也会跟着关闭.

软件名太长了,我也记不住啊,有没有怎么简单的办法启动软件?

有的!这种软件在 Linux 当中叫做『软件启动器』.

Synapse

比如图中我所使用的叫做Synapse

启动软件要软件启动器,那我怎么启动软件启动器这个软件?

这并不是一个勃论.很简单,在上一张,我们就谈到通过快捷键启动firefox,你相信你已经反应过来的.如何去启动『软件启动器』.

豹尾

学会独立的解决问题

我使用的是文章开头所引用的配置?但是有一些奇怪的 BUG,我该怎么办?

我使用是别人的配置,但是有一些奇怪的 BUG,我该怎么办?

这两个问题我想放在一起回答,因为各种各样的问题,永远没有一个长久的解决办法,我不能希望每次都能在互联网上找到对症下病的解决办法,你必须学会去排查去独立的解决问题.

以开头所引用的配置为例,随着时间的变动,有一些软件已经改名,停止更新,或者已经不提供下载了.那个配置所需要的一个 i3block 的程序,已经无法通过pacman或者yay安装,或许你现在尝试时没有任何问题.但是这不是问题,问题是『当我们遇到缺少依赖时,我们就应该怎么办?』.

我这样当然不是教你如何自己编写一个依赖,而让你去放弃这个功能或者换个可以用的让整个程序没有问题运行起来.啊!我看的出你现在很失望.不过这确实是一个简单易行的解决办法!人生总有要放弃的.当然你也可以选择放弃时间,把时间投入在寻找依赖的时间黑洞上.

一般来讲,你可以很清楚的看清错误信息的,然后在 I3WM(如果你要解决的是其它问题,请在找到它的配置)的配置文件,中找到大致的地方.比如文头所引用的配置,因为 i3block 的消失,导致 i3bar 不能用,当然是在 config 中的找到bar的相关配置.

找到一个大的方向之后,你就可以通过 注释或者删掉 的办法去准确去定位到底是哪个地方出了问题.当然这个过程是相当麻烦的.可能就算成功了也没有多少成就感.但是可能是一个 Linuxer 的必修课.

中文输入 fcitx fcitx fcitx!

我已经按照网上的解决办法安装fcitxfcitx-im还有fcitx-rime,同时在/etc/profile加入那三行,可是还是不能输入中文!

/etc/profile加入这三行.

1
2
3
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"

几乎是网上所有能找到的不能使用 fcitx教程的解决办法. 你也照做,但是你还是不能用?这是为什么呢?

本文的目标是希望你能『独立的解决问题』,我希望以此为例,来说明如何一步步的定位与解决问题.

如果你安装了 fcitx,还在 config设置了程序自启(或者你启动了 fcitx),你可以在托盘图标中轻易的找到一个键盘(或者是其它)图标,你会发现,它是 fcitx 的图标托盘.

右击它.在那么多的菜单中.我们可以一个个的看看是哪里出现了问题.

哦!在 Input Method只有Keyboard - English(US)一个而没有中文!

就是这样我们要把问题一步步缩小与明确.

那我们现在就要在 Input Method中添加一个中文输入方式.

你相信你会发现Configure,并且你发现,点击就会报错.我们看看报错信息,无论你会不会英语(不会就用电脑翻译!),你就会知道是缺少程序!那简单,我们就通过pacman(如果你是其它 Linux 请使用相应的包管理)去安装.它不仅告诉我缺少程序!还告诉我们,程序在不同版本Linux 上的可能的名字.安装它!

打开Configure,你肯定会点下面的+,这一看就知道是添加新的输入方式的.你或许在跳出来的列表中找不到『Chinese』,但是你也可能会注意到『Only Show Current Language』,如果你找不到『Chinese』,就把它取消掉吧.

现在你无论如何都可以找到『Chinese』了吧.就这样添加上,你就可以正常的输入中文.

你说了这么多,情况变了怎么办?

本文目标是希望能你够『独立的解决问题』,上文只是希望能够理解如何去排查一个问题定位一个问题,然后去解决它.上面的具体步骤不能帮助你去应对不同情况,但是不断缩小问题与明确问题的是解决每个问题的必经之路!

锦上添花

我看完了全文,但是除了基础的配置以外,我还是不懂得修改一个主题的外观.

这是一个更深入的问题,我暂时还不能提供帮助,不过你可以在这里找到你想要的.如果可能,我以后将会发一篇新文章进行更深入的讲解.

我还想要更多的主题,我可以在哪里找到它们?

你可以在Github搜索『i3wm』,有许多人在上面发布了自己的 config.

例:

Dotfiles_i3

Dotfiles_i3

Rin : shelter

Rin-shelter

TxGVNN

TxGVNN

什么是凤头猪肚豹尾?

语出自元代陶宗仪《南村辍耕录》:『乔吉博学多能,以乐府称,尝云:“作乐府亦有法,曰凤头、猪肚、豹尾六字是也。”大致起要美丽,中要浩荡,结要响亮。尤贵在首尾贯穿,意思清新。苟能若是,斯可以言乐府矣。』

我希望我的博文能写得『凤头猪肚豹尾』,或许现在我的博文还配不上这六字,但这是我会不断的进步,希望有一天,能配的上这六个字.

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:HXHL
链接:https://hxhl.github.io/2020/04/22/I3WM/
来源:HXHL’s Blog