티스토리 뷰

AirPrint를 지원하지 않는 구형 프린터를 아이폰·아이패드에서 바로 인쇄할 수 있게 만드는 방법이다. 리눅스 서버에 CUPS를 올려서 프린터를 공유하면 된다.

설치

1. 개발자라면 누구나 가지고 있는 개인 서버에 CUPS를 설치

# cups install
apt install cups

# setting cups 
vim /etc/cups/cupsd.conf

2. 접속하기

localhost:631

3. 프린터 설치 및 공유 프린터로 지정하기

고생했던 부분: /admin 접근 권한

localhost:631/admin 에 접근하면 인증을 요구하는데, 어떤 계정으로 로그인해야 하는지가 명확하지 않다.

# 리눅스 계정 <username> 을 lpadmin 그룹에 넣기
sudo usermod -aG lpadmin <username>

위 명령어를 입력하면 리눅스의 <username> 계정의 아이디와 비밀번호로 관리자 로그인이 가능하다. CUPS는 자체 계정 체계가 없고 OS 계정을 그대로 쓴다.

그룹 변경은 재로그인해야 반영되므로, 안 되면 CUPS를 재시작한다.

sudo systemctl restart cups

외부에서 접근하려면 cupsd.conf 수정

기본 설정은 localhost에서만 접근을 허용한다. 다른 기기에서 붙으려면 열어줘야 한다.

# /etc/cups/cupsd.conf

# 모든 인터페이스에서 수신
Listen 0.0.0.0:631

# 로컬 네트워크에서 프린터 검색 허용
Browsing On
BrowseLocalProtocols dnssd

<Location />
  Order allow,deny
  Allow @LOCAL
</Location>

<Location /admin>
  Order allow,deny
  Allow @LOCAL
</Location>

@LOCAL은 같은 서브넷만 허용한다는 뜻이다. 인터넷에 그대로 열지 않는 게 중요하다. CUPS 관리 화면이 외부에 노출되면 프린터를 통해 내부망에 접근할 여지가 생긴다.

AirPrint가 되려면 mDNS 광고가 필요하다

여기가 핵심이다. 프린터를 CUPS에 등록했다고 아이폰에 바로 뜨지는 않는다. AirPrint는 Bonjour(mDNS)로 프린터를 발견하는 방식이라 그 광고를 해줄 데몬이 필요하다.

sudo apt install avahi-daemon
sudo systemctl enable --now avahi-daemon

CUPS 2.x는 avahi가 설치돼 있으면 공유 프린터를 자동으로 광고한다. 그래도 안 보이면 프린터 설정에서 Share This Printer 체크와 Publish shared printers 옵션을 확인한다.

# 광고 상태 확인
avahi-browse -rt _ipp._tcp

아이폰에서 안 보일 때 체크리스트

  • 같은 네트워크에 있는지 — 아이폰이 5GHz, 서버가 유선이면 라우터가 분리해놓은 경우가 있다. 게스트 네트워크는 특히 격리된다
  • mDNS가 서브넷을 못 넘는다 — VLAN이 나뉘어 있으면 avahi-daemon의 리플렉터 기능을 켜야 한다
  • 방화벽 — 631/tcp(IPP)와 5353/udp(mDNS)를 열어야 한다
  • 프린터 공유 설정 — CUPS 웹 UI에서 해당 프린터가 shared 상태인지
  • PDF 변환 가능 여부 — AirPrint는 PDF를 보낸다. 프린터 드라이버가 이를 처리할 수 있어야 한다
# 방화벽 (ufw)
sudo ufw allow 631/tcp
sudo ufw allow 5353/udp

드라이버가 없는 프린터라면

구형 프린터는 리눅스 드라이버가 없을 수 있다. 몇 가지 방법이 있다.

  • Gutenprintapt install printer-driver-gutenprint. 상당수 프린터를 커버한다
  • 제조사 리눅스 드라이버 — HP는 hplip, 브라더·삼성도 리눅스 드라이버를 제공한다
  • IPP Everywhere / 드라이버리스 — 비교적 최근 프린터는 드라이버 없이 동작한다
  • Generic PostScript / PCL — 마지막 수단. 텍스트 인쇄 정도는 된다

라즈베리파이로 만들면 편하다

상시 켜둘 서버가 없다면 라즈베리파이가 좋은 선택이다. 전력 소모가 적고 USB로 프린터를 직접 연결할 수 있다. 프린터 옆에 두고 USB 케이블만 꽂으면 집 안 모든 기기에서 인쇄가 된다.

정리

  • CUPS를 설치하고 localhost:631 에서 프린터 등록
  • 관리자 로그인은 OS 계정. usermod -aG lpadmin 으로 권한 부여
  • 외부 접근은 cupsd.conf에서 ListenAllow @LOCAL
  • AirPrint에는 avahi-daemon(mDNS)이 필요하다. 이게 빠지면 아이폰에 안 뜬다
  • 방화벽에서 631/tcp, 5353/udp 개방
  • 인터넷에 631 포트를 그대로 열지 않는다
댓글


최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday