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

FreeBSD下Vim的语法高亮与自动补全

FreeBSD下Vim的语法高亮与自动补全

vim 是与 emacs 齐名的超级编辑器(二者的使用哲学不同,没有高低贵贱之分)。我喜欢将 /usr/local/share/vim/vim73/colors/torte.vim 中的 ctermbg 设置为 NONE,这样 vim 就使用桌面背景显得“透明”(当然,这是假透明)。

vim 的功能十分强大,语法高亮和命令的自动补全更是不在话下。下面,我们逐一介绍它们。我们所用的 vim 版本在 7.0 以上。

语法高亮

下面,以矩阵计算工具 octave 和符号计算工具 maxima 为例,说明如何使编程语言在 vim 中语法高亮。

Octave 在 vim 中的语法高亮

我们怎么设置才能使得 vim 在编辑 foo.m 和 foo.oct 文件时做到语法高亮呢? 首先,找到文件 filetype.vim,打开它,看看后缀为 .m 和 .oct 是否被其他程序占用。 在我的 FreeBSD 中,.m 的后缀果真被 matlab 占用。matlab 没有 BSD 版本,我的机器上也没装 matlab 的 linux 版,所以干脆就把文件 filetype.vim 中的 matlab 替换为 octave。特别地,把 “*.oct” 加到 “*.m” 之后

" Octave or Objective C
au BufNewFile,BufRead *.m,*.oct         call s:FTm()

func! s:FTm()
  let n = 1
  while n < 10
    let line = getline(n)
    if line =~ ‘^\s*\(#\s*\(include\|import\)\>\|/\*\)’
      setf objc
      return
    endif
    if line =~ ‘^\s*%’
      setf octave
      return
    endif
    if line =~ ‘^\s*(\*’
      setf mma
      return
    endif
    let n = n + 1
  endwhile
  if exists("g:filetype_m")
    exe "setf " . g:filetype_m
  else
    setf octave
  endif
endfunc

把文件 octave.vim 拷贝到 syntax/matlab.vim 所在的目录。

maxima 在 vim 中的语法高亮

我希望所有后缀为 .mxm 的文件都被当做maxima文件语法高亮。

首先确保 maxima.vim 文件存在于 /usr/local/share/vim/vim72/syntax 目录下。编辑文件/usr/local/share/vim/vim72/filetype.vim,加入语句

" Maxima
au BufNewFile,BufRead *.mxm         setf maxima

命令的自动补全

到/usr/local/share/vim/vim72/autoload/目录下,看系统为哪些环境提供了命令的自动补全。也可以 locate ccomplete.vim,找到这个目录。

FreeBSD7.0下有ccomplete.vim、htmlcomplete.vim、……。然后,我们在 $HOME/.vimrc 中加入

"""""""""" 自动补全命令 """"""""""
autocmd Filetype c      set omnifunc=ccomplete#Complete
autocmd Filetype html   set omnifunc=htmlcomplete#CompleteTags
autocmd Filetype xml    set omnifunc=xmlcomplete#CompleteTags
autocmd Filetype python set omnifunc=pythoncomplete#CompleteTags
autocmd Filetype tex    set omnifunc=syntaxcomplete#Complete

.vimrc 的设置

$HOME/.vimrc 的普通设置,如下。

set nocompatible  "" not compatible with VI
set spell         "" highlight the typos
"" 在 vim 中查英文单词
nmap <C-\> : !sdcv -n <C-R>=expand("<cword>")<CR><CR>

"" Encodings and fonts
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set langmenu=zh_CN.UTF-8
language messages zh_CN.UTF-8
set guifontset=wenquanyi,-*-16-*-*-*

"" Tab and Backspace
set sw=2
set tabstop=4
set shiftwidth=4
set cindent
set smartindent
set autoindent
set backspace=indent,eol,start  "" set backspace

"" Display
set number        "" show line number
set ruler         "" always show current position
set cursorline    "" highlight the current line
set showcmd

"" Searching
set ignorecase    "" search setting
set incsearch
set hlsearch
set showmatch
set history=100
highlight Search term=reverse ctermbg=4 ctermfg=7

"" Syntax and color scheme
syntax enable
filetype plugin indent on
highlight Comment ctermfg=darkcyan
colorscheme torte

"""""""""" 自动补全命令 """"""""""
autocmd Filetype c      set omnifunc=ccomplete#Complete
autocmd Filetype html   set omnifunc=htmlcomplete#CompleteTags
autocmd Filetype xml    set omnifunc=xmlcomplete#CompleteTags
autocmd Filetype python set omnifunc=pythoncomplete#CompleteTags
autocmd Filetype tex    set omnifunc=syntaxcomplete#Complete

原文链接:http://wiki.freebsdchina.org/software/v/vim

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 Ports 之间的依存关系及其管理

FreeBSD Ports 之间的依存关系及其管理

用过 FreeBSD 的朋友对 FreeBSD 的 ports 管理认识颇深,它让我们从来不苦恼于“装软件”。FreeBSD 会自动地下载所需的 ports 并安装它们,这是为什么很多使用 GNU/Linux 的朋友在了解到 FreeBSD 后义无反顾地加入 FreeBSD 阵营,包括我。

本 wiki 还要说一说不仅如此,FreeBSD 让我们从来不纠结于“不干净的卸载”。

ports 间的复杂关系

各种各样的 ports 之间可以有复杂的依存关系,如果用有向图画出来,它一定是 DAG (有向无圈图)。拿随机模拟软件 mcmc-jags-3.2.0 为例,安装它必须安装它的子孙节点。

FreeBSD Ports 之间的依存关系-1

如何干干净净地删除一个 port?

如何删除 ports?通常的做法是去那个 port 执行 make deinstall clean。可是,如果那个 port 还关联着一些“不再有用的” ports。举个例子,卸载了 jags 后,如果你同时也想卸载 “孤零零的” lapack,该如何做呢?总不至于去搞清除所安装的 ports 之间的复杂关系吧?拿随机模拟软件 jags 和 fbm 为例,它们的依存关系是这样的。

FreeBSD Ports 之间的依存关系-2

两个 ports 及其关联 ports 的关系就可以如此复杂,何况你安装的如此众多的 ports!苍天啊,大地啊,哪位天使姐姐能帮我一把啊?

有一个 port 可以帮助你,它就是 pkg_cutleaves!这是一个小巧的工具,它能生成你所安装 ports 中所有的“终极节点”,只需命令

# pkg_cutleaves -lxg

有关这些节点的信息存放在文件 /usr/local/etc/pkg_leaves.exclude 之中。一旦你不喜欢其中某个节点,可以在文件 pkg_leaves.exclude 中将之删除,然后运行

# pkg_cutleaves -Rxg

你猜怎么着?系统删除了该节点及其所有与之关联的“孤零零”的 ports,而不影响其他“终极节点”及其关联的 ports。pkg_cutleaves 催马过去,把敌人及其孤立党羽杀了个干干净净!

我多么希望我的大脑里也有一个这样的工具,把不美好的记忆删除得干干净净,然后更新一下,重新开始生活。

如何重建 ports 间的依存关系?

用 portmaster 重建 ports 间的依存关系,只需

# portmaster –check-depends

见识某些 ports 的依存图

最后分别见识一下 zh_cn-freebsd-doc,emacs 和 maxima 的依存图,感受一下 FreeBSD ports 的复杂关系,顺便惊叹一下 FreeBSD 在这些复杂关系上纵横驰骋的强大。FreeBSD 是位有内涵的美女,处之愈久,就愈爱她,但愿她能陪我到老。我还不了解她的姊妹 OpenBSD 和 NetBSD,虽然传说中她们也很美。

FreeBSD Ports 之间的依存关系-3

 FreeBSD Ports 之间的依存关系-4

FreeBSD Ports 之间的依存关系-5

原文链接:http://wiki.freebsdchina.org/software/p/pkg_cutleaves