Kali Linux 添加并共享惠普打印机
背景
因为是第一次在 Kali Linux 上使用 HP Laser Jet 1020 打印机,本来以为很容易,结果最终卡在hplip-3.20.2-plugin.run
这个插件上,没有它,打印机就无法正常使用。
目前最新的驱动版本号为3.20.2,所以以下驱动的名称里的版本号默认为此。
安装
因为 Kali Linux 不在惠普支持的系统列表里,即使 Kali 是基于 Debian 的二次开发。所以当我们从惠普官网下载并安装最新的驱动时,会因系统缺失好多库而无法安装。
这里我们从 Kali 的官方仓库里下载驱动。
1 | :~$ sudo apt-get install hplip printer-driver-hpcups cups |
CUPS 是苹果为 Mac OS 开发的一款打印服务,自带 Web 管理界面。
hd-setup
程序来下载hplip-3.20.2-plugin.run
这款插件。
因为程序默认下载时是从 Linux 的官方仓库进行下载,而 Kali 的官方仓库无此插件,所以这里我们需要使用终端运行此命令来获取此文件在惠普网站的下载地址。
1 | :~$ hp-setup |
最终安装失败,但在终端上会留下类似https://developers.hp.com/sites/default/files/hplip-3.20.2-plugin.run
这样的地址,这时我们需要手动去下载此文件。
1 | :~$ wget https://developers.hp.com/sites/default/files/hplip-3.20.2-plugin.run |
或者从我的共享里下载,[189-cloud][toc_web_189], 访问码: dl1s
hplip-3.20.2-plugin.run.asc
是惠普为 hplip-3.20.2-plugin.run
的签名文件,没有它,在安装此插件时会提示非法插件。
再次运行hp-setup
,安装过程中时手动选择我们刚刚下载的插件。
添加打印机
使用图形界面
- 方法一:在
控制面板
中搜索打印机设置,在里面添加即可。此方法和下面的使用CUPS效果相同。 - 方法二:安装
hplip-gui
来运行惠普打印机的图形管理界面。注意:使用1
:~$ sudo apt-get install hplip-gui
hplip-gui
添加的打印机,只能在hplip-gui
程序里使用。
使用 CUPS
- 首先打开
cups.service
1
2
3:~$ sudo systemctl start cups.service
:~$ sudo netstat -anpl | grep cups
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 140391/cupsd - 可以看到
cupsd
已打开本地的631
端口,所以我们直接在本机上使用浏览器打开即可。1
:~$ firefox 127.0.0.1:631
Administration
:此菜单是管理员页面,可以添加/查找/管理/配置 打印机。注意: 此页面默认的用户名root
,密码为本机的root
密码。Jobs
:此菜单显示打印列表,如 已完成/未完成 的打印任务。Printers
:此菜单显示当前CUPS已添加的打印机。
此时,本地的惠普打印机已经可以正常使用了。
使用CUPS和使用控制面板
来添加打印机效果是一样的。
配置文件
CUPS 的配置位于/etc/cups/cupsd.conf
。
可以在 Web管理 的Administrator
菜单下修改配置文件,也使用vim
直接在终端里进行修改。
cupsd.conf
:
1 | # 默认监听地址与端口 |
cups 共享打印机
将CUPS的监听地址改为0.0.0.0
即可。
1 | :~$ vim /etc/cups/cupsd.conf |
此时,在安装有CUPS的 Linux/Mac PC 或 iPhone/Android 7+ 下,直接搜索打印机即可。如果没有搜索到,可以手动选择ipps
网络协议,输入打印机所在PC的IP地址即可,如https://192.168.1.2:631/
即可。
Android 自 7.0 开始内置打印服务,如果版本低于 7.0,请自行安装打印服务。
Samba 共享打印机
HP Laser Jet 1020 打印机不支持网络,所以这里使用Samba来共享此打印机。
为什么要使用Samba来进行共享?因为它与windows兼容性好,如果只是 Mac/Linux/iPhone/Android 间共享打印机,直接使用CUPS即可。
验证Samba是否支持CUPS:
1 | :~$ smbd -b | grep "HAVE_CUPS" |
如果没有显示HAVE_CUPS
:
- 编译
Samba
时使用了--disable-cups
参数 Samba
的依赖库没有安装完整,查看Samba 依赖库。
CUPS 配置
首先在CUPS里安装本地的打印机
- 使用浏览器打开CUPS的管理员页面,如:
https://127.0.0.1:631/admin
- 选择
添加打印机
- 选择打印机的路径,因为是本地USB口的打印机,所以这里选择
hp:/usb/HP_LaserJet_1020?serial=xxxxxxx
- 输入打印机的名称。注意:此名称会在
smb.conf
里使用。 - 选择打印机的厂家与型号,即对应的驱动。
- 保存
smb.conf 配置
分为匿名共享与密码验证共享。
1. 打开 spoolssd 服务
spoolssd
服务集成在smbd
中,为的是加速Samba的打印速度。如果不开此服务,当使用Samba打印长文档时,打印机会出现很长时间无响应状态,此时Samba在接收和创建需要打印的文档缓存。
而开了spoolssd
服务,Samba会开启多线程模式,主线程只做控制其它子线程,在其它子线程中创建打印文档的缓存。这样可以在打印途中暂停或取消打印。
开启 spoolssd
服务:
- 编辑
smb.conf
中[global]
1
2
3
4[global]
...
rpc_server:spoolss = external
rpc_daemon:spoolssd = fork - 重启Samba
1
:~$ sudo smbcontrol all reload-config
- 查看
smbd
子进程1
2
3
4
5
6
7:~$ ps axf
...
30903 smbd
30912 \_ smbd
30913 \_ smbd
30914 \_ smbd
30915 \_ smbd
2. 开启 CUPS 的打印支持
- 在
smb.conf
的[global]
下,加入printing
参数1
2
3[global]
...
printing = cups - 修改
smb.conf
的默认[printers]
1
2
3[printers]
path = /var/spool/samba/
printable = yes - 创建
path
中的缓存目录1
2:~$ mkdir -p /var/spool/samba/
:~$ chmod 777 /var/spool/samba/ - 重启Samba服务
1
:~$ sudo smbcontrol all reload-config
3. 共享打印机
匿名且自动共享打印机
- 修改
smb.conf
的[printers]
选项1
2
3
4
5
6
7
8[printers]
comment = All Printers
browseable = yes
path = /var/spool/samba
printable = yes
guest ok = yes
read only = yes
create mask = 0700 - 重启
smbd
1
:~$ sudo smbcontrol all reload-config
此时,同网段的所有客户端都可以使用打印机了。每当Samba所在的主机添加其它打印机时会自动进行匿名共享。
加密共享打印机
- 禁止自动共享打印机
- 修改
smb.conf
的[global]
参数1
2
3[global]
...
load printers = no - 重启Samba
1
:~$ sudo smbcontrol all reload-config
- 手动共享打印机
- 在
smb.conf
中添加打印机1
2
3
4
5
6
7
8
9
10[hp1020]
path = /var/spool/samba/
printable = yes
printer name = HP-LaserJet-1020
user client driver = no
guest ok = no
writable = no
write list = root
valid users = @sambaprinter name
即我们之前在CUPS中添加的打印机时输入的名称,忘记了可以去CUPS的Web管理页查看。 - 重启Samba
1
:~$ sudo smbcontrol all reload-config
至此,我们可以在同网段的其它客户端使用密码来登录并使用打印机了。