2012-09-09

FreeBSD ] FreeBSD + gnome2 + scim -x윈도우 설치



출처 : http://www.freebsdcity.org/?doc=bbs/gnuboard.php&bo_table=Tips&wr_id=83&sselect=concat(wr_subject,wr_content)&stext=x11&soperator=1&srch_rows=5&srch_comment=1&srch_days=0#c97

1. xorg 설치

# cd /usr/ports/x11/xorg && make install clean


2. gnome설치

설치 중간중간에 옵션을 묻는 창이 뜨므로 수시로 확인하세요
옵션은 대부분 디폴트로 두시는걸 추천합니다.

# cd /usr/ports/x11/gnome2
# make install clean


3. 한글글꼴 설치(필자는 은진체 밖에 안씁니다.)

# cd /usr/ports/korean/aleefonts-ttf/ && make install clean


4. root로 xorgconfig실행

실행후 /etc/X11/xorg.conf가 생성 됩니다. 더 필요한 옵션이 있으면 적절하게 수정하시면 됩니다.


5. 한글입력을 위한 SCIM설치(대세가 nabi대신 scim인듯 합니다.)

# cd /usr/ports/textproc/scim && make install clean

# cd /usr/ports/korean/scim-hangul/ && make install clean

# cd /usr/ports/korean/scim-tables/
이 패키지를 설치 하라고 FreeBSD가 추천합니다만.. 한글입력에 문제가 있습니다.
"내가"를 입력하면 "낵ㅏ"로 입력되어 버리는 좀 황당한 입력기더군요.
설치 하지 않는걸 추천합니다.

startx로 실행하면 system tray에 scim아이콘이 보일것입니다.
기본이 ctrl-space가 한/영 변환이니 설정에서 바꾸시면 됩니다.


6. startup 스크립트 작성

gdm, kdm은 ~/.xsession에 설정하고 startx를 쓴다면 ~/.xinitrc에 아래의 사항을 삽입한다.(없으면 파일을 만들면 됩니다)
.xsession을 쓰실때는 chmod +x ~/.xsession으로 실행권한을 줍니다.

LANG=ko_KR.UTF-8
LC_ALL=ko_KR.UTF-8
LINGUAS=ko_KR.UTF-8

export XMODIFIERS="@im=scim"
export LANG LC_ALL LINGUAS
export GDK_USE_XFT=1
export G_BROKEN_FILENAMES=1
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
#export XIM_PROGRAM="scim -d"
export FLASH_GTK_LIBRARY=libgtk-x11-2.0.so.0

scim -d

/usr/X11R6/bin/gnome-session


7. gnome 시작

7.1 startx로 시작

# startx

7.2 gdm으로 시작

# vi /etc/rc.conf에 gdm_enable="YES"를 추가 한후 리부팅 하면 gdm이 기본으로 올라옵니다. 다시 한번 강조 하지만 GDM을 쓰실때는 ~/.xinitrc대신 ~/.xsession에 6.의 설정을 해야 합니다.


8 한글, 영문 font매칭 시키기

gnome2를 설치 하면 영문은 sans, 한글은 은진체가 기본으로 매칭 됩니다. 전 우분투를 쓰면서 DejaVu Sans와 은구슬체를 매칭 시킨게 가장 보기 좋아서 그렇게 씁니다. 특정 영문과 한글 폰트를 매칭 시키려면 ~/.fonts.conf를 아래와 같이 수정하시면 됩니다
.fonts.conf가 없으면 파일을 만드시면됩니다. 수정후 gnome 폰트관리자에서 DejaVu Sans로 폰트를 바꾸고 gnome을 재시작하면 됩니다.

<fontconfig>
<match target="pattern">
  <test name="family">
    <string>DejaVu Sans</string>
  </test>
  <edit name="family" mode="append" binding="strong">
    <string>EunGuseul</string>
  </edit>
</match>
</fontconfig>


9. firefox한글화 하기

# cd /usr/ports/korean/firefox-ko/ && make install clean


기 본적인 설정이 끝났습니다. theme와 fonts등등은 기본적으로 프비 포트에 있으니 필요하신것들을 설치 하시면 될겁니다. 여타 리눅스 보다 기본적으로 설치 되는 프로그램이 상당히 없습니다. gimp, xchat, gaim등등등..... 필요하신 프로그램이 많을껍니다.

제가 설치한 스샷을 올립니다. 1280x1024에 cairo 테마를 입힌것입니다.

지금 KDE컴파일 중에 있습니다 컴파일이 끝나면 KDE와 skim설정을 올리도록 하겠습니다.

FreeBSD] CVSUP을 이용한 시스템업그레이드


CVSUP을 이용한 시스템 업그레이드  최준호 저. 
http://www.bsdnet.co.kr/articles/article.qsp?no=17

FreeBSD&Linux] log파일 관리



FreeBSD&Linux] ntpd와 ntpdate를 이용한 시간(타임)동기화


ntpdate 


ntp 서버로부터 시간을 취득해, 로컬의 시스템 클록을 설정합니다. 0.5초 이상 어긋나 있을 때는 단순하게 시간을 맞춥니다만, 0.5초 이하때는 미조정합니다. ntpdate 는, 나중에 설명하는 ntpd 가 움직이고 있을때는, 사용할 수 없습니다.


ntpd 


ntpd 는, ntp 서버를 참조해 시스템 클록을 보정하면서, 클라이언트에 시간을 제공합니다.


ntpdate


ntpdate 는, FreeBSD에 인스톨이 끝난 상태입니다. 이하와 같은 장소에 있습니다.

chaco# which ntpdate

/usr/sbin/ntpdate

chaco# ls -la /usr/sbin/ntpdate

-r-xr-xr-x  1 root  wheel  32392 Sep 19  2001 /usr/sbin/ntpdate



공공적인 ntp 서버의 clock.nc.fukuoka-u.ac.jp 133.100. 9.2 를 설정해, 시간을 취득합니다.

public ntp server list : http://www.eecis.udel.edu/~mills/ntp/clock1.htm

이런 느껴로 설정할 수가 있습니다. (당연, root 로. )



chaco# ntpdate 133.100. 9.2

21 Apr 15:27:35 ntpdate[239]: adjust time server 133.100. 9.2 offset -0. 026094 sec


OS 기동시에 ntpdate 를 실행하려면 , /etc/rc.conf 에 추가합니다.


# add ito 2002/04/21

ntpdate_enable="YES"
ntpdate_program="ntpdate"
ntpdate_flags="-s -b 133.100. 9.2"


재기동하면(자), 기동시의 메세지에 ntpdate 라고 표시될 것입니다.

Doing additional network setup: named ntpdate portmap.



ntpd

ntpd 는, FreeBSD에 인스톨이 끝난 상태입니다. 이하와 같은 장소에 있습니다.

chaco# which ntpd

/usr/sbin/ntpd

chaco# ls -la /usr/sbin/ntpd

-r-xr-xr-x  1 root  wheel  202496 Sep 19  2001 /usr/sbin/ntpd



OS 기동시에 ntpdate 를 실행하려면 , /etc/rc.conf 에 추가합니다.


# add ito 2002/04/21

xntpd_enable="YES"
xntpd_program="ntpd"
xntpd_flags="-p /var/run/ntpd.pid"



-p 옵션은, ntpd demon의 프로세스 ID 를 기록하기 위한 파일명과 패스를 지정합니다.
ntp 의 설정 파일 (ntp.conf)을, /etc 에 작성합니다.


server          time.bora.net
server          time.nuri.net
server          time.kriss.re.kr
driftfile       /etc/ntp.drift


driftfile 란, 시간 오차치를 보존해 두는 파일입니다. /etc/ntp.drift 를 작성.

chaco# touch /etc/ntp.drift



OS 를 재기동한다.

ntpd 의 동작을 확인하기 때문에(위해), ntpq 를 실행합니다. * (이)가 있는 것이, 현재 동기 하는 대상의
서버명입니다.



chaco# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*time.bora.net . GPS.             1 u  228  256  377  116.670  -110. 71  41.277
+time.nuri.net . GPS.             1 u  177  256  377  117.227  -101. 18  34.259
+time.kriss.re.kr  ntp1.xephion.ne  3 u  238  256  377   78.622  -112. 11  44.346
         

FreeBSD]apache 잔잔한 팁들 모음

출처: Unix.co.kr

브라우징 제거

아파치의 디폴트세팅은 브라우징이 enable되어 있다.
브라우징이란 웹브라우저에서 URL입력시 index.html과 같은 정확한 파일명을
생략하고 디렉토리만 적었을 경우, 디렉토리내 파일목록이 출력되는 현상을 말한다.
http.conf의 디렉토리 디렉티브내 다음줄 추가

Options -Indexes


아파치 인증창 사용

http.conf에서 인증을 걸 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig


해당 디렉토리에 다음과 같이 .htaccess파일(텍스트파일) 생성
[root@ns mrtg]# cat .htaccess
AuthName "MRTG를 위한 인증"
AuthType Basic
AuthUserFile /webhosting/mrtg/.auth
require valid-user

AuthName: 인증창 타이틀
AuthType: 인증형태
AuthUserFile: 인증자들의 리스트를 가진 파일(htpasswd명령어로 생성)

-c(create)는 처음 파일을 생성할때 필요하다.
[root@ns mrtg]# htpasswd -c .auth kang
New password:
Re-type new password:
Adding password for user kang
[root@ns mrtg]# ls -l .auth
-rw-r--r-- 1 root root 19 May 3 16:54 .auth


외부 IP접근제어

http.conf의 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig
Order Allow,Deny
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24
Allow from all

Deny from 에 접근차단할 ip대를 입력.
슬 래쉬(/)뒤의 숫자들은 net mask지정(생략하면 single ip에 대한 차단)


위의 내용을 종합한 예는 다음과 같다.


Options -Indexes FollowSymLinks MultiViews

AllowOverride AuthConfig

Order allow,deny
Allow from all
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24




가상호스트 /Redirect

아래의 예는 dbakorea.pe.kr로 오면, www.dbakorea.pe.kr로 redirect시킨다.
본인은 아파치말고, packet filtering으로 처리하려했으나 실력부족과 게으름으로 인해 그만두었다.

ServerName dbakorea.pe.kr
Redirect / http://www.dbakorea.pe.kr


가상호스트의 전형적인예

ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea-mobile
ServerName mobile.dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-access_log common
ScriptAlias /cgi-bin/ /webhosting/dbakorea-mobile/cgi-bin/
DirectoryIndex login.html


아파치 정보출력제어
80포트로 telnet후 get / http/1.0하면 나오는 정보제어

ServerTokens Prod[uctOnly]
: Apache 만 보여줌
ServerTokens Min[imal]
: Apache 버젼만 보여줌
ServerTokens OS
: 아파치 버젼과 운영체제를 보여줌
ServerTokens Full (또는 지시하지 않았을때)
: 모두 보여줌


Offline Browser서비스 거부
(출처: http://www.apache.kr.net)
WebZip만 테스트해봤지만 %{User-agent} 라는 변수에 'MSIE 6.0b'와 같이 찍힌다.
한마디로 안된다. 다른 용도로 사용될 지 몰라도,..

<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from env=go_out
</Directory>

#CustomLog /usr/local/apache/logs/access_log common
#CustomLog /usr/local/apache/logs/referer_log referer
#CustomLog /usr/local/apache/logs/agent_log agent
CustomLog /usr/local/apache/logs/access_log combined

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "WebCopier" go_out
</IfModule>

<VirtualHost *>
ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined
</VirtualHost>



아파치 로그 rotate

디폴트로 아파치로그는 wtmp, lastlog등과 같이 일정 시간, 크기..등등에 따라 로그의 순환이 이루어지지 않는다.
logrotate로 3개의 로그를 1달단위로 순환하려면 /etc/logrotate.conf파일의 마지막에 다음과 같이 추가한다.

# system-specific logs may be configured here
/usr/local/apache/log/www.dbakorea.pe.kr-access_log {
monthly
rotate 2
}


바이러스등에 대한 아파치로그 제거

# CodeRed Worm등의 로그제거
SetEnvIf Request_URI default\.ida CodeRed
SetEnvIf Referer \.ida CodeRed
SetEnvIf Request_URI cmd\.exe CodeRed
SetEnvIf Referer cmd\.exe CodeRed
SetEnvIf Request_URI root\.exe CodeRed
SetEnvIf Referer root\.exe CodeRed


ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined env=!CodeRed

2012-09-07

Linux] 프린터 설정과 출력하기


프린트 설정과 출력하기

리눅스에서 프린팅하기

리눅스 쓰시다가 프린팅 때문에 고생하셨던분 많을겁니다. 제가 모를때는 그냥 파일을 도스 파티션으로 보내서 도스에서 프린트 하곤 했는데. 리눅스상에서 프린터를 쓰니까 편하군요. :) 문서를 편집했으니 이제 프린트두 해야 컴퓨터를 제대로 쓰는게 되겠죠?
리눅스 상에서 프린팅을 하려면 우선 프린터를 점검 해야 합니다. 터미널 상에서 

    cat 문서화일 >/dev/lp1 (혹은  lp0) 
   ( 0인지 1인지는  해봐야 압니다. 혹은 부팅할때 화면을  유심히 살펴 보시던가..) 

이렇게 해서 문서가 프린트가 되면 우선은 성공한겁니다. 프린터를 쓰려면 커널 컴파일 시에 pararell  printer에서 yes를 선택한다음에 커널  컴파일을 해줘야 합니다.  음.. 다 되었다고 치고  위 명령을 치면 텍스트가 프린트 되는걸로 믿고 계속 나가겠습니다. /usr/local디렉토리에 보면 apsfilter라는 디렉토리가 있습니다.
이 디렉토리에서 SETUP 프로그램을 실행 시키면 여러 가지 물어봅니다 postscript프린터인가  deskjet인가 postscript를 지원하지 않는 프린터 인가.. 

For which printer type do you want to setup apsfilter...
1 - for a Postscript printer
2 - for HP Deskjets
3 -  for another  printer who doesn't  support the  Postscript language      
3 -  for another printer who  doesn't support  the  Postscript languageFor which printer 
     type do you want to setup apsfilter...

데스크젯인경우는 2번을 택하면  되겠고  postscript카드가 있는 프린터는 1번 나머지는 3번을 택하면 되겠네요.

          Do you need a more verbose description of the printer drivers ? y/n ? 
 y를 누르면  프린터에대한 정보들이 나옵니다.  자신과 맞는프린터를  잘 찾아보세요

q를 누르고 프린터 드라이버 맞는걸 선택합니다. 

 [ appledmp bj10e bj200 declj250 eps9high epson epsonc escp2   ibmpro jetp3852 la50 la75 laserjet
   lbp8 lj250 ljet2p ljet3   ljet4 ljet4l ljetplus ln03 m8510 necp6 nwp533 oki182 paintjet pj   pjxl
   pjxl300 r4081 sparc t4693d2 t4693d4 t4693d8 tek4696  ]   pjxl pjxl300 r4081 sparc t4693d2 t4693d4
   t4693d8 tek4696  ]
저같은경우는 hp lazerjet   6p인데 드라이버가 맞는게  없네요. 저같은경우는 ljet4로   선택했습니다.  (ljet4l로 선택하면  300dpi밖에 안나오는군요.) 
     Is your printer a  (c)olor printer 
     or a  (m)onoprinter ?

칼라인지 모노인지 선택하세요

     What paper form do you use (i.e.: a3, a4, letter,...)See /usr/local/apsfilter/doc/paper for valid
     sizes...
     Note: enter the paper form in lowercase letters: 
     Note: enter the paper form in lowercase letters: 

용지의 크기를 선택한후에 

      Do you have a (s)erial or a (p)arallel printer interface ?

parallel프린터라고 설정해준 다음 디바이스를 설정해줍니다. 아까 말한  /dev/lp1 혹은 /dev/lp0을 선택하면 됩니다. 저장을 하면 우선은 OK.
/etc/printcap이란 파일에 지금의 내용이 저장이 됩니다.

보통의 파일은   lpr명령으로 출력할수 있습니다.  출력은  보통  spool에 싸였다가 들어온  순서대로 하나씩  출력을 하게 되는데 만약 이상한 문자가 찍힌다거나 해서 출력을 멈추고 싶을때는 lprm이란 명령을 쓰면 됩니다. 프린터에 무엇이 출력되고   있는지 혹은 출력 될것인지는 lpq라는 명령을 쓰면되는데 lprm이란 명령을 쓰면 lpq했을 때 나오는 출력물들이 모두 취소가 됩니다. (참고로 lprm이란 명령을 쓰지   않으면 리눅스가 돌아가는 상태에서 프린터를 켜놓는다면 이것이 끝날 때 까지 계속 프린터가 작동할 것입니다. 프린터에 있는 취소 버튼을  눌러봤는데 그걸로는 어림도 없더군요..)

글에서 프린팅

글로 들어갑니다. 한글에서  프린트 할  때 적절한  드라이버를 선택해야 합니다. 6p드라이버가 도스용은 있으나 리눅스용은 없는  관계로 이걸로  프린트가 안될겁니다.   따라서  다른 걸로 선택하세요. 저는  lj4   pcl5e.pdr로 선택했습니다. 전송포트에서 표준명령(lpr)을   선택하고 프린터 이름은 raw라고 칩니다. 그러면..  제대로 프린트가 될것입니다.( 저의 경우만 나열해서.. 다른경우는 잘 모르겠네요. 아마도 비슷할겁니다.)

XV에서 프린팅

print버튼을 치면  xv prompt 창이  뜨는데 lpr이라고 기본적으로  써 있을겁니다.  여기서   color grayscale   b/w  등의   버튼이   있는데  흑백 프린터의 경우(제 경우)  b/w(black/white)만 선택하지 않으면 좋은 이미지를 얻을수 있습니다. color나 grayscale이나 찍는 그림은 똑같아요. 이를 선택하면 그다음 용지 선택을 합니다.
세로로 찍을것인가  (portrait) 가로로  찍을것인가 (landscape)  그다음  크기를 어느정도로  할것인가 용지 크기 등등..을  맞춰주고 ok를 누르면 알아서 찍어줍니다.  600dpi로 찍으니까 선명하게 나오는군요..

ps 파일
ghostview로 혹은 gv라는 프로그램을 ps화일을   볼수 있습니다. 대표적인 예가 호랑이  그림(이거 아시는분만 아시는건가?)  아무튼..  s화일로 찍으시면.. 정말  환상적인  그림을 볼수 있습니다.  또한 tex같은걸로 만든 화일도 ps화일로 변환해서 프린트 하면.. 선명하게 나오겠죠?  호랑이 한번찍어보세요..흐흐..

만약 프린터기가 제대로 설정 됐는지 알아 볼려면(설정은 64번에서 설명 했지요) 프린팅의 가장 기초적(?)인 명령을실행시켜 봅니다.

        eun-young:~# cat print.txt > /dev/lp1 (lp0,lp2 일수도 있습니다)
이래서 찍힌다면 일단 한단계는 설공 한 것입니다.
만약 계단현상등이 바생한다면 해결책은 64번이나 아래부분에 있으니 참고 하셔요. 또한 문서를 찍으려면 ps 화일로 바꾸는데 그 방법은 다음과 같습니다.

         eun-young:~# hpscat print.txt > print.ps 

그러면 print.txt 하는 텍스트 문서가 print.ps 라는 ps 화일로 변환 됩니다.
만약 hpscat이 없다는 메세지가 나오면 자료실에 가셔서 hpscat 받으셔요 ^^;ps 화일은 고스트뷰(gv)로 보시면 됩니다.


그럼 잡담은 이만 마치고 본격적인 글로 들어가서...
9번 팁란에 있는 이만용님의 "고스트뷰에서 ps 화일" 이라는 글을 올리겠습니다.

 ____________________________________________________________________________   
오늘 사용담으로 쓰고자 하는 것은 전혀 새로운 내용이 아닙니다. 바로 리눅스 프린팅에서 중요한 화일인 /etc/printcap  화일에 대해서 약간 알아보고자 하는 겁니다. 여러분도 아시다시피 리눅스는 멀티유저 시스템이므로 도스에서와 같이 문서 프린팅시에 프린터 포트에 직접 자료를 보내는 방식을 사용하지 않습니다.
서버/클라이언트 체계를 가지는 리눅스 프린팅 시스템은 lpd 라고 하는 프린팅 서버가 작동하는 상황에서 lpr 이라는 클라이언트의 요청을 받아 적절하게 프린 팅을 해냅니다. 멀티유저/멀티태스킹 상황에서 여러 사용자와 여러 프로그램의 프린팅 요청이 서로 꼬이지 않고 원활하게 이루어지도록 하는 것이지요.

리눅스에 대한 감을 잡기가 힘들었던 초보 시절에는 요놈의 프린팅이 너무도 힘 든 일이었습니다. 특히 저와 같은 HP 데스크젯 사용자들은 PCL 모드 하에서 "계단 현상" 같은 것을 만났을 때는 어찌할 줄을 몰라했을 겁니다. 도대체 엄청나게 많은 셋팅 화일에 어떤 것을 건드려야 할 지도 무서울 지경이었죠.
그래서 프린팅을 할 때는 항상 도스로 부팅해야 하는 우스꽝스러운 짓을 매번 반 복할 수 밖에 없었습니다.

리눅스를 쓰다보면 도스 시절에는 만나기 어려웠던 고급 문서 스타일들을 만나게 되는데요, 그 중에 하나가 바로 포스트스크립트 화일(ps)입니다. 이 문서로 되어 있는 프로그래밍 매뉴얼을 많이 찍는 편인데요, 데스크젯 500 정도에서도 아주 깔 끔한 문서를 얻을 수 있습니다. 제본을 해서 책으로 쓰고 있을 정도니까요航.
또 말이 길어졌군요. 오늘은 X 윈도우에서 포스트스크립트 문서를 볼 수 있는 고 스트뷰(Ghostview)에서 File 메뉴의 Print 항목을 통해서 프린트하는 방법에 대하여 말씀드리겠습니다. 원하실 때는 한 장 한 장씩 프린트를 할 수도 있지요. 한참 동안을 엄두도 못내고 관심도 못져가졌던 printcap 화일이지만, 요즘에 들어서야 뭔가 조금 알 수 있게 된 것 같습니다.
         

------------------------------------------------------------------------------
[ printcap 이란? ]
-----------------------------------------------------------------------------

  여러분의 /etc 디렉토리로 한 번 가보십시요. 그러면 수많은 화일들 중에서 print- cap이라는 화일을 찾으실 수 있을 겁니다. 이 화일은 여러분의 프린팅에 관한 모든 사항을 기재하고 있는 녀석입니다.  이 화일의 목적은 "일관성"입니다.
  예를 들어 아래한글 화일은 아래 한글에 들어가서 프린팅하고, 워드 문서는 워드 프로그램에 들어가서 프린팅하는 것이 일반적입니다. 그래픽 화일은 또 그 나름의 프로그램을 써서 프린팅을 하지요. 하지만 리눅스에서는 이와 같은 사용법을 별로 좋아하지 않습니다. 아래한글 화일 프린팅에 대한 <논리적 프린터명 : 예를 들어서 hwpprn>을 정의하고, 워드 문서 프린팅에 대한 <논리적 프린터명>을 wordprn 이런 식으로 정의해놓고, 실제 프린팅시에는 lpr -P<논리적 프린터명> <문서화일명> 이런 식으로 사용하는 것을 좋아합니다.

  처음에는 신경써주어야 할 것이 좀 많지만, 일단 printcap 화일을 제대로 만들어 만 준다면 항상 lpr 명령을 가지고 손쉽게 프린팅할 수 있어 좋습니다. 

  하나의 물리적인 프린터를 가지고 여러 가지 작동 방식에 대한 논리적 프린터명 과 알맞는 동작을 설정해줌으로써 여러분의 프린터를 요술지팡이로 만들어 드립니다.
------------------------------------------------------------------------------
[ printcap에서 프린터 정의하기 ]
------------------------------------------------------------------------------
   printcap 화일을 한 번 살펴 보십시요. 뭐 이런게 다 있어! 할 정도로 인간이 알 아볼 수 없을 만한 형식으로 프린터를 정의하고 있습니다. 하지만 알고 나면 별 것 아닙니다. 

 <!-- 형 식 -->
 NAME1|NAME2|NAM3:STRING_CAPABILITY=STRING:
:NUMERIC_CAPABILITY#NUMBER:BOOLEAN_CAPABILITY:

  자, 처음 NAME1, NAME2, NAME3 는 논리적 OR 기호 "|"로 분리하여 설정합니다.
이는 lpr -P<NAME> 에서 쓰실 바로 그 이름입니다. NAME1 또는 NAME2 또는 NAlME3 는 모두 같은 논리적 프린터를 지칭하는 말입니다. 하나만 지정해주셔도 되고 3개 까지 지정하실 수 있습니다. 만약 첫번째 이름이 lp 라면 -P 옵션을 주지 않으셨 을 때의 기본 프린터입니다. 다음의 예를 보시죠.

 lp|Deskjet500|Oh my sexy printer: ... 어쩌구 저쩌구
이 때 lp, Deskjet500, Oh my sexy printer 는 모두 같은 프린터를 지칭하는 이름 이 됩니다. lpr -Plp 또는 lpr -PDeskjet500 또는 lpr -P"Oh my sexy printer" 이 렇게 사용하시면 됩니다. 마지막 이름에는 빈 칸이 있으므로 옵션 지정시에 따옴표 로 묶어주셔야겠죠?

  그 다음으로 아셔야 할 사항은 콜론(:)의 사용입니다. 이는 앞으로 모든 셋팅을 서로 구분해주는 구분자(delimeter)의 역할을 합니다. <셋팅1>:<셋팅2>:<셋팅3> 이런 식으로 구분합니다. 꼭 콜론을 하나만 쓰란 법은 없고, 여러번 사용해도 괜찮 습니다. 그리고 프린터 정의를 여러줄에 걸쳐 작성할 때는  문자를 사용합니다. 이런 건 많이 보셨겠죠?

  1. STRING_CAPABILITY 
  여기에 해당하는 것은 lp 옵션과 같이 프린터 포트명 등의 문자열을 지정하는 셋팅 을 말합니다. 문자열로 셋팅하는 경우에는 모두 lp=/dev/lp1 이런 식으로 = 문자를 써주시고 그 뒤에 문자열을 써주십시요.

   2. NUMERIC_CAPABILITY
  여기에 해당하는 것은 mx 옵션과 같이 프린트 작업의 크기를 블럭 숫자!로 나타내 는 경우입니다. 숫자와 관련된 것은 모두 mx#0 뭐 이런 식으로 # 문자 다음에 숫자 를 써줍니다.

   &uuml; 3. BOOLEAN_CAPABILITY
    이것은 논리값에 해당하는 것으로서 그냥 써주면 True 안써주면 False 이므로, 그 셋팅을 써기만 하면 됩니다. sh 나 sf의 경우 그냥 :sh: 또는 :sf: 이런 식으로 말입니다. 뭐든지 실전이 중요하겠지요?

    ------------------------------------------------------------------------------
    [ printcap 실전 ]
    ------------------------------------------------------------------------------
   저의 HP 데스크젯 500 프린터를 가지고 설명드리기로 하겠습니다. 이 녀석은 텍스 트를 출력할 때 도스 스타일로 LF(Line Feed)와 CR(Carriage Return)을 둘 다 보내 주어야 다음 줄에서 정상적으로 찍힙니다. 
 그런데 Un*x 텍스트 문서는 오로지 LF 만을 가지고 있기 때문에 그냥 프린트하면 Carriage Return을 하지않고 Line Feed 만 하므로 어떻게 되겠습니까? 다음과 같이 찍히게 됩니다.
           I'm every woman.
           It's all in me.

   를 출력하면

           I'm every woman.
                        It's all in me.

    이걸 바로 "계단현상" (Staircase Effect)이라고 말합니다.
      이 문제를 해결하기 위해서는 HP 프린터 더러 짜샤! 앞으로 LF는 몽땅 CR+LF로 생 각해! 라고 제어문자를     보내주면 됩니다. 이것이 첫번째 해결방법이지요. 하지만 이런 것이 들어먹지 않는 놈은 sed 등을 이용해서 각 줄마다 CR 문자를 강제로 넣 어서 출력하게 하는 겁니다. 이런 짓을 매번 프린트할 때마다 해준다는것은 좀 문제가 있죠? 그래서 "필터(filter)"라는 개념이 있습니다. if 라는 셋팅에서 해줄것인데, 필터라는 것는 lpr 프린팅에서 아주 중요한 개념입니다. if 필터를 지정해 주면 프린트 시작 전에 문서에 대한 적절한 사전작업과 가공작업을 해낼 수 있습니 다. 실제로 lpr 은 문서에 대한 적절한 처리를 하는 것이 아니라 적절한 처리를 할 수 있는 필터를 불러내서 쓰는 것에 불과하죠. 그 녀석은 프린팅작업의 전체적인 관리인일 뿐입니다. 다른 노가다는 필터들이 합니다.

             lp|Deskjet500:lp=/dev/lp1:
                          :sd=/var/spool/lp1:
                          :sh:
                          :sf:
                          :mx#0:
                          :lf=/var/spool/lp1/HPLog:
                          :if=/var/spool/lp1/LFasCRLF:

      저는 여기서 아주 많이 쓰이는 몇 가지 셋팅에 대해서만 논하겠습니다. 
      자세한 것은 HOWTO 문서(Printing-HOWTO)를 참고하시기 바랍니다. 

    1. lp=/dev/lp1
 lp 는 프린터 포트를 지정하는 것입니다. 여러분의 프린터는 대부분 병렬 포트에 물린 프린터겠죠? 시리얼 프린터는 여기서 설명을 생략합니다. 장치명은 /dev/lp0 /dev/lp1, /dev/lp2 이런 식으로 나갑니다. 어떤 프린터가 작동하는지는  cat README > /dev/lp1 이런 식으로 짧막한 문서를 cat 명령을 통해서 실험해보십 시요. 프린터가 작동하는 장치명이 바로 우리가 사용할 프린터 포트명입니다.
 저는 /dev/lp1 이더군요.
 아! 커널에서 패러렐 프린터 지원을 yes 로 하셨겠지요? :) 
 /dev/null로 하시면 어떤 일이 벌어질까요? 생각해보세요.
 네트워크 프린터의 경우에는 포트라는 개념이 좀 이상하죠? lp= 이라고만 써주셔야 합니다. 자세한 것은 HOWTO 문서를 참고하세요. 중고등학생들을 위해서 누구 멋지 게 번역해주실 분 안계십니까?

    2. sd=/var/spool/lp1
 sd 는 Spool Directory, 스풀 디렉토리를 지정해주는 겁니다. lpr 에 의한 프린팅 은 당연히 멀티태스킹하에서 작동하므로 스풀링을 합니다. 보통 /var/spool 디렉토리의 하부 디렉토리에 지정해줍니다. root 권한으로 적절한 디렉토리를 만들 어서 사용하세요. 그 디렉토리는 다음과 같은 사용자 권한을 갖게 만드세요.
 사용자 root 그룹 daemon 사용자권한 chmod ug=rwx,o=rx 이런 식으로 말입니다.

     3. sh
 lpr 은 다중 사용자 환경에서 쓰이는 멋진 프린터 클라이언트입니다. 따라서 여러분 이 단일 사용자라 할지라도 그런 걸 알 리가 있나요? 보통 한 사람의 작업 이 시작했음을 알리기 위해서 맨 첫 장은 그 사람의 계정명이 찍혀 나옵니다. 이런 일은 필요가 없겠지요? 바로 sh 즉 Suppress Header 라는 셋팅을 주시면 sh가 True 가 됩니다. 

     4. sf
 프린팅 작업이 끝난 후 보통 FormFeed 를 함으로써 종이를 내보냅니다. 이런 일이 필요없다면 sf 즉  Suppress ForeFeed 를 설정하세요. 도트 프린터에서 유용하게 쓰이겠군요. 연속용지에서요.

     5. mx#0
 mx 셋팅은 스풀 데이타의 크기를 제한하는 겁니다. 0으로 지정하면 제한이 없어집 니다. 보통의 경우 그냥 0으로 해주십시요. 왜 스풀 데이타 크기를 제한하는지는 여러분이 생각해보세요. 1K 단위로 지정을 하는데, 만약 지정된 스풀 데이타보다 큰 경우가 발생하면 에러 메세지를 보내고 프린팅을 중지합니다.

      6. lf=/var/spool/lp1/HPLog
 프린팅에 대한 log 상황을 기록하는 화일입니다. 만약 그 화일을 만드시지 않으면 아무런 기록도 생기지 않습니다. 미리 만들어 주셔야 합니다.

      7. 윽! 드디어 필터가!!! if=/var/spool/lp1/LFasCRLF
 자, 이제 중요한 필터가 나왔습니다. 이 녀석이 중요한 일을 해주는 스크립트 화일 입니다. /var/spool/lp1/ 디렉토리에 LFasCRLF 라는 스크립트를 다음과 같이 작성 해주십시요.

            #!/bin/sh
            # Filter for HP printers to treat LF as CRLF
            # the ``echo -ne'' assumes that /bin/sh is really bash     echo -ne 33&k2G
             cat
             echo -ne f

 if 는 Input Filter라는 의미입니다. if 가 있는 경우에는 lpd 는 자료를 직접 프린터 포트에 전송하는 것이 아니라 요놈의 입력 필터를 실행시켜서 그 녀석에게 자료를 stdin 으로 보내줍니다. 그러면 필터는 stdin 으로부터의 입력에 대하여 적절한 처리를 한 후 그 자료를 stdout으로 보내줍니다. 아주 중요합니다. lpd는 필터에게 stdin으로 리다이렉트시켜주고 필터는 stdout으로 자료를 내보냅니다. stdout으로 나오는 자료를 lpd가 포트에다 써주는 겁니다.

 바보 도스에서는 리다이렉트 기능이 보잘 것 없지만, Un*x에서는 정말로 강력한 기능입니다. 비교가 안되지요.

 위 필터는 cat 명령으로 자료를 stdout으로 보내기 전에 echo 명령을 통해서 stdout에다 프린터 제어 문자열을 보냅니다. 물론 HP 데스크젯이 알아듣는 제어 문 자열이겠지요?

앗! 스크립트는 물론 chmod를 이용하셔서 실행가능하게 만드셔야겠죠? :) 사용자 root, 그룹 daemon, 퍼미션은 -rwxrwxr-x 입니다.

이 필터를 어떻게 만드는가는 여러분의 상상력에 달려있습니다.

------------------------------------------------------------------------------
[ printcap 이용하여 Ghostview에서 낱장 PS 찍기 ]

------------------------------------------------------------------------------

다음과 같은 새로운 논리적 프린터 정의를 printcap에 추가해줍니다.

      Deskjet|Ghostview Print|:lp=/dev/lp1:
            :sd=/var/spool/lp1:
            :lf=/var/spool/lp1/GhostviewPrintLog:                       
            :if=/var/spool/lp1/IF_for_ghostview:                        

            :mx#0:
            :sh:

IF_for_ghostview 스크립트의 내용은 다음과 같습니다.

          #!/bin/sh
          gs -q -dSAFER -sPAPERSIZE=a4 -dNOPAUSE -r300 -sDEVICE=djet500 -sOutputFile=- -

아주 간단하죠? 그냥 gs를 이용해서 찍는 것에 불과하죠. 모든 일은 사실 gs가 해 주는 거니까요. 다른 프린터 기종을 쓰시는 분들은 적절히 바꾸어주시면 됩니다.

           -sDEVICE 부분을 바꾸어 주셔야겠죠? -q 와 -dNOPAUSE를 꼭 넣어주시고요.

  중요!!! 필터는 lpd 에 의해 stdin으로부터 자료를 제공받습니다. 그리고는 stdout 으로 자료를 출력해주어야 합니다. 따라서 명령줄의 맨 마지막 줄의 - 는 아주  중요합니다. 그리고 -sOutputFile=- 또한 강제적입니다! :)
이렇게 하시고 나면 X 윈도우용 어플 고스트뷰에서 원하시는 페이지를 찍으실 수 있습니다. 원하는 페이지 한 장 또는 마크(Marked)한 페이지만 찍을 수 있는데, File 메뉴의 Print marked pages... 뭐 이런 메뉴를 클릭하시면 프린터명을 물어 옵니다. 그 때 Deskjet 이라고 적어주세요. 그러면 지잉! 하고 멋진 포스트스크립 트 문서가 찍힐 겁니다.

Linux] 비밀번호를 잃어버렸을때


password를 잊어 버렸을 때

우리는 리눅스를 사용하다 보면 비밀 번호를 잊어 버리는경우가 있습니다. 특히 root의 비밀번호를 잊어버리는 경우는 정말 큰일이 아닐 수 없습니다. 일반사용자라면 root로 로긴해서다음과 같이 고치면됩니다. 그리고 root사용자라면 다음과 같은 방법으로 고치면 되겠습니다. 그래서 다음의 글을 프로그램 세계 5월호에서 인용하겠습니다. 레드햇 사용자라면 리로 프롬프트에서 linux single이라고 입력하고들어갑니다. 그러면 로그인 과정을 거치지 않고 단일 사용자모드로 로그인해 들어가게 됩니다. 그리고 나서 /etc/passwd파일의root 사용자 패스워드를 지워버립니다.
          cd /etc
          vi passwd
          root:JzvRWa.LiXqku:0:0:root:/root:/bin/bash
          →
          root::0:0:root:/root:/bin/bash
         
첫 번째 콜론(:)과 두 번째 콜론 사이의 암호화된 패스워드를 지워서 공백으로 만들고 난 뒤 다시 부팅해서 들어오면 됩니다. 슬렉웨어 사용자라면 부트 디스켓과 비상용 복구 루트 디스켓을 이용하여 플로피만으로 리눅스 부팅한 후에 여러분이 하드에 설치한 리눅스 루트 파티션을 아무 곳에나마운트한 다음 마찬가지로 /etc/passwd 파일을 수정하면 됩니다.

          -stoneonl-