Archive

Archive for April, 2007

从windows迁移到Ubuntu Linux一例

April 28th, 2007 Fwolf 5 comments

从windows迁移到Ubuntu Linux一例

注: 本文内容比较杂,涉及WGA、tnt2显卡、gnome、xfce、nfs、游戏、wine、font、defoma、socks5、ssh等,这些问题我就不再一一整理了,请各位自行攫取。

起因

一位同事告诉我,他的电脑好像中病毒了,总提示什么“您可能是软件盗版的受害者”,我以为这又是哪个流氓软件的把戏呢,故意说得严重些吓唬用户,然后进一步欺骗什么的。于是到他电脑上一看,提示是这样:

从windows迁移到Ubuntu Linux一例p1

原来我当初的想法是错误的,根本没有流氓软件,这个提示是100%正宗的微软出品,根据提示还可以链接到微软的网站,提示当前windows使用的序列号是非法的:

从windows迁移到Ubuntu Linux一例p2

这时才想起来,这台机器大概半年前重装过,装了一个不知名版本的winxp(当然是盗版),后来提示快到期了需要激活,就找了个算号器算了半天,找了个可用的序列号用上了。查看已安装的程序可以发现,由于windows自动更新一直开着,4月25号通过自动更新安装了一个WGA(微软正版增值计划)工具,第二天,也就是4月26号就开始提示了。

这台电脑是联想的品牌机,购买的时候是带着正版win98操作系统的,不过时间比较久远了,win98在当今的网络环境下,让一个菜鸟使用,存活期实在太短了,所以才重装的xp。现在既然人家已经发现“盗版”的事实了,还是不要用了,结合前一段时间成功为其他2位同时安装Ubuntu Linux的经验,决定把这台机器改装Linux。

老爷机

先来介绍一下这台老爷机,2002年初购买的联想开天4600,P4 1.7的主频,256M SDRAM内存,40G硬盘,Nvidia Riva Tnt2的显卡,按说已经到了退休年龄,但为了节约资金,加上使用岗位的工作也不太多,或者说就是给他们用来上上网,打打游戏的,才一直在用着。

所装Linux为Ubuntu 7.04 Feisty Dawn,新鲜出炉的,呵呵。

基本系统与显卡

个人感觉直接用Ubuntu的Live CD安装太慢了,所以用一张Ubuntu server光盘先安装基本系统,再安装ubuntu-desktop,从局域网内的镜像源下载,过程很顺利。

至于显卡驱动的安装,由于Nvidia Riva Tnt2是相当老的卡了,所以需要安装nvidia-glx-legacy包,但光这样还不行,无法启动glx,只有把xorg.conf中Device段中的Drivernv改成nvidia才行,glxgears也运行正常,不过这样不仅充分体现了老式N卡“黑”的特点,最高还只能上800×600的分辨率,所以只能把Driver设置为默认的nv,不使用glx,但能够用1024×768的分辨率,反正也不玩3D游戏。详细的安装在原来写的Ubuntu点滴中有介绍。

由于没什么办公需要,所以必备的软件无外乎浏览器、qq、休闲游戏了。浏览器当然是使用Firefox,QQ也用LumaQQ实现了,至于休闲游戏嘛,我推荐的蓝迪游戏由于游戏太少、玩家太少,同事看不上,所以还得想办法装其他的,不过这是后话了。

基本系统安装完毕之后,去掉不必要的服务,使用Gnome桌面,感觉这台老爷机跑起来还是吃力,系统内存需求大概和机器配置相当,如果能再多128M内存情况就会好很多了。

系统改进与文件共享

鉴于Gnome桌面实在是太慢,所以用轻量级桌面系统Xfce替代了,再用SWiftfox替代原生的firefox,这样感觉系统快了许多,只开一个空的firefox的情况下内存占用在160M左右,加上Xfce本身效率和相应速度就比Gnome要好,现在系统的速度就“相当”可以接受了,夸张一点说比原来windows还要快一些呢。

在办公室的局域网上,共享是难免要用到的了,对于菜鸟用户来说,使用linux共享最好的方式就是在fstab里直接mount服务器上的共享文件夹,这样日常使用更方便。以前和windows机器共享文件我都是用Samba,不过这次是Linux和Linux机器之间的共享,我鼓捣了一会儿Samba的配置,很容易就通了但中文总是不行,不管是iocharset=utf8还是iocharset=cp936或者codepage=cp936都不行,于是转变方式,使用NFS。

没想到NFS配置如此简单,因为懒得和linux内核扯上关系,服务器上使用的是nfs-user-server,配置文件为/etc/exports,由于没用权限控制,所以一句配置就够了:

/home/fwolf/links/public    *(rw,sync)

把public这个目录共享给全部用户(*),设定可读写权限(rw),sync不知道啥意思,网上抄过来的配置,文档中也没有。客户端安装上nfs-client之后,在fstab里面加上一行:

fwolf:/home/fwolf/links/public      /media/fwolf    NFS defaults    0   0

这样就实现了NFS共享文件夹的自动挂载。再把挂载点的链接拖到文件管理器Thunar的左侧Tree栏中,同事用起来就没问题了,不过我这里倒是遗留下来一个小问题。

我的这个~/links/public目录在Samba和NFS下都共享这呢,同时这个目录中还有一个链接文件(比如叫csi),指向我电脑上另外一个位置,问题来了,windows机器通过samba访问时,可以访问链接文件csi里面的内容,在他们看来,csi就是一个普通的目录;而这台Linux通过NFS访问时,客户端Linux看到的csi仍然是一个链接文件,当然链接文件对于客户端Linux来说是指向客户端电脑中的某个文件的,它当然不存在了。所以NFS共享的情况下,无法通过链接文件来“灵活”添加共享文件了。

Wine与休闲网游

同事玩的休闲网游指的是QQ游戏、中游、边锋、联众等多人在线棋牌游戏,抱着不大的希望,我用wine(Ubuntu中自带的,并非EasyWine等修改版)一个一个的安装、运行,虽然安装都很顺利的完成了,但能运行的之后联众:

  • QQ游戏,按照网上说的先安装ie6再运行,仍然是在弹出登录对话框之后报错,错误还无法关闭。
  • 中游,iGame.exe运行之后死活不出来。
  • 边锋,说聊天控件无法运行,让我重新安装,难道不聊天就不能玩游戏么?

还是最老牌的联众游戏勉强可用,把新、旧中国象棋装上试了一下,效果满好的,就是在大厅选游戏选房间的时候,鼠标点房间名无效,需要用键盘移动光标过去,再敲回车进入。偶尔还会自动下载一些扩展名为gls的东西安装,不过基本都不妨碍使用。

在使用wine进行游戏安装、测试的时候,刚开始特别的慢,并且wine一开始运行xorg就把cpu占到100%,几乎什么都没法用,后来在EasyWine linux 游戏社区找到了答案,问题解决之后,wine的速度还是非常快的,套用网友的一句话,简直比直接在windows下运行还快呢。

wine特别慢,xorg吃cpu的原因主要是系统缺少gbk字体,运行一下xfontsel,如果xorg把cpu占到100%,过一会儿才弹出对话框的话,就更加肯定是这个问题了。首先要准备中文字体文件,比如我的/big2/fonts/xpfonts/simsun.ttf,然后在/etc/defoma/hints中添加一个名为ttf-sim-simsun.hints的文件,内容如下:

category truetype
begin /big2/fonts/xpfonts/simsun.ttf
    Family = Sim-Sun
    FontName = SimSun-Medium
    Encoding = Unicode
    Location = Chinese-China English
    Charset = ISO10646-1 GB2312 BIG5 ISO8859-1 GBK
    UniCharset = GB2312 BIG5 ISO8859-1 GBK
    GeneralFamily = SimSun
    Weight = Medium
    Width = Fixed
    Shape = Upright
    Alias = Sim-SunGB SimSunGB
    Foundry = Sim
    Priority = 20
    X-Family = SimSun
    X-ElementAlias=foundry=default:family=simsun:resx=72:resy=72
    TTCap = halfwidth-bw=0.5 italic-angle=0.167 no-roblique no-oblique no-ritalic
end

然后在defoma中注册Simsun宋体字体的hints文件:

cd /etc/defoma/hints
defoma-font reregister-all ttf-sim-simsun.hints

最后修改/etc/X11/xorg.conf,确保Files段有如下内容:

FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID"

这样,wine能够找到正确的字体之后,速度就飞快了。

Socks5代理

联众游戏虽然能玩了,但是联众不同的游戏使用不同的端口,而同事所用机器,受防火墙的限制,无法直接连接这些端口,如果使用联众自带的proxy功能,能登录上,但游戏功能也随之受限,所以考虑使用socks5代理。

局域网内的服务器不受防火墙端口访问限制,但如何让它提供socks5代理服务呢?我在网上搜索了一下,发现Ubuntu下居然没有显而易见的socks5代理服务软件,只有socks4的,就我的理解,socks5和socks4还是区别很大的,所以继续寻找,终于SOCKS Forwarding With OpenSSH这篇文章提醒了我,可以使用ssh的隧道功能提供socks5代理服务。

ssh的隧道代理功能非常有趣,如果你用ssh -D 1080 user@host登录远程主机之后,不仅可以正常的操作shell,同时还在本机的1080端口建立了socks4/socks5服务。本机的1080端口相当于隧道的入口,用户请求从这里进来,在ssh登录的主机出去,然后用户请求返回的结果再从ssh登录的主机经由ssh隧道返回。其实国内也有人介绍过这种功能了,比如可以使用dreamhost的ssh功能为自己提供代理服务,只是加上socks就想不起来了。

方法了解之后,操作就简单了。首先要配置到服务器的ssh自动登录(我可不想每次都手工输入密码),然后把登录命令写成一个脚本,ln到/etc/rc2.d/目录下,起名叫S99ssh_socks,这样每次开机就会自动ssh登录到服务器,同时在本机的1080端口创建socks服务了。别忘记把ssh的超时关闭去掉,编辑~/.ssh/config,加上:

ServerAliveInterval 300

每隔300秒向服务器发送活动信息,免得被踢。注意这种方式提供的代理服务只能够供本机使用(监听127.0.0.1地址),同时udp协议无法使用这种代理。

如果用Tor来提供socks服务也是可以的,我在没找到ssh隧道方法的时候也是这样凑数的,不过大家都知道,tor的速度嘛,呵呵,玩游戏总掉线是要扣分滴。

小结

这次迁移基本上已经完成了,用到的软件不多,主要时间花费在系统调优和用wine测试各个游戏上面,没有什么高深的技术,但是把现有的工具融合在一起,为那些对windows过于依赖的人们提供一个新的选择,还是有意义的,至少,不会再有人让你整天给他杀毒了吧?呵呵。

Update @ 2007-08-30

如果ssh转发失败,服务器上出现类似

channel 2: open failed: administratively prohibited: open failed

的错误信息时,有三个可能的原因,一是服务器上的sshd_ config文件中的AllowTcpForwarding yes没有打开;再一个就是ssh -D创建的socks服务器,你错当做http代理服务器用了(Tips: 在firefox的proxy设置中,只填SOCKS Host,其他Proxy地址置空,就不会弄错啦);第三,如果使用privoxy转发,把forward-socks4a换成forward-socks4试试(去掉了一个“a”)。

Related posts

Categories: Game, Linux, Tools Tags:

[Ubuntu]共享PDF打印机

April 25th, 2007 Fwolf No comments

Ubuntu配置了PDF打印机之后,使用很方便,想制作pdf文件了,就直接打印到这个打印机上就可以了。但怎么能够共享给局域网内的其他用户,让他们也方便的使用呢?

刚开始从Samba下手,结果配置了半天,不是连接不上,就是安装上了打印机后仍然提示“拒绝访问”。看了这篇如何架设Linux打印服务器之后,转向cups着手,很简单就解决了。

cups一般在Ubuntu都是安装好了的,配置文件为/etc/cups/cupsd.conf,默认设置只监听localhost,修改成监听631端口,631就是cups服务所使用的端口:

# Only listen for connections from the local machine.
#Listen localhost:631
Listen 631

按照上面的修改,配合默认设置中,好像已经开放了对局域网内的访问,因为下面有分别对localhost@LOCAL赋予访问权限的设置:

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow localhost
  Allow @LOCAL
</Location>

所也我也没作其他设置改动,后来局域网内其他的机器访问也都正常。

监听端口修改之后,重启服务,别人就能够使用cups服务了,使用分两种方式:

一种是web访问,可以查看打印机列表、打印机设置以及所有完成的打印任务等,直接通过web访问

http://my_machine:631/

就可以了。

第二种使用方式自然就是配置成网络打印机了,通过web访问可以得到打印机的地址,比如我的两台打印机分别为:

http://my_machine:631/printers/LaserJet-1150

http://my_machine:631/printers/PDF-Printer

第一个是实际的打印机,第二个是PDF打印机,在客户端上安装打印机的时候,使用这个地址就可以了。这也是cups共享打印机方式和samba的最明显区别了,如果samba配置好了,网络打印机的地址一般应该是:

\\\\my_machine\\LaserJet-1150

这种形式。在winxp添加网络打印机的操作时,也可以看到这两种形式的例子,分别对应不同的类型。 在安装PDF打印机的时候,需要选择驱动程序,个人觉得最好选择一个彩色的PostScript打印机,比如我选的就是“MS Publisher Color Printer”,这样可以打印彩色的PDF文件。

打印机正确共享之后,基本上就可以提供PDF打印服务了,由于没有配置身份验证,局域网内的用户都是匿名使用的打印服务,所以打印到PDF打印机上的任务,所生成的PDF文件默认是保存在/var/spool/cups-pdf/ANONYMOUS这个目录之下的,所以在samba共享目录中创建一个到这个目录的链接文件即可:

ln -s /var/spool/cups-pdf/ANONYMOUS/ /home/fwolf/links/public/pdf_printer

不用担心访问权限问题,这个目录的属性是777,owner是nobody:nogroup。

我以前说过,PDF打印机默认会把文件存储在$HOME/PDF目录之下,好像不能修改,其实是错误的,看看/etc/cups/cups-pdf.conf这个文件,用户打印和匿名打印的存储方式都在里面定义着呢。

最后仍然存在一些遗憾,cupsd不识别中文文件名,打印中文名称的文件时,会生成“_____”这样的文件名,需要手工修改为正确的名称。

另外我在VMWare里面用winxp添加Ubuntu主机的cups共享打印机时,连接PDF打印机一切正常,连接实际打印机就会“没有响应”,不知为何。

PS: cups打印出来的测试页上有标尺,能够当刻度尺用么?准确否?谁验证过?

Related posts

Categories: Linux Tags:

经典语录集的构想

April 22nd, 2007 Fwolf 4 comments

互联网带来太多经典话语了,搞个网站,专门记录、评价这些话应该不错,英文的似乎已经有了。

经典语录集的构想

* 经典语录集
      o 思路
            + 要经得起时间的考验
            + 要让大多数人信服 Internal Link Internal Link
      o 期待效果
            + 确实经典
                  # 推荐的人多
                  # 存活期长
                  # 实为经典
            + 不够经典
                  # 无法长期被人认同
      o 实现
            + 用户发表语录
            + 用户推荐语录
            + 系统自动删除过期的语录
                  # 重新提交之后,推荐数和存活期都重新计算
      o 语录属性
            + 推荐数
                  # 推荐一次,存活期延长1天
            + 发表时间
            + wizard 存活期
                  # +: 推荐数
                  # -: 时间流逝

Freemind mm: 经典语录集的构想

Related posts

Categories: Internet, Thinks Tags:

Ubuntu FeistyFawn中文字体配置的变化

April 22nd, 2007 Fwolf 3 comments

今天把Ubuntu从Edgy升级到了Feisty,如果用update-manager的话我这里太慢,直接修改apt源升级的,自行解决了一些包的依赖关系之后,升级还是非常顺利的,以前常有的驱动问题本次没有出现,明天就升级公司的那台机。

几乎升级完成第一件事就是搞定中文字体,发现Feisty的字体配置有了明显的变化,原来的一个大配置文件/etc/fonts/fonts.conf现在被分成了许多个小文件,大部分存放在/etc/fonts/conf.avail目录下,并且使用/etc/fonts/conf.d目录下的连接来调用(/etc/fonts/conf.d这个目录下也有少部分配置文件),这种机制和rc2.d以及Apache的mods-available及其相似。

所以说,我的习惯非常适合这种升级和变迁,就是把自己的特殊配置写到单独的文件中,然后ln -s/etc/fonts/local.conf,最后修改/etc/fonts/conf.avail目录下的40-generic.conf60-latin.conf这两个文件,在serif、sans-serif、monospace三系字体的定义中,把Simsun添加到DejaVuBitstream Vera之后就可以了。这样作的好处就是下次升级时所需要作的调整最小。

fonts.conf的语法仍然没有大的改变,以前已经介绍过了,不过今天又发现两篇不错的Feisty字体配置相关文章,推荐一下:

PS: 安装完成之后autoclean了一下,清理出来1.3G空间,呵呵。 PS2: 如果中文输入遇到什么问题的话,大概是需要删除scim-bridge,参考下面两篇文章:

我的办法是把/etc/X11/Xsession.d/95xinput中原来的

export GTK_IM_MODULE="scim-bridge"

改成

export GTK_IM_MODULE="scim"

还有就是scim的选字栏位置总是飘忽不定。。。

Update @ 2007-04-24

如果openoffice 2.2无法启动,编辑/usr/bin/ooffice,添加下面这行:

export GTK_IM_MODULE="xim"

还是有些怪怪的。

Apache无法解析php程序了,提示

Invalid command 'PHPIniDir', perhaps misspelled or defined by a module not included in the server configuration

原来在升级feisty的时候,/etc/apache2/mods-enabled/php5.load这个文件丢了,重新a2enmod php5一下就可以了。

Related posts

Categories: Linux Tags: , , , , , ,

DOMDocument->loadHTML()处理中文的一点问题

April 8th, 2007 Fwolf 5 comments

DOM是php比较新的xml和html处理类,可以像javascript那样方便的操作DOM树,网上更多的是介绍它处理XML的情况,今天我来介绍一个用它处理html时的中文问题,php版本为5.1.6,所有php代码均为utf8编码。

我要处理的html是使用curl从网页上读取过来的,一个是百度的首页,gb2312字符集,一个是有道的首页,utf8字符集,两者的html头部分分别如下:

<html><head><title>百度一下,你就知道   </title><meta http-equiv=Content-Type content="text/html;charset=gb2312">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/pack23501M/index.css" type="text/css"/>
<script type="text/javascript" src="/pack23501M/all.js"></script>
<title>有道</title>

可以看出百度的代码非常不规范,而有道就好多了,这虽然是题外话,其实还是有些关系的,后面会提到。

以上两段html代码,用同样的方式处理结果却不同,比如下面简单的处理(输出网页的title):

$dom = new DOMDocument();
@$dom->loadHTML($html);
echo $dom->getElementsByTagName('title')->item(0)->nodeValue;
...
$html = $dom->saveHTML();

有道的输出结果是正常的,百度却是乱码:

ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“

由于php文档的loadHTML上说了,DOM内部处理全部都是utf8的,所以除了传入内容要utf8化之外,传入的内容中最好还有声明字符集的html代码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

注意,这就是DOM处理html和xml最大的不同了,xml一般要求在第一行就显示的声明字符集,而html则灵活得多,可声明可不声明。不过不管输出的内容是正常还是乱码,dom内的nodeValue和最终的输出结果都是一致的,说明dom工作正常,问题就在输入数据上。

于是,针对百度的gb2312网页内容,增加了两项处理,第一项是使用mb_convert_encoding把网页内容由gb2312编码转换为utf8编码,第二项是把html中的:

<meta http-equiv=Content-Type content="text/html;charset=gb2312">

替换成了utf8的:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

这样按说应该是可以了,但百度的处理结果仍然是乱码,百思而不得其解,偶然当中发现如果$html的值是这样的话输出是正常的:

$html = mb_convert_encoding('<title>测试test</title>', 'gb2312', 'utf-8');
$html = '<meta http-equiv="Content-Type" content="text/html;charset=gb2312">' . $this->html;

这说明,DOM正确识别了html代码中的Content-Type描述,即使html是gb2312编码的,DOM也能夠自动转换为正确的代码。

现在的情况是这样的:

  • DOM工作正常
  • html已经转换为utf8编码
  • Content-Type描述也已经调整

怎么还是会出问题呢?先看看下面的Content-Type描述代码:

$meta = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';

看清楚喽,如果用$meta直接替换百度html代码中的那句meta,不会生效,仍然乱码;可如果把$meta添加到整个html代码前面,也就是<html>前面,输出就正常了,神奇吧。

于是我就推测,之前百度代码处理乱码的原因,可能是在它的html代码中,meta前面有个含有中文的<title>,DOM在解析到<title>的时候,遇到了非ascii字符,而这时没有解析到<meta>,DOM不知道整个html代码是什么字符集,也就无法正确判断<title>的编码,于是糊里糊涂的进行了错误的字符集转换。

为了证实我的猜测,试着这样处理一下:只修改<meta>,把定义位置放在<title>前面,把缺少的引号加上,但是字符集声明仍然为gb2312,html代码也不进行iconv转换,就像下面这样(注意为gb2312编码):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>百度一下,你就知道   </title>

执行,输出正常,而且是正常的gb2312编码,没有乱码。所以我的猜测是正确的,关于Content-Type的meta声明一定要放在<title>前面才行。另外上例中如果把nodeValue输出,是utf8编码的,也就是DOM的内部使用编码,说明DOM输入和输出的时候都会进行字符集转换(根据html代码中的字符集声明)。

最后,总结一下,curl读过来的网页数据,全部iconv为utf8编码,然后把声明Content-Type的<meta>替换到紧跟在<head>的位置上,再用DOM处理就不会出现乱码了。

Related posts

Categories: PHP Tags: , , , , , ,