i3wm使用笔记
前言
i3 windows
manager(简称i3)是小巧的可定制的linux桌面管理器,相当于compiz等,但是基本靠自己动手配置
属于平铺式窗口管理器(tiling window manager),窗口自动铺满屏幕,效率更高,省去不必要空间
使用自定义的 $mod
键与其他按键组合,实现一些功能
应该是仿照了 awesome
,减少了一些需要自己设置的功能
本篇默认使用的环境为ubuntu16.04LTS,
由于环境与配置的不同,尤其是软件版本引起的问题,需要进行更多个定制
与桌面环境的区别
gnome,KDE等是桌面环境,提供整个的UI显示解决方案,比如使用什么字体等,以及附带的GUI界面
window manager只管窗口的位置等,范围稍小,
不是很理解,期待稍后了解
查看当前使用的wm
1 | wmctrl -m |
还没有安装的自己安装
ubuntu 16.04LTS默认使用的compiz(还以为是unity)
安装i3
1 | sudo apt-get install i3 |
其他组件用到时自然会安装
初始使用
- 注销
- 重新登录,一般有登录管理器的选择i3作为窗口管理器即可
- 初进入会有设置向导,设置好
$mod
键并使用默认设置即可,注意默认设置的位置 - 使用
$mod+Enter
进入终端,开始对配置文件的改造 - 使用
$mod+d
并输入应用名以启动浏览器
配置文件
相关配置文件及路径
i3配置文件 ~/.config/i3/config
i3status /etc/i3status.conf
配置文件
直接贴配置文件,胜过千言万语,也可能是表达能力不好
1 | # This file has been auto-generated by i3-config-wizard(1). |
注意
- 配置文件虽然使用=#=作为注释标识符,但是只有在行首才算,行内会被认为是颜色而当做设置
- exec后面还是推荐使用引号括起,然是命令中又有引号的还是先放弃吧
单独设置项目
相当于i3本身的设置
-
热键
windows键,是为Mod4
ALT键,是为Mod1
其实两个都不顺手 -
字体/字号
1
2
3# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 12后面设置字号,影响了边框以及i3bar的字号大小,对于程序自身的东西,并没有什么用
并不想在字体上下功夫,凑活看 -
焦点不跟随鼠标
1
2# 焦点不跟随鼠标
focus_follows_mouse no
按键事件响应系统
可以使用 bindsym
与 bindcode
定义使用特定的按键触发的事件,音量调节,亮度调节等都在这里
基本用法:
1 | bindsym --release Control+Space exec "emacs ~/Document/temp.org" |
release
选项表示在按键放开时才使用,
在这个选项用于音量调节时,将不能持续改变音量,但或许能让本来不能生效的函数开始生效- 后面是按键,按键的名字可以使用
xmodmap -xpe
或者xev
等查看,
值得注意的是,在为i3设置好事件后,i3将拦截按键,导致xev
不能获得按键信息,
因此想要确认一个按键是否能被按下时,先排除i3本身的干扰,
另外,compiz
下按键不被拦截或是重新被释放.-
xmodmap -xpe部分结果
-
#+begin~example~
> xmodmap -pke | grep Audio
keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 171 = XF86AudioNext NoSymbol XF86AudioNext
keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 209 = XF86AudioPause NoSymbol XF86AudioPause
keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 216 = XF86AudioForward NoSymbol XF86AudioForward
keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
-
- 后面使用
exec
调用命令
常用多媒体按键以及相关设置
1 | # volume control |
- 音量管理使用了但不限于
amixer
- 计算器,截屏等也不限于
gnome
套件,还有其他可以使用
-
按键遗留问题
- 设置Ctrl+grove(反引号)没能响应,不知道什么原因
自启动进程
- exec 登录i3时启动的进程
- exec~always~ 每次重启i3时启动的进程
1 | # ---------------------------------------------------------------------- |
- nm-applet,network manager
applet的简称,非常方便的网络GUI配置工具,就在系统托盘上 - volumeicon,虽然没有gnome系列的applet好看,外观统一,但是能实现音量设置功能,至于为什么使用
- 用来做状态看输出的conky没有自带一个正常的音量监控控件,还要使用
exec
调用shell,觉得负荷重
- 用来做状态看输出的conky没有自带一个正常的音量监控控件,还要使用
- fcitx好像本身就能自动启动
- feh是个小巧的看图工具,但是好像不响应鼠标动作,
那显示一张覆盖屏幕的图并且不相应按键不就是壁纸了吗- 使用
--bg-fill
设置图片在大小不标准时填充屏幕
- 使用
- fluxgui,呵护眼睛,自己点亮
- xrandr,配置多屏幕的命令,后面的参数可以使用
arandr
应用自动生成的配置文件提取得到,
动手5分钟,安心10小时- 有时feh会不能铺满屏幕,不知道是feh的问题还是xrandr的问题,还是两个软件启动顺序的问题
- gnome主题设置对于文字的全体文字的放大至关重要,
在unity下设置的文字放大倍数想要在i3下也生效,
就需要使用gnome-settings-daemon
,并且该程序不是已经安装有的,需要手动安装.-
gnome升级到3.2之后将大而全的
gnome-settings-daemon
分成了多个部分放在了
/usr/lib/gnome-settings-daemon/
文件下成为多个细碎的小工具,
其中有关字号设置的为gsd-xsettings
,
使用exec /usr/lib/gnome-settings-daemon/gsd-xsettings
启动,
此时使用--no-startup-id
可能会导致无法启动 -
另外设置文字放大倍数的命令为
1
2dconf read /org/gnome/desktop/interface/text-scaling-factor
dconf write /org/gnome/desktop/interface/text-scaling-factor 1.25或者
1
2gsettings get org.gnome.desktop.interface.text-scaling-factor
gsettings set org.gnome.desktop.interface.text-scaling-factor 1.25或者使用
dconf-editor
到指定路径修改
-
模式
使用模式的功能打造windows xp般的关机选项界面
1 | # 电源选项 |
- 模式的声明及提示设置
- 定义模式入口
- 定义模式(必要定义退出模式的方式)
其他模式
- default
- fullscreen
- focus mode(浮动窗口)
- resize
- 可以自定义调节按键
遗憾的是i3并没有区分模式与其他命令比如 layout xxx
,有可能分不清到底哪个是模式
i3bar
相当与状态栏,能够使用json的方式接收输入
- 作者认为内容与形式要分开
- 也导致许多软件的输出需要经过字符串处理成为json格式,消耗部分资源
1 | # Start i3bar to display a workspace bar (plus the system information i3status |
- 设置上游消息源
- 设置显示位置为主显示器
- 在使用=conky=时貌似两个屏幕都显示了
- 设置不同项目的间隔
- 设置状态栏显示位置(top|bottom)
- 设置装概览使用字体
-
FontAwesome
一个设计好的点阵字体,以字的形式表现图标
在FontAwesome主页可以下载文件
解压后在=use-on-desktop=文件夹下有字体文件,鼠标点击打开并安装
然后在i3bar上将能够正常显示(虽然终端中与emacs中依然有一部分不能正常显示)
缺点就是在终端中看不出来内容是什么,推荐使用注释,不然只能脑补 -
i3status
i3推荐的状态栏输出应用,配置文件在
/etc/i3status.conf
- 使用文本式的配置文件,只管理非常有限数量的变量
- 但是能够以长间隔刷新并同时对按键进行即刻响应
- 可以使用脚本显示更多信息(比如网速),
- 可以设置为json的输出格式,免去添加其他功能的脚本中更多的字符串处理
- 即使不设置json输出格式,在默认使用配置时仍然能够显示彩色内容,
原因不明,可能是i3内部的朋友交易 - 事实上只有在将新加的项目放在最前面或者最后面才是,想放在中间就要多费心思了
- 即使不设置json输出格式,在默认使用配置时仍然能够显示彩色内容,
配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74# 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 {
output_format = "i3bar"
colors = true
interval = 5
}
# order += "ipv6"
order += "disk /"
order += "wireless _first_"
order += "ethernet _first_"
order += "battery all"
# order += "load"
order += "cpu_usage"
order += "volume master"
order += "tztime local"
ipv6 {
format_up = "%ip"
format_down = "no IPv6"
}
wireless _first_ {
# format_up = ": (%quality at %essid) %ip"
format_up = ": (%quality at %essid) "
format_down = ": down"
}
ethernet _first_ {
# if you use %speed, i3status requires root privileges
# format_up = "E: %ip (%speed)"
# format_down = "E: down"
format_up = ": %ip (%speed)"
format_down = ": down"
}
battery all {
format = "%status %percentage %remaining"
format_down = "No battery"
# status_chr = "⚡ CHR"
# status_bat = "🔋 BAT"
# status_unk = "? UNK"
# status_full = "☻ FULL"
status_chr = " "
status_bat = " "
status_unk = "? "
status_full = " "
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 10
}
cpu_usage {
format = ": %usage"
max_threshold = 75
format_above_threshold = ": %usage"
degraded_threshold = 25
format_above_degraded_threshold = ": %usage"
}
volume master {
format = ": %volume"
format_muted = ": (%volume)"
device = "default"
mixer = "Master"
mixer_idx = 0
}
tztime local {
format = " %Y-%m-%d %H:%M"
# format = "%Y-%m-%d %H:%M:%S"
}
load {
format = "%1min"
}
disk "/" {
format = " %avail"
}-
一开始指定了输出格式,单独在终端运行时就能看出来
- 不指定格式时在i3bar上也能显示颜色,非常神奇
-
默认没有网速显示功能
- 也没有内存使用的显示,作者认为看那些是迷信(你在手机上时常关心内存吗?)
- 同样受此影响,本人决定在conky中不实现音量的效果(但不表示没有设置过)
-
设置简单一看就会
-
网速显示的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70!/bin/sh
Authors:
- Moritz Warning <[email protected]> (2016)
- Zhong Jianxin <[email protected]> (2014)
# See file LICENSE at the project root directory for license information.
# i3status.conf should contain:
general {
output_format = i3bar
}
# i3 config looks like this:
bar {
status_command exec /usr/share/doc/i3status/contrib/net-speed.sh
}
# Single interface:
ifaces="eth0"
# Multiple interfaces:
ifaces="eth0 wlan0"
# Auto detect interfaces
ifaces="enp0s31f6 wlp1s0"
last_time=0
last_rx=0
last_tx=0
rate=""
readable() {
local bytes=$1
local kib=$(( bytes >> 10 ))
if [ $kib -lt 0 ]; then
echo "? K"
elif [ $kib -gt 1024 ]; then
local mib_int=$(( kib >> 10 ))
local mib_dec=$(( kib % 1024 * 976 / 10000 ))
if [ "$mib_dec" -lt 10 ]; then
mib_dec="0${mib_dec}"
fi
echo "${mib_int}.${mib_dec} M"
else
echo "${kib} K"
fi
}
update_rate() {
local time=$(date +%s)
local rx=0 tx=0 tmp_rx tmp_tx
for iface in $ifaces; do
read tmp_rx < "/sys/class/net/${iface}/statistics/rx_bytes"
read tmp_tx < "/sys/class/net/${iface}/statistics/tx_bytes"
rx=$(( rx + tmp_rx ))
tx=$(( tx + tmp_tx ))
done
local interval=$(( $time - $last_time ))
if [ $interval -gt 0 ]; then
rate=" $(readable $(( (rx - last_rx) / interval ))) $(readable $(( (tx - last_tx) / interval )))"
else
rate=""
fi
last_time=$time
last_rx=$rx
last_tx=$tx
}
i3status | (read line && echo "$line" && read line && echo "$line" && read line && echo "$line" && update_rate && while :
do
read line
update_rate
echo ",[{\"full_text\":\"${rate}\" },${line#,\[}" || exit 1
done)-
使用脚本指定了本地的网卡并将结果相加
-
不知道对系统负载如何
-
结尾的
${line#,\[]}
并不清楚 -
最后三次
read line && echo "$line"
原因是i3status的输出格式可能是i3bar-protocol说的,
出现在一开始的一些初始化的部分(read应该是只能读一行)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21-[
- [],
+[
+ {
+ "full_text": "E: 10.0.0.1 (1000 Mbit/s)",
+ "color": "#00ff00"
+ },
+ {
+ "full_text": "2012-01-05 20:00:01"
+ }
+],
[
{
"full_text": "E: 10.0.0.1 (1000 Mbit/s)",
"color": "#00ff00"
},
{
"full_text": "2012-01-05 20:00:02"
}
],
…json的开头输出,红色是开始以及初始化(网速结果可能不想往这里添加),
绿色是一次输出(注意以逗号结尾).
每一个指标基本模式是{"full_text":"","color":""}
,
在i3bar-protocol中还介绍了其他的属性,暂时没有用到 -
在i3bar的设置中使用
1
2
3
4
5
6
7
8
9
10# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
# 脚本监控网速并加上i3status的输出
status_command exec ~/.config/i3/i3status10netspeed.sh
tray_output primary
tray_padding 5
position top
font pango:DejaVu Sans Mono, FontAwesome 12
}注意字体设置不要丢
-
-
conky
增加了众多指标检测,但是突然不支持音量显示是为什么,但是通过调用shell可以检测音量
在i3bar中启用:1
2
3
4
5
6
7
8
9
10# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
# 使用conky的输出,但为了支持颜色使用脚本编辑成json的效果
status_command exec ~/.config/i3/conky-i3bar.sh
tray_output primary
tray_padding 5
position top
font pango:DejaVu Sans Mono, FontAwesome 12
}配置文件:
conky-i3bar.sh1
2
3
4
5
6
7
8
9!/bin/sh
Send the header so that i3bar knows we want to use JSON:
echo '{"version":1}'
Begin the endless array.
echo '['
We send an empty first array of blocks to make the loop simpler:
echo '[],'
Now send blocks with information forever:
exec conky -c ~/.config/i3/conkyrc_bar.luaconkyrc~bar~.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77-- ===================================================================
-- conky_bar
-- Date : 12/12/2015
-- Author : Allen_Qiu
-- Version : v1.1
--
-- 这份配置文件适用于conky1.10之后版本
-- conky1.10之后配置文档采用lua语法
-- 原作者音量显示
-- {"full_text":${execi 1 amixer | grep -A10 'Master' | sed -rn 's/.*\[([0-9]+%)\].*\[(on|off)\]/\2 \1/p' | sed -n '1p' | sed 's/off.*/ /' | sed -r 's/on( [01234]?[0-9]%)/\1/' | sed -r 's/(on|) 0%/ 0%/' | sed -r 's/on//'}},
-- 修改后音量显示
-- {"full_text":" ${execi 1 amixer sget Master | grep -Eo "[0-9]+%"}","color":${if_match "${execi 1 amixer sget Master | grep -oP "(on|off)(?=\])"}" == "off"}"\#FFFF00"${else}"\#FFFFFF"${endif}},
-- 本以为这样的音量显示可以
-- {"full_text":"${mixer}"},
-- ===================================================================
conky.config = {
-- 不输出到X
out_to_x = false,
out_to_console = true,
background = false,
double_buffer = true,
-- 刷新时间
update_interval = 1,
-- 运行时间,0为一直运行
total_run_times = 0,
-- 强制uft8编码,需xft支持
override_utf8_locale = false,
-- 缩写字符单位
short_units = true,
-- 监视端口
if_up_strictness = 'address',
-- cpu数据监测模式,一般选2
cpu_avg_samples = 2,
default_color = 'green',
color0 = '00DD00',
color1 = "what",
color2 = 'FFFFFF',
color3 = 'FF8C00',
color4 = '#FF0000',
}
-- conky.text = "[{"full_text":" ${fs_free /}"}],
conky.text = [[
[{"full_text":" ${fs_free /}"},
{"full_text":"${if_up wlp1s0}: (${wireless_link_qual wlp1s0}% at ${wireless_essid})${endif}","color":${if_match ${wireless_link_qual wlp1s0} <= 30}"\#FF0000"
${else}
${if_match ${wireless_link_qual wlp1s0}>=60}"\#00FF00"
${else}"\#FFFFFF"
${endif}
${endif}},
{"full_text":"${if_up eth0} ${endif}","color":"\#00FF00"},
{"full_text":${if_up wlp1s0}" ${downspeed wlp1s0}/s ${upspeed wlp1s0}/s"
${else}
${if_up eth0}" ${downspeed eth0}/s ${upspeed eth0}/s"
${else}" 0 B/s 0 B/s"
${endif}
${endif}},
{"full_text":" ${cpu cpu0}%","color":${if_match ${cpu cpu0}<=30}"\#00FF00"
${else}
${if_match ${cpu cpu0}>=80}"\#FF0000"
${else}"\#FFFFFF"
${endif}
${endif}},
{"full_text":" ${mem}","color":${if_match ${memperc}<=30}"\#00FF00"
${else}
${if_match ${memperc}>=80}"\#FF0000"
${else}"\#FFFFFF"
${endif}
${endif}},
{"full_text":" ${battery_percent}%","color":${if_match ${battery_percent}<=30}"\#FF0000"
${else}"\#FFFFFF"
${endif}},
{"full_text":"${if_mounted /media/chougousui/MAX29} ${endif}"},
{"full_text":"${color1}","color":"${color4}"},
{"full_text":" ${time %Y年%m月%d日 周%a}"},
{"full_text":" ${time %k:%M}"}
],
]]- 在oh-my-i3配置文件基础上改进,原先的音量脚本过于晦涩
conky.text
后的值中需要使用[[ ]]
包装,不然会出错- 同一个属性之间可以使用换行以提高可读性,不同属性之间不能使用换行
- 定义部分可以预定义,但是在下面的输出部分没能正常使用
menu
-
dmenu
- i3默认的开始菜单程序,在=$PATH=路径下搜索程序
- 也会导致搜索到根本没有界面输出的命令比如=sed=等
启用
1
bindsym $mod+d exec --no-startup-id dmenu_run -fn 'Ubuntu Mono:pixelsize=20'
后面的参数设置字体,还可以使用=-i=忽略大小写
-
i3-dmenu-desktop
使用perl包装的dmenu,可以在
$XDG_DATA_HOME/applications
,
$XDG_DATA_DIRS/applications
路径下搜索桌面快捷方式文件.
启用i3-dmenu-desktop1
bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu="dmenu -i -fn 'Ubuntu Mono:pixelsize=20'"
- 后面可以使用参数来继承dmenu的选项
- 可见引号冲突时可以使用双引号和单引号
-
j4-dmenu-desktop
程序世界中有趣的找事现象,j4主页专门说明比
i3-dmenu-desktop
快,
并且贴出了比较速度的方式,命名上也是j4
比i3
正好每个都往后一个.
虽然现在并没有宣称的25倍,但是8倍还是有的.
所以干脆使用j41
bindsym $mod+d exec --no-startup-id j4-dmenu-desktop --dmenu="dmenu -i -fn 'Ubuntu Mono:pixelsize=20'" --display-binary
在选项上完全兼容
i3-dmenu-desktop
,并且在打开binary名称显示之后能够看到网易云音乐的入口,
使用i3-dmenu-desktop
是看不到的,不知道为什么看不到二进制名称就连入口也看不到是什么设定
窗口及工作区
应该算是i3的精髓所在,但是平常并不被重视
-
窗口布局方式
- stacking,堆叠
- 纵向排列的标签式
- tabbed,标签
- 就像浏览器一样
- 话说浏览器本身不需要设置成标签式,那是窗口管理器的任务,
但是一般窗口管理器不管,浏览器自力更生
- split,平铺
- floating,浮动(浮动时可以使用鼠标右键拖动以改变大小)
- 适合弹窗提示,设置窗口等
设置默认浮动窗口
1
2
3
4
5
6
7
8
9# 设置默认浮动窗口
for_window [window_role="pop-up"] floating enable
for_window [window_role="task_dialog"] floating enable
for_window [class="TeamViewer"] floating enable
for_window [title="Preference$"] floating enable
for_window [title="Pages Unresponsive"] floating enable
for_window [class="Calise"] floating enable
for_window [class="whatpulse"] floating enable
for_window [title="Electronic WeChat"] floating enable- 这里的
floating enable
有可能让人摸不着头脑,没人说这是个命令啊
- stacking,堆叠
-
工作区提高效率
- 可以将暂时不使用的窗口(比如用终端开了一个音乐播放器,
网易云音乐等,懒得关终端又不想看见)放在 完全看不见 的地方,需要的时候再打开 - 也可为不同类型的窗口放在设置好的特定工作区中,节省手动搬运时间同时显得有条理
- 可以将暂时不使用的窗口(比如用终端开了一个音乐播放器,
-
树结构窗口管理与容器
i3
以树形结构的方式管理窗口,容器是最小的单位。这种结构可以被水平或竖式分割。因此可以实现以下效果
1
2[--------] [--------] [--------]
[--------] [---][---]- 在顶层按=$mod+v=分开上下,新建窗口
- 切换到下面的*容器*
- 按=$mod+h=分开左右,新建窗口
1
[--------] (--------)(--------) (--------)((--)(--))
- 顶层使用
tabbed
- 第二个tab使用
HSplit
重要提示
- 在按下设置键盘布局的按键后,一个容器就已经产生,此后新开的窗口就是在该容器中的
- 所以i3是手动分配布局的
- 在已经分好的三个同级别的窗口中,单独选其中两个更换布局方式似乎不可行,
需要在打开窗口之前就想好谁与谁是同一个布局,
但这样在分级上明显分离的窗口在移动时却能自由按照方向直接切换,是不是不平等呢 - 回到父窗口可以使用快捷键
$mod+a
循环切换窗口
因为窗口的特殊管理方式,切换窗口推荐使用的是四个方向的按键,
而不是Ctrl+Tab
这种循环的形式,因为可能循环不到(顶多只能在同一级别的窗口就间循环)
后者这样模拟1
bindsym Mod1+Tab focus left
不知道为什么往右不能完成循环
- 双屏幕,主要在左,放了workspace2,次要在右,放了workspace1(在arandr中的设置)
其他配置
冻皮的i3配置里讲了一些窗口相关的配置
笔记本的workspace没有敢设置成2,毕竟有可能带出去,不使用外接屏幕
还没有看两个屏幕的默认配置下拔掉外接屏幕是什么现象
体会
ubuntu是一个商业公司定制好的操作系统.(基本上音量,亮度等等,无所不包),
别人写的自己自然不费心思,并且也挺好的,稳定性好点.
i3正好是需要自己动手配的,音量控制等原本认为系统自己就带的东西,
事实上这是对操作系统有太宽泛的理解.
看到i3朴素的边框,才发现原来边框什么的都是身外之物(除了少数应用如 vivalid浏览器
),
都与应用本身无关.
下载他人最新版conky后,发现最新版的conky依赖的c++库文件版本要求太新,
在ubuntu17.04以上才有支持,要想使用conky最新版,要么自己从其他源下载新版依赖文件,
并且解决因此带来的所有其他冲突问题,
要么使用Arch,每次都能使用最新版,并且在每一天的使用中都面临依赖文件的问题,并适应之.
在自己编译conky过程中,体会到Arch社区的一种思想,
别人写的,基本不能拿来自己用,还要靠自己打补丁,
好的话提交分享,也没有什么官方主页,都是用户自己的分享,就这样建立起了一个开源开发者的乐园.
或许用ubuntu久了转向Arch是趋势,为自己能开始中级的linux之路而开心
写英语不是为了追求什么,是为了在出问题谷歌的时候有准确的关键词,多么痛的领悟.
最后引用一段i3status开发者的话,别总闲得蛋疼看什么内存占用,看了也不能快,慢了看也没用.