66 1234
发新话题
打印

linux系统管理

linux系统管理

打印

1、 如何打印中文 postscript 文件?
2、我能打印中文 postscript 文件, 可是还是不能从 xxx 程序中打印中文!?

3、我是如何打印中文的

八、中文打印

  在 linux 下打印是件麻烦事, 中文打印由甚. 为什么哪? 将屏幕上看到的文字印到纸上, 要经过两步:

  1)应用程序生成postscript 文件&#59;

  2)将该文件送到打印机 (直接或通过 ghostscript). 让我们先从第二步看起.

1、 如何打印中文 postscript 文件?

  最大的问题是一般打印机不支持或不带中文字体. 一般我们使用 ghostscript, 但ghostscript 对中文字体的支持也不是很完美. 大多数情况下需要打补丁. 目前有以下几种解决方案:

  1)直接 patch ghostscript 使其支持 truetype 字体. 可参看该网站. 这是目前最为简单的方法. 缺点是需要 > 6.0 版的 ghostscript, 该版目前还没有以GPL施放, 任何 linux 都不会预装, 需要自己下载安装.

  2)使用 CID 字体. CID 是 adobe 为亚洲文字设计的字体, 打破了 type1 字体只能容纳 256 个字符的限制. ghostscript (> V5.5?) 直接支持 CID 字体, 无需补丁. 可参看同一网站如何设置. 本来这应该是最好的方案, 因为不要打补丁.可惜 CID 字体太少了.

  3)Patch ghostscript 使其支持 VFlib, 通过 VFlib 支持 truetype 字体. 优点是支持老的 ghostscript 版本 (中文有 for 5.5 的 patch, 日文甚至有 for 4.x的), 支持字体变形等. 缺点是需要额外安装 VFlib. Turbolinux 6.0 以上及CLE v0.9p1以上均使用了该方法. 可以到它们相应的软件包中找补丁.

  4)陈向阳的 gbpfb 包, 将中文 truetype 字体转换成 type1 pfb 字体, 由于type1字体只能容纳 256 个字符的限制, 一个 truetype 字体将会生成 30-40个 pfb 字体, 再由一个前端文件控制. 当年这是我们中国人唯一知到的打印中文 postscript文件的方法. 我还记得用此法第一次从 netscape 打印出中文的惊喜. Turbolinux4.x 以下及蓝点等中文发布均使用了该方法. 但现在与前述的 1-3 法相比, 显得有些简陋, 存在一些难以克服的毛病, 已经越来越少的被使用了. 如果您想要可以在上面提到的几个中文 linux 中找到.

  5)在 postscript 文件中内嵌中文点阵字体. 优点是连 ghostscript 都不需要了,直接送到任何支持 postscript 的打印机上就可打印. 缺点是生成的文件庞大,打印出的质量欠佳.

  最后, 使用 1-4 法都需要通过 ghostscript 将文件发往打印机. 有两种用法:

  直接使用, 如:

gs -q -dBATCH -sDEVICE=printer-type -sOutputFile=lpr -
或设置 filter 使 lpr 自动调用 ghostscript.

2、我能打印中文 postscript 文件, 可是还是不能从 xxx 程序中打印中文!?

  这就需要我们看看打印过程的第一步, 即应用程序生成postscript 文件. 目前有多少 linux 下的程序能生成支持中文的 postscript 文件? 少只又少, 真正不需要任何补丁就能 work 的我知道的有三个: netscape/mozilla/abiword(>=0.12).

  主要问题是很少有程序能正确处理中文 font. 在 UNIX/LINUX 世界没有统一的打印API, 任何程序想打印, 必须自己写 code 生成 postscript 文件, 很难想像所有程序员都原意并有能力考虑中文 postscript 字体问题. 现在 gnome-print 和 QT printer class 都是试图产生一个公用 API 以便应用程序不必自己处理生成 postscript的问题. 可惜二者都处于起步阶段, 仅仅聚焦于 type1 字体, 还没顾的上考虑中文的问题. 也就是说目前所有 GNOME/KDE 应用程序, 只要使用这两个 API, 都不能生成正确的中文 postscript 文件, 不能印出中文字. 台湾有人(见CLE的QT包)写了 QT printer 的patch, 但还不是很完善&#59; 没听说有 gnome-print 的中文 patch.

3、我是如何打印中文的

  我用的是ghostscript-6.0-1.i386.rpm和gbpfb-1.1-2.i386.rpm来进行中文打印。想要该软件的人可再http://www.linuxaid.com.cn/engineer/hubertzou/获得。

  需要提醒的是,要先安装ghostscript-6.0-1.i386.rpm,用qs -help测试一下后再安装gbpfb-1.1-2.i386.rpm.

  再netscape或mozilla中的print command中把lpr改为ns2cps - | lpr

  这样,就可以用netscape来打印中文html和中文txt文件了。

  至于其它的方法,我没有试过,但为了提供尽量多的方法,所以也提供给大家。

TOP

linux系统管理

Mozilla和glibc

上网冲浪最重要的软件莫过于浏览器了。Linux下常用的浏览器有Netscape、Lynx等。这里我要向各位推荐的是Netscape的新一代浏览器核心——Mozilla。
glibc 2.2的一个重要方面就是彻底国际化,比如wchar_t内码为4字节Unicode(UCS-4)。

  九、Mozilla的汉化

  上网冲浪最重要的软件莫过于浏览器了。Linux下常用的浏览器有Netscape、Lynx等。这里我要向各位推荐的是Netscape的新一代浏览器核心——Mozilla。Mozilla完全符合最新W3C标准,目前最新版0.8.1无论是从功能还是稳定性上来说都已经做的相当不错了。

  1、下载Mozilla 0.8.1

  下载地址http://www.mozilla.org

  2、安装

tar zxvf mozilla-i686-pc-linux-gnu-0.8.1.tar.gz
cd mozilla
./mozilla

  这时mozilla就启动了。现在我们来做一些配置工作。首先选择Edit--Preferences,弹出对话框,选择Appearance--Fonts,在Language Encoding中选择Simplified Chinese,然后将Serif、Sans Serif、Monospace都选择misc-simsun-gb2312.1980-0字体。Size设为14。

  有些站点可以自动识别语言。这可以通过以下方法实现:

Navigator--Languages--Add...

  选择Chinese/China [zh-cn]

  点击Move Up,将中文语言放在最上面。

  最后点OK完成配置,然后退出Mozilla。(注意:这一点很重要,因为mozilla退出时会改写配置文件。如果没有退出mozilla做以下操作将无效!)

cd mozilla/defaults/pref,编辑unix.js

  找到这样两行

pref("font.min-size.variable.zh-CN", 16)&#59;
pref("font.min-size.fixed.zh-CN", 16)&#59;

  改为

pref("font.min-size.variable.zh-CN", 12)&#59;
pref("font.min-size.fixed.zh-CN", 12)&#59;

  这样可以使网页看上去美观多了。

  3、最后是对输入法的配置

cd ~/.mozilla

  在里面找到pref.js文件,在文件最后加上这样一行

pref("xim.input_style","over-the-spot")&#59;


  然后运行mozilla,就可以显示效果很好的中文网页了!显示效果一点不比IE 5.0差。

  为了方便,可以在panel中增加mozilla的启动图标。mozilla有一个bug,当xmms正在播放的时候不能启动,因此启动mozilla时需要停止xmms。

  为了方便中文识别,可以选择View--Character Coding--Auto-Detect--Simplified Chinese以后mozilla会自动识别中文代码页面。

  十、glibc 2.2的汉化实验

  glibc 2.2的一个重要方面就是彻底国际化,比如wchar_t内码为4字节Unicode(UCS-4)。对于最新国家标准18030-2000的支持更是自然而然的事。

  我的兴趣所在却是UTF-8。试验UTF-8的条件终于成熟了。

  第一件事,去http://dickey.his.com/xterm/xterm.html取来最新的 xterm 源码包,

tar zxf xterm.tar.gz
./configure --enable-wide-chars
make

  得到 xterm 执行码。调出一个新的 xterm 窗口,


./xterm -u8 -fn 9x18U &

  在这个 xterm 窗口中,理论上说,所有的Unicode文件都能显示,中文自不例外。假如手头一时找不到UTF-8编码的文件,转一个很容易。比如 A.GBK是一个国标文件,用 iconv -f GBK -t UTF-8 A.GBK >A.UTF-8马上得到一个UTF-8文件。看一下对不对, cat A.UTF-8

  第二件事,造一个使用UTF-8的中文环境。

  先拿两个文件来,

cp /usr/share/i18n/charmaps/UTF-8.gz .&#59;
gunzip UTF-8.gz  cp /usr/share/i18n/locales/zh_CN


  由这两个文件便可以生成UTF-8中文环境,

localedef -v -c -f ./UTF-8 -i ./zh_CN /usr/lib/locale/zh_CN.UTF-8

  有了这一中文环境,就可以选用了,

LC_ALL=zh_CN.UTF-8&#59; export LC_ALL

  如何证明呢,看时间, date +%c结果是 2000年11月09日星期五EST下午10点39分15秒甚至ls -l也显示出中文月份。至于中文输入,chinput,cce就可搞定!

TOP

linux系统管理

路由功能

ADSL

 本解决方案主要针对公司、学校、网吧等需用一条ADSL将整个局网连上INTERNET,适合于10 -50台计算机的中小型网络用户。对于10台以下计算机的用WINAGTE、SYGATE就蛮好用。
 让我们来看看具体环境先,某公司总部办公室21间、计算机30台。组成10-100MB对等局域网,用一条ADSL宽带线路跑,以前用WINGATE将局域网连上INTERNET,后来觉得不爽我又用WINDOWS2000双网卡做了个NAT地址转换,使用网关和透明协议拖。这下下感觉舒服些了。呵呵,用了不久又发现些不大不小的毛病:比如内部互发OICQ慢啊,访问SINA.COM.CN等个别网站有问题啊等等。MS的东东看似简单但是当你想微调一下系统的时候,你就会突然发现原来人生多么无奈啊。痛定思痛!:(我毅然决定放弃WINDOWS2000,改用LINUX!!

 要用LINUX得搞台机器吧,东拼西凑好不容易搞了一台。各位看官请看: INTEL FX主板+PENTIUM 75芯片+16MB内存+540MB硬盘+512K显卡+DE220 10MB网卡。软件嘛随便找个LINUX发行版,我手头有REDHAT 6.2 核心是2.2.14,按SERVER的安装方式,经过长达48分钟左右的安装,可爱的#提示符出现在大家面前!各位看客也可以根据自己的具体情况安装。

  硬件、软件都装好了,下面开始具体配置。(加了#提示符号表示输入命令)

1、用ifconfig看看网络配置
[root@localhost /root]#ifconfig
lo   Link encapocal Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:23 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0

 只有lo没找到网卡。不急,自己配。我是DLINK的DE220 IRQ=3 IO=300,兼容NE2000。在/etc/conf.modules 加两句。
具体如下:

[root@localhost /root]#cd /etc
[root@localhost /root]#vi conf.modules
alias eth0 ne
options eth0 io=0x300 irq=3

 IO和IRQ可以根据你自己的网卡设置如果不能插入就按INSERT,加完就按ESC。再按: ,再输入w 存盘,再q 退出。如果不放心就 #more conf.modules 看看写进去没有。
 一般市面上ISA的便宜网卡都兼容NE2000。如果是新手在LINUX下安装网卡的可能会遇到这样那样的问题,多在网上找找看看,一般都能解决。要提醒大家最好别用PNP即插即用模式,在LINUX出了问题不好解决,简直是场噩梦。

2、下面配置网卡IP地址, 在/etc/sysconfig/network-scripts下有个文件ifcfg-eth0 写成如下:

DEVICE=eth0
IPADDR=192.168.0.254
这是网卡的IP地址,以后客户机的网关就是这个地址。
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none

 重启动就能找到网卡。然后

[root@localhost /root]#ifconfig
eth0  Link encap:Ethernet HWaddr 00:40:05:64:11:28
   inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  RX packets:347573 errors:0 dropped:0 overruns:0 frame:0
  TX packets:40194 errors:0 dropped:0 overruns:0 carrier:0
  collisions:35 txqueuelen:100
  Interrupt:3 Base address:0x300
lo    Link encapocal Loopback
  inet addr:127.0.0.1 Mask:255.0.0.0
  UP LOOPBACK RUNNING MTU:3924 Metric:1
  RX packets:23 errors:0 dropped:0 overruns:0 frame:0
  TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:0
 哈哈,eth0找到网卡了,配置也正确,恭喜恭喜!进行下一步。

3、下一步做ADSL的驱动。
 去http://www.roaringpenguin.com/pppoe/rp-pppoe-2.6.tar.gz下个驱动程序先,大概85K大小。copy到/root去。然后

#tar xvfz rp-pppoe-2.6.tar.gz
#cd rp-pppoe-2.6
#./go

 开始安装,装好就#make一下下,开始配置ADSL。

Welcome to the Roaring Penguin ADSL client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... Looks good! Now, please enter some information:
USER NAME
>>> Enter your PPPoE user name (default):

 这里输入在电信局申请的adsl的帐号

INTERFACE
>>> Enter the Ethernet interface connected to the ADSL modem For Solaris,this is likely to be something like /dev/hme0. For Linux, it will be ethn,where 'n' is a number.(default eth0):

 问你用哪片网卡拨号,默认是第一片eth0就可以了

4、最后一步:配置ipchains伪装IP。
 在 /etc/sysconfig的network文件里保证要有这句: FORWARD_IPV4=true
 然后改/etc/rc.d/rc.local这个文件,加入以下内容

<SPAN la
Do you want the link to come up on demand, or stay up continuously? If you want it to come up on demand, enter the idle time in seconds after which the link should be dropped. If you want the link to stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP addresses.You may have some problems with demand-activated links.
>>> Enter the demand value (default no):

 用缺省的no就可以了。

Please enter the IP address of your ISP's primary DNS server. If your ISP claims that 'the server will provide DNS addresses', enter 'server' (all lower-case) here. If you just press enter, I will assume you know what you are doing and not modify your DNS set up.
>>> Enter the DNS information here:

 这里填你ISP的DNS地址,成都用61.139.2.69,辅助DNS成都可用202.98.127.32

PASSWORD
>>> Please enter your PPPoE password:
 ADSL拨号密码这个东东。

 搞定!爽爽,用#adsl-start 就可以开始拨号。如果连接成功系统会提示你:
…….connect
 用ifconfig看看。[root@localhost /root]# ifconfig

eth0   Link encap:Ethernet HWaddr 00:40:05:64:11:28
  inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  RX packets:347573 errors:0 dropped:0 overruns:0 frame:0
  TX packets:40194 errors:0 dropped:0 overruns:0 carrier:0
  collisions:35 txqueuelen:100
  Interrupt:3 Base address:0x300
lo    Link encapocal Loopback
  inet addr:127.0.0.1 Mask:255.0.0.0
  UP LOOPBACK RUNNING MTU:3924 Metric:1
  RX packets:23 errors:0 dropped:0 overruns:0 frame:0
  TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:0
ppp0   Link encapoint-to-Point Protocol
  UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
  RX packets:20498 errors:0 dropped:0 overruns:0 frame:0
  TX packets:19187 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:10

看见ppp0没有!'

TOP

linux系统管理

IPChains

用Linux+IPChains代替Windows+WinGate
蓝森林 http://www.lslnet.com 张中华
 任务:办公室有10台电脑,组成局域网,其中1台名为gate的机器配有ISDN卡,可拨号上网,另外9台机器也要上网,由gate机器做代理或网关,共享其ISDN设备。原来的方案是:gate机器上的操作系统是Win98,使用的代理软件是WinGate。现在,gate机器的操作系统换成了Linux,怎么让其它9台机器也能上网?
 经过尝试,我使用IPChains的IP伪装转发功能成功地做到了这一点。我的配置为:蓝点Linux 2.0,Kernel-2.2.16,isdn4linux v3.1pre1,上海贝尔生产的ISDN内置卡,型号为SBT6021。
 下面介绍具体做法。介绍顺序为:内核->ipchains的配置->其它机器的配置。

0、 前提条件

 前提条件当然就是这台配有ISDN卡,安装了Linux的名为gate的机器,本身必须能够顺利拨号上网。我已做到了,具体操作过程写在我的另一篇文章《在Linux下使用ISDN拨号上网》中。

1、 内核

 这个方案的原理是:由于这台gate机器建立拨号连接后,具有真正的IP地址,能够正常地访问Internet,而局域网内其它机器却没有真正的IP地址,不能象gate机器那样正常
 地访问Internet,解决办法就是由gate机器代劳其它机器的Internet访问请求,假装是它自己的。把这台gate机器作为局域网的网关,当它收到来自局域网内其它机器的请求数据包时,进行伪装,然后再转发出去;相应地,当伪装后发出去的数据包得到响应返回时,先对该响应数据包进行还原,再转交给回局域网内真正发出请求的那台机器。这种做法叫做IP Masquerade(IP伪装)。
要Linux内核支持IP伪装这种功能,在编译内核时,必须选中下列选项:

Network firewalls
IP: firewalling
IP: masquerading
IP: ipportfw masq support
IP: ipautofw masquerade support
IP: ip fwmark masq-forwarding support
IP: ICMP masquerading

 但我不必急于编译内核,如果现有的内核已经包含这些选项了,我又何必重复一遍呢。
那我怎么知道现有内核是否已经包含这些选项了呢?看内核编译配置文件/usr/src/linux/.config(注意:文件名以"."开头的文件是隐藏文件,要用ls -a才可看到。)我看到其中有下面这7行内容,对应于刚才的7个选项:

CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_MASQUERADE=y
CONFIG_IP_MASQUERADE_ICMP=y
CONFIG_IP_MASQUERADE_IPAUTOFW=m
CONFIG_IP_MASQUERADE_IPPORTFW=m
CONFIG_IP_MASQUERADE_MFW=m

 "=y"表示内核直接支持(代码已链入内核中),"=m"表示模块支持(代码在另外的内核中,可由内核载入)。于是这就表明,蓝点Linux 2.0的原有内核已包含这些选项了,我就不用重新编译内核啦。
 但仍然得做点事情,首先必须命令内核,启动IP转发功能:
     echo 1 > /proc/sys/net/ipv4/ip_forward
 往/proc/sys/net/ipv4/ip_forward里写入"1"就行了。
 有些功能如ftp, irc等的伪装,需要相应的模块支持,这些模块放在/lib/modules/2.2.16/ipv4目录中,装入它们:
     depmod -a
     modprobe ip_masq_ftp
     modprobe ip_masq_irc
     modprobe ip_masq_raudio

2、 ipchains的配置
 蓝点Linux 2.0包含的ipchains软件已经足够满足我的要求了,我就不必安装新的,只需配置一下即可。Ipchains是一个包过滤器,功能强大,设置也复杂,但我只想使用其IP伪装转发功能而已,设置得以简化。我这台Linux机器在一个局域网上,局域网的域名为thalia.com,地址为210.96.100.0,这台机器的主机名为gate,地址为210.96.100.10。

 对ipchains过滤器进行设置,就是设置各种链及规则。先看看目前情况如何:

     ipchains -L
 得到类似下面的信息:

     Chain input (policy ACCEPT):
     Chain forward (policy ACCEPT):
     Chain output (policy ACCEPT):

 没什么规则,3条链的策略都是接受。
 由于只是使用伪装转发功能,所以只对forward链进行操作。
 ipchains -P forward DENY把forward链的策略设为DENY,拒绝通过。此后增加可通过的规则,逐渐允许更多的数据包通过,这是一种先紧后松的做法。

     ipchains -A forward -s 210.96.100.0/255.255.255.0 -j MASQ

 增加1条规则,这条规则说明:对来自210.96.100.0局域网内(网络掩码为255.255.255.0)的数据包(-s 210.96.100.0/255.255.255.0),进行伪装处理(-j MASQ)。
 这时候再看一下情况如何:
     ipchains -L
 得到类似下面的信息:
     Chain input (policy ACCEPT):
     Chain forward (policy DENY):
     target prot opt source destination ports
     MASQ all ------ 210.96.100.0/24 anywhere n/a
     Chain output (policy ACCEPT):
     forward链中多了1条MASQ规则。
 要简单地实现共享ISDN上网,这已经足够了。

3、 其它机器的配置
 配置局域网上的其它Win98, Win2000机器,要点是把缺省网关设为那台Linux gate机器,DNS域名服务器也设为那台Linux gate机器。应用软件如IE,OutlookExpress等不用做任何设置,想象成ISDN装在本机上就行。
 我现在就去设置1台Win98机器试试看。
 (1)在“控制面板 | 网络 | 配置”下,选中“TCP/IP->3Com PCI Ethernet Adapter”(这台机器配的是3Com网卡),点击“属性”按钮,弹出TCP/IP属性对话框。
 (2)到“IP地址”页中,指定IP地址,IP地址为210.96.100.14,子网掩码为255.255.255.0;到“网关”页中,添加新网关210.96.100.10。
 (3)机器重启。
 (4)打开IE,浏览http://168.160.224.103(即新浪网sina.com.cn),看到了新浪的首页;但是浏览http://www.sina.com.cn,却不行。这是域名解析的问题。
 (5)重复(1)步骤,弹出TCP/IP属性对话框,到“DNS配置”页中,启用DNS,主机名写zzh,添加DNS服务器搜索顺序210.96.100.10。机器重启。打开IE,再次浏览http://www.sina.com.cn,这次好啦。

4、 形成shell文件
 上面对内核和ipchains的配置是逐条命令进行的,已经全部成功通过,现在把它们写成shell文件。
/etc/ppp/ip-masq-start文件内容如下:
# IP masq
echo 1 > /proc/sys/net/ipv4/ip_forward
depmod -a


modprobe ip_masq_irc
modprobe ip_masq_raudio
ipchains -P forward DENY
ipchains -A forward -s 210.96.100.0/255.255.255.0 -j MASQ

 让它成为可执行文件:
     chmod a+x /etc/ppp/ip-masq-start
 以后事情就简单了。要开启IP伪装转发功能,下命令/etc/ppp/ip-masq-start。

TOP

linux系统管理

TOP

linux系统管理

呵呵 谢谢楼主了~

TOP

 66 1234
发新话题
搜索网络 站内搜索
如果发现非法信息请及时报警!
鄂ICP备05013984号
卡通警察-察察