Archive for the ‘Linux tips’ Category

Gmail的IMAP和Mutt

Posted by jcadam - 27/08/10 at 12:08 下午

今天我想说的还是Mutt的问题。一年以前我写了通过mutt使用gmail。现在再回头看这篇文章的内容已经有些老旧了,只好在感慨时光如梭的同时附上更新。电子邮件对我来说越来越重,相应的Mutt这个邮件客户端也是如此。就像Mutt的作者说的,所有的邮件客户端都很烂,只是Mutt烂的不那么厉害罢了。我希望这几篇文章有用。

之前的解决方法相当复杂,需要mutt, procmail, fetchmail和msmtp等等工具的配合,配置起来非常繁琐。使用了很久这个方法之后,我发现还是使用IMAP直接远程接入Gmail比较简便。但是也有相应的缺点,那就是,使用IMAP的话,你就不能在离线状态中使用mutt了。

配置Gmail的IMAP和Mutt一起工作,相比用fetchmail去pop3服务器上的邮件,这个方法主要更改以下几点:

  1. 配置Gmail的IMAP
  2. 设置远程服务器上的文件夹
  3. 设置本地计算机上的缓冲
  4. 设置远程服务器上的smtp服务

至于,邮件别名,色彩,和快捷键绑定等等,跟之前介绍的方法并无二致。

配置Gmail的IMAP
创建或者修改~/.muttrc

vi ~/.muttrc

添加如下几行来告诉mutt你是谁,这里设置的姓名和邮件地址将出现在你的邮件的头部;

set from = "yourusername@gmail.com"
set realname = "yourname"

接着,告诉mutt你Gmail邮箱和密码;

set imap_user = "yourusername@gmail.com"
set imap_pass = "yourpassword"

在初次启动mutt的时候,mutt会询问你是否接受认证文件,你只需要回答”Yes”就可以了。

设置远程服务器上的文件夹
Mutt可以自动的识别IMAP服务器上的邮件文件夹,所以这里其实不需要更多的动作。但是如果你想做一些自己的配置,可以采用下面的方法;

set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed ="+[Gmail]/Drafts"
set trash = "imaps://imap.gmail.com/[Gmail]/Trash"

设置本地计算机上的缓冲
在本地计算机上,你需要一个缓冲来保存文件头信息,以及TLS证书等;

set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates

别忘了创建相应的本地文件夹

mkdir -p ~/.mutt/cache

设置远程服务器上的smtp服务
设置smtp服务器用来发送邮件

set smtp_url = "smtp://yourusername@smtp.gmail.com:587/"
set smtp_pass = "yourpassword"

其他设置
告诉Mutt不要将邮件移动的mbox里,同时为了增强安全性,设置连续上线时间不超过900分钟;

set move = no
set imap_keepalive = 900

让mutt的配置文件成为“只读”属性。

chmod 700 .muttrc

配置结束。关于诸如色彩,快捷键,邮件编辑器等其他部分的配置,请参考我的mutt配置文件

嘿~,如果您喜欢我的博客,您可以通过RSS.链接将本博客的最新文章传输到您喜欢的阅读器。 Subscribe with Google 
订阅到鲜果 订阅到抓虾

配置Ubuntu Jaunty和双显示器一起工作

Posted by jcadam - 18/07/09 at 07:07 下午

OK. 这一篇的主旨只是为了记录我解决问题的过程。

关闭FrameBuffer设备

上周星期五,我以一千元人民币的价格淘到了垂涎已久的22存高清显示器。今天早晨送到家里,我自然是兴奋不已的打开看了。Ubuntu Jaunty启动之后可以很顺利的识别外接显示器,但是外接显示器的分辨率却不正确。使用xrandr查看,发现整个设备的大小受到限制。Thinkpad X61的spec上写的很清楚,整个图形卡的最大可表现区域是因该是外接显示器于笔记本固有显示器面积的总和,也就是2944×1080。使用xrandr -q查看,发现这个最大值并没有被正确设置。less /etx/X11/xorg.conf看到,配置文件中启用了FrameBuffer设备。立即恍然大悟。原来,早些日子,我在控制台上工作的时候,启用了FrameBuffer来获得更大的显示区域。为了支持这个控制台显示区域,X服务器只能割让一部分显示存储给FrameBuffer设备。要修改回来就是在内核参数行去掉vga=791选项——这个选项代表1024×768的FrameBuffer能力。并且,重新启动机器之后,利用sudo dpkg-reconfigure -phigh xserver-xorg来重新配制xserver。因为,从Ubuntu 8.10版本开始,这个发行版中启用了新的xserver,所以,大部分配置可以由xserver自动完成,不需要再手动更改xorg.conf配置文件了。重启xserver之后,我再用xrandr -q查看了设备能力,输入如下。这是保证双显示器expand输出的前提条件。

$ xrandr -q
Screen 0: minimum 320 x 200, current 2944 x 1080, maximum 4096 x 4096
VGA connected 1920x1080+0+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+
   1280x1024      75.0     60.0
   1152x864       75.0
   1024x768       75.0     60.0
   800x600        75.0     60.3
   640x480        75.0     59.9
   720x400        70.1
LVDS connected 1024x768+1920+0 (normal left inverted right x axis y axis) 246mm x 185mm
   1024x768       50.0 +   85.0*    75.0     70.1     60.0     40.0
   832x624        74.6
   800x600        85.1     72.2     75.0     60.3     56.2
   640x480        85.0     72.8     75.0     59.9
   720x400        85.0
   640x400        85.1
   640x350        85.1

配置双显示器expand表示

利用gnome-display-properties,我可以在这里动态的设置双显示的规格。有图为证。

如果这个方法受限,那么还有一个后背方案,就是采用Intel显卡驱动官方站的指南,采用xrandr来手动配置。

更新Mesa

设置双显示expand之后,我发现小显示器的一部分不能正确更新。初次看到这个现象的时候,我开始怀疑是不是设备能力有限,不能支持这么大的屏幕显示区域。但是仔细计算了一下,这种情况应该是不可能发生的。我的图形卡支持的最大输出是2944×1080,那么宽度上1920+1024不会超过这个2944,而长度来看768小于1080。那问题出在哪里呢?我尝试关闭了“桌面效果”,也就是启用metacity来取代compiz做窗口管理器。我发现这样的话两个屏幕都是可以被正确更新的。立刻想到问题应该处在3D表示的驱动上面。也就是作为3D表示基础库的Mesa有问题。找到关键词就很容易搜索了,google之。立刻发现这个问题是出现在mesa-7.4版本之中的bug。而这个bug已经被修复了。这个时候,我想是不是可以拿到mesa的源代码,然后给它打上补丁后重新package。于是立刻行动,我用apt-get source libgl1-mesa-dev libgl1-mesa-dri那到mesa的源代码,照猫画虎的打补丁。转念一下,这个问题应该已经有很多人遇到了,因为Jaunty发布已经有近4个月的时间,不会只有我遇到这个问题。于是乎,我在launchpad上搜索一下,发现果然有新版本的mesa可以使用。因为这个PPA提供的是unstable版本软件包,所以该PPA的作者声明拒绝外部资源直接给出该PPA的使用方法用来保证每个用户都可以读到警告信息。这里就不再说到底怎么使用了。如果你想在Ubuntu中使用fresh的xorg相关软件包,那么直接点下面的连接跳转过去看看吧。
https://launchpad.net/~xorg-edgers/+archive/ppa

经过以上步骤的折腾之后,我的Ubuntu就可以使用双显示器正常工作了。写代码的时候再也不需要挤在那个1024×768的显示器上用Alt+Tab换来换去了。还有就是玩企鹅滑冰有些就更爽了。(话外音:真浪费)同学,我听见了,虽然这个安装过程还是遇到问题多多,但是谁让俺自己愿意折腾呢?由此可证,所有的GNU/Linux用户都是那“吃饱了没事撑着”的某些人。


参考URL:
http://lists.freedesktop.org/archives/xorg/2008-April/034707.html
http://www.thinkwiki.org/wiki/Xorg_RandR_1.2#Summing_up
https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/146298

嘿~,如果您喜欢我的博客,您可以通过RSS.链接将本博客的最新文章传输到您喜欢的阅读器。 Subscribe with Google 
订阅到鲜果 订阅到抓虾

Emacs——很漂亮很强大

Posted by jcadam - 11/07/09 at 10:07 下午

Vim我用了5年有余,最近因为接触的项目非常大,大约10W行代码,而且该项目采用包括C和C++还有python的多种语言开发,突然让我觉得使用Vim有些应付不过来。我的主要任务并不是去查看系统细节,而是要在短时间内获得已有系统的情况——包括结构和功能上的信息,所以我需要一个比较强大的代码浏览程序。公司提供的软件库里面搜索了半天,找到十几款代码浏览工具竟然没有一款是我熟悉的。一狠心,我觉得尝试一下Emacs。或许Vim也能够胜任这个工作,但是我尝试拼凑了很久插件也没能找到符合工作需要的集合。总之,破釜沉舟,试一下Emacs。谁知道上手之后我竟然再也放不下Emacs了,彻底被这款编辑器的扩展性和强大功能征服。在使用了Emacs一个月以后,对于我的“重大发现”,我想还是留下一个记录比较好。

基础软件包


$ sudo apt-get install emacs-snapshot emacs-snapshot-common emacs-snapshot-bin-common emacs-snapshot-el emacs-goodies-el emacs-snapshot-gtk

漂亮的Emacs

我并不是个特别喜欢冒险的人,所以刚刚开始的时候,我选择了Emacs22。但是,后来发现,处理日语和中文的字体显示非常繁琐,索性放弃“保守派”的一贯作风,跃迁到还在开发中的Emacs23。在google上搜索得到Alexandre Vassalotti写的很流行的一篇博文Pretty Emacs,如法炮制,在Ubuntu 9.04上得到了一个让我基本满意的操作界面。这篇博文虽然有用但却非常简略,并没有详细说明CJK字体的反锯齿应该怎样处理。我尝试在~/.Xresource文件中使用包含日语和中文的字体,但是结果并不能让我满意,原因是日语和中文的汉字显示混在了一起,错别字太多。拜google所赐,最终还是找到了解决之法。证据在此。

在.emacs中需要使用字符集来将日语和中文的显示字符区别对待,代码如下:

;;;------------------------------------------------------------;;;
;;; VIEW
;;; No startup message
(setq inhibit-startup-message t)
;;; GUI font
(set-default-font "Bitstream Vera Sans Mono-12")
;;; JP fonts
(set-fontset-font (frame-parameter nil 'font)
		  'japanese-jisx0208
		  '("M+2VM+IPAG circle" . "unicode-bmp"))
;;; zh-CN fonts
(set-fontset-font (frame-parameter nil 'font)
		  'han
		  '("Vera Sans YuanTi Mono" . "unicode-bmp"))
;;;;===========================================================;;;;
;;; cjk-misc fonts
(set-fontset-font (frame-parameter nil 'font)
		  'cjk-misc
		  '("Vera Sans YuanTi Mono" . "unicode-bmp"))
;;; bopomofo fonts
(set-fontset-font (frame-parameter nil 'font)
		  'bopomofo
		  '("Vera Sans YuanTi Mono" . "unicode-bmp"))
;;; symbol fonts
(set-fontset-font (frame-parameter nil 'font)
		  'symbol
		  '("Vera Sans YuanTi Mono" . "unicode-bmp"))
;;;;=========================================================;;;;

“Vera Sans YuanTi”字体似乎涉嫌侵权,所以现在在互联网上已经难觅其踪,但是我还是非常喜欢这款合成字体,三四年前私自收藏了一直使用。在Ubuntu Jaunty上,读者可以尝试使用文泉驿等字体替代。或者,如果你拥有Windows的授权,使用微软雅黑也会有不错的效果。这里需要注意的是,Ubuntu 8.04或者更早版本上的emacs-snapshot提供的Emacs版本并不支持CJK字体的反锯齿显示。如果你使用比较早版本的Emacs23,可以尝试使用emacs.orebokech.com提供的WeeklyBuild。但是事先应该确认一下在Ubuntu的backport上有没有提供emacs-snapshot的软件包。下面是中文显示效果的截屏。

安装CEDET

CEDET是一整套开发环境的集合工具。包括工程管理,代码浏览和自动补全工具。但是,Ubuntu的软件频道中提供的版本并不能和Emacs23一起工作。详情可以看这个Debian的Bug#525613。我的解决办法是采用新的CEDET版本。

$ wget http://sourceforge.net/projects/cedet/files/cedet/cedet-1.0pre6.tar.gz/download
$ tar zxf cedet-1.0pre6.tar.gz
$ cd cedet-1.0pre6/
$ make
$ make install-info
$ cd ../ && cp -a cedet-1.0pre6 /usr/share/emacs-snapshot/site-lisp/cedet

这里需要注意的是,必须将编译好的cedet拷贝到/usr/share/emacs-snapshot/site-lisp中,而不能仅仅将这个文件放到load-path中了事。原因是Emacs在初始化的时候,会利用这个目录中的subdirs.el来保证整个目录都添加进入load-path之中。接下来在.emacs中添加下面这几行就基本可以使用了,但是上手之后应该多查看info的内容找到更多的信息。在Emacs中利用组合键Ctrl-h i可以打开info,按s查找CEDET。

;;;-----------------------------------------------------------------;;;
;;; CEDET
;;;-----------------------------------------------------------------;;;
;; Load CEDET.
;; See cedet/common/cedet.info for configuration details.
(require 'cedet)

;; Enable EDE (Project Management) features
(global-ede-mode 1)

;; Enable EDE for a pre-existing C++ project
;; (ede-cpp-root-project "NAME" :file "~/myproject/Makefile")

;; Enabling Semantic (code-parsing, smart completion) features
;; Select one of the following:

;; * This enables the database and idle reparse engines
(semantic-load-enable-minimum-features)

;; * This enables some tools useful for coding, such as summary mode
;;   imenu support, and the semantic navigator
(semantic-load-enable-code-helpers)

CEDET非常强大,以至于很难几句话将这个工具讲清楚,但是经常查看info和多多实践,马上就会用的非常顺手。

后记

最近一些日子,我一直在看Emacs相关的内容。Emacs可以说不仅仅是一款编辑器,而是一个集成并且可以扩展的工作环境。很多年轻的程序员,包括我自己,总是在各种各样的工具之间跳来跳去,一方面可以是因为自己不够坚定,但另一方面只能说很多工具都有自己的局限性,当程序员遇到新的情况的时候就可能很自然的抛弃旧工具。Emacs却不同,它更像一个framework,你可以将自己的技巧,使用习惯以及效率提升工具全部集成其上。如果它不够用了,你可以自己动手写lisp对它进行扩展。又想起那句话,人们往往高估自己短期的能力而低估自己长期的积累。Emacs正是给这种积累提供一种可能性。也许这正是对我来说最要命特性。我的.emacs文件在这里

嘿~,如果您喜欢我的博客,您可以通过RSS.链接将本博客的最新文章传输到您喜欢的阅读器。 Subscribe with Google 
订阅到鲜果 订阅到抓虾