FreeBSD 下双显示器的设置

双显示器的好处,除了吸引妹妹羡慕的眼光,的确还是有一些的。譬如,同时使用多个显示器进行工作的好处和不利

实验室的朋友们都转向大屏幕了,淘汰了一些同类型的显示器被我捡了来。我想在FreeBSD下搞一个双显示器来娱乐一下自己,活跃一下单调乏味的码字生活。

Windows 下设置双显示器只需要点点鼠标,FreeBSD 下则需要修改 xorg.conf。当然,过程并不复杂。这个帖子就是我设置双显示器的经验记录,希望对您有所帮助。

第一步:观察显卡和显示器接口

一般台式机的显卡和显示器都提供VGA和DVI接口,或者两个VGA,或者两个DVI,或者一个VGA一个DVI。根据实际情况,选择连线。我的DELL机器是一个VGA一个DVI,所以我准备了一条 Male-Male VGA 线,一条 Male-Male DVI-D 线。(看完这一段,明白了你的码字生活真的好乏味)

DVI线有三种,科普知识见DVI接口。例如,“DVI-I支持数字/模拟转换的接口类型,倘若显示器只有一个DVI接口,那就会搭配支持数字/模拟两种模式的DVI-I。假如显示器有DVI和VGA两种接口,则搭配DVI-D。”

第二步:在 FreeBSD 下查看接口信息

把线连上以后,要查看一下接口的信息,可以用 xrandr 命令。我的机器显示如下信息:

IOU@~$ xrandr 
Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 2560 x 1024
VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024      60.0*+   75.0  
   1152x864       75.0  
   1024x768       75.0     60.0  
   800x600        75.0     60.3  
   640x480        75.0     59.9  
   720x400        70.1  
DVI-0 connected 1280x1024+1280+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024      60.0*+   75.0  
   1152x864       75.0  
   1024x768       75.0     60.0  
   800x600        75.0     60.3  
   640x480        75.0     59.9  
   720x400        70.1  
S-video disconnected (normal left inverted right x axis y axis)

第三步:设置 xorg.conf

两个显示器分别起名为 VGA-0 和 DVI-0。有些配置文档说,要设置两个显示器的位置关系,哪个在哪个的左边。在 xorg.conf 里我尝试着没设置,结果是缺省地,VGA-0 应该放在 DVI-0 的左侧,这样鼠标在两个显示器里移动才符合正常人的习惯。如果非要设置,可以

root@~# xrandr --output DVI-0 --right-of VGA-0

我的 xorg.conf 设置如下,根据实际情况,你可能需要局部地修改。Have fun with your dual monitors!

Section "ServerFlags"
        Option         "AutoAddDevices" "Off"
        Option         "Xinerama" "True"
EndSection

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
        FontPath     "/usr/local/lib/X11/fonts/wqy/"
        FontPath     "/usr/local/lib/X11/fonts/misc/"
        FontPath     "/usr/local/lib/X11/fonts/TTF/"
        FontPath     "/usr/local/lib/X11/fonts/OTF"
        FontPath     "/usr/local/lib/X11/fonts/Type1/"
        FontPath     "/usr/local/lib/X11/fonts/100dpi/"
        FontPath     "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
        Load  "extmod"
        Load  "record"
        Load  "dbe"
        Load  "dri"
        Load  "dri2"
        Load  "glx"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/sysmouse"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Device"
        Identifier  "Card0"
        Driver      "radeon"
        VendorName  "Advanced Micro Devices, Inc. [AMD/ATI]"
        BoardName   "RV370 [Radeon X300]"
        BusID       "PCI:1:0:0"
EndSection

Section "Monitor"
        Identifier   "VGA-0"
        VendorName   "DEL"
        ModelName    "DELL 1703FP"
        Option       "DPMS"
EndSection

Section "Monitor"
        Identifier   "DVI-0"
        VendorName   "DEL"
        ModelName    "DELL 1703FP"
        Option       "RightOf" "VGA-0"
        Option       "DPMS"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "VGA-0"
        SubSection "Display"
                Viewport   0 0
                Virtual   2560 1024
                Depth     24
                Modes     "1280x1024"
        EndSubSection
EndSection

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen         "Screen0"
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
        Option         "AIGLX" "True"
        Option         "DRI2" "True"
EndSection

Section "DRI"
        Group 0
        Mode 0660
EndSection

Section "Extensions"
        Option  "Composite" "Enable"
EndSection

补充

后来,换了台主机,intel 的显卡。还是同样的步骤,只是 BusID 不太一样,需要改一下。其他的就没有什么要补充的了。

效果图

效果图以后有机会再上。

小屏幕练就斗鸡眼,宽屏幕练就散光眼。双显示器的确锻炼使用者的注意力,初级阶段是左眼看左屏幕,右眼看有屏幕;高级阶段是左眼看右屏幕,右眼看左屏幕。我希望通过锻炼,能够练就两只火眼金睛,有助于我申请保安里的高档职业—盯监视器。一大堆屏幕摆在面前,保证不放过一个美女。

在 Emacs 里阅读 RSS

在 Emacs 里阅读 RSS
在 Google Reader 里定制和阅读 RSS 本来就很方便,为啥还需要在 Emacs 里费力不讨好地做同样的事情呢?作为顶级禽兽,“无利不起早”是一条真理。

一个重要的原因是为了看英文新闻,用 sdcv 查单词方便一些,点击组合键就搞定了。当然,在 Windows 里装一个盗版的金山词霸,用鼠标点点也能做得到。FreeBSD 的屁民以折腾和自虐为乐,“键盘党”和“鼠标帮”在 FreeBSD 的群落里乐此不疲地内斗。其实,都是浮云。呵呵……

Emacs-w3m

有人喜欢用 Emacs23 里自带的 Gnus 来定制 RSS,Gnus 固然强大,然而用 newsticker 更简单一些。

因为 newsticker 仅仅提供标题和链接,我们用 Emacs-w3m。w3m 是日本人开发的一款优秀的网页文本浏览器,可以在 Emacs 里调用。FreeBSD 提供了 Emacs-w3m 的 port。下面,分别是 w3m 和 Emacs-w3m 的效果图。文本浏览器,效果自然有折扣。可以在 Emacs 里加图片,可我觉得那样就没意思了,不如直接用 Opera。

如果终端是 UTF-8 编码,用 w3m 打开中文网页可能会遭遇部分显示为乱码的尴尬。这时,按 o 键,转到 Charset Settings,关闭 Automatic charset detect when loading 选项。

在 Emacs 里阅读 RSS

有人形容 Emacs 是“伪装成编辑器的操作系统”。不管怎样,Emacs 是强大的。

在 Emacs 里阅读 RSS

用 newsticker 定制 RSS

下面是我的 RSS 定制,有华盛顿邮报,还有一些期刊的 RSS。

;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                                                     
;;; emacs-w3m reads RSS ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq newsticker-url-list
‘(("Washington Post" "http://feeds.washingtonpost.com/rss/world")
     ("ScienceDaily" "http://www.sciencedaily.com/rss")
     ("PAMI" "http://csdl.computer.org/rss/tpami.xml")
     ("Knowledge Mining" "http://csdl.computer.org/rss/tkde.xml")
     ("Learning Technologies" "http://csdl.computer.org/rss/tlt.xml")))
(autoload ‘w3m-region "w3m" nil t)
(setq newsticker-html-renderer ‘w3m-region)

在 Emacs 里调用 sdcv 查英文单词

sdcv 是 stardict 的命令行。下面的配置参考了网上的资料,在以前的帖子里也介绍过。这里,不嫌冗余地再贴一次。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                                  
;; 调用 stardict 的命令行接口 sdcv 来查辞典   ;;
;; 如果选中了 region 就查询 region 的内容     ;;
;; 否则就查询当前光标所在的词                 ;;
;; 组合键:C-c d                             ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key (kbd "C-c d") ‘SearchStardict)
(defun SearchStardict ()
  (interactive)
  (let ((begin (point-min))
        (end (point-max)))
    (if mark-active
        (setq begin (region-beginning)
              end (region-end))
      (save-excursion
        (backward-word)
        (mark-word)
        (setq begin (region-beginning)
              end (region-end))))
    (message "%s"
     (shell-command-to-string
      (concat "sdcv -n -u XDICT英汉辞典  "
       (buffer-substring begin end))))))
效果图

在 Emacs 里键入:M-x newsticker-show-news,便可以阅读定制的 RSS 新闻了。可以方便地查单词,查过的单词存在 ~/.sdcv_history 里。新闻文件存在 ~/.emacs.d/newsticker 里。

在 Emacs 里阅读 RSS

在 Emacs 里阅读 RSS

原文链接: https://wiki.freebsdchina.org/doc/r/rss

FreeBSD 用 mplayer 显示摄像头捕捉的影像

FreeBSD 用 mplayer 显示摄像头捕捉的影像

现在很多的笔记本、上网本上都内置了摄像头,或者可以外接USB摄像头。FreeBSD 提供了 /usr/ports/multimedia/webcamd 来启动各种型号的摄像头,它的安装不再赘述。

浏览 webcamd 捕捉到的动态影像可以有多种方法,最简单的是用 pwcview。此外,还有其他备选的方法,例如,http://www.rockafunk.org/ 给出了 camorama、camserv、effectv、guvcview、luvcview、mencoder、mjpg_streamer、motion、mplayer、uvc_streamer、uvcview、wxcam、xawtv、zoneminder 等效果图。

我的多媒体(音频和视频)工具是 mplayer,看电影、听音乐、打开流媒体都是它。私下认为 mplayer 的综合素质是最好的,所以我不会重复建设再装其他的工具来浏览摄像头影像。本文介绍如何用 mplayer 显示 webcamd 捕捉到的动态影像。

准备工作

假设机器上已经安装了 webcamd 和 mplayer。需要提醒的是,mplayer 除了缺省的 config 选项外,必须选上 V4L 一项。
通过 dmesg 搞清楚摄像头设备名,譬如,我的 Acer AOD 257 上网本的是
ugen3.3: <Chicony Electronics Co., Ltd.> at usbus3

启动 webcamd

以 root 运行

webcamd -d ugen3.3 -v 0

系统会提示

Attached ugen3.3[0] to cuse unit 0
Creating /dev/video0

即,生成了设备 /dev/video0。以 root 运行

root@~# chmod 666 /dev/video0

用 mplayer 显示 webcamd 捕捉到的动态影像

运行下面的命令即可。

mplayer -tv driver=v4l2:width=352:height=288:device=/dev/video0 tv://

效果图

举着上网本对着我的桌面来一张截屏。

FreeBSD 用 mplayer 显示摄像头捕捉的影像

原文链接:http://wiki.freebsdchina.org/software/w/webcamd

FreeBSD 下 Skype 的设置

FreeBSD 下 Skype 的设置

如果有摄像头,要在config里选中VIDEO,系统会自动装上webcamd。

安装结束后,以root编辑

# vi vi /usr/local/bin/skype

添加或者将原有的修改为

#!/compat/linux/bin/sh
LD_PRELOAD=/usr/local/lib/libv4l/v4l2convert.so /usr/local/share/skype/skype –resources=/usr/local/share/skype $@

摄像头 Webcamd 的設置

为了使得webcamd在卡机时启动,在/boot/loader.conf中添加

cuse4bsd_load="YES"

同时,在/etc/rc.conf里添加

webcamd_enable="YES"

这样,开机后即可发现设备/dev/video0启动。然而,skype并不能调用设备/dev/video0,必须以root修改该设备的属性后skype>才能获取该设备。

# chmod 666 /dev/video0

也可以自动修改设备属性,但我认为,为了安全起见还是手动地修改为好。

聲音設備的設置

麥克、揚聲器、振鈴都選用 oss。

用 mixer 命令在虛擬終端查看麥克風是否打開。譬如,

IOU@~$ mixer
Mixer vol      is currently set to  70:70
Mixer pcm      is currently set to  75:75
Mixer mic      is currently set to  80:80
Mixer mix      is currently set to  75:75
Mixer rec      is currently set to 100:100
Mixer igain    is currently set to   0:0
Mixer ogain    is currently set to  50:50
Recording source: mic

如果麦克风没有打开,可以

IOU@~$ mixer mic 80

原文链接:http://wiki.freebsdchina.org/software/s/skype

在 FreeBSD 里我们轻松对付英文

在 FreeBSD 里我们轻松对付英文

英语是世界语,但对那些母语非英语的人们,做到熟练的读写和交流往往需要长时间的学习。

FreeBSD 提供了一些 ports,帮助我们对付英文。它们是

chinese/stardict-dict-zh_CN (英汉和汉英辞典)
textproc/sdcv (命令行查辞典)
textproc/queequeg (英文语法检查)
aspell (英文拼写检查)
reciteword(背英文单词的工具,delphij老大维护的)

我不太推荐在FreeBSD环境安装机器翻译引擎,因为现在有很多的在线服务,如 google、百度、Yahoo(babel fish)等。

随着世界文化交流的日益频繁,跨语言交流早晚要成为主流,高质量的机器翻译服务必将成为竞争之地。

日本有公司为手机通讯提供机器翻译的后台服务,这边讲日文,那边出英文。我试过它们的产品,虽然翻译质量还很幼稚,但这种服务平台已经搭建起来,只待机器翻译的研究能跨上几个台阶达到实用水平。

用 aspell 检查单词拼写

如果你使用 bash,请在 .bashrc 里加入

alias spell="aspell –lang=en -c"

检查英文文本 sample.txt 里英文单词的拼写,只需

IOU@~$ spell sample.txt

vim 里对付英文

在 .vimrc 里加入下面的设置。在 vim 里,将光标放在欲查的英文单词上,键入 ctrl+\,则 sdcv 将查阅英汉辞典,给出中文解释。

set spell         "" highlight the typos
nmap <C-\> : !sdcv -n <C-R>=expand("<cword>")<CR><CR>

emacs 里对付英文

增加 emacs 的设置,

;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                                                     
;; Automatic spell check ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq-default ispell-program-name "aspell")
(autoload ‘flyspell-mode "flyspell" "On-the-fly spelling checker." t)

用 qq 检查英文语法

在 FreeBSD 网站摘录一段话, FreeBSD® is an advanced operating system for modern server, desktop, and embedded computer platforms. FreeBSD’s code base has undergone over thirty years of continuous development, improvement, and optimization. It is developed and maintained by a large team of individuals. FreeBSD provides advanced networking, impressive security features, and world class performance and is used by some of the world’s busiest web sites and most pervasive embedded networking and storage devices.

将之存为 sample.txt,然后用 queequeg 工具(简称 qq)来检查这段英文的语法。qq 有彩色的显示,来标注可能的语法错误。

IOU@~$ qq -Wall sample.txt
— sample.txt
sample.txt:0: … system for (modern server) , desktop …
sample.txt:0: (FreeBSD) Â ® …
sample.txt:0: … advanced operating (system) for modern …
sample.txt:0: … server , (desktop) , and …
sample.txt:0: … has undergone (over thirty years) of continuous …
sample.txt:0: … years of (continuous development) , improvement …
sample.txt:0: (FreeBSD) ‘s code …
sample.txt:0: … development , (improvement) , and …
sample.txt:0: … , and (optimization) .
sample.txt:0: … sites and (most pervasive embedded networking) and storage …
sample.txt:0: … , and (world class performance) and is …
sample.txt:0: FreeBSD provides (advanced networking) , impressive …
sample.txt:0: (FreeBSD) provides advanced …

原文链接:http://wiki.freebsdchina.org/doc/e/english

FreeBSD下remind的安装

FreeBSD下remind的安装

remind 是一款非常优秀的记事软件,它小巧却不失功能强大,凡是涉及时间表的事情都可以交给它来做。

下面我们将用它实现:开机时系统用语音或文字提醒今天要做的事情。步骤如下:

安装 remind

配置.reminders(我把这个文件放在/backup下,放在哪里无所谓,由用户自己定)如下:

###################################
# File: .reminders                #
# Reminder file for "remind"      #
#                                 #
# Usage:                          #
# vi /backup/.reminders           #
# chmod 644 .reminders            #
#                                 #
# To test:                        #
# remind -gaa /backup/.reminders  #
###################################
# Switch off the normal banner
BANNER Hello, IOU. Today is %w.

##########################
###### Things to do ######
##########################
REM Mon MSG The course of statistical machine learning.
REM Sat MSG The course of probability theory and mathematical statistics.
REM Sat MSG Meet the student.
REM     MSG The model of Bayesian kernel methods.

##################################
###### Sort the todo things ######
##################################
FSET sortbanner(x) iif(x == today(), "You have the following things to do.", "And, the other things %b.")

安装语音合成软件

安装 festival 和 festvox-kal16。或者 flite,它是 festival 的替代品,但体积小,效率高。

festival 是非常优秀的 text-to-speech(TTS)软件,爱丁堡大学的成果。 festvox-kal16 用的是 CMU 的词典(CMU 的语音合成和语音识别做的也特别好)。

配置 rc.conf

在/etc/rc.conf中加入

clear_tmp_enable="YES"

每次退出系统时清空 /tmp

脚本

在 /usr/local/etc/rc.d/ 中做脚本 VoiceRemind.sh,如下

#!/bin/sh
#/usr/local/etc/rc.d/VoiceRemind.sh
echo -n ‘ VoiceRemind’

case "$1" in
start)
  /usr/local/bin/remind -gaa /backup/.reminders > /tmp/.VoiceRemind
  ;;
stop)
  kill -9 `cat /var/run/remind.pid`
  ;;
*)
  echo "Usage: `basename $0` {start|stop}" >&2
  exit 64
  ;;
esac
exit 0

每次boot时,自动运行 remind 并将生成的显示存到 /tmp 下,这就是为啥要退出系统时清空 /tmp 了。当然,不这么做也行,毕竟“>”是创造新文件。不过清空 /tmp 也没啥坏处。 好了,试一下

remind /backup/.reminders | festival –tts

看是否好用。若有正确的语音提示,接着做下一步。否则,回头检查一下前面的步骤。

原文链接:http://wiki.freebsdchina.org/software/r/remind

musicpd + mpc:最简易的音乐播放器(FreeBSD)

musicpd + mpc:最简易的音乐播放器(FreeBSD)

musicpd 简称为 MPD,它是音乐伺服器。此文介绍如何在 FreeBSD 下用 MPC + MPD 听音乐,打造内存消耗最少,组合功能最强的音乐播放器。

为何选用 MPD + MPC?

在/usr/ports/audio 下有很多不错的音乐播放器,如 beep-media-player、mpg123 等。而我更喜欢 mpc(需要安装MusicPD),简洁是我选择它的理由。每次开机自动打开守护程序 MusicPD(简称 mpd),这如同一个潜在的点歌器,终端下用 mpc 就能选听自己喜欢的歌曲,不需要任何界面,也不必为音乐播放器单开一个桌面。

mpc 和 conky 结合,可以做出开机音乐;mpc 和 remind 结合用音乐来提醒某些事情,譬如用《生日快乐》提醒朋友的生日等。守护程序 mpd 就像一个功能强大的点歌器,你可以轻松地选择你喜爱的歌手、专辑,毫不逊于 GUI 的音乐播放器。mpc 是简洁的,用 mpc play 40,我可以从第 40 首歌曲开始,用鼠标哪有如此快捷呢。mpc 是弹性的,开个玩笑,mpc 能播素数序列的歌曲,2,3,5,7,9,11,13,……,试问天下哪个 GUI 的播放器能做到这一点?我们还可以用 conky 在桌面上显示 mpd 的情况,显示歌曲名,显示歌手名,显示播放进程等,设计我们自己的音乐播放器,够酷吧。

MusicPD 的安装

安装一点儿都不困难,只需记住一点:在 mpd 的 port 里通过 make config,或者直接修改 Makefile,选中“Support for id3v1 tag encoding”一项,这样才能让 conky 获取 mp3 文件中的一些信息,如 artist、title 等。我们将利用 conky 把 mpd 的状态信息显示于桌面上,做一个自己喜欢的音乐播放器界面。

对 mpd.conf 的配置

以root身份运行

# cp /usr/local/share/doc/mpd/mpdconf.example /usr/local/etc/mpd.conf

编辑 mpd.conf 如下:

music_directory        "/backup/multimedia"   ## 此处是音乐存放处                                          
playlist_directory     "/home/IOU/.mpd/playlists" ## 此处是mpd配置文件存放处
db_file                "/home/IOU/.mpd/mpd.db"    ## 这些都是用户自己设定
log_file               "/home/IOU/.mpd/mpd.log"
pid_file               "/home/IOU/.mpd/mpd.pid"
state_file             "/home/IOU/.mpd/mpdstate"
user                   "IOU"  ## 除了root用户,能操控mpd的其他用户
filesystem_charset     "UTF-8" ## “iconv  -l”一下,看系统支持的编码
id3v1_encoding         "GBK"
mixer_type             "software"
audio_output {
  type                 "oss"
  name                 "Sound Card"
}

有关 filesystem_charset 的设置,也可以通过

$ locale

来搞清楚。譬如,我选 eucCN 是因为

IOU@~$ locale
LANG=zh_CN.eucCN
LC_CTYPE="zh_CN.eucCN"
LC_COLLATE="zh_CN.eucCN"
LC_TIME="zh_CN.eucCN"
LC_NUMERIC="zh_CN.eucCN"
LC_MONETARY="zh_CN.eucCN"
LC_MESSAGES="zh_CN.eucCN"
LC_ALL=zh_CN.eucCN

其他设置

在 /etc/rc.conf 中添加

musicpd_enable="YES"

以 root 身份运行

# musicpd /usr/local/etc/mpd.conf

系统将自动搜索机器上的歌曲,并将信息存放于 /home/IOU/.mpd 下。

$ mpc listall | mpc add

将所有歌曲载入播放列表。在 console 下键入

$ mpc play 10

便开始从第10首歌曲开始播放。

也可以先查看一下有哪些艺术家的作品,

$ mpc list artist

譬如,在上面命令的结果中发现了“许巍”,而你现在想听他的歌。

$ mpc search artist 许巍 | mpc add
$ mpc play

就开始了我们的音乐之旅。

mpc 提供的搜索内容相当丰富,有

<any|Artist|Album|AlbumArtist|Title|Track|Name|Genre|Date|Composer|Performer
|Comment|Disc|MUSICBRAINZ_ARTISTID|MUSICBRAINZ_ALBUMID|MUSICBRAINZ_ALBUMARTISTID|MUSICBRAINZ_TRACKID>

有关mpc的命令行的细节,譬如搜索啦,音量啦,man mpc自己慢慢看吧。

原文链接:http://wiki.freebsdchina.org/software/m/mpd

FreeBSD下如何使用mutt连接gmail

FreeBSD下如何使用mutt连接gmail

电子邮件是一个很重要的通讯工具,很多人都有自己的电子邮件,google的gmail完全免费,而且空间很大,还允许用户使用客户端对其进行访问,这样就不需要直接登陆google的网站,非常方便,总之是优点多多。为了保证电子邮件的安全性,gmail的电子邮件服务器使用了SSL安全协议,目前多数图形界面的邮件客户端都直接支持这个协议,不需要用户进行某些特殊的设置,比如:Evolution。

这些图形界面的电子邮件客户端有许多优点,比如比较漂亮,比如很容易使用,可以很快的上手,但是也有一个共同的缺点:体积比较大,编译起来比较费劲。Mutt是一个非常小巧的电子邮件客户端,编译起来很容易,并且定制性非常的高,但是配置上稍微有点复杂,尤其是由于gmail使用了SSL协议,所以很多人在使用Mutt连接gmail的时候总是配置不好。

这个wiki页面主要介绍在FreeBSD系统下如何使用mutt将openssl、vim、gnupg、fetchmail、procmail、msmtp、ca_root_nss整合起来并连接到gmail,虽然是针对FreeBSD系统的,其中多数内容也适合各个Linux发行版本以及各个BSD分支,在其他系统上只需要做少量调整。

目标:

我们在这里,我们假设需要配置的gmail账号的详细信息如下:

gmail账号:fender0107401_2_gmail.com
gmail账号的密码:123456

其中:_2_等价于@,这么写是为了防止这个电子邮件被“机器人”给抓去了。

这个人订阅了很多FreeBSD的邮件列表,并且给每个邮件列表建立一个邮箱来保存,以此来方便自己管理自己的电子邮件,并且这个人不喜欢编译太大的软件,在经过几次对Evolution的编译以及升级之后,决定放弃Evolution而转向Mutt,于是乎他选择了mutt+fetchmail+procmail+msmtp+ca_root_nss+vim+gnupg这个解决方案,为了实现这个解决方案,他需要进行一些配置工作。在配置完成后,他决定把整个过程整理一下并写在wiki上,于是就有了这个wiki页面。

需要安装的port:

ca_root_nss:这port是第三方认证。
fetchmail:用来从gmail的邮件服务器上(pop.gmail.com)取回电子邮件(首先和服务器建立SSL连接);
procmail:由getchmail取会来的电子邮件,通过procmail进行分拣工作,分发的各自的邮箱去,比如你可以给freebsd-doc邮件列表单独制定一个邮箱,这样可以方便对邮件进行管理;
msmtp:用于发送电子邮件到gmail的邮件服务器(smtp.gmail.com)上去(首先和服务器建立SSL连接);
gnupg:用于对电子邮件进行加密,这样只有某个人才能察看文件的内容;或者是对电子邮件进行数字签名,这样别人可以通过你的gpg公钥开验证你的电子邮件是否被编辑过,如果被别人编辑过,数字签名验证就会失败。关于gnupg的加密模型或者说加密机制可以参考其主页:gnupg;
vim:用于编辑邮件,我是一个vim用户,几乎用vim和gvim写一切东西,写邮件虽然不需要什么太多高级功能,但是用习惯了,自然是选择vim来编辑邮件,你也可以指定任何一个你喜欢的编辑器来代替vim;
mutt:用于把上面的各个port串起来,或者说是集成起来。

SSL协议:

SSL是Secure Socket Layer的缩写,本质上一个协议,或者说是一个保证连接安全性的机制。所谓协议就是一个文本,目前有许多这个协议的实现方案,在开源世界里面我们自然使用开源的实现方案:OpenSSL。谈到OpenSSL这个SSL实现,我们应该感谢Eric Young和Tim Hudson这两个程序员,因为是他们开发并实现了OpenSSL。

为了保证能正确的配置成功,需要简单地了解一下OpenSSL这个协议在建立连接时需要哪些步骤,也就是客户端和服务器建立连接时“握手”的基本过程。

游戏角色:

客户端:提出建立ssl连接的人;
服务器:提供ssl服务的人;
第三方认证机构:第三方认证机构签发数字证书,客户端使用这个证书对服务器所发送来的公钥进行验证,保证的确是目标服务器。

游戏规则:

客户机对目标服务器提出建立ssl连接的申请,告诉服务器自己所能支持的加密方案;
服务器收到申请以后,从客户机所支持的加密方案里面选择一个最安全的,作为本次连接的加密方案;然后把自己的公钥发送给客户端;
客户端收到公钥以后,使用第三方认证来验证这个收到的服务器公钥,如果验证成功就使用这个收到的服务器公钥加密一个随机数后发送给服务器,作为对称加密的对称加密的密钥;
服务器接受到这个加密的随机数以后,使用自己的私钥解密,作为对称加密的密钥;
自此之后服务器和客户端之间使用对称加密来进行加密的通信连接,也就是连接建立成功了;
在上述过程中,任何一个环节的失败都会导致链接失败。

总结一下:首先使用“非对称加密”,然后使用“对称加密”;第三方认证机构确保用户在“非对称加密”过程中使用正确的服务器“公钥”;在“对称加密”过程中使用的“对称密钥”由“非对称加密过程”来传递。

注:

这是只是一个很简单的介绍,实际中连接的建立过程比这个要复杂一些,另外还可能有一些变化(用于减少服务器负担)。我看到过有人说SSL协议并不安全,我并没有仔细的研究过,但是从上面的“握手”过程来看,还是比较安全的,关于SSL的详细内容可以参考相关资料。

配置任务:

任务1:安装第三方认证

我最开始写这个wiki的时候,按认证是比较麻烦的,需要一些手工操作,现在要简单多了,只需要安装ca_root_nss这个port就可以了,这个port里面包含了很多的第三方认证。

# cd /usr/ports/security/ca_root_nss
# make install clean

安装的时候会问题是否”Add symlink to /etc/ssl/cert.pem”。

如果添加,那么/etc/ssl/cert.pem就是一个符号连结。

$ file /etc/ssl/cert.pem
/etc/ssl/cert.pem: symbolic link to `/usr/local/share/certs/ca-root-nss.crt’

任务2:安装并配置msmtp

安装:

安装方法:

# cd /usr/ports/mail/msmtp
# make install clean

注意一定打开GNUTLS的支持,我们需要使用这个协议来进行加密连接。

配置:

配置就是写.msmtprc这个文件,我的.msmtprc文件内容如下,使用时注意换成自己的账号和密码就可以了,还需要注意的是自己的第三方认证放在哪里了以及自己的msmtplog保存在什么地方,因为你可能选择和我不同目录:

# set default values

defaults

tls on

tls_starttls on

tls_trust_file /usr/local/share/certs/ca-root-nss.crt # 这里是设定认证文件的位置。

logfile /home/fender/Mail/.msmtp.log

# set my first account

account fender0107401

host smtp.gmail.com

port 587

from fender0107401_2_gmail.com

auth on

user fender0107401

password 123456

# set a default account

account default : fender0107401

注意,写好配置文件以后要修改文件的权限:

$ chmod 600 .msmtprc

现在:发邮件的问题解决了。

任务3:安装并配置fetchmail

安装:

# cd /usr/ports/mail/fetchmail
# make install clean

配置:

配置就是写.fetchmailrc这个文件,我的.fetchmailrc文件内容如下,使用时注意换成自己的账号和密码就可以了,还有就是要注意自己的第三方认证位置:

poll pop.gmail.com

port 995

proto POP3

user ‘fender0107401_2_gmail.com’

password ‘123456’

options

no keep

ssl

sslcertck

注意,写好配置文件以后要修改文件的权限:

$ chmod 600 .fetchmailrc

现在:收邮件的问题解决了。

任务4:安装并配置procmail

安装:

# cd /usr/ports/mail/procmail
# make install clean

配置:

我主要是接收各种订阅的电子邮件列表,通过procmail来进行分拣工作,我的.procmailrc配置文件如下,使用时注意调整目录设置:

################################################################################
PATH=$HOME/bin:/usr/bin:/usr/local/bin:

MAILDIR=$HOME/mail

LOGFILE=$MAILDIR/.procmaillog

################################################################################
# FreeBSD mailing list:
:0
* ^List-Id:.*freebsd-announce
1_freebsd-announce

:0
* ^List-Id:.*freebsd-security-notifications
1_freebsd-security-notifications

:0
* ^List-Id:.*freebsd-amd64
1_freebsd-amd64

:0
* ^List-Id:.*freebsd-doc
1_freebsd-doc

:0
* ^List-Id:.*freebsd-gnome
1_freebsd-gnome

:0
* ^List-Id:.*freebsd-performance
1_freebsd-performance

:0
* ^List-Id:.*freebsd-security
1_freebsd-security

:0
* ^List-Id:.*cnproj-cvs
1_cnproj-cvs

:0
* ^List-Id:.*cnproj-submit
1_cnproj-submit

################################################################################
# Gnu Octave mailing list:

:0
* ^List-Id:.*bug-octave
2_bug-octave
:0
* ^List-Id:.*help-octave
2_help-octave
:0
* ^List-Id:.*octave-maintainers
2_octave-maintainers

################################################################################
:0
* .*
3_default

################################################################################

关于procmail的语法可以参考FreeBSD Handbook中Electronic Mail的相关内容。

现在:分拣邮件的问题解决了。

任务5:安装并配置mutt

安装:

# cd /usr/ports/mail/mutt
# make install clean

配置:

mutt的配置工作主要是通过.muttrc来实现,详细的各种配置选项可以参考下述连接:

mutt_manual

muttrc_example

我把自己的.muttrc中一些比较基本的配置写出来,方便大家参考:

# Personal information
set hostname=PC-686.Workstation

定义系统名。

set realname=Li

定义用户名。

my_hdr From:fender0107401_2_gmail.com

定义我的电子邮件地址。

# sendmail
set sendmail="/usr/local/bin/msmtp"

定义msmtp来发送电子邮件。

# fetchmail and procmail
macro index G "!fetchmail -a -m ‘procmail -d %T’\r"

定义使用fetchmail来接受电子邮件,接受以后使用procmail来分拣邮件。

# GnuPG
source usr/local/share/examples/mutt/gpg.rc

使用gnupg。

set editor="vim"

定义vim作为我编辑器。

set index_format="| %4C | %Z | %{%b %d} | %-15.15L | %s"

定义index的显示方式。

set folder_format="| %2C | %t %N | %8s | %d | %f"

定义邮箱的显示方式,一定要有%N,否则没法知道哪个有新邮件。

.muttrc内容汇总:

# Personal information
set hostname=PC-686.Workstation

set realname=Li

my_hdr From:fender0107401_2_gmail.com

# sendmail
set sendmail="/usr/local/bin/msmtp"

# fetchmail and procmail
macro index G "!fetchmail -a -m ‘procmail -d %T’\r"

# GnuPG
source usr/local/share/examples/mutt/gpg.rc

set editor="vim"

set index_format="| %4C | %Z | %{%b %d} | %-15.15L | %s"

set folder_format="| %2C | %t %N | %8s | %d | %f"

注意事项:

必须打开防火墙,以我使用的ipfw为例,需要在防火墙规则中添加下述内容:
$cmd 00700 allow tcp from any to any 587 out via $nic setup $ks
$cmd 00800 allow tcp from any to any 995 out via $nic setup $ks

其中,$ks和$nic是我设定的变量,$ks的定义如下:

ks="keep-state"

$nic代表我的网卡,定义如下:

nic="re0"

mutt的配置选项很多,我没有都写出来,详细的可以参考下述连接。

mutt_manual

muttrc_example

后记:

现在,打开一个虚拟终端,比如gnome-terminal,然后运行mutt,

G将会下载你的邮件;
如果有新邮件mutt会在相应邮箱前显示一个N;
想发送邮件就按m,编辑以后使用p键可以使用gnupg对其签名;
我并没有写如何安装vim或者是如何使用gnupg,而是直接假设使用者知道如何使用gnupg,相关内容需要可以参考vim或者是gnupg的文档;
有意思的事情还有很多,需要慢慢的探索,我不能把mutt所有的功能都写出来,因为实在是太多太多了,可以定制显示的颜色,可以定义显示邮件的哪些部分,可以指定如何排序……
欢迎补充。

FreeBSD下安装LibreOffice

FreeBSD下安装LibreOffice

LibreOffice安装已经不需要依赖JDK了,所以有没有JDK没什么关系 软件比较大所以最好在有足够时间的情况下执行,本人曾因为中断编译导致出错,没找到解决办法,最后重新开始了。

安装

安装 OpenOffice.org

#cd /usr/ports/editors/libreoffice/ && make install clean

注意:如需简体中文版请加上LOCALIZED_LANG=zh-CN

#make LOCALIZED_LANG=zh-CN install clean

包括的组件

LibreOffice 3.3 Base
使用 Base 管理数据库并创建查询和报表,以对信息进行跟踪和管理。

LibreOffice 3.3 Calc
使用 Calc 进行计算、分析信息以及管理电子表格中的列表。

LibreOffice 3.3 Draw
使用 Draw 创建并编辑图形、流程图和徽标。

LibreOffice 3.3 Impress
使用 Impress 创建并编辑幻灯片、会议和网页中使用的演示文稿。

LibreOffice 3.3 Math
使用 Math 创建并编辑科学公式和方程式。

LibreOffice 3.3 Writer
使用 Writer 创建并编辑信函、报表、文档和网页中的文本和图形。

包安装和中文化

FreeBSD 8.2-RELEASE已经包含libreoffice的编译包,所以升级系统之后可以直接

#pkg_add -r libreoffice

省去了大量的编译时间(人生苦短)。不过这个编译包不含中文语言文件。

经实践可以采用Linux的中文语言包来支持中文化。 在这里http://download.documentfoundation.org/libreoffice/stable/3.3.0/rpm/

根据i386/amd64平台分别选择x86/x86_64。这里以amd64为例,下载

http://download.documentfoundation.org/libreoffice/stable/3.3.0/rpm/x86_64/LibO_3.3.0_Linux_x86-64_helppack-rpm_zh-CN.tar.gz

执行以下命令:

#tar -xvf LibO_3.3.0_Linux_x86-64_helppack-rpm_zh-CN.tar.gz
#cd LibO_3.3.0rc4_Linux_x86-64_langpack-rpm_zh-CN/RPMS/
#mkdir tmp
#cd tmp
#foreach f (`ls ../*rpm`)
foreach? rpm2cpio $f | cpio -i –make-directories
foreach? end
#cp -R opt/libreoffice/* /usr/local/lib/libreoffice/

打开你的libreoffice,啊,多么熟悉的界面!好好享受人生吧……

原文链接:http://wiki.freebsdchina.org/software/l/libreoffice

FreeBSD 8.0下安装QQ for Linux

国人的电脑上估计都离不开QQ这东东了,虽说这东东比较霸道,但我们还是在用它。以前非Windows用户是无法直接使用QQ的,现在QQ官方提供了Linux系统支持,但在FreeBSD系统上使用还是比较麻烦的。本文主要介绍FreeBSD 8.0下是如何安装QQ的。

一、开启 Linux 二进制兼容支持

# kldload linux

开机自动开启linux二进制兼容支持

vi /etc/rc.conf

linux_enable="YES"

二、安装Linux运行时库

# cd /usr/ports/emulators/linux_base-f10
# make install distclean

三、安装QQ for Linux

#cd /usr/ports/net-im/qq/ && make install clean

四、配置支持中文输入法(仅测试过FCITX)

#/compat/linux/usr/bin/localedef -i zh_CN -f UTF-8 zh_CN

 

参考资料:http://wiki.freebsdchina.org/software/q/qqforlinux