来尝鲜 KDBus 吧!

虽然这玩意现在还不被认为稳定, 而且有些东西用它之后工作不正常, 但是我还是想介绍一下 - 怎么说不折腾不舒服是吧!

首先介绍下 kdbus (及相关的用户态工具), 这玩意是 Greg KH (Linux 内核稳定版本负责人, 主要负责 kdbus 部分) 和 Lennart Poettering (混乱邪恶的 Avahi, Pulseaudio, Systemd 作者, 主要负责 libsystemd-bus 部分) 等大神写的, 用来在内核态实现一个 dbus 的实现, 而用户空间的 dbus-daemon (包括 session dbus) 则交由 libsystemd-bus 来提供(兼容)接口. 下面引用的介绍来自Solidot:

kdbus支持内核消息过滤、提供了可靠的次序保证,支持传送文件描述符,它被认为比用户空间的D-Bus能提供更强的安全性和更好的性能。

不过对于咱用户来说, 关心的主要问题当然是更好的性能啦, 根据一篇 Gentoo 的如何玩 kdbus 的介绍, 咱能感觉到的变化有: dbus 本身更快了! 机器启动也更快了!

下面就是 Arch 里测试的步骤啦, 其实很简单嗯.

1. 安装 kdbus-git 和 systemd-git (都在 AUR 里)

注意如果你用的是自定义的内核, 请修改 kdbus-git 的 PKGBUILD 里对应的部分. 默认的 PKGBUILD 应该只能在不开 [testing] 的默认内核里工作.

安装完成后, 跑一次 # depmod -a 来让模块生效

2. 新建文件 /etc/modules-load.d/kdbus, 里面只写一行 kdbus 即可

2.99. 注意, 如果你之前习惯于 eth0 eth1 这样的网卡命名并且因此 mask 了 80-net-name-slot.rules, 你需要重新 mask 80-net-setup-link.rules, 否则改名又会出现... (感谢 systemd-networkd 吧)

3. 重启!

我这里测试的结果是, --system 的 dbus-daemon 还在, 而 --session 的 dbus-daemon 没有了, 一大堆 systemd-bus-proxyd 进程出现了.

最后, 记一下我测试一些软件的结果:

调用 kdbus 正常工作: Fcitx, Pidgin, Chromium, Pulseaudio, ...
在 kdbus 下无法正常工作: kwallet, akonadi, ...

Arch Linux 折腾小记 – 申请 TU 通过后三个多月来我做了什么?

自从我申请 Arch Linux Trusted User 通过后:

我往 [community] 仓库添加了这些软件包(按先后顺序):

  • pyzy: 作为 ibus-pinyin 的新依赖引入, 拼音注音库
  • kcm-fcitx: Fcitx 输入法框架(下文简称 Fcitx)的 KDE Config Module (KDE 控制面板模块)
  • fcitx-cloudpinyin: Fcitx 的云拼音输入引擎插件 (注意这不是一个输入法哦! 在 fcitx 中各拼音输入法的第二个候选词的位置插入一个云拼音引擎的返回结果, 支持 QQ/搜狗/百度/Google 的云输入法 API)
  • fcitx-configtool: Fcitx 的经典配置工具, 基于 gtk3
  • fcitx-sunpinyin: 为 Fcitx 添加 sunpinyin (中文拼音)输入引擎支持 (词典相当智能, 强力推荐)
  • fcitx-anthy: 为 Fcitx 添加 anthy (日语)输入引擎支持
  • fcitx-chewing: 为 Fcitx 添加 chewing (繁体中文注音)输入引擎支持
  • libpinyin: 一个智能拼音输入引擎, 现在词典弱于sunpinyin
  • fcitx-libpinyin: 为 Fcitx 添加 libpinyin (中文拼音)输入引擎支持
  • ibus-libpinyin: 为 IBus 输入法框架添加 libpinyin (中文拼音)输入引擎支持
  • libgooglepinyin: 一个由 Android 上的 Google Pinyin Fork 出来的(中文拼音)输入引擎
  • fcitx-googlepinyin: (略, 你懂的)
  • ibus-googlepinyin: (同上)
  • cgminer: bitcoin (比特币) 的一个挖矿工具, 支持 CPU 和 GPU, 高效稳定, 各种推荐
  • opencc: 开源中文简繁转换库 (fcitx 的可选依赖)
  • fcitx-unikey: 为 Fcitx 添加 unikey (越南语)输入引擎支持
  • fcitx-m17n: 为 Fcitx 添加 m17n (多国语言码表)输入引擎支持
  • google-glog: Google 的一个 C++ 日志库, 作为  librime 的依赖引入
  • kyotocabinet: 一个 C++ 的 DBM 实现, 作为  librime 的依赖引入 (我才不知道这是神马呢)
  • librime: 中州韵, 一个(繁体为主)中文智能输入引擎, 支持拼音, 粤拼, 五笔, 注音等等
  • brise: librime 的词库
  • fcitx-rime: (略, 你懂的)
  • ibus-rime: (同上)
  • yamdi: BOYPT 大大 request 的一个 FLV 文件折腾器
  • ttf-hanazono: 一个免费的日语汉字库, 包括了超过8万(达到 Ext D 区)的汉字, 是覆盖汉字最全的免费字体(注意, 安装后有42M大哟)
  • pidgin-hotkeys: Pidgin 的全局热键支持插件
  • wqy-microhei: 大名鼎鼎的文泉驿微米黑
  • gtest: Google 的一个 C++ 测试框架, 作为 fcitx-rime 的编译依赖引入
  • fcitx-table-extra: Fcitx 的一些额外码表支持(包括仓颉3, 仓颉5, 粤拼, 速成, 五笔, 郑码, 还有一些我不认识的>.<)
  • fcitx-hangul: 为 Fcitx 添加 hangul (韩语)输入引擎支持
  • osdlyrics: 支持多款播放器的歌词显示插件
  • zinnia: 一个手写识别库, 作为 fcitx-rime 的依赖引入
  • fcitx-mozc: 为 Fcitx 添加 mozc (日语)输入引擎支持 (mozc 是 Google 日语输入法的开源版本)
  • pidgin-lwqq: Pidgin 的一个 webqq 协议插件, 已经支持群聊/收发图片/传文件/显示备注等等功能
  • python2-xapian: Xapian 索引库的 Python Bindings
  • python-pyquery/python2-pyquery: 一个像 jquery 一样的 Python 库
  • fbterm: 一个使用 frame buffer 设备或者 VESA 显卡的高速终端模拟器(重点是不用图形界面而且支持中文哦)
  • fcitx-fbterm: fbterm 里的 Fcitx 输入法支持
  • fcitx-ui-light: Fcitx 的轻量 UI
  • fcitx-table-other: Fcitx 的一些更奇怪的码表支持(包括 Latex, Emoji, 还有一大堆我不认识的>.<)
  • pep8-python2/pep8-python3: Python 的 PEP8 代码规范检查器
  • gtkhotkey: 一个 Gtk+ 程序的跨平台热键处理库, 作为 synapse 的依赖引入
  • synapse: 一个很赞的 Launcher (类似 Gnome-Do), 被 shellex 大大推荐了之后我就用上了
  • pastebinit: 一个用来上传点什么到某个 pastebin 的命令行工具
  • xnoise: 一个 Gtk+ 的媒体播放器
  • ydcv: (我自己写的)一个简单的命令行(联网)查单词程序, 调用有道词典的公共 API
  • python-bottle/python2-bottle: 一个(我公司在用的) Python Web 框架
  • sunpinyin/sunpinyin-data: 分包了一下 sunpinyin 的数据
  • recorditnow: yuyichao 大大 request 的一个 KDE 里的屏幕录制软件
  • pidgin-kwallet: Pidgin 的 Kwallet 支持插件
  • boinc/boinc-nox: 重新分包的伯克利开放式(志愿者)计算平台软件
  • goagent: (咳咳) 你懂的
  • python2-gevent-beta: Gevent 1.0 系列的 beta 版本, 作为 goagent 的可选依赖引入
  • fcitx-qt5: Fcitx 的 QT5 IM Module (截止发文时间这货还在 [community-staging] 里, 过几天(十几天?)才能出炉哦)

除了这些包外, 我还(参与)维护了这些已经在 [community] (或曾经在 [extra]) 里的包:

  • python2-greenlet
  • ibus-table
  • ibus-sunpinyin
  • ibus-pinyin
  • fcitx
  • ibus-chewing
  • mongodb
  • ibus-m17n
  • python-tornado/python2-tornado
  • python-sh/python2-sh
  • python2-gevent
  • stardict/stardict-lite
  • tcpflow
  • ibus-qt
  • stunnel

我在 aur-general 邮件列表处理了上百封(脑测的, 应该有吧?)邮件, 有关 AUR 包的删除/合并/Disown(这货怎么翻译呢)操作.

我在 IRC 里和 Arch 其他 TU/Dev 讨(tiao)论(xi)了各种奇怪的问(yong)题(hu).

我在 Arch Linux 中文社区… 参与折(wan)腾(huai)了一个 Minecraft 服务器 XD (咳咳)

我在 IRC #archlinux-cn 和百度贴吧 archlinux 吧回(tiao)答(xi)了各种奇怪的问(yong)题(hu).

(这篇本来打算跨年的时候写的, 不过各种懒拖到现在了…)

[Arch] 今日更新的 fcitx(-gtk2) 在 gtk2 应用中无法使用问题的解决与启示

今日更新了 fcitx, 许多用户反馈在部分应用程序中无法激活/使用, 虽然这类问题已经并不新鲜, 但是我觉得还是有必要说明一下.

首先, 这个问题从根本上是pacman的错(升级顺序混乱).

升级的时候你应该看到 fcitx-gtk2/fcitx-gtk3 的 installing 后面跟着个 error, 那就是因为, 存在下面的依赖链(以 fcitx-gtk2 为例):

最后的两个都在升级列表里, 而按照逻辑, fcitx-gtk2 需要在他们之后升级才是正常的, 但是 pacman 没有考虑这个问题(依赖链中间有两个未参与此次升级的包).

我今天中午收到反馈就 bump 了版本(在基友 yuyichao 的建议下更新了 fcitx-gtk2.install, 简单的 hack 了一下使得以后类似情况时不出现此问题), 现在你看到(或者装了)的应该是 -3 结尾的版本号. 但是即使升级后, 所有使用 gtk2 相关库的应用程序仍需重启才能生效.

因为类似情况并不是第一次出现了(以前有数次大规模 rebuild 后某些包不正常的情况), 基本上如果你在升级过程中看到有库链接错误/segfault/参数错误之类的提示, 在此次升级指令完成后把这些出错的包重新安装, 如果还有错, 继续安装有错的包直到没有错为止. 这样基本上可以解决大部分的此类问题.

另附此次我机子上 fcitx-gtk* 升级出错的 log 以便大家参考前文的分析 (无关包已去掉)

一句话检查自己 Arch 里装的 AUR 包是否和社区同步

我们知道 aurget yaourt 等工具可以解决普通升级的情况, 但是如果一个包改名了, 或者(不靠谱的)维护者降级了没加前置version, 这些工具不会给出任何提示. 如果没有关注自己使用的包的 comments (没有notify) 以及 aur-general 邮件列表的话, 常常会错过这样的信息, 以致自己机子上的包过期很久也没发现, 以后出现莫名其妙的问题什么的(

举例来说, aur/qtcreator-bin 被收入 [community] 一段时间了, 因为收入后改了名 (新名称是 qtcreator), 导致 yaourt 没有给我任何提示. 今天用下面的语句检查后我才发现, 自己机子里的 qtcreator-bin (版本2.3) 包已经不在 AUR 里了, 而[community-testing]/qtcreator 版本是2.6.0beta, 可见我这里的包已经过期许久.

和上次的小脚本一样, 我又用到了 GNU Parallel, 嗯就是这样(

简单的 Arch 第三方软件源自动化同步上传工具

首先解释下, 这玩意是给包维护者用的, 不是给普通用户的(
功能: 扫描自己维护的包列表, 同步所有包到远程软件仓库. 自动判断architecture. 如使用 yaourt, 需要配置 yaourt 输出到 pacman 目录, 或者手动修改工具里的路径.
PKGLIST格式: 一行一个包名.
PS: 因为用到了 GNU Parallel, 所以记得装一下嗯(

packageupload:

packagesync:

Archlinux – 安装 testing/glibc 2.16.0-2 时出现 “/lib exists in filesystem” 的一种处理方法

首先感谢falconindy提供的几个note, 这是我的解决思路的基础:

我遇到了和litemotiv一样的问题:
清理过/lib, 保证里面的文件都属于 glibc 后再次尝试升级:

我的问题的特殊点是: 我没有打开一个root权限的命令行, root密码登陆被禁用(所以我无法使用su root), 而且我无法使用上面说的ld-2.16.so去加载sudo(由于sudo本身的安全规则).

于是我琢磨出了下面的方法去修复这个已经挂掉的系统, 希望能帮到遇到类似问题的盆友:

  1. 重启, 编辑grub里linux(或kernel)开头的那行, 在尾部添加:
  2. remount文件系统使其可写:
  3. 移除空的(上面的错误会使它是空的) /lib 目录:
  4. 手动修复链接:
  5. 按 ctrl-alt-del 重启电脑, 然后用pacman重新安装一次glibc

然后各种东西都恢复正常了, 不需要使用恢复光盘之类的东西 🙂

参考: https://bbs.archlinux.org/viewtopic.php?pid=1126667#p1126667

给 Systemd 的操作加上 Bash 简写及其自动完成

大家都知道 systemd 启个服务打 systemctl start nginx.service 实在是长的难受(尽管有Tab…), 于是 ArchWiki 上有介绍一个简单用 start nginx 来代替的方法, 但是这个方法没有 Bash 自动补全, 于是我自己折腾了一下..

补全函数都取自他们各自原来的 bash-completion 文件, 我只修改了一点点(可惜不能复用啊..).

嗯, 照例上代码…
/etc/bash.bashrc, 或者 ~/.bashrc 里添加:

Continue reading 给 Systemd 的操作加上 Bash 简写及其自动完成

简易的默认网关保存+Bash补全解决方案 For Arch Linux

嗯, 本猫的脚本有多烂大大们都知道的, 所以本文旨在抛砖引玉, 简单介绍利用 pppd hook 和 dhcpcd hook 做到记忆网关, 以及 bash_completion 补全的实现.

保存用的脚本:
/usr/local/bin/froute-save

嗯..然后首先是pppd的hook, 代码如下:
/etc/ppp/ip-up.d/02-route.sh

/etc/ppp/ip-down.d/02-route.sh

然后是dhcpcd的hook.
/etc/dhcpcd.enter-hook

如果有用 netcfg 设置静态地址连接, 可以参考如下配置:

嗯, 现在记忆网关的部分就完成了 >< Continue reading 简易的默认网关保存+Bash补全解决方案 For Arch Linux

检查 /usr 目录哪些文件不在包管理里 For Arch Linux

当然改改里面的命令也就能用在其他发行版了= =
随手写的, 各种不靠谱勿喷哦><

ArchLinux 小白好奇看 (3)

1, 应用ubuntu的LCD补丁, 让字体不发虚!
从AUR里那高高的投票数就知道这几乎是个must-have feature了`~
使用这货让整个2D渲染都犀利起来, 尤其是中文字, 完全不发虚~~
安装方法:

一路上会继续自动安装 fontconfig-ubuntu, freetype2-ubuntu, libxft-ubuntu 这么几个带补丁的包(从aur里).
这个包提供了3种可选的优化方案, 可以用下面的方法选用其中一种:

来实现可选渲染方案的切换.
默认的方案名是 slight, 可选的方案名总共包括: slight medium full

2, 试一试systemd!
首先是安装:

然后…替换syslog-ng为rsyslog:

并编辑rc.conf, 把DAEMONS里的syslog-ngd改为rsyslogd.
然后在/boot/grub/menu.lst里对应启动项的kernel行后面加上

就行了!
最后…需要配置systemd使用service. 比如我使用kdm, 那么就需要:

在我的测试中, 经过多次反复比较, systemd比upstart启动略快(约1s), 但是启动后有些东东运行不正常(比如USB即插即用).
此外即使我启用了rc-local.service, /etc/rc.local在开机仍然不被执行, 这个也是有些奇怪的 = =
Continue reading ArchLinux 小白好奇看 (3)