What a Shame!

今天是一个稍微有点特殊的夜晚。我晚上加班到了11点多,弄得自己脑子仁儿疼,回家后为了让自己好受点, 把家里剩下的 Jonny Wallker 金方喝光了之后,又开了一瓶普通的红酒餐酒,然后在醉酒的情况下写了这篇文章。

前一阵子,我想体验一下最新的 GNOME 3.24,于是就格式化了硬盘,装了 Arch Linux。之前我在用的是 Funtoo,用的挺好。再之前我一直在用 Awesome 作为图形界面的管理工具,后来忘了是为了什么,就是想再体验一下目前最新的 GNOME 桌面环境。

我在自己的电脑上安装了 Linux 后,首先接触的就是 GNOME。那个时候是 2007 年末尾的时候,我安装了 Ubuntu 7.10 Beta 4,正式开启了我的 Linux 生涯。当时的 GNOME 还是版本 2,界面和今天已经有非常大的不同。当时我在完成了日常的学习工作之余,也对这个桌面环境感到不满。当然大多数,从感官上,我是满意的。当时我感觉到,在 GFNOME 下,虽然没有 KDE 那么华丽,但我可以因此静下心来工作,而 KDE 那华丽的环境会让我有些无可适从。我觉得和习惯有很大的关系,但是我就是无法适应 KDE,也是没有办法的事情吧。

我对这套桌面环境最大的不满是它太慢了。我当时的笔记本电脑有 2G 的内存,在今天看来不算很大,但我在 2007 年购买的时候,已经算是非常好的配置了。但运行 GNOME 经常会卡住,让我感觉很难受。同时,Ubuntu 也从一个入门的好的系统,变成了一个迟缓、臃肿的难用的工具。我决定逃离 Ubuntu。我最终选择了 Gentoo。经过了几天算是“痛苦”的挣扎,我成功的安装好了它。我因为速度的原因,没有再安装 GNOME,反而是安装了我过去一直想尝试的 FVWM。我在这种环境下生活了一段还算不错的日子,可惜好景不长,我的笔记本电脑硬件除了问题。我从国内买的电脑,没有全球联保,因此只能摆脱同学在假期回家时把电脑稍给父母,让他们去联系保修来修理。儿当时我的室友,好心的把他新买的 MacBook 借给我用,因此我开始对 Mac 系统熟悉,后来我自己买了一台 MacBook,一直用到 2013 年。期间我尝试在 MacBook 上安装 Gentoo,最终失败,后来我就放弃了,专注于 Mac 环境,只是偶尔缅怀 Linux 系统。

2014 年我买了 ThinkPad X250,目的就是运行 Linux 系统。这个时候这个系统已经不是我的必须了,我实际上是想玩它。我一开始最想安装的是 FreeBSD,因为这是我童年时的梦想。后来因为硬件兼容性的原因,没有成功,我尝试安装 Arch Linux,没想到竟然成了,于是用了 Arch 一段时间。后来我觉得这样太过于平淡了,就安装了 Funtoo。这个时候,我的本职工作已经不是一名开发者了,Linux 完全成为了我的业余爱好,所以原谅我成为了一名 OS Whore,我这么不坚贞的用户也算是挺无耻的吧。

安装了 Funtoo,我后来还安装了 Windows 10、以及反复的安装了 Arch、Funtoo 等系统。我之前用 Funtoo 一直挺好的,后来忘了因为什么事情,我想再次尝试 GNOME,于是就在当时使用的 Funtoo 上安装了 GNOME。我没想到其实挺简单的,可惜 Funtoo 坚持使用 OpenRC,而 GNOME 已经开始依赖 Systemd 了。Funtoo 的开发者修改了代码,让我们 Funtoo 的使用者可以不用 Systemd 也能用 GNOME,可不足是没有最新版本的 GNOME 可以用。开发人员修改后兼容 OpenRC 的 GNOME 只有 2.20,儿此时 GNOME 2.24 已经推出了。虽然很多用 Systemd 的 Gentoo 用户当前用的也只是 GNOME 2.22,但我因为想尝试最新版本的功能,依然重新安装了 Arch Linux。这个时候我对 Arch Linux 已经很熟悉了,出去当中出现了一些奇怪的错误,我真正花费的时间不过是 15 分钟罢了。Arch 的确小巧快速。

不过,GNOME 3.24 非常不稳定,算是给我抛了一头冷水。经常我在 Firefox 里下载一个文件时,GNOME 就崩溃了,我之前的一些工作都丢失了。几次发生之后,我明白了 GNOME 3.24 实际生只是一个非常不稳定的测试版,它实在是给了我很大的麻烦。

我这个时候其实也很浮躁。没有去研究怎么在 Arch Linux 上禁止使用 GNOME 3.24,转而去尝试安装 Gentoo。我在 IRC 上和 UniverseBenzene 同学讨论的时候,得知他在使用 Gentoo+GNOME 3.22,因此自己也要安装 Gentoo,而没有去考虑如何让 Arch Linux 来运行一个稳定版本的 GNOME。看看 #archlinux-cn 讨论组,有很多朋友用了 Arch Linux 很长时间了,而我一直在三天打鱼两天晒网,让我觉得有些内疚,不过,我现在毕竟不是在操计算机为准时主业了,所以还是原谅我的轻浮吧。

再次安装 Gentoo 对我来说也有不同的意义,自从我 2008 年 4 月开始使用 MacBook 之后,我一直没有用过 Gnetoo,这期间的想念,其实占据了我相当大的思维。现在,算是圆了我这个 Gentoo 梦想。用了 Gentoo 之后,我感觉它和 Funtoo 其实有很大的不同。有些场景,Gentoo 的操作方法显得非常笨拙,从 eix-sync 上就能看得出来,Gentoo 比起 Funtoo,有些地方已经落后了。 不过它毕竟是我记忆中的操作系统,我还是非常的怀念它。

在这方面,我喜欢 Funtoo,但 Funtoo 坚持 OpenRC,不兼容 Systemd,这对我就带来了一些问题。而 Gentoo 在这个方面反而宽松许多,即支持 OpenRC+GNOME,也支持 Systemd+GNOME,自由度更大,这也是我目前使用 Gentoo 的原因之一。GNOME 3.24 给我了太多的苦头,目前 Gentoo 默认的是 GNOME 3.22,对我来说实际上正好。当然,Gentoo 和 Funtoo 之间的一些差异,让我需要耗费一些时间来适应,这些算是小事,就先不说了。

奇怪的 Subarch 错误

上周,我在捣鼓 Funtoo 的时候,遇到了一个奇怪的问题,我估计是某一个包的一个 bug。

我想安装 GNOME,在 Funtoo 上通过 epro 命令调整 Profile,加上 gnome 的 mix-ins,之后 emerge 就可以了。在这一步的时候,我看到 subarch 还是 generic_64。过去我不打确定,不好乱动,因为第一次安装的时候,我把 broadwell 搞成了 haswell 了,导致硬件错误,所以后来就用了 generic。可现在我已经很确定自己的 CPU 是 broadwell 的,而且我的 /etc/make.conf 里也是写的 broadwell,因此这次我也把 subarch 改成了 intel64-broadwell。

之后就是编译,我闲着也是闲着,于是就 emerge -e @world,把 800 多个包从头编译了一遍,当然 libreoffice、webkit-gtk 这样的大包跳过,结果也没有花太多时间,一个半天就搞定。之后其它没有遇到问题,就是 weechat 不能运行了。执行命令后,会显示出 ChanServ 登录的画面,接着就退出,说 invalid hardware set 之类的错误提示。查看 Log,能看到这样的信息:

Apr 20 11:03:30 localhost kernel: traps: weechat[6096] trap invalid opcode ip:7f29d9e66dc3 sp:7ffcfba73ec8 error:0

我上 IRC 上询问,得到的答复都是让我验证 MARCH 这样的参数,最终也没有解决问题。我看了 Funtoo Wiki 上说这样可以获取更快的执行速度,因此按理说从官方角度,应该也是支持这样操作的。

Weechat 上不去了,我临时搜索其它的 IRC 客户端,一开始用 Thunderbird 里的,后来我尝试了 HexChat,结果出乎意料的好,弄到最后我觉得我不再需要 weechat 了呢。

不过,GNOME 安装好了,我启动起来,发现无法进入终端。但之前安装的 rxvt-unicode 还可以进。我一开始也很奇怪,之前从来没有遇到 Gnome Terminal 这么基础的软件出问题。不过我在 rxvt 里属于命令启动,也看到了错误提示。而且在 log 里也有:

Apr 22 18:56:50 localhost kernel: traps: gnome-terminal-[24446] trap invalid opcode ip:7ffb6e4e4dc3 sp:7fff7e729488 error:0

之后我反应过来,问题其实不是 weechat 和 gnome-terminal 本身,二是它们依赖的其它的某个包,发生了这样的错误。我最终把 subarch 有改回了 generic_64,重新编译,问题就消失了。

这几天的折腾

这几天临近放假前夕,不算很忙,再加上种种其他原因,我又折腾了一波 X250。

上周一我安装了 QTerm。本来这东西依赖 QT,我心里怵怵的,后来因为想用 SMPlayer,就装上了 QT,之后就百无禁忌了。QTerm 是一个专门用来泡老式 BBS 的终端,用其他通用终端 telnet 上去也不是不行,但这些 BBS 往往很老,编码还是 GBK 之类的,进去会乱码,一种方法是用 luit 转码,但有一些其它的问题,不是很方便。QTerm 就很好了,不但是个图形化的界面,还可以用鼠标来操作,十分方便。QTerm 内置了水木的 BBS 设置,我之前也注册过账号,但时间长了都忘了,直接用 guest 进去读读。这些年传统 BBS 已经式微,但学术方面的讨论还是有很多有价值的旧帖的。

这次好死不死,在 FreeBSD 频道我读到了 TrueOS 的消息,说是已经支援 Intel Broadcom 系列的显卡,这“晴空霹雳“一般的好消息一下子让我不淡定了。要知道,我买这台 ThinkPad X250 最初的想法就是在上面跑一个 FreeBSD 系统作为桌面,圆我一个童年时候的梦,但 FreeBSD 的显卡支持实在是让我绝望,长期以来一直只支持到 Haswell。不说 Linux 世界早就已经有了驱动,OpenBSD 的驱动应该也可以用吧,但一直没有人移植。虽然我后来转为折腾 Linux 桌面,目前用着也很舒服,但心里的那股冲动一直都无法平复。

前几天我刚折腾了一次,把整个 sda2 分区弄上了 LVM 来管理。装好系统后心想其实可以装个 ZFS 尝试一下,然后纠结了几天,心想要不要趁着 Firefox 等软件还没装,把系统格了重装?后来压下了这个想法,然后看了别人的博客,上 LUKS 加密的想法又起来了。过去我认为的一些用于服务器上的高大上的东西,经过上次折腾了一遍,觉得也不是很难,于是就想都在自己的笔记本上试一下。我也是过了几天才压下了这个想法,毕竟我的笔记本丢失的概率大概为 0,而且也没有什么泄漏了就不得了的信息。

但是这一次,涉及到了我童年的情怀,我觉得无论如何也无法压下去这股念头,于是趁着是个周末,我拿出了移动硬盘来备份资料,然后就这么安装了。当然我实现也在 Parallel Desktop 里测试过,安装了几遍,也大致摸清楚了。TrueOS 其实就是过去的 PC-BSD,过去 PC-BSD 针对桌面用户,TrueOS 针对服务器用户,现在两者统一了名字,都叫 TrueOS 了。以 FreeBSD 为基础,添加了一些自己开发的管理工具,做成了一套比较方便的发行版。默认的 FS 用上了 ZFS,正好也算是让我体验一把。

通过尝试,我发现 ZFS 确实很好用,我之前遇到的一个分区不够用了的情况应该不会发生,因为通过 df 指令就能看到,每个分区的大小都是整个 ZFS 分区的大小。和传统的分区方式不同,我觉得 ZFS 是给每个区块打上 tag,标上了 /usr 的 tag 就是 usr 分区的内容,整体来了个动态管理。当然 ZFS 远不是这么简单,我只是就我领会的这一点来说。

我的 FreeBSD 之路最终失败了,我甚至都没有让 X 跑起来,原因我觉得 make ports 有点麻烦,不如 Portage 一个命令搞定一切方便一些。没有国内高速的镜像也是原因之一吧。另外,我对 Linux 的日常管理也算熟悉,无论 OpenRC 还是 SystemD 都能捣鼓捣鼓,到了 FreeBSD 就完全不行了,过去看 FreeBSD Handbook 纸上得来的知识没有经过实践,基本上都忘光了。核心之外的应用都放在 /usr/local/bin 里,过去在读书的时候觉得那么自然,现在感觉好不方便啊。

Linux 和 BSD 的不同,在过去有相当多的文章探讨过,这次我是真正体会到了一次。上面说的区别其实算是表面上的,而结构上的不同才真正的让我不习惯。比如说,装好系统要连无线网络,在 FreeBSD 上有个 iwm,算是 Intel 网卡的驱动。我自然而然的去 ports 里找,结果没找到,研究了半天,原来是在内核中,通过读 man 文档给弄好了。Linux 仅仅是一个内核,所有内核以外的东西都是一个包,在 Gentoo/Funtoo 里,就是通过 Portage 来管理,而 FreeBSD 是一个完整的系统,在内核之外,还有很多工具,都属于核心,而不在 ports 的管理范围之内。这个让用惯了 Linux 的我不大习惯,在 Linux 系统里,想用什么就装什么,甚至内核都有好多版本可以选,在 FreeBSD 这里,FreeBSD 本身就是一个系统。

装到这里,我没有继续下去,我觉得 FreeBSD 实在是难以适合我,还是放弃了。

之后装回 Funtoo。在 TrueOS 里尝试了 ZFS,我打算这次也试试 ZFS on Linux。我找到了 Funtoo 的安装文档,一步一步之行,到最后发现它把 ZFS 部署到了整个 sda 上,最后也不打算用 EFI 方式引导,而我想尝试用 EFI 引导,结果失败了。之后我找了一篇文章,里面用的是 Debian,我照着弄也走了一些弯路,最终依旧没有成功,到了最后只好放弃,但 ZFS 至少不是不熟悉了。

在全盘 LUKS 加密上面,TrueOS 恰好给我上了一课。TrueOS 有 GELI 全盘加密选项,我尝试了后,发现这样在启动的时候要让你输入密码,之后才能正常引导,这也太麻烦了。LUKS 据说可以配置自动解密,不过这样的全盘加密方式我觉得用在个人电脑上还是麻烦了点,所以也没有用它。最终还是用了 LVM 安装,有过一次经历,这次也是顺风顺水。之前备份了 /etc 和 HOME,因此配置方面也没有遇到太多困难。

最终一切又回到了起点,我还是用上了 Funtoo 和 LVM,估计心理可以安分一些啦。这次折腾花了我一个周末的时间,特别是周日,我在弄 ZFS on Linux 的时候连续重装了几次,觉得都想吐了,到了最后安装 xorg 的时候,有一个包需要通过 git 来下载,偏偏那时候这个连接的速度极慢,每秒钟 2、3K,有时候一点速度都没有。我实在是没办法,就这么放着它,先去睡觉了,早上醒来后安装成功,把笔记本拿着,去公司 emerge 其它的部分,也是耗了大约一天才弄好。

重新折腾了一遍 Funtoo

这个周末抽时间重新折腾了一遍 Funtoo,得到了一些收益。

起因是周五晚上尝试安装 ck 内核,经过研究了文档,得知了 /proc/config.gz 的内容就是其实就是当前的内核配置文件,只要把这个文件导出来就确定了能保证运行的内核配置。我当前用的是 debian-sources,版本是 4.5。我通过文档,也知道了 make oldconfig 命令可以让你逐项审视新版本内核的配置,我觉得这样有了一定的把握:先获取当前的配置文件,然后在当前的基础上,配置新内核,再用 make menuconfig 来最后检查一下,进行最终调整,之后就是编译了。

前面的步骤都还可以,虽然我对一些配置也不是很确定,不过因为是在已有的基础上,我知道不会让我漏掉什么东西,事情不会变的更坏,所以也没有太单性。但是到了编译这一步,出错了。我一看,说是磁盘没有空间了,用 df 检查一下,果然 / 目录已经没空间了。这时候我非常沮丧,之前我特意把它调整为 20G,觉得肯定不会出现问题,把更多的空间交给 HOME 分区更好。过去也没有遇到问题,没想到在编译内核这里给出了问题。

我上网搜索了一下,有一些通过 Live USB 引导后调整的方式,不过我想一劳永逸的解决问题,看来还是要上 LVM。想到这里,不如干脆重新调整分区表。当然第一步要备份,我找了块空的硬盘,西数的 1T,支持 USB 3.0,之前网上有打折就买了,之后一直没有用,这次比较方便的派上用场。

备份的时候收到了教训:命令行界面确实很容易误操作。我在向 NAS 复制一批刚下载的视频目录时,想把旧的目录删掉,旧的目录和当前目录名字一样,只是以 -old 结尾,结果我一时手快,没有注意,没把旧的删了,把当前的给删了。这时 cp 指令还没有执行完,我去 NAS 看看,丢失了一些文件,非常可惜。我想如果在图形界面,虽然我也没有配置回收站,但不大容易发生这种错误。

我从网上找到了 rsync 来被封的方法,加了 -av 参数,不过奇怪的是,经常会走到一个文件的时候,就在那里卡住。我备份了一些文件后,最后还是直接复制过去。但最后发现两个方法做的都不算好。复制的时候隐藏文件没有复制,而且我的邮件也没有复制全,后来造成了比较严重的问题。

备份了 HOME 和 /etc 后,就按照 Funtoo 上的说明,重新安装。我把 /boot 留着没动,剩下的分成了一个区,在上面用 LVM 管理,创立了两个卷,过去的 ROOT 分成了 30G,剩下的给 HOME。其实我觉得这样我用传统方式问题也不大,不过还是 LVM 以防日后再有麻烦。

使用 LVM 其实并非我开始时想象的那么困难,分区的时候按照文档中的说明进行操作,chroot 后正常安装,只是需要用 genkernel 重新编译内核,编译的时候加上 --lvm 参数就行了。然后我在运行 boot-update 这一步时遇到困难,怎么也无法继续进行,总是提示错误,说是和 /etc/fstab 有关。我对此很费解,检查了几遍文档都没有错,也上网进行了搜索,最终我发现文档竟然有错误,/etc/boot.conf 里根路径的写法和 /etc/fstab 里不一致,虽说实际都是一个东西,但就是这一点导致了 GRUB 安装错误。修正了之后便好了。

剩下的就是一点点 emerge 了,这些没什么好说的。到了安装内核的这一步,虽然我有之前弄的 ck 内核的配置文件,不过心想还是先让机器能启动了再说吧,就没有激进,还是安装了 Debian 内核。然后我遇到了前面说的 boot-update 的问题,我一开始觉得大概时 Debian 内核默认不支持 LVM 吧,于是就按照说明,genkernel 编译了 ck 内核,之后还是有错误,来回几次弄明白了是参数的问题,到最后一只用着 ck 内核当作默认。我并没有感到性能有多大的提升,但是在一次 emerge 计算依赖的时候,系统锁死过一次,怎么也没有反映,鼠标也不动弹了,只好重启,不清楚是不是内核的问题。

之后我慢慢的把之前的配置复制过来,还有过去 emerge 的包,这些我是在周一在公司做的。之前其实没有好好的备份,复制回来的配置文件需要我手动修改属性,也挺讨厌的。不过备份的比较全面,很多东西都很快的就弄好了。在吃饭前我装好了 OfflineIMAP,想把邮件都同步过来。我发现我备份的 Mail 文件夹不全,很多东西都没有复制下来,所以估计要下载的邮件很多,所以我运行了 offlineimap -o,准备在我吃饭的过程中,下载完邮件,结果竟然很快就完成了,我进去一看,心都凉了,OfflineIMAP 清空了我远程服务器上的邮件。我本地本来没有邮件,只剩下了几个文件夹,结果 OfflineIMAP 把本地的空白目录同步到了服务器上,导致了我丢失了几乎全部的邮件。我觉得这基本上已经无解了,不过我目前没有想到我的邮箱中有什么很重要的东西,算是可以自我安慰吧。

我本来计划这次就不通过源码安装 Firefox 和 LibreOffice 了,Portage 上有二进制的包,性能应该差不了多少。结果 Firefox 的二进制包直接去 Mozilla 的网站上下,二、三十 KB 的速度,实在是太感人。LibreOffice 直接无法下载中文 xpi 文件,导致无法安装。我等了很旧,装上了 Firefox 的二进制版本,LibreOffice 就暂时放弃了。

结果今天我在配置 Dropbox 的时候总是配置不成功。后来我我通过 proxychains 调用 dropbox 命令,找到了问题。Dropbox 打开网页,竟然用的是 w3m,而在 w3m 里也无法让我完成认证。这在我之前可从来没发生过,那时候直接在 Firefox 里打开的页面。我估计是二进制的 Firefox 的程序路径不同导致的问题,于是就从源码安装了 Firefox,好在它的编译时间不像 LibreOffice 那样长。安装后,Dropbox 果然也能正常认证了。

通过这次的折腾,我一来解决了分区的问题,而且我对 Linux 系统越来越熟练了,之前我觉得 LVM 在个人电脑上过于遥远,不应该在个人电脑上适用,因此也从来没有尝试过,一致认为它是很复杂的东西。现在我动手操作了一遍,虽然不能说是完全掌握了,但它的神秘感也不存在了。其实这些年的经验告诉我,Linux 系统的组成其实非常简单,它让你有机会学习操作系统的一切,远比 Windows、Mac OS X 这样的系统能让你学到更多。

装完了这个系统,我突然想到,我这次其实可以上 ZFS 的!我上网找了一些别人的博客文章,有一些人也在个人电脑的 Linux 上用 ZFS。虽然心里很痒痒,不过我暂时不打算动了。我看了一些文档,从操作上 ZFS 和 LVM 其实也大差不差,在我需要的逻辑卷这方面也是一致的,底层的一些好处我目前还不是太感兴趣,所以暂时就先保守一些了。不过我想,也许在将来我会再试着折腾折腾吧。

升级到 Awesome 4.0

在我这次安装 Funtoo 后,emerge 的 Awesome 自然已经是 4.0 的版本了。一开始我没有注意,只是知道了这个事实,或者说 layout 的图标变得更立体了,也是其中的一部分吧。我也去了 Awesome 的主页上,扫了一眼升级的内容,也没有发现与我日常使用有什么不同的地方。但这些天的使用时,也发现了一些不和谐的地方,一直没有往升级这方面来想,只是以为是我的 Funtoo 系统还没有配置好,因此也一直没有解决。今天中午有时间,顺便看看是哪里出了问题。

主要问题是,我运行 Super+r 的时候,应该会出现一个 prompt 让我输入命令行,可以执行,但我按下快捷键后,会弹出错误提示。具体的内容我也没有记,但看我之前的配置文件,理论上是完全没有问题的。想了一会儿,我才也许是 Awesome 4.0 升级之后,配置文件改变了的原因。就 diff 了一下和默认的配置文件的区别,结果发现居然有相当大的不同。具体那些不同,我对 Lua 了解不深刻,也说不上来,有心人可以下载两个版本的包,自己比较一下。

我想这么大的变动,Awesome 会不会给提供一个脚本,帮忙给升级一下呀?结果区网站上看看,完全没有,不过倒是有提示,说建议你复制一份最新的默认配置,再把你自己的配置给加进去,我感觉有点扯淡。Aweome 2.5 升级 3 的时候,也对配置文件做出了很大的修改,让大家哀嚎了一阵子,不过那时候我还没有用到 Awesome,因此没有切身体会,这次算是体验到了。

我中午花了点时间,从头开始,打开了两个窗口,进 vim 逐行比较了配置文件,把我自己的配置给加入了进去。我不懂自己写 Lua,因此算是照葫芦画瓢,没有深究。最直观的感觉是,一些地方加入了不少 OOP 的概念,然后是每个绑定的快捷键都加上了 description 属性,这样方便生成一个 cheetsheet,倒是不错,可惜我现在忘了快捷键了,日常其实用的也少。当中也看到了默认界面下,每个窗口其实有个单独的标题栏,右边会有挺漂亮的按钮呢,后来也让我给去了,实际上也用不到。

到了晚上,我想到了这个问题,无疑我是比较喜欢 Awesome 的,虽说我也总结不出来为什么吧,也许是我没有完全掌握,比如它的配置语言 Lua,而给我带来了别样的吸引力。用 Awesome 之前,我在用的是 i3,其实本质上和 Awesome 区别不大,而且 i3 把我带入了瓦片式窗口管理器的大门,但我更喜欢 Awesome,大概是 i3 太简单,我兴趣不足的缘故。之前看过一些文章,说 FVWM 的配置文件可以几十年不动,照样运行,引为美谈。我刚在这台 X250 上装 Linux 后,首先安装的就是 FVWM,不过用了一阵子觉得还是不顺手。我在加拿大用了几个月的 Gentoo,当时用的也是 FVWM,课上记笔记、日常使用都用它,当时中了王垠的毒,对其它窗口管理器都不屑一顾,现在想象也真是幼稚。

晚上我回忆了一下,我几次配置 FVWM,都没有摆脱配置菜单的陷阱,似乎一定要把安装的所有软件都设立一个菜单,并把相似功能的菜单项合并成一个子菜单。到了今晚我才彻底想清楚,事实上日常使用,我是根本不像用菜单的,要从根菜单开始,一层一层的找到一个应用,效率其实是很低的。Awesome 默认有个菜单,我也没有往里面添加任何东西,反而把默认左上角的菜单按钮也给删掉了。启动应用,我用的是 dmenu_run,实际上已经完全可以满足我的需求了。基本上没有哪个软件我记不住命令的,有的话,其实就是我不需要的。

至于 Awesome 这种随意改变配置的做法,我觉得可以从两方面来看。一方面,它给用户带来了麻烦,不如一直不便更加稳健;另一方面,它又代表着,这个软件是在被积极开发着的,不用担心没人维护。事实上,晚上我看了一下 FVWM 的网站,里面的更新记录已经把一些老旧的功能给取消了,比如对早期 GTK 的支持。所以说,我想现在再用 20 年前的 FVWM 的配置文件,大概也不能一点不变的运行了吧。

Return to Funtoo and XF86Audio Key Problem

上周日,我把 X250 笔记本的系统换成了 Funtoo。

我是在折腾,因为生活上的一些原因,总觉得一些沉闷。上周末我看知乎的时候,看到一个长期用滚动更新的 UNIX 系统是什么感觉,一位 FreeBSD 的用户做了回答,让我一下子又想念起了 FreeBSD。但 FreeBSD 对新硬件的支持实在是让人迥异,Intel 的显卡一直没有驱动,启动不起来 X。不仅如此,配置无线网卡驱动也要费一番功夫。听说 OpenBSD 在这方面做的不错,让我不禁感叹世风日下,人心不古。

我最终没有勇气安装 OpenBSD,之前没有接触过,只知道安全性很牛,但相对于 FreeBSD 总是从心里上有些陌生。虽说今天的 FreeBSD 也早已不是我之前印象中的那样子了,我之前用的版本是 4.7,现在已经到了 11 了。

不过这个本子总是想再折腾些什么。我曾经装好 Arch 之后,想过永远这么用下去。网上我看过不少 Arch 资深用户的博客,从几年前就开始用,系统就这么一直滚了下来。当中经历过 Systemd 的转换,看上去那种厚重的沧桑感其实挺酷的。但目前 X250 不算是我的主力计算机(虽然我在上面开发 Ruby 感觉还是很爽的),但这台电脑我当初买来就是为了折腾着玩的,心想还是再折腾一轮吧。

之前在上面安装过 Funtoo,这次想着装个 Gentoo 试试。因为不久前装过,所以这次也有了一些底气。上次我装 Funtoo 的时候,进入了 X 界面后却无法连接无线网络,只好区路由器旁边插着网线来弄,没有桌子,把电脑放椅子上,很累。这次我捣鼓了一下 wpa_supplicant,可以通过无线来安装了。

但好景不长,周日晚上我大半时间就用在引导上了,下载了 ISO 镜像,写进优盘里,怎么也引导不起来,换了一个优盘,依旧如此。最后切换到 BIOS 才正常引导。到了后来,我算明白了 Arch 的引导 ISO 文件名中的 dualboot 是什么意思。最后安装 GRUB 的时候,用 EFI 的模式安装自然不行。我灵机一动,用了 Arch 的引导 ISO 做了引导盘,再 chroot 进 Gentoo 系统里,这次正常安装上了。

除了想用 UEFI 外,我因为在 Arch 中算是熟练了,想用 Systemd。Gentoo 和 Funtoo 官方都没有正式支持,但 Gentoo 给出了说明。一开始我弄完后,重启发生了 Kernel Panic。我不大清楚是哪里的问题,经过查文档,才发现 grub 的配置里没有加上 systemd 的那行。改了之后就好了。

之后又遇到了大问题。我的显卡不能正常识别,运行 iwconfig 总是没有无线网卡的信息。找了很多文档,网上关于 iwlwifi 的内核配置我来回弄了好几次,反复编译了内核,一直没有改进。之后我干脆用 Genkernel 的方式试试,结果一直不行。着让我十分沮丧,没有无线网络,在 Linux 下几乎寸步难行。我最终没有确认问题的原因,所以也没有更加深入的尝试,比如换个内核版本之类的,最终还是放弃了。

改装 Funtoo,当中很多步骤都被简化了,其实还蛮享受的。最终硬件上都正常识别了,几乎是前天晚上一晚上的事。昨天一天在单位里搞定了各种包,X、Firefox 等都一切正常。这次我依旧保留了分区,我觉得把 /home 单独分一个区真实太明智了,其实我想 /etc 也许也可以单独弄一个,这次重装之前,我把之前 /etc 目录给复制到 HOME 下了,也省去了一些配置的功夫。各种软件几乎没有任何需要配置的地方,特别是 Awesome,当初我配置的时候也费了不少时间,这次相当于装上就能直接用。还有 Firefox,启动后我需要的插件都在那里好好的,简直就像没有重装过一样。

当中有几项问题:其一是 Emacs 那丑陋的菜单栏和进度条;其二是 Awesome 的 WIFI 指示插件不能正常显示;其三是声音调整按键不起作用。

对于第一点,我知道是 USE 的问题,我没有搞好是哪个关键字没有弄对。经过今天中午的尝试,在于没有启用 gtk,而是用了 gtk3,加上 gtk 就好了。第二点,曾经让我百思不得其解,最终才发现,Funtoo 里无线网卡已经不是 wlp3s0 了,而是 wlan0,在配置里修改了,马上就好了。

至于第三点,更是让我想不明白,过去从来没有遇到这样的问题!通过 xev 检测,我发现音量+、音量-、静音、屏幕亮度+、屏幕亮度-这几个键都不能正常识别,显示一堆没有规律的数字。上次我装 Funtoo 时没有这个问题,在 Arch 里更是不存在。我查过很多文档,都没有和我遇到类似的问题。我尝试把驱动由 evdev 改到 libinput,也依然没有解决问题,反而修正了之前我没注意到的问题。

不过,好在这个问题只是带来了不便,不像没有无线网络这样的问题,让我无法使用。这个,暂时徐徐图之吧。

最终还是要解决字体问题

写完上一篇文章后,我本来觉得这个系统的字体配置已经很完善了。主要是我的要求也不是很高,主要是终端,urxvt 可以正常使用文泉驿 Unibit 字体,我已经很满意了。浏览器里面的字体其实并不是那么的完美,不过我也不觉得无法使用,于是就这么用着吧。

不过,今天遇到了编辑 wiki 的情况。我的个人维基用 MoinMoin 架设,在编辑窗口里的文字,简直不忍卒睹,一些符号,比如等号,看上去就像是一个加粗了的减号,不但难看,连识别都不大方便。最终,我觉得还是需要解决一下这个问题,于是就下定决心,沉下心来找一些相关资料。

我主要找了 fontconfig 的资料,比如金步国的网站,还有一些其他人的博客。其实 fontconfig 目前调整起来也挺简单了,出了它的 XML 语法外,只要你对文件进行调整,并且保存,效果马上就出来了。这样有一个实时的对比,看上去就很容易调试。

我的文件夹下原本有一个配置文件,里面指定了三个字体,我怀疑是过去我从别人的博客上抄过来的。里面的三个字体是 Bitstream Vera 系列、AR PL 系列,以及文泉驿正黑。它们不可能是系统自己生成的,因为这次我没有安装这些字体,特别是正黑体。我首先删除了 AR PL 系列字体的配置,再把等宽字体改成了文泉驿 Unibit,结果 dmenu 里的英文字母马上变成了全角,显然这个字体不适合显示英文字母,也说明了 Bitstream Vera 系列字体没有起作用。我 eix 了一下,果然 media-fonts/ttf-bitstream-vera 这个包没有装,emerge 了之后就好了。这样,我把衬线和非衬线字体都设成了先 Bitstream Vera 系列,再用思源黑体系列,这样应该问题解决了。

再去维基的编辑页面看看,问题已经消失了,证明这样可行。至于其他的美化,我没有碰,太复杂了我也不好理解,所以也做不到金步国的网站上说的那么细致了。不过目前来说,中文字体已经显示的不错了。

在 Gentoo 中添加字体

在 Funtoo 系统中安装上了 LibreOffice 后,我便想试着用它来打卡我们公司的文档。单位的公文有固定的格式,比如标题使用方正小标宋简体,正文用仿宋 GB2312 字体,三号字。我在国外时不需要用到这些中文字体,只要能正常显示中文,可以让我浏览网页就行了,所以那时候也没有考虑其他中文字体的情况。现在就不行。

我的印象里,给 Linux 添加中文字体挺复杂的,原因在于我在 2007 年使用 Ubuntu 的时候,让中文显示的漂亮相当费功夫,而且由于对我来说过于复杂,配置成功后,我都不想再去验证一下到底是哪一步起到了作用,反正配置成功了,就这么用吧。

所以到现在,说起添加中文字体,我依然能够想到的,就是大篇的 XML 文件,每一个细小的配置,都要由 10 倍的 XML 来描述,效率比起 .conf 来要差太多了。而且字体本身就有很多学问,比如有等宽字体、衬线字体等,都要作出相应的对应。

另外,我很不能理解甚至有些气愤的是,文泉驿这么一个前些年这么著名的中文字体项目,文档居然这么的少。比方说我看到了网站上介绍了点阵宋体、Unibit 字体、正黑、微米黑等,但他们之间有何不同、区别在何处,都没有说明,只是说了正黑是 Linux 上最流行的字体、微米黑是 Android 上的流行字体等等,看的我很迷惑。我看到 Unibit 字体的说明,说它很适合用在终端仿真器里,但要如何使用才能达到这个效果,我从官方网站上没有找到说明。

后来搜索网上的论坛,看到了一篇说明,才知道目前安装中文字体很简单了。我自己也略微测试了一下:Portage 里面已经包含了一些主流字体,只要把他们 emerge 了,马上就会起到效果。过去我贪多,看到里面有这几个月比较火的冬青黑体、思源黑体等,就想一下子都装上,结果安装上了之后反而觉得效果不是那么的好。所以这次重新安装 Funtoo(是的,及天前我重新安装了一遍),我尽量选择安装较少的字体。

我首先安装了文泉驿 Unibit,urxvt 里面的汉字显示的确比过去好多了。我之前在用 ArchLinux 的时候,调整了很多参数,包括 DPI 等等,但都没有这次的效果好看。不过好景不长,等我安装了其他字体,urxvt 里的字型马上就变了。我 unmerge 这个新安装的字体,就又回去了。我想不能只用这一个字体呀,于是就查资料,看如何指定 urxvt 用特定的字体,最后通过看 urxvt 的 manpage 和反复试验,得到了需要的参数,把它写进了 .Xresources 里面:

Rxvt.font:xft:Monospace:size=10,xft:Unibit:size=10

unibit-font

LibreOffice 就更让我感动了,把字体直接复制到几个字体目录之一就可以了。我在我工作的 Windows 电脑中,复制出来了方正小标宋简体、仿宋 GB2312、楷体、舒体、圆体等常见(对我来说它们并不常用)中文字体文件,把文件放到 /usr/local/share/fonts/winfonts 文件夹里,别的什么都不用做,启动 LibreOffice 一试,字体都在那里,简直方便到让我想哭。

这次的体验让我尤为兴奋,我实在是觉得这样的 Linux 是我喜爱的。虽然少了一些折腾的乐趣,不过又有多少人喜欢折腾字体呢?

最近,我又重温了一些蔡智浩的文章,里面有一些文章是介绍他使用 Ubuntu 和 OpenOffice.org 的经验的,当年看到了他的文章,给了我很大的鼓舞,让我觉得 Linux 也可以不必下大力气配置,可以直接用来办公(蔡智浩的 Ubuntu 里只多安装了萤火飞字体和 gcin 输入法)。那个时候我自己还没有属于自己的电脑,出来在虚拟机里试试之外,没有条件在家用的电脑上折腾 Linux 来玩。那个时候网上的 Linux 使用文章都是我的精神食粮 🙂

另外,今天由于我修产假,但又有一个通报要发,我麻烦同事通过电子邮件把上个月的版本给我发过来,我在自己的 Funtoo 笔记本电脑上完成了修改,并再用邮件发回去。一切都很完美。

可惜的是,公司的 OA 系统有些功能无法在 IE 浏览器以外的环境运行,还无法用 Linux 替代 Windows 系统来办公。昨天我关机后,再次开机,机器就慢的基本上无法用了,我多年后又有了砸电脑的冲动。这种问题几乎是无法解决的,也许只有重装能解决问题吧,目前我也只能这样苦恼着。

圆梦 Funtoo

前几天,我收到了一封邮件,说 mutt-1.6.2 发布了,这一下子勾起了我的回忆。之前买了 iMac 后,我有了两台 Mac,之前安装了 ArchLinux 的 ThinkPad X250 就一直没有用。我觉得留着这台电脑就没什么用了,正好那几天试用了 OneNote,就把那台电脑改装成了 Windows 10。虽然当中遇到了一些波折,但到后来还是安装成功了。

用了一段时间后,除了用它来看一些 PBB 加密的视频和玩 CS:GO 外,就没有其他的用处了。这次由于看到了这个邮件,就又想在这台电脑上恢复 Linux。因为之前用过了 ArchLinx,对它已经消除了神秘感,加上很怀念过去用过的 Gentoo,就决定在上面安装 Funtoo。我够买这台电脑的时候,就是为了运行 UNIX。当时的第一选择是 FreeBSD,不过由于驱动问题,就想安装第二选择 Gentoo/Funtoo。不过由于很久没有用了,Gentoo Handbook 有了一些更新,比如 OpenRC 和 Systemd 的选择,让我感觉头大,结果走到了编译内核的那一步,我就放弃了。后来安装了 ArchLinux,意外的很成功,于是就这么用上了。

现在我常想,如果当年我的笔记本电脑没有坏,也许我会一直用 Gentoo 到回国吧。我还能清楚的记得,我在 2007 年 12 月把 Gentoo 装在了出国前买的 DELL XPS M1330 电脑上。这台电脑购于 2007 年 8 月,是我在出国前几天收到货的。拿到后我就试着用 Ubuntu 免费派送的 LiveCD 引导,结果连启动都没办法。所以只好用机器自带的 Windows Vista。到了 10 月份,Ubuntu 推出了 10.04 Beta 4,我下载了 LiveDVD 刻盘后,高兴的发现可以正常引导,于是就安装了那个版本,感觉挺顺利的,无线、声音什么的都没有问题。我用 Ubuntu 一直到了 12 月,一方面感觉没有了神秘感,另一方面我觉得它运行的也太慢了,所一就开始尝试安装 Gentoo。在克服了一些不懂的地方后,我花了两个通宵让他能用了。而且,我也可以在上面实践很早前受了王垠的蛊惑而一直很期待使用的 FVWM,还有 Ubuntu 中文社区里 eexpress 推广的 ROX。这样我开心的用到了 2008 年 3 月,我决定尝试一下 KDE 4。还没等我编译完,屏幕就显示出了异常。我还记得那是我在学校的某幢楼的大厅上自习,遇到了这样的情况,也没了心情,赶紧回家。结果情况一直恶化,到了下午已经完全无法显示了。我用室友的电脑查了一下,才知道网上有很多 DELL 电脑质量问题的文章,而且我的这个系列只是国内保修,没有全球联保,当时的心情简直糟透了。好在室友当时新买了一台 MacBook,借给我用。我第一次接触 Mac 系统,觉得非常不错,于是就在 4 月 1 日自己也买了一台,之前的 DELL,让另一个暑期回国的朋友捎回去,由父母联系 DELL 售后维修,修好后给了亲戚用,我没有再接触。从那一直到现在,我一直是一个 Mac 用户。如果当时我的电脑没坏的话,我想也许我到今天还在用 Gentoo 吧。

这次制作引导优盘时同样遇到了问题,Mac 的磁盘工具无法把我下载的镜像还原到优盘上,我在 Windows 里下载了 ImgBurn 和 Nero 试用版,都没法解决问题。之前有一个微软的 Windows Live DVD tool(好像是叫这个名字),但它只能还原 Windows 的镜像,其他镜像不行。最后居然是老毛桃解决了问题,它是一个制作 Windows 装机盘的东西,居然方便的制作好了启动优盘。

我的这台 X250 支持 EFI 启动,我对这个不大在行,在 BIOS(或许不能叫 BIOS 了?)里凭感觉设定,居然成功的通过 EFI 引导。我直接进入了图形界面,可以开一个浏览器看文档,在终端仿真里安装。引导后发现没有无线,从 NAS 上拔下一根网线插上,有线好使,我就没在管无线,反正装好后会有无线的。由于线不够长,我推过来一个小桌,把电脑放上面,坐在地上来弄。虽然不大舒服,但我也感觉到了久违的兴奋与激情。

之后就按照 Funtoo 的说明来。设置分区什么的,之前安装 ArchLinux 的时候弄过,还没忘。之后也没有什么难的,Funtoo 在 Gentoo 的基础上,添加了很多自动化的东西,比如自动编译内核、boot-update 等。中间没有让我参与配置的部分,一度上我很疑惑。编译内核耗费时间很长,由于我没接电源,也没有电量提示,结果电源耗尽了直接关机。我插上电之后,重新挂载分区,重新编译。最后重启前,我落下了 boot-update 没执行,重启后奇怪的无法引导,让我以为内核编的有问题,结果对照了说明才发现少做了一步。再次用引导优盘引导,执行了这个命令后,就可以正常启动了。

启动前我按照说明,安装 NetworkManager 的时候,出现了要给某些包添加 USE 标记的说明。我太久没有用 Gentoo 了,看了这些完全反应不过来,大约十分钟后才理解了意思。之后我安装上了 NetworkManager,但在执行时出了问题。看提示时,我以为是说我没有配置文件,我还上网上到处找这方面的说明,结果没有收获。之后我才明白提示信息后面跟着的 Invalid 什么的东西,不是 NetworkManager 的错误提示,而是内核的错误说明,意思时编译时的系统架构没有选对。这时我才质疑之前的决定。

安装前我看说明的时候,看到 Funtoo 针对不同的 CPU 做了特定的 stage3,我自然要下载特定的了,因为是最优化的。也许我受了某次 WWDC 上 Phil Schiller 的一句 Haswell 的影响,我对这台机器的 i5-5200U 一直以为时 Haswell 架构的,而且觉得 Haswell 比 Broadwell 更新,所以就下载了 Haswell 架构的 stage3。意识到是这里出了问题后,我赶紧上网搜索确认一下。Funtoo 没有针对 Broadwell 架构提供 stage3,我应该用的时 generic 的。这时候已经到深夜了,我只好先睡觉。脑子里想的解决方法,一个是重新安装,不过我明天白天上班的地方没有方便的有线网络,只好等下班回家;另一个方法,是重新编译 NetworkManager,因为内核什么的,还没有看出有什么问题,能够引导,把 GCC 的参数配置正确后,重新编译了 NetworkManager,有了无线网络,就方便了。第二天我起得不够早,就把电脑带去了单位,修改了 GCC 的参数,重新编译,结果问题解决。之后我不放心,重新编译了 @world,这样应该就把错误给解决掉了。

之后我安装了 Xorg,桌面还是用 i3。我在删掉 ArchLinux 改装 Windows 10 的时候,把一些配置文件做了备份,所以这些还不算困难。我还想到了,2007 年安装 Gentoo 的时候,还遇到过循环依赖的问题,需要手动调整某个 USE,现在也没遇到过这些问题。

这两天,我一直在捣鼓这个 Funtoo——它有许多我不了解的地方。比如在 ArchLinux 里,我已经习惯了 Systemd,包括通过它来调度一些应用,但 Funtoo 里的 OpenRC 就不行,想 MPD 这些守护进程,我不知道该怎么通过系统来调度。按说明里,还是用传统的 Cron 来做到开机启动。Funtoo 里默认安装了 Postfix,之前我用的 Msmtp,今天试着配置了一下,也可以发邮件了,而且有了之前没有配置的 Queue 功能。还有 NFS,之前在 ArchLinux 里也能用,但不能做到在 fstab 里添加说明直接挂载,在 Funtoo 里也莫名的配置成功了。当然,当中觉得 Funtoo 运行慢,无法达到 ArchLinux 的按开机按钮后 4 秒中出现登录提示的速度,我编译了几次内核,但到了 Initramfs 这里没有配置成功。最后安装了最新版的 debian-sources 后,启动速度达到 15 秒,也算是有所提高,等之后看看能否调优了。

对于 ArchLinux,我最怀念的就是他的 wiki,它也许时文档最为齐全的 Linux 了吧。Funtoo 和 Gentoo 的文档也差一截。之前 Gentoo 的 IRC 颇为活跃,当时张乐大神还活跃着,我这种普通用户心里还有点底,现在没有当时的心态了,有了问题,只能自己查资料。好在 ArchWiki 上的很多内容都通用,帮了我很多忙。

目前 Funtoo 多数处于能完成工作的状态了,还需要调整的有屏幕亮度等了,这些可以慢慢来。安装 Funtoo,对我来说有点想圆梦的感觉,园我 2008 年一直做到现在的 Gentoo 梦!这两天,我把大多数的精力都投入了这上面,对家人都有所疏忽,特别要感谢我马上要生产的妻子,对我无私的支持。