三星MFP驱动v1.00.06在Linux的CUPS/SANE安装排障
简介SAMSUNG三星打印及扫描驱动程序1.00.06版面向在Linux桌面环境下使用三星打印、扫描一体机的用户解决官方驱动在32位与64位Linux系统上的安装与设备识别问题适合具备基础命令行操作能力、需要为老旧三星机型补齐打印与扫描功能的运维人员及个人用户。压缩包共229个文件约10.1MB以141个ppd机型描述文件为核心配套cts色彩与扫描参数文件、sh安装脚本、pstospl与rastertospl格式转换组件、smfpnetdiscovery网络发现工具及so动态库另有防火墙配置与安装、版本查询脚本覆盖从设备描述、任务转换到网络发现与安装部署的完整环节。资源已有818人学习下载读者可据此为CLX、CLP等系列机型完成驱动部署理清Linux下打印与扫描链路的组成并在遇到设备无法识别或格式转换异常时对照脚本与配置文件排查定位。1. 装之前先认清这套驱动v1.00.06 到底装进 Linux 的哪个角落那天同事把一台三星激光一体机接到一台 Ubuntu 工作站上lsusb能看到设备CUPS 网页里却始终显示一台未知打印机。我第一反应是驱动版本选错了SAMSUNG 三星打印及扫描驱动 v1.00.06 分 32 位和 64 位两个包装错架构不会立刻报错只会在打印过滤器阶段静默失败翻车点非常隐蔽。这台机器接打印机、不装驱动的场景太少见了偏偏复印、扫描全指望它。设备装不上任务只会停在队列里不动。后面我会把版本判断、32 位依赖、CUPS 与 SANE 配置一条条拆开适合手上有一台三星 MFP 或多功能一体机、想一次装通的 Linux 用户。2. 环境准备与依赖核对32 位库、CUPS 与 SANE 一个都不能少装机之前先花十分钟确认环境比装完再回去找问题省事得多。SAMSUNG 三星打印及扫描驱动 v1.00.06 是个带安装脚本的完整套件不是单个.deb或.rpm它自带 CUPS 后端、SANE 扫描后端、PPD 文件和图形配置器安装时脚本会去改写系统里已经存在的打印相关服务。系统里原本装了发行版自带的驱动或第三方foomatic包两套东西同时抢设备表现就是能识别、打不出来。2.1 先看包结构再决定走哪条安装路径解压前先确认拿到的包是不是完整版很多镜像站会把 32 位和 64 位拆成不同的压缩包下载时容易只取到一个。用一个tar -tzf先看目录结构比直接解压更安全# 先列出压缩包内容不落盘确认架构目录是否齐全 tar -tzf uld_v1.00.06.tar.gz | head -n 40 # 重点看有没有这两个目录缺一个说明包不完整 tar -tzf uld_v1.00.06.tar.gz | grep -E ^(i386|x86_64)/这个包内部通常分成i386/和x86_64/两套二进制目录再加一个noarch/放 PPD 和公共脚本根目录下有install.sh和uninstall.sh。install.sh会自己判断当前系统架构但它判断的依据是uname -m不看你实际需要哪个版本。所以 64 位系统上跑这个脚本它默认只装 64 位部分而配置器里有些辅助程序仍然是 32 位的缺i386库就会在点击打印机设置时直接闪退。我一般走两条路如果只需要打印拿 PPD 文件配 CUPS 队列就够如果要扫描或者要用图形配置器改 IP、改纸张、看碳粉量就必须老老实实跑install.sh把整套装进去。判断标准很简单打开终端敲一下# 看设备是不是同时带扫描功能MFP 多功能一体机 lsusb | grep -i samsung # 输出里如果有类似 Samsung Electronics Co., Ltd 的设备再往下走2.2 装基础栈cups、sane 与 32 位运行库驱动本身不提供 CUPS 服务它只是往系统里塞后端和 PPD。所以先把底座装好Debian 系和 RedHat 系的包名差别不小下面分开写。Debian 系上最稳的做法是sudo apt update # 打印侧cups 主服务、客户端工具、过滤器包、BSD 风格 lp 命令 sudo apt install -y cups cups-client cups-filters cups-bsd ghostscript # 扫描侧sane 工具和 USB 扫描后端 sudo apt install -y sane-utils libsane1 # 驱动运行需要的底层库libusb-0.1 是老驱动最常见的硬依赖 sudo apt install -y libusb-0.1-4 usbutils libffi8cups-filters是必须的驱动后端只负责把数据送给设备光栅化和格式转换都由过滤器完成。少了它任务会出现在队列里状态一直挂Processing日志里能看到filter failed。libusb-0.1-4也不能省v1.00.06 这类老版本驱动调用的是 libusb 0.1 接口新版系统默认只装 libusb-1.0两者不通用。64 位系统还要补 32 位运行库这一步是最多人漏掉的漏了之后安装过程一路绿灯用的时候才出问题# 启用 i386 架构源这行只需要执行一次 sudo dpkg --add-architecture i386 sudo apt update # 补齐 32 位基础库配置器和部分过滤器依赖它们 sudo apt install -y libc6:i386 libstdc6:i386 \ libusb-0.1-4:i386 zlib1g:i386RedHat 系对应的写法略有差异包名不是一一对应的# CentOS / Rocky / AlmaLinux 上装打印和扫描栈 sudo dnf install -y cups cups-filters sane-backends \ sane-backends-drivers-scanners ghostscript libusb usbutils # 32 位兼容库glob 写法一次装齐 sudo dnf install -y glibc.i686 libstdc.i686 libusb.i686安装完先别急着跑驱动脚本把 CUPS 服务拉起来并设为开机自启不然后面的安装脚本会尝试用service命令启动一个由 systemd 管理的服务报错信息很难看懂sudo systemctl enable --now cups systemctl is-active cups # 期望输出 active2.3 装前体检内核模块、用户组与架构确认装之前还有一项容易忽略的体检usblp内核模块。很多发行版默认加载它把 USB 打印机接管成/dev/usb/lp0字符设备而三星驱动的后端走的是 libusb 直接访问两者抢同一个设备典型现象就是lsusb能看到、lpinfo -v里却没有 USB 直连地址。# 看 usblp 是否已加载有输出说明它在占用设备 lsmod | grep usblp # 临时卸载重启后会恢复持久化方案在排查章节里写 sudo modprobe -r usblp用户组同样要确认。CUPS 和 SANE 都通过lp组授予设备访问权限当前用户不在这个组里扫描时会报Permission denied而打印可能因为 CUPS 服务本身是 root 运行而正常形成能打不能扫的错觉# 把当前用户加入 lp 组需要重新登录才生效 sudo usermod -aG lp $USER groups # 确认输出里有 lp最后确认架构和内核版本方便后面判断装哪个目录里的二进制uname -m # x86_64 表示用 64 位包i686/i386 用 32 位包 uname -r # 内核版本升级内核后 USB 模块行为可能变化这三步做完环境基本就干净了CUPS 在跑、SANE 在、usblp不抢设备、用户在lp组里。后面install.sh无论怎么改系统文件出问题都能顺着这几条线索倒查回去。3. 运行 install.shv1.00.06 交互问答逐项拆解真正的安装动作都在install.sh里这个脚本写了有些年头交互提示是英文的选项也不多但每一项都影响后面能不能用。我建议第一次装的时候把终端输出完整留一份脚本跑到一半失败时回滚全靠这份日志。3.1 解压与执行前的三处预处理先解压到一个临时目录不要直接在下载目录里跑脚本脚本会以当前目录为基准找i386/、x86_64/这些相对路径路径里带空格或中文就容易出错mkdir -p ~/samsung-driver cd ~/samsung-driver tar -xzf ~/Downloads/uld_v1.00.06.tar.gz cd uld # 确认脚本有执行权限压缩包从 Windows 中转过来时常丢权限 chmod x install.sh uninstall.sh ls -l install.sh第二处预处理是关掉可能冲突的旧驱动。发行版仓库里如果装过printer-driver-*之类针对三星的包PPD 会重复注册CUPS 建队列时列出好几个同名型号选错了就是白装# 查一下系统里已有的三星相关驱动包 dpkg -l | grep -i -E samsung|scx|clx|ml- # 有的话先卸掉避免 PPD 冲突 sudo apt remove --purge printer-driver-splix 2/dev/null第三处是留日志。脚本输出会刷屏直接跑完往上翻很痛苦# 用 tee 同时输出到屏幕和文件装挂了有据可查 sudo ./install.sh 21 | tee ~/samsung-driver/install-v1.00.06.log注意是sudo跑脚本内部要往/opt、/usr/lib、/etc写文件非 root 执行会在一半的地方报权限错误然后退出留下半套文件比没装还麻烦。3.2 交互问答与安装参数的含义脚本启动后会先做一轮环境检测然后进入问答。不同发行版上提示语略有差别但核心就三四个问题。第一问通常是确认是否继续安装回答y。第二问会问要不要把当前用户加入lp组这里一定要答y它执行的就是上一章那条usermod只不过脚本版本更老可能直接改/etc/group文件改完不提示你重新登录。第三问比较关键会问是否在安装后重启 CUPS 服务Do you want to restart CUPS service now? (y/n)答y的话脚本会调用service cups restart或/etc/init.d/cups restart。在 systemd 系统上如果发行版还保留了 init 兼容脚本这条能成功如果已经彻底移除就会看到类似cups: unrecognized service的报错。这个报错不影响文件安装只是服务没重启装完之后手动sudo systemctl restart cups就行别看到红字就以为整个安装失败了。第四问在带扫描功能的机型上才会出现大意是是否安装扫描后端并注册到 SANE。答y会往/etc/sane.d/写配置、往/usr/lib/sane/放libsane-smfp.so之类的后端库。如果只打印不扫描这里答n能少装一堆 32 位依赖但配置器里的扫描选项卡就用不了。安装过程大约一到三分钟取决于磁盘速度。中间会看到大量copying ...的输出属于正常现象。如果卡在某一行动作超过五分钟不动多半是在等网络或者某个设备节点直接CtrlC中断然后按第 5 章的方法清干净重来。3.3 安装落点核对文件去了哪、服务起没起脚本跑完不要急着建队列先确认东西落在哪。三星这套驱动的落点比较固定但也有发行版差异我一般按下面几条逐一核对# 主目录配置器、二进制、共享库都在这里 ls /opt/Samsung/mfp/ # 打印侧PPD 文件和 CUPS 后端 ls /usr/share/cups/model/ | grep -i -E samsung|scx|clx ls /usr/lib/cups/backend/ | grep -i smfp # 扫描侧SANE 后端库和配置 ls /usr/lib/sane/ | grep -i smfp ls /etc/sane.d/ | grep -i smfp/usr/lib/cups/backend/smfp这个文件是打印链路的入口没有它CUPS 就无法通过驱动把数据送到 USB 设备。/usr/lib/sane/libsmfp.so是扫描入口缺了它scanimage -L会返回No scanners were identified即使设备在lsusb里躺着。服务侧也要看一眼老驱动的服务单元名字不太统一有的是smfp-common有的直接挂在 CUPS 下# 列出所有和 smfp / samsung 相关的服务单元 systemctl list-unit-files | grep -i -E smfp|samsung systemctl status cups --no-pager如果有smfp-common.service且状态是failed先看journalctl -u smfp-common -n 50最常见的原因是它要加载的某个.so找不到 32 位依赖回到 2.2 节把i386库补齐就行。这套核对做完安装阶段就算过了接下来才是把它接进 CUPS 队列的配置活。4. 打印与扫描链路配置PPD、CUPS 队列和 smfp 后端安装脚本只是把文件铺到系统里队列还得自己建。有些人习惯用配置器的图形界面点一点就完事但配置器在 Wayland 会话下经常起不来或者起来之后检测不到 USB 设备。命令行建队列反而更快而且每一步都能看到结果。4.1 手动建 CUPS 队列不依赖图形配置器第一步是拿到设备的真实 URI。CUPS 自己会枚举所有可用后端把 USB 直连设备的完整地址列出来# 列出所有 CUPS 能识别的设备地址 lpinfo -v | grep -i usb输出里类似direct usb://Samsung/SCX-3200%20Series?serialXXXXXXXX的这一行就是要用的地址%20是空格转义serial后面那串每台机器不同。如果这里什么都看不到说明usblp还在占用设备或者smfp后端没装上先回第 2、3 章排。拿到 URI 后建队列。-P指定 PPD 文件路径按实际落点填# 建队列-p 队列名-E 立即启用-v 设备地址-P PPD 文件 sudo lpadmin -p SCX3200 -E \ -v usb://Samsung/SCX-3200%20Series?serialXXXXXXXX \ -P /usr/share/cups/model/samsung/SCX-3200_Series.ppd \ -o printer-is-sharedfalse # 打开队列接收任务并设为默认 sudo cupsenable SCX3200 sudo cupsaccept SCX3200 sudo lpadmin -d SCX3200几个参数值得单独说清楚改错了症状很迷惑参数作用容易踩的地方-p队列名带空格或中文会在部分打印客户端上出乱码用全大写字母加数字最稳-E建完立刻启用漏了这步队列是禁用状态任务会一直排队不打印-v设备 URI必须和lpinfo -v输出完全一致%20少写会报设备不存在-PPPD 文件路径路径错会退化成通用 PostScript 驱动能收任务但出纸是乱码printer-is-shared是否共享给局域网单机用关掉开着会让 CUPS 广播队列某些网络环境里会被反复扫描设完默认打印机后先看状态再发一个测试页。状态里enabled和accepting requests两个词都要出现才算正常lpstat -p -d # 期望看到 printer SCX3200 is idle. 和 system default destination: SCX3200 # 发一页纯文本测试比图形测试页更快定位问题 echo driver smoke test | lp -d SCX3200 lpstat -o # 看任务是否被取走正常几秒内消失任务如果一直停在lpstat -o里不动直接看/var/log/cups/error_log的尾部把日志级别临时调高能拿到更多信息sudo cupsctl --debug-logging tail -n 80 /var/log/cups/error_log # 排完记得关掉debug 日志增长很快 sudo cupsctl --no-debug-logging4.2 扫描侧的 sane 后端与 udev 权限扫描链路和打印是两条独立的通道打印通了不代表扫描能用。先确认设备节点权限再看 SANE 能不能枚举到设备# 三星的 USB 厂商 ID 是 04e8先确认设备在 lsusb | grep 04e8 # 让 SANE 去找扫描仪-v 会打印探测细节 sudo sane-find-scanner -v 21 | grep -A2 -i found # 以普通用户身份列出可用扫描仪 scanimage -Lscanimage -L返回No scanners were identified但sane-find-scanner能探测到设备八成是后端没启用。SANE 的配置是显式白名单式的/etc/sane.d/dll.conf里没有smfp这一行后端库放对了也不会被加载# 确认 dll.conf 里启用了 smfp去掉行首的 # 注释 grep -n smfp /etc/sane.d/dll.conf # 没有就追加一行 echo smfp | sudo tee -a /etc/sane.d/dll.conf接着在/etc/sane.d/smfp.conf里把设备的 vendor/product ID 写死比让它自动探测更可靠尤其是机器上接了不止一台 USB 设备的时候# 格式是 usb vendor_id product_id值来自 lsusb 输出 echo usb 0x04e8 0x344f | sudo tee /etc/sane.d/smfp.conf最后处理权限。lp组只管设备节点的组属主节点本身的权限位如果是0664且组是lp组内成员就能读写。有些发行版的默认 udev 规则给的是0660加root:lp普通用户进不去需要补一条自己的规则# 给三星 USB 设备单独放宽权限并打上 uaccess 标签 sudo tee /etc/udev/rules.d/99-samsung-mfp.rules /dev/null EOF # 三星多功能一体机允许 lp 组读写同时支持本地登录用户直接访问 SUBSYSTEMusb, ATTR{idVendor}04e8, MODE0664, GROUPlp, TAGuaccess EOF # 重载规则并重新触发不用拔插设备 sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-matchusb规则生效后重新登录一次再跑scanimage -L正常会输出一行device smfp:usb:... is a Samsung ... scanner。到这一步打印和扫描两条链路都通了剩下的就是把它们变成开机即用、重启不丢的稳定状态。5. 排查与避坑五条现象、原因与处置记录这套驱动装了不下十次每次翻车的点都不太一样。下面五条是我记录下来出现频率最高的按现象、原因、解决整理遇到问题先对照着看。5.1 安装脚本报 init 脚本不存在现象install.sh跑到重启服务那一步输出./install.sh: xxx: /etc/init.d/cups: not found或cups: unrecognized service随后脚本继续往下走并提示安装完成但打印队列里收不到任何设备。原因v1.00.06 的脚本写于 SysV init 时代重启服务用的是/etc/init.d/cups restart或service cups restart。新版发行版已经移除 init 兼容脚本只剩 systemd 单元所以这条命令必然失败。它只影响服务重启不影响文件复制所以脚本不会中断。解决手动重启 CUPS然后确认后端被重新扫描到。systemctl restart cups之后跑lpinfo -v | grep -i usb如果还是没有设备再systemctl restart cups-browsed如果装了或者干脆systemctl daemon-reload后重启。这一步做完还不行就回到usblp那条线索上查。5.2 lsusb 有设备lpstat 里没队列现象lsusb明确能看到三星设备lpinfo -v的输出里却只有network和ipp开头的地址没有usb://直连项建队列时找不到可用 URI。原因usblp内核模块抢占了设备把它变成了/dev/usb/lp0三星的smfp后端走 libusb 直接访问拿不到句柄。发行版默认加载usblp是为了兼容老式打印机对这类闭源驱动反而是干扰。另一种可能是smfp后端文件根本没落到/usr/lib/cups/backend/下。解决先卸模块再验证确认有效后做成持久化配置# 临时卸载并确认后端能枚举到设备 sudo modprobe -r usblp lpinfo -v | grep -i usb # 持久化写入黑名单避免重启后又被加载 echo blacklist usblp | sudo tee /etc/modprobe.d/blacklist-usblp.conf sudo update-initramfs -u # Debian 系RedHat 系用 dracut -f如果卸载后仍然没有 USB 地址去ls /usr/lib/cups/backend/看看有没有smfp没有说明安装脚本那步失败了翻日志重装。5.3 任务进队列后卡住不动现象lp命令返回任务号lpstat -o里能看到任务状态一直是Processing或者held打印机没反应几分钟后任务变成stopped。原因分三类。一是缺 32 位运行库smfp后端进程启动就崩CUPS 反复重试最后放弃二是过滤器链缺失cups-filters没装光栅化那一步失败三是 PPD 和实际机型不匹配CUPS 送出的数据格式设备不认。解决先看日志定位到具体哪一类别盲目重装# 看最近一次任务的失败原因重点找 filter failed 或 exec 相关行 sudo tail -n 120 /var/log/cups/error_log | grep -i -E error|fail|exec # 确认后端二进制能独立运行缺库会直接报 so 找不到 ldd /usr/lib/cups/backend/smfp | grep -i not foundldd输出里有not found就是缺库按 2.2 节补对应的i386包。过滤器问题重新装cups-filters即可。PPD 不匹配的话去/usr/share/cups/model/里挑一个和机型完全对得上的型号后缀差一个字母都可能不兼容。5.4 扫描报权限错误现象scanimage -L能列出设备实际扫描时返回scanimage: open of device smfp:usb:... failed: Permission denied换成sudo执行就正常。原因sudo能跑说明设备和后端都没问题纯粹是权限。可能是当前用户不在lp组可能是 udev 规则给的权限位太严也可能是加了组但没重新登录会话里还挂着旧的组列表。解决三步依次确认不要跳步# 1. 确认当前会话真的带 lp 组 id | grep -o lp # 2. 看设备节点的实际属主和权限 ls -l /dev/bus/usb/*/* | grep -i 04e8 # 3. 确认 udev 规则已生效 sudo udevadm info -a -n /dev/bus/usb/001/002 | grep -i -E MODE|GROUP第 1 步没有lp就重新登录第 2 步权限是0660且组不是lp说明 4.2 节的 udev 规则没加载规则文件存在但没生效检查文件名是不是.rules结尾、有没有语法错误用udevadm test单测一下。5.5 系统或内核升级后驱动失灵现象用了几个月一直正常某次apt upgrade或内核更新之后打印队列报Filter failed扫描也回到No scanners were identified。原因两种情况最常见。一是内核升级把usblp又编进了默认加载列表黑名单文件被新内核的 initramfs 覆盖二是 CUPS 大版本升级过滤器接口变了老驱动的后端还在按旧协议输出数据。解决升级后固定做一遍回归检查别等出事再查# 升级后三连确认 usblp 没回来、后端还在、队列仍启用 lsmod | grep usblp ls /usr/lib/cups/backend/smfp lpstat -pusblp回来了就重跑一次update-initramfs -u后端文件在但队列报过滤器错误把 CUPS 日志级别调到 debug 看具体哪一步失败多数情况下重跑一遍install.sh就能恢复不用卸载。真要卸载用包内自带的sudo ./uninstall.sh别手动rm -rf /opt/Samsung会留下 PPD 和 udev 规则下次装的时候冲突。6. 验证跑通三条命令和一张自检表装完不验证等于没装我习惯用三条命令做终检分别覆盖打印链路、扫描链路和重启后的持久性。第一条验证队列状态和默认打印机# -p 看队列是否 enabled 且 accepting-d 看默认目标 lpstat -p -d输出里队列状态必须是is idle或is processing不能是disabledaccepting requests这几个词要在。缺了就cupsenable加cupsaccept补上。第二条实际出一张纸用纯文本而不是图形测试页出问题更容易判断是链路问题还是渲染问题# 打一页带时间戳的文本方便确认是不是本次任务 printf samsung v1.00.06 check %s\n $(date -Is) | lp -d SCX3200 lpstat -o SCX3200 # 任务应在数秒内消失第三条验证扫描直接从命令行出一张图比配置器里点预览可靠得多# 200dpi 灰度扫一页输出到 /tmp 便于检查文件大小 scanimage --device-namesmfp:usb:... \ --formatpng --resolution200 --modeGray /tmp/scan-check.png file /tmp/scan-check.png # 应显示 PNG image data三项都过之后还有一步最容易漏重启一次再复验。很多问题是重启后才暴露的usblp回加载、udev 规则没持久化、CUPS 队列状态没保存都会在这时候现形。我做了一张自检表重启后照着走一遍五分钟内能确认整套环境是不是真的落地了检查项命令通过标准CUPS 服务systemctl is-active cups输出active内核模块lsmod | grep usblp无输出队列状态lpstat -p -dis idle且 accepting打印后端ls /usr/lib/cups/backend/smfp文件存在扫描后端scanimage -L列出smfp:usb:设备设备权限ls -l /dev/bus/usb/*/* | grep 04e8组为lp权限含读写这套流程跑顺之后我把每一步都写进了一个check-samsung.sh放在/usr/local/bin每次系统升级完先跑它红了再动手比凭记忆猜快得多。血泪经验是这类闭源老驱动最怕的就是装完能用就不管了一次内核小版本更新就可能让整套链路静默失效而打印机这种设备往往是你最急着用的时候才发现坏了。从那以后我每次升级内核或 CUPS 之前都强制走一遍上面那张表先留个基线出问题才知道是哪一步变的。希望帮到你。本文还有配套的精品资源点击获取