在Debian Lenny上安装Apache2,PHP5,MySQL5, WordPress…

这几天访问Easwy的博客非常慢,在上面调试程序变成了痛苦的折磨。于是干脆在自己的笔记本上安装一个Web服务器来调试吧。

我笔记本上安装了Debian Lenny,使用Debian确实是省心又省力,基本你只需要会用aptitude install就可以了,其它的事情,Debian全帮你做好了。在Debian上安装Apache Web服务器以及PHP5和MySQL非常简单,只需要按照下面的步骤:

安装Apache2:

aptitude install apache2 

这件命令安装apache服务器,安装完成后,Apache服务器的配置文件在/etc/apache2/,缺省的web服务器根目录在/var/www/,安装完后,你在浏览器的地址栏输入http://localhost/,如果可以看到It works!这样的内容,那么你的web服务器已经运行起来了。

接下来安装PHP5和MySQL5、Curl(HTTP工具)、IMAP(邮件检查)、GD (编辑和创建图像):

aptitude install libapache2-mod-php5 php5-curl php5-gd php5-imap php5-mcrypt php5-mysql php5-tidy 

接下来安装MySQL5服务器和客户端:

aptitude install mysql-server mysql-client 

MySQL的配置文件在/etc/mysql/my.cnf,在安装MySQL服务器的时候,会要求你输入root密码。

最后,安装PHPMyAdmin工具:

aptitude install phpmyadmin 

PHPMyAdmin会自动配置Apache服务器,安装完后,可以直接输入http://localhost/phpmyadmin/来访问PHPMyAdMin。

我们可以查看一下PHP的信息,以确信PHP已经运行起来了:

使用编辑器输入以下内容,把它保存成/var/www/phpinfo.php

<?php phpinfo(); ?> 

然后在浏览器地址栏输入http://localhost/phpinfo.php,你就可以看到PHP有关的配置信息。

接下来安装WordPress程序,安装步骤网上很多,不再详述。

出于安全起见,不打算使用MySQL中的root用户来访问PHP的数据库,所以使用PHPMyAdmin(访问方法见上)专门添加了一个数据库用户wordpress,并创建一个名为wordpressdb的数据库,给予wordpress用户对wordpressdb数据库的完全控制权。

创建完数据库后,把WordPress拷贝到/var/www/wordpress/目录下,修改配置文件wp-config.php,主要是配置数据库信息,然后到下面的地址完成安装:

http://localhost/wordpress/wp-admin/install.php 

现在,去访问你自己的WordPress吧。Everything is OK!

需要说明一下:

Debian Lenny中的缺省web server缺省使用www-data用户运行,所以,最好使用chown -R www-data.www-data /var/www/wordpress命令把WordPress目录的属主改为www-data。有些程序要求对目录有读写权限,其实就是希望www-data用户对目录有读写权限。

在Debian Lenny中配置中文

Thinkpad的红点驱动装好以后,就开始对中文进行配置。我配置中文按照如下步骤。

产生语系 (locale)

使用英文界面安装完后,系统所使用的locale是en_US.utf8,我们需要生成中文的locale。

如果没有安装locales,首先需要安装locales程序,Debian现在推荐使用aptitude来安装程序,它能比apt-get更好的解决软件包之间的冲突。

# aptitude install locales 

安装完locales后,就重新选择Debian所使用的语系,命令是:

# dpkg-reconfigure locales 

我选择了下面的locale:

  • en_US.ISO-8859-1
  • en_US.UTF-8
  • zh_CN.GB2312
  • zh_CN.GB18030
  • zh_CN.UTF-8
  • zh_CN.GBK
  • zh_TW.BIG5
  • zh_TW.UTF-8

不过我的缺省locale依旧设置为en_US.utf8,因为我更习惯于使用英文界面。在Linux中,即使使用英文locale,也能够很好的支持中文。

使用locale -a命令查看一下Lenny中的语系,在我的计算机上输出如下:

      # locale -a
      C
      en_US
      en_US.iso88591
      en_US.utf8
      POSIX
      zh_CN
      zh_CN.gb18030
      zh_CN.gb2312
      zh_CN.gbk
      zh_CN.utf8
      zh_TW
      zh_TW.big5
      zh_TW.utf8
    

配置好语系(locale)后,最好重新登录一次。

配置中文字体

接下来需要安装一下中文字体。在系统安装时,我已经选择了简体中文桌面(Simplified Chinese Desktop)和简体中文环境(Simplified Chinese Environment),这里面就包含了一些中文字体和中文应用程序,比如中文输入法。

在我的系统里安装了下面这些中英文字体包,主要参考了滇狐的字体配置:

  • ttf-arphic-ukai
  • ttf-arphic-uming
  • xfonts-wqy
  • ttf-bitstream-vera
  • ttf-mscorefonts-installer

上面的mscorefonts是Sourceforge上的一个项目,这是微软提供的Windows上的核心字体,允许用户下载使用。Debian Lenny提供了ttf-mscorefonts-installer这样一个包,这个包在安装时会自动到Sourceforge上下载mscorefont。因为很多Windows程序在mscorefont下显示比较美观,所以我们也安装这一字体。

安装了上述字体以后,再把滇狐提供的.font.conf(在上面滇狐的网页中下载)放在自己的HOME目录下。退出重新登录进来,Lenny的字体已经非常漂亮了!

下面贴两张图,一张是Debian Lenny刚刚安装完简体中文桌面和简体中文环境,未进行字体前的抓图,另外一张则是按上面的步骤进行了字体配置后的抓图,做一个比较。

配置中文输入法

Linux下中文输入法目前最常用的有两种,一个是scim,另外一个是fcitx。我更习惯于使用fcitx,所以这里以fcitx为例进行介绍。

在安装简体中文桌面时,其实已经安装了fcitx输入法,接下来配置一下就可以了。从理论上讲,使用im-switch应该可以很方便的在各个中文输入法间进行切换,可是我尝试了几次,即使使用im-switch -c把输入法切换到fcitx,还是不能启动fcitx,不知道是不是和我把LANG环境变量设置成en_US.UTF-8有关。没办法,还是按照网上流传的方法,编辑一个名为95xinput的文件,内容如下:

# easwy, 2009/03/15
export LANG="en_US.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export XMODIFIERS="@im=fcitx"
fcitx & 

在这个文件里,我把我的LANG设置为en_US.UTF-8,但把LC_CTYPE设置成zh_CN.UTF-8,这样在英文环境中也可以输入中文。接下来就是设置输入法,并启动fcitx。

把这个文件放到/etc/X11/Xsession.d/目录即可,在X启动时/etcX11/Xsession脚本会自动执行此文件,启动fcitx输入法。

安装Windows字体(可选)

如果想在Linux里使用windows的字体,可以以root身份按如下步骤操作:


mount -t ntfs /dev/sda1 /mnt
mkdir -p /usr/local/share/fonts/msfonts
cp /mnt/WINDOWS/Fonts/sim* /usr/local/share/fonts/msfonts/
chmod a+r /usr/local/share/fonts/msfonts/*
fc-cache /usr/local/share/fonts/msfonts/ 

上面的/dev/sda1是我的windows分区,你可以用fdisk -l查看一下你的windows分区是哪一个。因为windows分区一般都使用NTFS格式,所以在mount时要加上-t ntfs。上面的命令只拷贝了和简体中文相关的字体,我觉得Debian Linux下的英文已经比较好看了。

安装完后,用fc-list | grep -i sun查看一下,是不是宋体已经安装成功,在我的计算机上输出如下:

新宋体,NSimSun:style=Regular
宋体\-PUA,SimSun\-PUA:style=Regular
宋体,SimSun:style=Regular
文鼎PL简报宋,AR PL SungtiL GB:style=Regular
  

在滇狐的.font.conf中已经加入了对宋体和新宋体的支持,所以不需再进行配置就可以使用。

我在安装完windows字体后,在启动firefox时会出现下面的错误提示:

......
(firefox-bin:4411): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is 'SimSun Bold 18'
(firefox-bin:4411): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is '宋体 Bold 10.771484375'
(firefox-bin:4411): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is '宋体 Bold 12'
(firefox-bin:4411): Pango-WARNING **: shaping failure, expect ugly output. shape-engine='BasicEngineFc', font='宋体 Bold 12', text='Chinese ('
(firefox-bin:4411): Pango-WARNING **: shaping failure, expect ugly output. shape-engine='BasicEngineFc', font='宋体 Bold 10.771484375', text=' '
......  

这是由于字体文件的权限不正确,后来用chmod a+r /usr/local/share/fonts/msfonts/*为所有用户增加读权限后,就正常了。

如果你还是出现上面的错误,可以试着执行一遍以下几条命令:

dpkg-reconfigure libcairo2 libpango1.0-common
fc-cache -fs
update-pangox-aliases 

参考文档

在Linux中使用thinkpad的小红点+中键

安装完无线驱动以后,就琢磨怎么在Debian Lenny中把Thinkpad的小红点用起来。

Thinkpad的小红点应该说是小黑的的特色之一了,用的熟了工作效率不比用鼠标差。用其它的本本我通常是用触摸板,感觉不是很方便,尤其是在上下滚屏时,要用两只手配合。而小黑的小红点+中键,只用一只手就能方便的上下左右滚屏,非常方便。

从设计来看,黑色键盘中间一个红色的小点,最是吸引人的目光。记得我的小黑刚搬回来的时候,我女儿就盯上了这个红色的小点,一直想用手指去摸去抠,被我制止了。我装完系统就关机出去了,第二天回家打开小黑一看,怎么小红点没了?一想,肯定是小家伙干的!最后,在垃圾桶里找回了心爱的小红点。看来是小家伙不小心把它抠了下来,又不会装回去,就扔到垃圾桶去了。后来我就教她怎么用这个小红点控制光标的方向,这以后,她就没再干过抠红点的事。这算是和小红点有关的一件趣事吧。

小红点的中键按下时,再控制红点的方向时,就能够实现八个方向的滚屏。下图是我在这个网站看到的,很形象的表示了中键的用法(感谢这副图的作者)。

在windows里,联想OEM的windows已经自动支持小红点的中键了。,但在Linux里还需要配置一下。

我们先执行命令dmidecode -t 21,这个命令会输出小黑内置的鼠标设备的信息,我们看到输出如下:

# dmidecode 2.9
SMBIOS 2.4 present.

Handle 0x0032, DMI type 21, 7 bytes
Built-in Pointing Device
	Type: Track Point
	Interface: PS/2
	Buttons: 3

Handle 0x0033, DMI type 21, 7 bytes
Built-in Pointing Device
	Type: Touch Pad
	Interface: PS/2
	Buttons: 0
  

Linux已经自动识别出两个内置鼠标设备:Track Point (小红点)和Touch Pad (触摸板)。实际上小红点和触摸板都已经可以使用,只是小红点的中键在Linux缺省未打开,需要改一下配置。

配置很简单,把文章Trackpoint on Lenny里的这段话加到你的xorg.conf中就可以了。打开/etc/X11/xorg.conf,在此文件中找到”Configured Mouse”这一节,然后加下下面三行:


Section "InputDevice"
        Identifier      "Configured Mouse"
        Driver          "mouse"

        # 加入下面三行
        Option          "EmulateWheel"          "true"
        Option          "EmulateWheelTimeOut"   "200"
        Option          "EmulateWheelButton"    "2"
EndSection 

重新登录X window,再试试小红点+中键,是不是好用了?

在debian lenny上安装thinkpad t400无线驱动

安装完debian lenny后,常用的设备驱动都已经安装好,做一些日常应用已经没什么问题。接下来,我就开始配置无线网卡的驱动。

首先说一下我所用的无线路由器的配置。我的无线路由器是Linksys的WRT54G V4.0,无线网络名设置为easwy,使用WPA2 Person加密认证,出于安全的考虑,不广播SSID,并且只允许特定的MAC地址无线接入。

登录lenny后,使用/sbin/ifconfig看到已经存在一个名为wlan0的无线网卡,心中一阵暗喜,暗道Linux进步果然神速,对硬件的支持已经做的这么好。没想到正是这一时的大意,让我费了诸多周折。

既然无线网卡已经发现,驱动也已经装好,那么只需要配置一下应该就可以用了。于是打开文件/etc/network/interface,在这个文件里增加了无线网卡的配置:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

# The wireless interface
auto wlan0
iface wlan0 inet dhcp
	wpa-ssid "easwy"
	wpa-psk "xxxxxxxx"
	wpa-ap-scan 1
	wpa-scan-ssid 1 

简单解释一下wlan0的配置:

  • auto wlan0的意思是wlan0接口在系统启动时自动启动。
  • iface wlan0 inet dhcp的意思是这个接口使用DHCP来获取IP地址
  • wpa-ssid用来配置无线网络的SSID
  • wpa-psk配置连接easwy无线网络的密码
  • wpa-ap-scan 1wpa-scan-ssid 1主要用来扫描不广播SSID的无线接入点。因为我的无线路由器不广播SSID,所以加了这两条配置。

这样配置好后,使用/sbin/ifdown wlan0关闭wlan0网卡,然后再重新启用/sbin/ifup wlan0,发现无法获得IP地址,输出如下:

    run-parts: /etc/network/if-pre-up.d/wpasupplicant exited with return code 1
    Internet Systems Consortium DHCP Client V3.1.1
    Copyright 2004-2008 Internet Systems Consortium.
    All rights reserved.
    For info, please visit http://www.isc.org/sw/dhcp/

    wmaster0: unknown hardware address type 801
    wmaster0: unknown hardware address type 801
    Listening on LPF/wlan0/00:22:69:68:8b:86
    Sending on   LPF/wlan0/00:22:69:68:8b:86
    Sending on   Socket/fallback
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 9
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 14
    DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 17
    No DHCPOFFERS received.
    No working leases in persistent database - sleeping.
    --- in /var/wpa_supplicant.wlan0.log
    1235814861.502506: Cancelling authentication timeout
    1235814861.502518: WEXT: Operstate: linkmode=0, operstate=6
  

这时我还没怀疑到驱动的问题,还以为是自己配置的问题,于是开始进行各种检查。

首先查看一下T400 AA1所用的无线网卡芯片:

    # lspci -nn | grep Ethernet
    00:19.0 Ethernet controller [0200]: Intel Corporation 82567LM Gigabit Network Connection [8086:10f5] (rev 03)
    03:00.0 Ethernet controller [0200]: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter [168c:001c] (rev 01)
  

从这里可以看出,我的无线网卡使用的是Atheros的AR242x系列芯片(具体型号是AR2425)。使用lsmod命令查看了一下网卡所使用的驱动是ath5k。在网上搜索了一下,似乎ath5k驱动可以驱动这个芯片,接下来又用/sbin/iwconfig查看了无线网卡的配置,似乎也没什么问题。

这样折腾了很久之后,开始怀疑是不是网卡驱动有问题?在debian wiki上搜索了一下,发现MadWifi是用的比较多的Atheros芯片驱动,抱着试试看的态度,尝试安装MadWifi驱动。

按照文章Atheros AR5xxx devices (MadWifi)的步骤,首先将下面的源加入到/etc/apt/sources.list文件中:


# Debian Lenny/5.0
deb http://ftp.us.debian.org/debian lenny main contrib non-free 

接下来更新源中的安装包列表,并且下载module-assistant和wireless-tools安装包:

aptitude update
aptitude install module-assistant wireless-tools 

编译安装madwifi-modules-*包:

m-a prepare
m-a a-i madwifi 

卸载athtk内核模块,然后加载atp_pci内核模块:

modprobe -r ath5k
modprobe ath_pci 

这样配置之后,再用/sbin/iwconfig命令查看一下无线网卡的状态,正常。

修改/etc/network/interface文件,把上面文件中的wlan0改为ath0,因为MadWifi驱动使用的网卡名称是ath0。这样修改后,使用/sbin/ifup ath0,哈哈,无线网卡可以正常工作了!

奉上/sbin/iwconfig命令和/sbin/ifup ath0命令的输出,以供参考:


    # /sbin/iwconfig ath0
    ath0      IEEE 802.11g  ESSID:"easwy"  Nickname:""
              Mode:Managed  Frequency:2.437 GHz  Access Point: Not-Associated
              Bit Rate:1 Mb/s   Tx-Power:16 dBm   Sensitivity=1/1
              Retry:off   RTS thr:off   Fragment thr:off
              Power Management:off
              Link Quality=0/70  Signal level=-96 dBm  Noise level=-96 dBm
              Rx invalid nwid:171945  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0
    # /sbin/ifup ath0
    Internet Systems Consortium DHCP Client V3.1.1
    Copyright 2004-2008 Internet Systems Consortium.
    All rights reserved.
    For info, please visit http://www.isc.org/sw/dhcp/

    wifi0: unknown hardware address type 801
    wifi0: unknown hardware address type 801
    Listening on LPF/ath0/00:22:69:68:8b:86
    Sending on   LPF/ath0/00:22:69:68:8b:86
    Sending on   Socket/fallback
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 4
    DHCPOFFER from 192.168.1.1
    DHCPREQUEST on ath0 to 255.255.255.255 port 67
    DHCPACK from 192.168.1.1
    bound to 192.168.1.100 -- renewal in 37824 seconds.
  

参考文档

在thinkpad t400上安装debian lenny

上周末从upnb搬了一部Thinkpad T400-aa1回来,价钱比较实惠。刚好debian 5.0 (lenny)发布,于是打算在小黑上安装lenny,这一系列文章主要是记录安装、配置lenny的过程。

安装前的准备花费了一点时间。因为t400 aa1是港版学生机,自带的操作系统是繁体中文windows vista,也可以转换成英文vista用,不过据说运行简体软件仍会出现乱码。于是就把它格掉,准备安装windows xp。之所以装xp,是因为对vista系统印象一直不好。家里DELL计算机上的vista,用了两年多了,还是用不习惯。

安装xp的过程就不细讲了,用的是upnb提供的windows xp恢复盘。

安装完xp后,整个硬盘只有两个分区,一个系统分区,另外一个是一键恢复占用的隐藏分区。虽然说lenovo的一键恢复没什么大用,不过懒得删掉它,放在那儿放着吧,反正250G的硬盘足够大了。

要安装debian,首先要为debian留出空闲分区。可以使用PQMAGIC来重新分区,不过这样分区后,一键恢复功能就不能用了。在网上搜了一下,联想网站上介绍了一种分区方法,这种方法不会影响一键恢复功能。

参照文章对ThinkPad预装系统重新分区,先磁盘整理(其实没什么好整理的,刚装的xp),然后拿出我DELL机配的vista安装盘,运行diskpart,收回了不到120G的硬盘空间。把这120G建成扩展分区,里面再拿出两个32G来格成fat32系统。之所以格成fat32系统,主要考虑到这两个分区要同时能在debian以及windows里访问,而32G是fat32文件系统能支持的最大分区大小。

现在还剩下大概50多G的空间,对安装debian来说足够了。

我安装debian,都是使用netinst映像。先由netinst光盘安装完基本系统,然后再由网络安装。这样的好处是不用下载几张光盘镜像,这些镜像在装过一次后基本没什么用了,因为debian在不断更新中;不过网络安装要求有便利的上网条件,以及高速的下载源。在当前的宽带环境下,这倒不是什么问题。

debian官方网站下载netinst光盘映像,我下的是大约180MB的映像。如果你更懒的话,可以下载不到40MB的映像。

把映像刻录到光盘后,光盘启动,按照提示一步步做就可以了。lenny在安装过程中有中文界面,如果选用中文界面的话,安装后系统的默认语言就是中文。我在这里选的是英文界面,中文打算安装完lenny后再配置。

安装过程不必多讲,大概只有硬盘分区时费一点脑子,要想好自己怎么分区。我通常是分三个区,一个/分区,一个/home分区,一个swap分区。debian也可以帮你自动分区,不过我看了一下,自动分区后,留给/分区的空间不够,最好还是手动分区。

在配置apt源的时候,要等上很长一段时间,当时以为出了什么问题,不过后来还是走过去了。apt源设置成网速最快的,以前我都使用debian.cn99.com,不过最近用它更新好像不正常,改用台湾的源http://ftp.tw.debian.org/debian,下载的速度还不错。配置完apt源,会让你选择安装哪些包,我在这儿把所有选项都清掉了,先把基本系统装好再装这些包也不迟。

跳过package安装后,很快基本系统就装好了。重启计算机,进入debian,本本的硬件差不多都能识别出来。切换到root用户,运行aptitude,把自己想装的任务(task)选中,GO,开始下载安装~~ 下载安装的过程差不多花了两个小时,主要取决于你所选的包的数目,我选了xfce、KDE、笔记本相关组件、中文组件等。

安装完成了,接下来要进行系统配置,下篇文章继续。

使用cygwin X server实现Linux远程桌面 (for windows)

在windows上访问linux有多种方法:

对于习惯使用命令行的人来说,可以使用终端的方式进行访问,也就是通过telnet, ssh等方法远程登录到linux主机,对其进行访问。至于登录软件,既可以使用windows自带的命令行界面,也可以使用专门的终端软件,例如putty, secureCRT等。其中putty是免费软件,而secureCRT并不是。

对于习惯使用图形界面的人来说,更希望以图形界面的方式来访问linux主机。主要有以下几种方法:

今天我主要介绍第二种方法。

有很多软件在windows上实现了X server的功能,例如XmanagerHummingbird Exceedcygwin X server,以及Xming X Server for Windows。前两个都是商业软件,需要付费使用;cygwin和Xming是免费软件。本文主要介绍如何使用cygwin X实现Linux的远程桌面。关于Xming X server的使用请参见其主页。

先调动一下大家的积极性,看看最终的效果图:

[ 背景知识 ]

网络上有很多关于X的背景知识,如果你想对X了解的深入一些,去网上搜索一下吧。

这里是王垠写的”理解 Xwindow“,介绍了X server, X client, 窗口管理器,桌面环境相关的知识,读一下对理解本文也有帮助。

好了,现在我们开始配置。

[ 安装cygwin ]

Cygwin项目的目的是在windows主机上提供一个类UNIX的环境,网络也有很多相关的资料。大家可以看一下这一篇:Cygwin使用指南,这篇文章在网络上流行比较广,作者未知,上面提供的仅是其中一个链接。

如果你的计算机上还没有cygwin,首先需要安装它。

这个过程很简单,先到cygwin的主页去下载setup.exe,然后使用setup.exe进行安装。在安装的过程中需要选择要安装的组件,此时需要把X server组件选上。

这里有一个安装指南,虽然是英文的,不过看抓图就可以了。

选择X server组件时,其实只需要选择xorg-x11-base,选中它之后,其它相关组件会自动被选中。

在安装cygwin时,记得把expect这个软件装上,它位于interpreters类别下面。我会在后面的章节中说明为什么要安装这个组件。

[ 运行cygwin X server]

在运行X server前,先假定一下我们的组网。

我们假设X server运行在一台windows XP计算机上,此机器的IP地址是192.168.190.91。

我们的Linux主机上将运行X client程序,它的IP地址是192.168.190.15。

在你的安装目录中找到c:\cygwin\usr\X11R6\bin\startxwin.bat (假设你把cygwin安装在c:\cygwin目录),双击它就会启动X server,同时会启动一个终端(这个终端运行在Windows本地),效果如下图:

现在,我们要允许远程的X client对X server进行访问,因此,在终端中输入下面的命令,

xhost + 192.168.190.15 

接下来,我们要到X client所在的计算机上进行配置,使用telnet或ssh登录Linux主机(192.168.190.15),然后运行下面的命令,

export DISPLAY=192.168.190.91:0.0
xterm &
gvim &

上面第一条命令设置DISPLAY变量,它表示X客户端将使用192.168.190.91上的0.0来显示自己。192.168.190.91是运行cygwin X server的Windows计算机(它的防火墙要打开X server所监听的端口,通常为6000)。

后面两条命令则在Linux主机上(192.168.190.15)启动了两个程序,一个是xterm,另外一个是gvim,我们发现这两个程序启动后,并没有显示在Linux主机上,相反,它们显示在了windows主机上。下图是执行完上述命令的效果图,我使用putty远程登录到Linux主机上,然后执行上述命令:

用这种方法,你可以在Linux主机上运行任何图形程序,并把它显示到windows上。

如果你想把诸如KDE、GNOME这样的桌面环境也显示到windows上,就需要做些调整。

[ 运行桌面环境 ]

在此我以KDE桌面为例。要把KDE桌面环境显示到windows上的X server中,需要更改一下X server的启动批处理。

首先备份一下c:\cygwin\usr\X11R6\bin\startxwin.bat,然后使用文本编辑器打开此文件,找到下面这行:

%RUN% XWin -multiwindow -clipboard -silent-dup-error 

去掉”-multiwindow“参数:

%RUN% XWin -clipboard -silent-dup-error 

我们通常不需要启动一个xterm窗口,因此找到下面这行:

%RUN% xterm -e /usr/bin/bash –l 

把它注释掉:

REM %RUN% xterm -e /usr/bin/bash –l 

好了,批处理文件改完了。

回想一下上面的操作,在启动了X server后,我们执行了xhost命令来设置允许哪些计算机连接到X server,现在我们可以在配置文件中设置它。打开一个cygwin窗口,输入下面的命令:

echo "192.168.190.15" >> /etc/X0.hosts 

上面的命令会在/etc/X0.hosts文件中加入你想允许的X client,你可以在此文件中加入你的X客户端。因为我们使用的DISPLAY是0,所以在文件/etc/X0.hosts中增加;如果使用DISPLAY 1,则需要修改文件/etc/X1.hosts文件。现在启动X server后,192.168.190.15就被自动允许接入了。

现在我们再次双击startxwin.bat批处理,执行后就会出现一个丑陋的空白窗口,这就是所谓的根窗口。之所以是空白的,是因为现在还没有运行任何窗口管理器。别急,我们使用telnet或ssh远程登录Linux主机,执行命令:

startkde & 

哈哈~~~本文开头所展示的KDE窗口出来了!!!现在你在KDE中运行任何程序,它们都运行在Linux主机上,却把结果显示在Windows主机上。

[ 创建快捷方式 ]

在上面的操作中,启动X server后,需要使用telnet或ssh登录到Linux主机,才能启动自己想要的X client程序,有没有更简单的方法?

现在我们就需要用到expect软件了。这是一个如此有用的软件,以至于我忍不住要在这里插一段广告。

Expect为用户提供一种机制,使用户能够自动执行一些交互式的任务。例如,通常我们在使用telnet的时候,都需要手动输入用户名、密码才能登录。而使用Expect,我们就可以实现全自动的telnet交互,不需用户干预。Expect由Don Libes开发,基于TCL内核,它的主页在http://expect.nist.gov/

广告时间结束,我们继续。我使用expect编写了如下的TCL/EXPECT脚本,它可以使用ssh自动登录到指定Linux主机,然后启动我们需要的程序。程序如下:

#! /bin/expect -f

# Change these variable to yours
set user {easwy}
set host {192.168.190.15}
set xserver {192.168.190.91}
set password {123456}
set program {startkde}

set timeout 5
set done 0

spawn ssh "$user@$host"

while {!$done} {
    expect {
        "*(yes/no)?*" {
            # If the 1st time run ssh, it will prompt continue or not
            # answer yes
            exp_send "yes\n"
        }
        "assword*" {
            # Answer password
            exp_send "$password\n"
        }
        "\$*" {
            # Exit the loop
            incr done
        }
        "#*" {
            # Exit the loop
            incr done
        }
        timeout {
            # Timeout
            exp_send_user "Login timeout, please check!"
        }
    }
}

# Set DISPLAY environment variable
exp_send "export DISPLAY=$xserver:0\n"

# Start your program
exp_send "nohup $program &\n"
expect -regexp {\[[0-9]*\] [0-9]*}
exp_send "\n"

# Finished 

把上面的内容保存为一个文件,例如,保存为cygwin的~/login.exp。注意:把脚本起始处的5个变量替换成你自己的,只需要替换大括号中间的内容。使用telnet的朋友请自行修改此脚本。

下面我们再改一下c:\cygwin\usr\X11R6\bin\startxwin.bat文件,在此文件的最后增加:

REM Start your X client program
%CYGWIN_ROOT%\bin\run -p /bin expect -f ~/login.exp 

我们使用expect来执行刚才保存的~/login.exp。

现在,我们右击startxwin.bat文件,选择“发送到桌面快捷方式”。以后,只要你双击此快捷方式,就能立刻在Windows上使用Linux主机上的程序了。

我们再来看一个有趣的例子。

在上图中共开了三个终端,它们分别运行在不同的主机上,却都在Windows主机上进行输入输出。这就是X window的魅力了,如果你愿意,你还可以把其它Windows及Linux主机上的程序显示到这个X server中,正所谓一”桥”飞架南北,天堑变通途。

在本文完成后,经网友jiachunyu介绍,才知道有一个名为XWinLogon的软件,它也是使用cygwin的X server实现Linux的远程桌面。相比之下,它的安装和使用都简单了很多。这个软件的主页在:http://sourceforge.net/projects/xwinlogon/

或者

http://www.calcmaster.net/visual-c++/xwinlogon/

有兴趣可以试一下。

需要说明的是,XWinLogon中包含了部分cygwin的软件包,如果你安装了cygwin,则不能安装此软件(我没有试过,在作者主页这样说明)。

[参考文档]

用VNC实现远程桌面共享(支持Windows, Linux, …)

VNC,全称为Virtual Network Computing,它是一个桌面共享系统。它的功能,类似于windows中的远程桌面功能。VNC使用了RFB(Remote FrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机。它把键盘、鼠标动作发送到远程计算机,并把远程计算机的屏幕发回到本地。
VNC技术与平台无关,VNC Viewer可以和VNC Server在不同的操作系统上。VNC几乎支持所有的操作系统,也支持Java,甚至可以通过支持Java的浏览器来访问VNC Server。多个VNC客户端可以同时连接到一个VNC Server上。
VNC最初由AT&T开发的,它的源代码是开源的。

在CentOs 4.3上配置VNC服务很简单(这里假定你的计算机上已经安装了VNC软件)

首先需要配置VNC密码,密码在使用客户端连接服务器时使用。
注意:VNC密码保存在用户的主目录中,每个用户都可以设置自己的密码。因此,请使用你的用户名(尽量不要使用root)运行下列命令:

vncpasswd 


然后输入密码。

接下来就可以启动VNC server了。在启动VNC server时,需要为你的server指定一个display参数。你可以把display理解为一个桌面,每个用户都可以有自己的桌面。VNC客户端在连接时,可以指定连接到哪个桌面上。在系统中,display号不能重复,也就是说,如果有用户已经建立了名为“:1”的display,另外一个用户就不能再使用“:1”了,他可以使用“:2”。
启动VNC server的命令是:

vncserver <display>


例如,

vncserver :1


最后,需要配置一下防火墙,允许VNC客户端连接VNC server。VNC server监听的端口从5900开始,display :1的监听5901,display :2监听5902,以此类推。CentOs的防火墙缺省是不允许连接这些端口的,所以需要使用下面的步骤打开防火墙(需要root权限):

vi /etc/sysconfig/iptables


找到下面的语句:

-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited


在此行之前,加上下面的内容:

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5900:5903 -j ACCEPT


这句话的含义是,允许其它机器访问本机的5900到5903端口,这样,display:1, display:2, display:3的用户就可以连接到本机。

然后使用root身份重新启动防火墙:

/sbin/service iptables restart

好了,现在就可以运行客户端软件,连接到VNC server上了。
VNC客户端软件很多,在linux下有vncviewer,KDE还提供了一个krdc(它的菜单项就是”Remote Desktop Connection”,远程桌面连接)。
在window也有不少vnc客户端,你可以到http://www.realvnc.com/去下载一个,安装就可以用了。

假设VNC server的IP地址是192.168.1.1,display是:1。在VNC viewer的server栏中输入:“192.168.1.1:1”,然后连接。OK,你可以看到自己的桌面了。以后不管你什么时候关闭自己的本地PC机都不怕了,只要server不关机,你只要连接到VNC server,你就可以看到你前一天关闭本地PC机时的桌面还保持着原样。

不过…这个桌面怎么这么丑?!
原来vncserver默认使用的窗口管理器是twm,这是一个很简陋的窗口管理器,你可以把你的桌面改成GNOME或KDE。
方法是,进入你自己的home目录,然后编辑这个文件:.vnc/xstartup,下面是这个文件的内容:

#!/bin/sh

# Uncomment the following two lines for normal desktop:
#unset SESSION_MANAGER
#exec 
/etc/X11/xinit/xinitrc

-/etc/vnc/xstartup ] && exec /etc/vnc/xstartup
-r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot 
-solid grey
vncconfig 
-iconic &
xterm 
-geometry 80×24+10+10 -ls -title $VNCDESKTOP Desktop &
#twm 
&
gnome
-session &


你可以把像上面这样把”twm &”这一行注释掉,然后在下面加入一行”gnome-session &”,或者是”startkde &”,分别启动GNOME桌面和KDE桌面。

如果server重启了,那你就需要重新运行一次vncserver命令来启动VNC server,这很麻烦。有没有更好的方法呢?

有!我们可以把VNC server启动成后台服务。执行如下步骤:

首先要允许VNC server在系统启动过程中被启动。这可以通过“系统设置–>服务器设置–>服务”菜单来配置,把vncserver一项选上就可以了。
如果使用命令行的话,以root身份运行以下两条命令:

cd /etc/rc5.d
mv K35vncserver S35vncserver


然后编辑/etc/sysconfig/vncservers,以下是文件内容:

# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the line below to start a VNC server on display :
1
# as my ’myusername’ (adjust this to your own).  You will also
# need to set a VNC password
; run ’man vncpasswd’ to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC
, see
# <URL:http://www.uk.research.att.com/vnc/sshvnc.html>.

VNCSERVERS=1:user1 2:user2 3:user3
VNCSERVERARGS
[1]=-geometry 1024×768
VNCSERVERARGS
[2]=-geometry 1024×768
VNCSERVERARGS
[3]=-geometry 800×600


解释一下这个文件:
VNCSERVERS这一行是配置在系统启动时启动几个VNC server,上面的例子里运行了三个VNC server,其中user1在display :1,user2在display :2,user3在display :3。
VNCSERVERARGS这三行,分别为VNC server 1, 2, 3配置启动参数,上面的例子里对user1和user2使用屏幕分辨率1024×768,对user3使用800×600。
其它支持的参数请使用“man vncserver”命令查询。

编辑好这个文件后,保存,然后以root身份运行:

/sbin/service vncserver start


这样user1, user2, user3的vncserver就启动了。
以后每次系统重启时,都会自动启动这三个用户的vncserver。

注意:上面三个用户必须已经使用vncpasswd命令设置过vnc密码,不然他的vncserver启动会失败!

另外,还可以使用cygwin中的X server来实现远程桌面共享,参见我的文章:
使用cygwin X server实现Linux远程桌面 (for windows)  

 参考资料:
[1] Taking your desktop virtual with VNC
[2] Virtual Network Computing

使用rxvt做为cygwin终端

昨天配置cygwin下的X server,在网上搜集资料时看到有人使用rxvt做为cygwin的终端,于是也试了一下。最终配置如下:

首先编辑文件~/.Xdefaults,内容如下:

! ~/.Xdefaults - X default resource settings
Rxvt*geometry: 120x40
Rxvt*background: #000020
Rxvt*foreground: #ffffbf
!Rxvt*borderColor: Blue
!Rxvt*scrollColor: Blue
!Rxvt*troughColor: Gray
Rxvt*scrollBar: True
Rxvt*scrollBar_right: True
Rxvt*font: Fixedsys
Rxvt*mfont: Terminal
Rxvt*SaveLines: 2000
Rxvt*loginShell: True
! VIM-like colors
Rxvt*color0: #000000
Rxvt*color1: #FFFFFF
Rxvt*color2: #00A800
Rxvt*color3: #FFFF00
Rxvt*color4: #0000A8
Rxvt*color5: #A800A8
Rxvt*color6: #00A8A8
Rxvt*color7: #D8D8D8
Rxvt*color8: #000000
Rxvt*color9: #FFFFFF
Rxvt*color10: #00A800
Rxvt*color11: #FFFF00
Rxvt*color12: #0000A8
Rxvt*color13: #A800A8
Rxvt*color14: #00A8A8
Rxvt*color15: #D8D8D8
! eof 

然后修改你的c:\cygwin\cygwin.bat文件,使用rxvt来替代cmd.exe:

@echo off
C:
chdir C:\cygwin\bin
set EDITOR=vi
set VISUAL=vi
set CYGWIN=codepage:oem tty binmode title
rxvt -e bash --login -i 

我在Xdefault中已经设置了中文字体,不过要想正常的显示和输入中文,还需要更改几个文件。在文件~/.bashrc中增加如下内容:

# Chinese locale
export LANG=zh_CN.GBK
export OUTPUT_CHARSET="GBK"

# Display Chinese
alias ls='ls --show-control-chars --color'
alias dir='ls --show-control-chars'
alias less='less --raw-control-chars' 

如果~/.bash_profile还未存在,那么创建它,并添加如下内容:

# Exec .bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

另外再创建一个~/.inputrc文件,内容如下:

# Chinese input/output in bash
set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set completion-ignore-case on

好了,现在可以使用rxvt做为cygwin的终端了。

[ 参考文档 ]

Cygwin + Rxvt

在debian etch中配置subversion版本管理

以下操作如无特殊注明,均为root执行的操作。

安装软件包

首先,需要下载安装下列软件包:

  • apache2
  • apache2-common
  • apache2-utils
  • libapache2-svn
  • openssl
  • ssl-cert
  • subversion
  • subversion-tools

使用apt-get install命令安装上列软件包。

生成SSL自认证证书

如果要加密对版本服务器的访问,需要启用SSL。你可以到商业证书颁发机构去申请一个合法的证书,也可以采用自认证的方式。我们用下面的命令生成SSL自认证证书,并把它放在/etc/apache2/ssl/目录中。

mkdir /etc/apache2/ssl
/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem 

根据提示回答相应的信息,最后就会生成所需的证书了。

配置apache2

在apache2中启用ssl模块,使用下面的命令:

a2enmod ssl 

接下来,配置虚拟主机来使能ssl,我的apache2服务器只提供版本库的加密访问,不提供基本的http web服务,所以关闭了80端口,只开启443端口。

修改/etc/apache2/sites-available/default文件,将前两行改为:

NameVirtualHost *:443
<VirtualHost *:443> 

然后在文件中加入下面的内容:

      SSLEngine On
      SSLCertificateFile /etc/apache2/ssl/apache.pem 

上面的语句打开了SSL引擎,使用我们刚刚生成的证书文件进行认证。

default虚拟主机应该缺省已经使能了,也就是在/etc/apache2/sites-enabled/目录中已经存在一个符号链接,指向/etc/apache2/sites-available/default。如果没有的话,可以使用下面的命令使能这个虚拟主机:

a2ensite default 

现在修改文件/etc/apache2/ports.conf,把文件的内容改为:

Listen 443 

也就是我们的apache2只监听443端口。

好了,现在启动apache2:

/etc/init.d/apache2 start 

如果你没有使用ServerName配置主机名的话,会提示下面的错误,忽略即可:

Starting web server (apache2)...apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName 

在浏览器中输入如下URL,看是否能够访问:


https://127.0.0.1/

如果正常的话,你会看到一个缺省的页面,上面显示”It works!“。如果没有出现此页面,可能你的apache2配置有问题,查看一下错误日志和访问日志,以定位问题。这两个日志的缺省位置在 /var/log/apache2/。

配置subversion

首先新建一个用户svnadmin来管理版本库,使用下面的命令:

addgroup svn
adduser svnadmin –ingroup svn
adduser www-data svn 

上面的命令首先创建一个svn用户组,然后创建用户svnadmin,并把这个用户放在svn组中。第三个命令则是把www-data用户也加入到svn组,因为web server是以www-data用户在运行的,要从web server读写版本库,www-data用户必须有版本库的读写权限。

现在用su – svnadmin命令切换到svnadmin用户,我们要保证svn用户组的所有用户都具备版本库的读写权限,所以修改svnadmin的umask,修改svnadmin用户的~/.bashrc,在文件中加入下面这行:

umask 002 

退出再重新登录。这样,由svnadmin创建的版本库,就可以被所有属于svn组的用户读写了。

现在创建版本库(由用户svnadmin执行下面的命令):

svnadmin create ~/repos/svntest 

我们创建了一个名为svntest的版本库。如果你已经有cvs的版本库,想把它转到subversion上,可以安装cvs2svn软件包,用里面的工具进行转换。

配置apache2/SVN

首先,使能apache2的dav_svn模块:

a2enmod dav_svn 

我们使用基本的http认证对访问版本库的所有用户进行认证,只有认证用户才有版本库的访问权。

首先为版本库的用户生成密码文件:

htpasswd -cm /etc/svnusers xxxxx
htpasswd -m /etc/svnusers yyyyy 

上面的命令创建了密码文件/etc/svnusers,并增加两个用户xxxxx和yyyyy。

然后在/etc/apache2/sites-available/default文件中加入如下语句:

<Location /svn>
DAV svn
SVNParentPath /home/svnadmin/repos
AuthType Basic
AuthName "Subversion Auth"
AuthUserFile /etc/svnusers
require valid-user
</Location> 

这段话,对URL中指向/svn目录的访问请求,使用DAV进行访问。我们把/home/svnadmin/repos做为所有版本库的父目录,在该目录下可以增加多个版本库。另外,使用/etc/svnusers密码文件对用户进行认证。

现在,重启apache2服务:

/etc/init.d/apache2 restart 

在浏览器中输入:

https://127.0.0.1/svn/svntest 

这时,会询问你是否接受服务器的证书,选择接受,然后输入你的用户名和密码,验证通过后,在浏览器中就可以看到版本库了。

测试通过后,你就可以使用其它的subversion客户端对版本库进行访问了。

[参考文档]

vi/vim使用进阶: 程序员的利器 – cscope

<< 返回vim使用进阶: 目录

本节所用命令的帮助入口:

:help cscope 

在前面的文章中介绍了利用tag文件,跳转到标签定义的地方。但如果想查找函数在哪里被调用,或者标签在哪些地方出现过,ctags就无能为力了,这时需要使用更为强大的cscope。

Cscope具有纯正的Unix血统,它最早是由贝尔实验室为PDP-11计算机开发的,后来成为商用的AT&T Unix发行版的组成部分。直到2000年4月,这个工具才由SCO公司以BSD license开源发行。

Cscope的主页在http://cscope.sourceforge.net/,如果你的计算机上没有cscope,你可以在此处下载它,在写本文时,它的最新版本是15.6。安装它非常简单,你只需要在cscope的源代码目录中执行下面三条命令:

./configure
make
make install 

在windows上也可以使用cscope,在cscope的主页上可以下载到由DJGPP编译器编译的cscope for windows,不过这个版本不能和vi一起工作。或者你可以下载cygwin工具包(http://www.cygwin.com/),这个工具包中也包含了cscope。

http://iamphet.nm.ru/cscope/有Sergey Khorev预编译的一个Win32版本的cscope,这个版本的cscope可以很好的与windows版本的vim搭配使用。

cscope的用法很简单,首先需要为你的代码生成一个cscope数据库。在你的项目根目录运行下面的命令:

cscope -Rbq 

这些选项的含义见后面。这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用”-q“选项生成的,可以加快cscope的索引速度。在windows上使用cscope时,你可能会遇到-q选项被忽略的提示,解决办法请看这篇文章:Windows下cscope -q选项出错的解决

在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用了”-b“选项。如果你已经进入了这个界面,按CTRL-D退出。

Cscope在生成数据库中,在你的项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用”-k“选项。

Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。通常我们使用find来生成cscope.files文件,仍以vim 7.0的源代码为例:

cd ~/src/vim70
find . –type f > cscope.files
cscope -bq 

这条命令把~src/vim70目录下的所有普通文件都加入了cscope.files,这样,cscope会解析该目录下的每一个文件。上面的cscope命令并没有使用”-R“参数递归查找子目录,因为在cscope.files中已经包含了子目录中的文件。

注意:find命令输出的文件以相对路径表示,所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out,需要使用下面介绍的-P选项。

Cscope只在第一次解析时扫描全部文件,以后再调用cscope,它只扫描那些改动过的文件,这大大提高了cscope生成索引的速度。

下表中列出了cscope的常用选项:

  • -R: 在生成索引文件时,搜索子目录树中的代码
  • -b: 只生成索引文件,不进入cscope的界面
  • -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  • -k: 在生成索引文件时,不搜索/usr/include目录
  • -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”-“,表示由标准输入获得文件列表。
  • -Idir: 在-I选项指出的目录中查找头文件
  • -u: 扫描所有文件,重新生成交叉索引文件
  • -C: 在搜索时忽略大小写
  • -Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

要在vim中使用cscope的功能,需要在编译vim时选择”+cscope“。vim的cscope接口先会调用cscope的命令行接口,然后分析其输出结果找到匹配处显示给用户。

在vim中使用cscope非常简单,首先调用”cscope add“命令添加一个cscope数据库,然后就可以调用”cscope find“命令进行查找了。vim支持8种cscope的查询功能,如下:

  • s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
  • g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
  • d: 查找本函数调用的函数
  • c: 查找调用本函数的函数
  • t: 查找指定的字符串
  • e: 查找egrep模式,相当于egrep功能,但查找速度快多了
  • f: 查找并打开文件,类似vim的find功能
  • i: 查找包含本文件的文件

例如,我们想在vim 7.0的源代码中查找调用do_cscope()函数的函数,我们可以输入:”:cs find c do_cscope“,回车后发现没有找到匹配的功能,可能并没有函数调用do_cscope()。我们再输入”:cs find s do_cscope“,查找这个C符号出现的位置,现在vim列出了这个符号出现的所有位置。

我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能,但它是在交叉索引数据库中查找,速度要快得多。

vim提供了一些选项可以调整它的cscope功能:

  • cscopecscopeprg选项用于设置cscope程序的位置。
  • cscopecscopequickfix设定是否使用quickfix窗口来显示cscope的结果,详情请”:help cscopequickfix“;
  • 如果你想vim同时搜索tag文件以及cscope数据库,设置cscopecscopetag选项;
  • cscopecscopetagorder选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文件中查找到的结果,会把最佳匹配列在第一位。

vim的手册中给出了使用cscope的建议方法,使用命令”:help cscope-suggestions“查看。

下面是我的vimrc中关于cscope接口的设置:


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
      cs add cscope.out
  endif
  set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
 

下面的两个链接是cscope主页提供的cscope使用方法,也可以作为参考:

vim/cscope指导:http://cscope.sourceforge.net/cscope_vim_tutorial.html

在大项目中使用cscope:http://cscope.sourceforge.net/large_projects.html

在vim的网站上有很多与cscope相关的插件,有兴趣可以去看一下。

我以前写的Vim + Cscope/Ctags

[参考文档]

<< 返回vim使用进阶: 目录