프린트 서비스

lpd smbd / lpr lpq lprm / h2ps / psutils

GNU/Linux 시스템에서 프린트 서비스는 lpd라는 데몬이 담당하고 있다. 그리고 주로 MS-Windows 계열 시스템과의 프린터 공유를[39] 위해 GNU/Linux 시스템에서 Samba라는 소프트웨어를 이용, smbd라는 데몬을 실행시킬 수 있다. httpd 데몬이 내부적으로 Apache라는 웹서버 소프트웨어를 이용하는 것과 마찬가지다.

프린트 관련 명령의 이용

성실한 관리자라면 시스템의 프린트 서비스가 제대로 동작하도록 설정을 해놓았을 것이다. 그리고 하나의 프린터를 여러 컴퓨터가 함께 이용할 수 있도록 Samba 등 소프트웨어를 설치했으며 그 설정도 이미 되어 있는 상태라고 치자. [40] 이런 경우 그 시스템을 이용하는 사람 뿐만 아니라 옆의 MS-Windows 시스템 이용자도 프린터를 자유롭게 쓸 수 있으며, 쉘 계정을 가진 사람은 그 시스템에 접속할수만 있다면 은하계 어디에서든지 지구에 있는 그 프린터를 이용하는 "특권"까지 누리게 된다. 물론 프린터에 종이가 없다거나 구겨진 종이에 프린터가 멈추는 상황은 - 어쩔 수 없다!

프린트 관련 명령어들
lpr [file...] - 파일을 인쇄

텍스트 형태의 파일이나 PS(문서 형식의 하나, Postscript) 파일을 인쇄하는 명령이다. 이 명령은 아래와 같이 두 가지 방식으로 이용될 수 있다.

$ lpr file1.txt file1.ps
$ cat file*.txt |lpr            # 파이프를 통해 입력을 받는다.

cat 명령은 파일의 내용을 터미널에 뿌리는 것인데, 위의 두 번째 명령을 하면 곧바로 쉘 프롬프트로 돌아온다. 대신 시스템에 달려있는 프린터가 동작하기 시작할 것이다.

lpq lprm - 인쇄 작업 확인/취소

현재 인쇄 작업, 즉 인쇄되고 있거나 인쇄를 위하여 대기 중인 작업을 확인하기 위해 lpq 명령을 옵션 없이 이용한다. 기본 프린터로 지정되어 있는 것 이외에, 시스템에 달려 있는 '모든' 프린터에 대한 작업을 보려면 -a 옵션을 추가해 명령하면 된다.

(자신의 권한으로 가능한 경우) 인쇄 작업을 취소(지우기)하려면 lprm 명령을 한다. lpqlprm 명령을 했을 때 나오는 메시지는 - 실제로 해보면 대충 짐작이 될 것이다.

h2ps [file...] - 예쁘게 다듬어 (축소) 인쇄

텍스트 파일을 그냥 lpr로 인쇄하면 매우 솔직한(?) 출력물을 얻게 된다. 하지만 다음과 같이 h2ps 명령을 이용하면 뭔가 '매우 그럴듯해 보이는' 모양으로 인쇄된다. 출력물을 보면 알겠지만, 이 명령은 단순한 텍스트 파일을 그대로 인쇄하지 않고; 내용을 다단으로(여러 개의 열, multi-columns), 용지방향을 조정(세우거나 눕힘, portrait or landscape), 각 열을 보기좋게 상자로 포장(box-wrapping), 그리고 그 박스의 위아래에 인쇄 정보를 추가해 준다. 물론 이런 변형의 정도는 옵션으로 조절할 수 있다.

$ h2ps file.txt |lpr             # 파이프를 이용
$ h2ps -H source.c |lpr         # 인쇄 정보 문자열을 출력 안 함
$ h2ps -n 3 header.h |lpr       # 기본값(2단/눕힘) 대신 3단으로 출력

여기서 보인 것 말고도 몇 가지 유용한 옵션들을 확인하려면 h2ps --help라고 명령해 보자.

'|lpr'을 쓰지 않으면?

예를들어 h2ps file.txt라고만 하면 터미널로 뭔가 엄청난(?) 암호같은 내용이 쏟아진다! 이것은 뭔가 잘못된 것이 아니라, 명령의 처리 결과를 다른 명령이나 작업에 이용할 수 있도록 표준 출력(터미널)으로 마구 쏟아붓는, 유닉스 계열 시스템의 명령어들이 가진 "매우 좋은" 특징이다. 여기서 소개한 h2ps 명령의 보기는 이런 원칙에 충실한 두 명령이 파이프로 연결된 경우다. 그렇다면 파이프 말고 다른 쓰임새도 있을까? 당연히 있다 :-)

$ h2ps source.cpp > source.ps                # 출력 방향 재지정

터미널로 쏟아졌던 암호같은 내용은 다름아닌 PS 파일이라는 것이다. [41] 위와 같이 명령하면 프린터로는 아무것도 인쇄되지 않고 source.ps 파일이 만들어진다. 이 파일, 즉 source.cpp를 예쁘게 다듬은 결과물 자체를 가지고 있다가 친구에게 메일로 보낼 수도, 또는 언젠가 프린터가 준비된 곳에서 곧바로 인쇄할 수 있다.

포스트 스크립트 - 인쇄를 위한 문서 형식

프린트 서비스를 다루면서 PS(PostScript) 파일에 대한 소개가 없다면 - 마치 공 없이 축구를 하는 셈이 될 것이다. 이 PS와 함께 PDF(Portable Document Format)라는 포맷은 각각 인쇄 및 컴퓨터 화면에 대한 문서의 "표준 형식"이다. 인쇄될 문서의 예로는 학계의 논문들이 있을 것이며 컴퓨터 화면으로 보여질 문서의 예로는 논문을 비롯해 일체의 전자 서적이 있을 것이다. 관심 분야의 논문이나 온라인 서적을 찾아 헤매다 보면 HTML 형식의 문서와 함께 틀림없이 이 PS(또는 EPS; Encapsulated PS)나 PDF를 접할 것이다. (E)PS/PDF는 특정 기업에서 형식에 대한 저작권을 소유하고 있으면서도 "모든 운영체제"에서 "똑같은" 목적으로 쓰일 수 있는 기술이기 때문에 별 저항 없이 표준으로 굳어진 하나의 사례이기도 하다.[42] 이것이 표준이란 말은, 제대로 된 논문이나 전자 출판된 문서들이 바로 이 포맷을 따르지, 말도 안되게 HWP나 MS-Word DOC 형식이 아니란 것이다.

이렇게 굉장한 기술적 표준이 자유롭게 쓰일 수 있다면 물론 좋겠지만, 당연히(?) Adobe의 원래 기술 자체는 전형적인 하나의 상품으로 되어 있다. 그리고 GNU/Linux 시스템에 기본적으로 포함되어 있는 관련 소프트웨어들은 (E)PS/PDF 기술은 마음껏 구사하면서도 상품으로서의 그것은 '전혀' 이용하지 않는다 - 어떻게 이런 일이 가능할까? 이것은 PS/PDF 기술을 흉내내어 그것과 완전히 똑같이 이용할 수 있는 또다른 기술을 누군가 제공하기 때문이다 - GNU/Linux 시스템에서 이용하는 PS/PDF 기술은 바로 Aladdin에서 AFPL(Aladdin Free Public License)에 의해 제공하는 '유령같은 복제품'인 GhostScript를 기반으로 한 것이다. GhostScript는 PS, EPS, PDF 문서 형식 및 상호 변환을 지원하며 일반 이용자들이 가진 평범한 프린터의 드라이버를 조작해서 마치 (비싼) PS 프린터인 것처럼 동작하게 하는, 또 다른 의미에서 굉장한 기술이다. [43] 또한 이것은 GNU/Linux 시스템에서 뿐만 아니라 MS-Windows 시스템을 이용하는 사람들도 (E)PS 형식을 자유롭게 접할 수 있도록 해준다.

아무튼 GNU/Linux 시스템에서 (E)PS/PDF 형식의 문서를 원본과 똑같이 다룰 수 있음을 알았으며, 이제부터 굳이 GhostScript를 언급하지 않아도 실제로 이것과 원래의 PostScript가 어떤 관계인지 늘 기억하리라 믿는다. 그렇다면 이것이 우리가 이용하는 프린터에 도대체 어떤 짓을(?) 하길래 자꾸 '기술'이라고 하는 것인지 확인해 보자.

파일로 인쇄 = Postscript 파일?

GNU/Linux의 그래픽 환경에서 돌아가는 소프트웨어들은 "인쇄" 명령을 내릴 때 보이는 '파일로 인쇄' 옵션에서 대부분 PS 형식을 기본적으로 지원하고, 프로그램에 따라 PDF 형식도 지원된다.

어떤 PS 파일의 내용을 vi 같은 텍스트 파일 편집기로 열어보면 그것이 HWP처럼 화려한(?) 문서에 해당하는 것이면서도 내용 자체는 그냥 텍스트임을 알 수 있다. 이것은 바로 앞서 출력되었던 암호같은 내용을 말한다. 스크립트(scripts)라는 명칭에서 힌트를 얻은 사람도 있겠지만, PS 형식은 프린터라는 기계를 제어할 수 있는 일종의 프로그래밍 언어다! 즉 용지의 어느 좌표에서 다른 좌표까지 선을 그리고 색깔을 바꾸고 하는 등의 일을 일반 그림 파일과는 전혀 다른 과정으로 처리해 준다는 말이다. 프린터의 입장에서 보면, 일반 텍스트가 lpr 명령을 통해 자기에게 주어진다면 그것을 무식하게(?) 텍스트 그대로 출력하지만, PS 형식에 맞게 들어온 텍스트 파일에 대해서는 그 암호같은 소스를 그대로 출력하는 게 아니라 '특별하게' 출력한다.

PS 문서가 하나의 프로그래밍 언어(프린터를 조작하는)이긴 하지만 그렇다고 해서 그 코드를 사람이 직접 다루기에는 너무나 복잡하고 ... 사실상 극히 포스가 강한 사람이 아니고서는 어떻게 시도해 볼 엄두도 내지 못한다. 그래서 GNU/Linux 시스템에서는 어떤 PS 파일의 구조나 내용 등을 조작할 수 있는 몇 가지 명령어들의 묶음을 제공해 주고 있으며, 이것은 보통 PSUtils로 불린다.

PSUtils에 포함된 주요 명령어들
psselect - PS 파일의 일부를 다른 파일로 저장

PS 파일은 대개 어떤 책이나 논문의 내용을 그대로 담고 있어서 그 크기가 부담스러울 때가 많고, 그 밖에도 저마다의 목적으로 하나의 PS 파일에서 특정 페이지만 따로 뽑아낼 필요가 있을 것이다. 이럴 때 바로 이 psselect 명령을 쓸 수 있다.

$ psselect -e all.ps even.ps                      # 짝수 쪽만 (홀수는 -o)
$ psselect -p1,2,5 all.ps 1n2n5.ps              # 1,2,5 쪽만 추출
$ psselect -p4-10 all.ps 4-10.ps                # 4 쪽부터 10 쪽

특정 페이지를 명시하기 위해 , 문자 또는 - 문자를 이용함을 기억하자. 만약 -p-10, 즉 시작 페이지가 없다면 문서의 처음부터, 반대로 끝 페이지가 주어지지 않았다면 문서의 마지막까지를 범위로 잡게 된다. 이 psselect 명령도 h2ps 명령과 마찬가지로, 출력 결과를 어떻게 하겠다는 옵션을 주지 않으면 뽑아낸 PS 페이지를 터미널로 그대로 쏟아붓는다. 즉 출력 방향을 재지정해도 결과 PS 파일을 얻을 수 있고, 원한다면 그대로 프린터로 보낼 수도 있다.

$ psselect -p-10 all.ps                  # 결과를 터미널로
$ psselect -p11-15 all.ps > 11-15.ps # > 문자가 없을 때와 동일한 결과
$ psselect -p16- all.ps |lpr            # 그대로 프린터로 출력

첫 번째 명령은 처음부터 10 쪽까지, 두 번째 명령은 11쪽부터 15쪽까지, 그리고 마지막은 16쪽부터 끝까지 뽑아낸다.

psnup - PS 파일 (축소) 변환

대개 PS 파일은 A4 용지 또는 US Letter 용지[44] 등 나름대로의 용지 크기에 맞게 만들어져 있다. 하지만 h2ps 명령이 텍스트 파일의 내용을 다단으로 밀어 넣는 것처럼, psnup 명령은 PS 파일을 축소해서 종이 한 장에 여러 페이지가 포함된 "새로운" PS 파일을 만들어 준다.

$ psnup -nup 2 some.ps some-2.ps # 용지를 가로로 눕히고 한 장에 두 페이지
$ psnup -nup 4 some.ps some-4.ps        # (세로 방향 그대로) 한 장에 네 페이지

psnup 명령은 물리적인 용지 한 장에 포함될 논리적 페이지를 더 세밀하게 설정할 수 있는 - 예를들어 여백 조절이나 용지 크기 등에 대해 - 옵션들을 가지고 있다. 이 명령이 기본적으로 처리한 결과가 마음에 들지 않으면 man psnup을 참고하기 바란다.



[39] Samba는 프린터 뿐만 아니라 파일 공유 기능도 제공

[40] 자연대 6층의 물리학과 컴퓨터실은 예전에 완벽한 설정이 되었으며 따라서 당시 관리자는 성실했던 것으로 평가할 수 있다 :-)

[41] h2ps라는 명령어 이름 자체가, 한글이 포함된 텍스트 문서를 PS 형식으로 변환한다는 의미를 가지고 있다. 참고로; (한글이 포함되지 않은) 텍스트 파일을 PS로 변환하는 명령으로 a2ps라는 것이 이미 있으며, h2ps 명령은 결국 한글 처리 기능을 추가한 대체 명령이라 할 수 있다.

[42] 이들에 대한 저작권을 가진 Adobe는 아마 컴퓨터 이용자라면 한 번쯤은 들어봤을, 특히 디지털화된 정보를 다루는데 있어 독보적인 기업이다. 이들의 products 페이지, 그 중에서 Technologies 부분을 보면 PostScript와 Portable Document Format에 대한 정의를 찾을 수 있다.

[43] 이와 비슷한 방식으로 돌아가는 것이 GNU/Linux 시스템의 그래픽 사용자 환경인 XFree86이다. 이것은 대기업들이 공동 관리하고 있는 X 윈도우 시스템의 자유로운 대체물이다.

[44] 이것을 실제로 본 적은 없지만, 아마 오노네 나라의 편지지 크기를 말하는 것 같다 :-)