回首页


用Linux做Windosw 9X/NT共享打印服务器 
   
  一、检查打印机硬件 
   
  1.1.并口打印机:连接好数据电缆,打开电源,确认打印机本身正常。 
  Linux系统的内核在启动过程中一般都能正确的探测到机器的并口和串口。并口的设备名一般为/dev/lp0或者/dev/lp1。 
  一般Linux发行套件的内核或者本身支持并口打印,或者把并口打印支持编译成可加栽的模块。前者当然不许我们做任何动作就已经支持,如果是后者,用户必须保证在/etc/rc.d/rc.modules文件中用/sbin/modprobe命令把并口打印模块加栽进内核。 
  2.0.X的内核如下: 
  /sbin/modprobe lp 
  2.2.X的内核大致如下: 
  /sbin/modprobe parport 
  /sbin/modprobe parport_pc io=0x378,0x278 irq=7,5 
  /sbin/modprobe lp 
  *注意,如果你有其他的设备(如声卡),IO地址和中断注意不要设成一样的。 
   
  如果在系统启动时,发现启动信息里面有lp0 at 0x378,(polling)的字样,表明系统已经检测到了并口; 
  如果启动的时候没有看清楚,可以tail /var/log/messages去阅读是否在最新的启动信息里面包含了类似的信息。 
   
  这个时候就可以测试一下,输入命令/usr/bin/lptest,打印机应该会出现输出如下的页面: 
   
  !"#$%&'()*+,-./0123456789:;<=>?@ABC 
  ...... 

  1.2.IP网络打印机:设置好IP,子网掩码,基于安全的考虑,建议不要设置路由;保存设置;连接好通往集线器的网线。 
   
  如果能在Linux服务器上远程连接上打印机,出现命令提示符,就OK了。 
   
  二、打印配置 

  2.1.打印软件的选择 
  由于大多数的Linux发行套件都包含了BSD打印系统,加上其易用性,因此得到了广泛的应用。为了支持现代的打印机还必须要安装一些辅助的软件包。一般来说,至少系统上要有如下软件包: 
  Ghostscript,nenscript。大多数的Linux发行套件都包含了这些软件包和另外的一些排版和打印工具。即使出现最糟糕的情况,没有包含以上软件包。可以从Linux的FTP站点或者别的发行套件中获得。 
  Ghostscript ftp://ftp.cs.wisc.edu/ghost/ 
  Nenscript ftp://sunsite.unc.edu/pub/Linux/system/printing 
  二者均可在ftp.cdrom.com等映像站点找到。 
   
  2.2.配置printcap文件 
  BSD打印系统的打印机配置文件是/etc/printcap。printcap文件中每条记录对应着设置好的一个打印机队列。我的printcap文件内容如下: 
   
  lp|HP5000|HP:\ 
  :sd=/var/spool/lpd/lp:\ 
  :mx#0:\ 
  :sh:\ 
  :rm=10.1.9.199:\ 
  :rp=:\ 
  :if=/var/spool/lpd/lp/filter: 
   
  如果是本地的并口打印机,可使用如下格式: 
   
  lp|HP6L|HP:\ 
  :lp=/dev/lp0:\ 
  :sd=/var/spool/lpd/lp:\ 
  :mx#0:\ 
  :mc#0:\ 
  :lf=/var/log/printer-errors:\ 
  :if=/var/spool/lpd/lp/filter: 
   
  printcap记录的格式约定如下: 
   
  a)注释行以"#"开始; 
  b)续行号是"\",注意"\"前不能有空格; 
  c)一行和它所有的续行定义一个打印机队列; 
  d)每行中每个域用冒号":"隔开,第一个域前没有":",最后一个域必须有":"; 
  e)第一个域定义打印机队列名,每个打印机队列可以有多个名字,用“|”隔开;有“lp”的打印队列为默认的打印队列; 
  f)每个本地打印机队列都必须有一个“lp”域定义打印机连接的端口,如“:lp=/dev/lp0”。 
   
  printcap记录中各主要域的意义如下: 
   
  sd(spool directory):打印缓存目录。一般都默认/var/spool/lpd目录下面的子目录。要注意的一点是目录名必须和第一个打印机队列名一致。在上例中,子目录名称应该为lp,而不是HP5000或者HP。 
   
  lp(Local printer):本地打印设备。如/dev/lp0,/dev/lp1,/dev/ttyS0(串口)等等。不能和rp同时设定。如果设置为串口设备,必须用br(baud rate,串口速率)设定串口的传输速率。 
   
  lf(log file):储存错误信息的记录文件。 
   
  mx(maximum size):打印文件的最大大小。默认值mx#0,即不限制;其他值设置最大文件的块(block)数,在Linux上一个block就是1024字节。 
   
  if(input filter):输入过滤器。如果没有指定if或者of,默认值是/usr/bin/lpf。 
   
  of(output filter):输出过滤器。 
   
  br(baud rate):设定串口速率。 
   
  rp(remote printer):远程打印队列名。不能于串口打印机同时使用;必须用rm指定远程打印机;在使用远程打印机时,一般只需设定sd和if域。 
   
  rm(remote machine):控制远程打印的的远程系统。 
   
  sh(suppress header):不打印标题。一般应该设置这个域。 
   
  mc(maximum copies):最大的打印份数。默认值mc#0,即无限制。 
   
  gf(graph filter):图形过滤器。 
   
   
  2.3.打印过滤器 
  在printcap文件中if域是指定打印过滤器的。指定以后,所有要打印的文件都要先经过打印过滤器再送到打印机上。如果没有指定过滤器,系统会自动使用默认的/usr/bin/lpr作为过滤器使用。现在很多Linux的发行版本中的都包含了打印过滤器,如Redhat的printtool包。当然我们也可以自己编写利用已有软件的打印过滤器。以下就是一个HP LaserJet 4/5/6L可以使用的一个简单的过滤器: 
   
  #!/bin/bash 
  DEVICE=ljet4 
  RESOLUTION=600X600 
  PAPAERSIZE=a4 
  SENDOF= 
  nenscript -TUS -ZB -p- | 
  if 〔 "$DEVICE"="Postscript" 〕; then 
  cat - 
  else 
  gs -q -sDEVICE=$DEVICE \ 
  -r$RESOLUTION \ 
  -sPAPERSIZE=$PAPERSIZE \ 
  -dNOPAUSE \ 
  -dSAFER 
  -sOutputFile= - - 
  fi 
  if 〔 "$SENDOF"!=""〕;then 
  printf "" 
  fi 
  exit 0 

  2.4.打印机共享 
  在Linux上是通过samba和Windows网络进行文件和打印机共享的,所以要求要求Linux服务器上安装并启动了samba。同样,现在发行的绝大多数发行版本都包含了samba。可以到http://www.samba.org去了解和下载最新的版本。 
   
  我的/etc/smb.conf文件内容如下: 
   
  〔global〕 
  workgroup = AISAINFO #设置工作组 
  server string = Samba Server 
  hosts allow = 10. 127. 
  printcap name = /etc/printcap #指定printcap位置 
  load printers = yes #载入打印机 
  printing = bsd #打印系统类型 
  security = server #安全模式,我采用的是Windosw NT用户模式 
  password server = NTSERVER1 #Windows NT模式的口令服务器,使用主域/备份域控制器 
  password level = 8 
  username level = 8 
  domain controller = NTSERVER1 
  wins support = no 
  oplocks = False 
  preserve case = yes 
  short preserve case = yes 
  postscript = True #使用postscript 
  〔homes〕 
  comment = Home Directories 
  browseable = no 
  writable = yes 
   
  〔printers〕 #打印机设置区 
  comment = All Printers 
  path = /var/spool/samba 
  browseable = yes 
  guest ok = yes 
  writable = no 
  printable = yes 
  samba正常启动后,在网上邻居就可以看到共享的Linux设置的打印服务器了。然后在各客户端选择 
  开始菜单->设置->打印机->添加打印机->...->选择好打印机型号,好了,mission accomplished! 

  三、Redhat上的PrintTool简单说明 

  很幸运,现在Linux很多的发行版本提供图形界面的配置工具,刚开始的时候Redhat的PrintTool就是一种。 
   
  这样我们就可以,跳过2.2和2.3两个繁琐的部分,而仅仅需要在printtool里面简单的选择 
  add->choose printer type->...->lpc restart all就OK了。 
   
  我add的Remote Unix(lpd) Queue输入内容如下: 
   
  Names (name1|name2|...) lp 
  Spool Directory /var/spool/lpd/lp 
  File Limit in Kb (0=no limit) 0 
  Remote Host 10.1.9.199 
  Remote Queue 
  Input Filter Select *auto* - PostScript 

作者:柏艺晖

回首页