FreeNAS 上的 AirPrint 和 AirPlay

FreeNAS 上的 AirPrint 和 AirPlay

我想为旧款 Brother 网络打印机添加 AirPrint 支持,如果可能的话,还可以将 AirPlay 音频流传输到同一架子上的立体声音响上。我遇到了很棒的教程关于如何通过在 Arch Linux 上安装 CUPS(用于 AirPrint)和 Shairport(用于 AirPlay)来实现这一点。这让我想知道是否可以诱导更具扩展性的 FreeNAS 平台做同样的事情——我已经有一个用于备份的 FreeNAS 服务器,而不是同时运行 Pogoplug 和我的服务器,让所有东西都运行在一个设备上运行似乎更有效率。但是,我找不到任何旨在实现这一目标的教程。

有没有一种相对简单的方法可以在 FreeNAS 9 上获取 CUPS 和 Shairport(也许在“监狱”中)?

答案1

根据@Roland Smith 的建议,我在 FreeNAS 上创建了一个 portsjail。我为 portsjail 提供了一个静态 IP 地址,禁用了 VIMAGE 并设置了默认网关。然后我进入 FreeNAS 基于 Web 的 shell 并执行以下操作:

  • 输入jls,记下监狱的号码,然后输入jexec [number] sh
  • 一旦进入监狱类型pkg install cups hplip py27-cups
  • 接下来利用我的问题中提到的教程中的 CUPS.conf:

    cd /usr/local/etc/cups
    mv cupsd.conf cupsd.conf.org
    wget http://dl.dropbox.com/u/42238/pogoplug/cupsd.conf
    
  • 按照关于 CUPS 的 FreeBSD 教程,除有关 SMB 共享的部分外,完成 CUPS 的设置。通过启动 CUPS 完成:

    /etc/rc.d/devfs restart
    /usr/local/etc/rc.d/cupsd restart
    
  • 然后,登录http://[hostname]:631并设置打印机(不幸的是,CUPS 自动检测网络设备在我的 BSD jail 中似乎无法工作,因此我不得不使用 HP JetDirect 选项手动设置 Brother MFC-7820N。我打印了一张测试页来确认我的打印机正常工作。我在设置过程中将打印机设置为共享,并在主 CUPS 管理网页上启用共享。

  • 为了提供对 iOS 6 及更高版本的支持,请输入以下内容,略有变化对于被监禁的 shell 中最常见的修复:

    echo "image/urf urf string(0,UNIRAST<00>)" > /usr/share/cups/mime/airprint.types
    echo "image/urf application/vnd.cups-postscript 66 pdftops" > /usr/share/cups/mime/airprint.convs
    
  • 现在,使用方便的 AirPrint 生成器创建 Avahi 服务广告:

    cd /
    wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
    python AirPrint-generate.py
    
  • 接下来,exitjail 返回到主服务器。然后,我将 AirPrint 服务复制到服务器自己的 avahi 系统中(因为在 jail 中运行 Avahi似乎不太可靠)。但是,由于 /etc/ 文件夹每次 FreeNAS 启动时重新创建,而不是直接复制,我们需要在 FreeNAS 上创建一个 Pre-Init 脚本,以便在启动时复制它。为此,请再次登录 FreeNAS 管理界面,单击系统类别,然后单击“添加初始化/关闭脚本”,将类型设置为“Pre Init”,然后输入以下命令:

    cp [PathToYourJail]/usr/local/etc/avahi/services/AirPrint-*.service /etc/local/avahi/services
    
  • 单击“确定”,重新启动,您会发现您的 AirPrint 设备现在正在由 FreeNAS 广播。

  • 从那里开始您就可以出发了!

我已将剩余的两个超级用户问题链接到CUPS 自动发现Avahi 正在关闭在监禁环境中。如果有人对如何解决这些问题有建议,我将不胜感激,但这些建议并不能阻止上述操作的运行,它们只是使其变得不必要地不优雅。

我还没有尝试过是否有可能让 FreeNAS 支持 AirPlay 音频;但我可能还是会在某个时候尝试一下。

答案2

两个都杯子沙尔港可以在 FreeBSD ports 集合中找到。

您可以按照文档在 FreeNAS 上安装它们这里

使用包可能是最简单的方法。如果您想使用非默认选项构建 cups,则必须从源代码构建。

答案3

关于 pkg 安装错误“没有与‘py27-cups’匹配的软件包。新软件包名为 py27-pycups。应该可以安装。

答案4

Timothy R. Butler 的回答很棒,但在 2021 年,很多事情都发生了变化。我认为现在开始工作要简单得多。以下是我对 TrueNAS 12.0-U1.1 所做的操作(我为 jail 选择了 12.2-RELEASE):

# setup a jail which gets its own IP - I did IPv4 only

pkg install avahi cups python3 py37-pycups ncurses vim

# drivers. you will have to play with ones to find one that works for you. you can try gutenprint:
pkg install gutenprint

# or you can try hplip:
pkg install hplip

# or you can try foomatic - grab a PPD from openprinting.org. this was the only thing
# that worked reliably for me and enabled all supported resolutions without 
# advertising it as a duplex color printer, because it uses the ghostscript pxlmono 
# driver for my LaserJet 2100... maybe hplip would be great if it actually knew what 
# my printer supported properly

# enable services
echo "avahi_daemon_enable=YES" >> /etc/rc.conf
echo "cupsd_enable=YES" >> /etc/rc.conf
echo "dbus_enable=YES" >> /etc/rc.conf

# create an admin account, invite to group "wheel", fill in full name and username, leave rest at defaults
adduser

# Listen on 0.0.0.0:631 instead of 127.0.0.1
# Allow All on /, /admin, /admin/conf, and /admin/log
# Require user @SYSTEM on /admin
# AuthType Default on /admin
vim /usr/local/etc/cups/cupsd.conf

# stop making avahi advertise SSH/SFTP
rm /usr/local/etc/avahi/services/sftp-ssh.service /usr/local/etc/avahi/services/ssh.service

# start services
/usr/local/etc/rc.d/dbus restart
/usr/local/etc/rc.d/avahi-daemon restart
/usr/local/etc/rc.d/cupsd restart

# visit http://jail:631 and setup printer, share it, configure, set as server default, print test page to check proper driver

# with latest CUPS, you do NOT need to add any mime conversions! but because apple,
# you have to publish the right stuff to ZeroConf. this script does this:

fetch -o /usr/local/bin/airprint-generate.py https://raw.githubusercontent.com/tjfontaine/airprint-generate/master/airprint-generate.py
chmod +x /usr/local/bin/airprint-generate.py
cd /usr/local/etc/avahi/services

# You may want to edit the script to add feature flags, see https://wiki.debian.org/CUPSAirPrint for more details.
# You may also want to add application/vnd.cups-pdf to the DOCUMENT_TYPES set to True

/usr/local/bin/airprint-generate.py

Avahi 将立即接收服务并开始发布。如果您想更改内容的呈现方式或所宣布的功能等,请编辑脚本输出的文件。Debian 的文档说,您必须在 URF 记录中包含除“无”之外的内容,但这在 iOS 12 上对我有用。如果您愿意,可以从 Debian wiki 示例中填写 URF 记录。

相关内容