티스토리 뷰
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
드라이버가 없는 프린터라면
구형 프린터는 리눅스 드라이버가 없을 수 있다. 몇 가지 방법이 있다.
- Gutenprint —
apt install printer-driver-gutenprint. 상당수 프린터를 커버한다 - 제조사 리눅스 드라이버 — HP는
hplip, 브라더·삼성도 리눅스 드라이버를 제공한다 - IPP Everywhere / 드라이버리스 — 비교적 최근 프린터는 드라이버 없이 동작한다
- Generic PostScript / PCL — 마지막 수단. 텍스트 인쇄 정도는 된다
라즈베리파이로 만들면 편하다
상시 켜둘 서버가 없다면 라즈베리파이가 좋은 선택이다. 전력 소모가 적고 USB로 프린터를 직접 연결할 수 있다. 프린터 옆에 두고 USB 케이블만 꽂으면 집 안 모든 기기에서 인쇄가 된다.
정리
- CUPS를 설치하고
localhost:631에서 프린터 등록 - 관리자 로그인은 OS 계정.
usermod -aG lpadmin으로 권한 부여 - 외부 접근은
cupsd.conf에서Listen과Allow @LOCAL - AirPrint에는 avahi-daemon(mDNS)이 필요하다. 이게 빠지면 아이폰에 안 뜬다
- 방화벽에서 631/tcp, 5353/udp 개방
- 인터넷에 631 포트를 그대로 열지 않는다
