ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

三星老一体机Linux驱动安装:CUPS打印与SANE扫描配置实战

三星老一体机Linux驱动安装:CUPS打印与SANE扫描配置实战 简介这是三星官方发布的打印及扫描驱动程序1.00.06版面向Linux 32位与64位系统用户解决三星打印机在Linux环境下驱动缺失、扫描功能无法调用等兼容问题适合需要部署办公打印设备的系统管理员与普通Linux用户。压缩包共229个文件大小约10.1MB核心内容包括141个PPD打印机描述文件、28个CTS设备配置文件、多个Shell安装脚本及扫描/打印光栅处理模块覆盖打印队列定义、型号参数配置、设备发现与安装排错等环节。依托官方2013年8月更新版本用户可一次性获得针对多款三星机型的完整驱动与扫描组件无需逐一寻找零散驱动能在32位和64位Linux系统上统一完成安装配置包内目录与脚本结构清晰便于手动部署和后续维护。目前已有813人学习下载适合仍在维护老款三星打印机且使用Linux系统的用户参考使用。1. 三星打印及扫描驱动程序 v1.00.06老机器在 Linux 上最后一块敲门砖手头一台 SCX 系列三星一体机换到 Ubuntu 22.04 工作站上打印机图标在图形界面里搜不到官网新版驱动装到一半退出报错信息含糊得像黑匣子。最后从 U 盘里翻出这个三星打印及扫描驱动程序 v1.00.06 版 ForLinux-32Linux-64 的旧包反而打印、扫描一次全通。这个包是三星统一 Linux 驱动里很典型的存量版本打印走 CUPS、扫描走 SANE一个 tar 包同时带 32 位和 64 位运行库当初的设计目标就是覆盖绝大多数老一体机。它适合两类人手里有三星老 MFP 想在现代发行版上继续用的人以及被新驱动反复折腾到想回退的 Linux 运维。2. 安装 v1.00.06先读懂包里装了什么再决定动手方式2.1 为什么这个老版本反而比新版驱动更省心三星 Linux 驱动的历史比较特殊。早先的驱动按设备型号拆得很碎后来才收拢成 Unified Linux DriverULD也就是把打印和扫描包装在同一个安装脚本里。v1.00.06 属于 ULD 时代的中期版本结构已经相当成熟不再要求用户手工区分打印驱动和扫描驱动安装时一把梭装完 CUPS 模型和 SANE 后端都在了。新版驱动出问题多半是拆分成了网络扫描组件、airscan 发现服务、PPD 动态生成这几块每一块都有自己的依赖要求老一体机对不上就整个不可用。v1.00.06 这个名字里的 ForLinux-32Linux-64 值得拆开看。它不是两个驱动是一个安装包内同时携带 i386 和 x86_64 两套 .so靠安装脚本根据uname -m输出决定复制哪一套。这种打包方式的好处是物理机上基本不会装错架构坏处是脚本一旦判断失败会默认装 32 位库然后在纯 64 位系统上留下一个扫描进程崩溃的定时炸弹。所以安装前手动确认架构比信任脚本的自动判断更稳妥。包解开之后典型目录结构长这样条目作用装到哪install.sh主安装脚本负责复制文件、配置后端不落盘ulib/驱动核心库含 32/64 位子目录/usr/lib 或 /usr/lib64lib/SANE 扫描后端与 CUPS 过滤器/usr/lib/sane 与 /usr/lib/cups/filterrpm/按 RPM 体系打包的组件供 RHEL/CentOS 系deb/按 DEB 体系打包的组件供 Debian/Ubuntu 系pstools/命令行打印工具/usr/bin2.2 三条安装路线自动脚本、手动拆包、只装扫描端最常见的做法是直接跑自动脚本tar -xzf SAMSUNG_PrintScan_Driver_v1.00.06.tar.gz cd SAMSUNG_PrintScan_Driver_v1.00.06 uname -m ./install.shuname -m先看清楚架构x86_64 就装 64 位库。install.sh 运行时会交互提问依次问打印机连接方式USB 还是网络、型号代码、是否安装扫描支持。答错型号不要紧后面 CUPS 添加打印机时可以手动指定 PPD 文件但连接方式答错会导致后端加载的通道不对扫描设备会一直无法枚举。脚本结束前会把驱动库路径写入/etc/ld.so.conf.d/下并执行ldconfig这一步如果被安全软件拦截后续打印进程会报找不到libsamsung*.so。自动脚本失败时手动拆包是可靠的退路mkdir -p /usr/lib/samsung cp -r ulib/x86_64/* /usr/lib/samsung/ cp lib/sane/libsane-samsungmfp* /usr/lib/x86_64-linux-gnu/sane/ echo /usr/lib/samsung /etc/ld.so.conf.d/samsung-uld.conf ldconfig这段操作把核心库放到独立目录再写一个 ld.so.conf 片段并刷新缓存。参数说明/usr/lib/x86_64-linux-gnu/sane/是 Debian/Ubuntu 系的 SANE 后端目录RHEL 系要换成/usr/lib64/sane/libsane-samsungmfp是扫描后端的主文件如果只装打印不装扫描这一步可以跳过。如果你只需要扫描功能不想碰打印队列手动拆包时只复制 SANE 相关文件就够然后编辑/etc/sane.d/samsungmfp.conf把设备的 USB ID 按usb 04e8 341b格式写进去04e8 是三星的 USB vendor ID。这样处理后scanimage -L就能看到设备完全不依赖 CUPS。三条路线的取舍我一般这么选新装的 Debian/Ubuntu 系优先自动脚本系统被精简过、缺 Perl 模块的优先手动服务器上只想要扫描录入功能的走第三套动静最小。2.3 先补依赖再跑脚本老库在 Ubuntu、RHEL 与国产系统里的补法v1.00.06 编译年代早依赖的 C 库接口偏老最常踩的坑是缺libpng12、libjpeg62这类老版本图像库。现代发行版普遍只带 libpng16 和 libjpeg62-turbo版本号对不上驱动自带的扫描后端加载时直接报undefined symbol。Ubuntu 22.04 上没有 libpng12 的官方源常见做法是从 18.04(bionic) 的仓库里拉 deb 包手动安装wget http://archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb sudo apt-get install -f sudo apt-get install libjpeg62 libstdc6:i386参数说明dpkg -i直接安装老 deb 包apt-get install -f负责修复因依赖不满足导致的 broken 状态libstdc6:i386是给 32 位扫描组件补的 C 标准库。如果你用的是纯 64 位系统但驱动装了 32 位库这一条不能省。RHEL/CentOS 系的处理方式不同yum install -y libpng12 compat-libstdc-33 libjpeg62统信 UOS 这类国产 Linux 基于 Debian 体系依赖坑和 Ubuntu 同源照搬dpkg方案即可。需要提醒的是安装完依赖后别急着跑 install.sh先用ldd检查驱动自带的 .so 是否全部解析成功ldd /usr/lib/samsung/*.so | grep not found这条命令把每个未解析的依赖都列出来比安装脚本的报错直白得多。这里列的依赖名和命令照着敲一遍基本能把环境补齐。跑完 install.sh 后重启一下 cups 和 saned 服务再进入下一步配置打印队列。3. 打印配置走 CUPS从设备识别到第一条打印队列3.1 驱动装完不等于打印机能用先确认设备被系统看到很多人在安装脚本跑完后直接打开系统设置添加打印机结果模型列表里搜不到三星就以为驱动没装好。实际原因是 CUPS 的打印后端需要先枚举 USB 设备驱动只是提供了 PPD 文件和过滤器设备枚举靠的是usb后端。给一点耐心先看系统层面认没认出这台一体机lsusb lpinfo -v | grep -i samsunglsusb输出里能看到Bus 001 Device 003: ID 04e8:341b Samsung Electronics Co., Ltd04e8 这个厂商 ID 是三星的341b 是具体设备号不同型号不一样。如果lsusb有设备但lpinfo没有说明 CUPS 的后端没加载驱动里的usb专用库常见原因是从手动拆包路线来的时候忘了复制 cups 过滤器。此时需要回到/usr/lib/cups/filter/检查是否有三星的栅格过滤器没有就补上再systemctl restart cups。lpinfo -v列出的是 CUPS 能用的所有设备 URI三星一体机通常显示为usb://SAMSUNG/SCX-xxxx这种格式。注意当你看到usb://SAMSUNG/...时设备识别已经成功剩下的是建队列。3.2 添加打印队列lpadmin 命令的完整参数拆解有了 URI添加队列只需要一条命令lpadmin -p SAMSUNG_SCX -v usb://SAMSUNG/SCX-xxxx -P /usr/share/cups/model/Samsung_SCX_series.ppd -E参数说明-p SAMSUNG_SCX是给队列起的名字建议用型号缩写后续命令行打印时-d指定队列好记-v指定设备 URI必须和lpinfo -v输出一致-P指向 PPD 文件这个文件在驱动安装时已经复制到了/usr/share/cups/model/下-E表示启用该队列。如果你在lpinfo -v里找不到设备但又确定用的是网络一体机可以手动指定网络 URIlpadmin -p SAMSUNG_SCX -v socket://192.168.1.20:9100 -P /usr/share/cups/model/Samsung_SCX_series.ppd -Esocket://是直连打印机的 9100 端口适合打印机开了网络打印但没跑 IPP 的老设备。这里有个常见误区不要用ipp://去连老设备很多老一体机的 IPP 实现不完整建队列成功但打印任务会卡在 pending 状态。队列建好后立刻验证lpstat -p -d-p列出所有打印机及状态-d显示当前默认队列。如果状态显示 idle 而不是 disabled说明队列正常。此时打印测试页是最直接的验证。3.3 打印参数现场调分辨率、双面与纸张来源怎么固定驱动的默认参数经常不是你要用的。老三星一体机的默认分辨率往往偏低打印文档发虚需要手动覆盖lpoptions -p SAMSUNG_SCX -o Resolution600dpi lpoptions -p SAMSUNG_SCX -o DuplexDuplexNoTumble lpoptions -p SAMSUNG_SCX -o InputSlotManuallpoptions的作用是把选项写入队列的默认配置-o Resolution600dpi把打印质量提到 600dpiDuplex后面跟的DuplexNoTumble表示长边翻面适合双面打印文档InputSlotManual是手动进纸适合打不干胶或厚纸。这些选项的精确写法由 PPD 决定不同型号可填的值不同。不确定时可以查 PPDgrep -i Resolution\|Duplex\|InputSlot /usr/share/cups/model/Samsung_SCX_series.ppdPPD 里带*Default开头的行就是可填选项的合法取值。调完参数后用命令行直接打一页测试内容lp -d SAMSUNG_SCX /etc/os-release/etc/os-release只有几行文本打印速度快适合验证。如果任务发出后打印机没反应去 CUPS 日志里找答案tail -n 50 /var/log/cups/error_log日志里如果出现filter failed大概率是驱动过滤器缺依赖回头跑ldd检查。如果出现Unable to open device则是设备 URI 和后端不匹配。再提醒一句CUPS 默认日志级别是 warn要看详细报错就先把级别调成 debugcupsctl LogLeveldebug调完再打一次测试页日志信息量会大很多问题定位快得多。4. 扫描配置走 SANE后端、权限与 scanimage 参数4.1 扫描链路与驱动后端的实际作用三星一体机在 Linux 下的扫描不走 CUPS走的是 SANEScanner Access Now Easy这套标准接口。驱动安装时往/usr/lib/x86_64-linux-gnu/sane/里放了一个libsane-samsungmfp.soSANE 通过这个后端访问 USB 设备。链路是scanimage用户命令 →libsaneSANE 核心 →samsungmfp后端 →libusb→ 打印机 USB 接口。这条链路决定了三件事第一扫描能否被系统识别取决于后端库能否加载依赖缺失或架构不匹配都会导致scanimage -L里看不到设备第二访问权限由 USB 设备节点的权限决定不是由驱动里的某个开关决定第三参数传递最终由后端解释同一台机器上不同版本的后端对--resolution和--mode的支持范围可能不同。验证后端是否加载成功scanimage -L输出里出现device samsungmfp:libusb:...就代表后端和 USB 设备已经握手成功。如果这里什么都不显示先回去查 SANE 后端目录下有没有libsane-samsungmfp.so以及ldd能不能解析。有些发行版把 SANE 后端改成了统一包名比如libsane1驱动自带的老后端文件名会被新版本直接忽略。解决办法是检查/etc/sane.d/下有没有samsungmfp.conf没有就手动建一个写入usb 04e8 *表示匹配所有三星 USB 设备。4.2 USB 访问权限udev 规则与用户组一个都不能少scanimage -L能看到设备但执行扫描时报open failed: Access denied十有八九是权限问题。SANE 访问 USB 扫描仪要求设备节点的用户组是scanner或lp并且当前登录用户在这个组里。新装系统默认只有 root 在普通用户自然没权限。先把用户加进组sudo usermod -aG scanner $USER newgrp scanner参数说明-aG是追加用户到 scanner 组newgrp scanner让当前 shell 立即生效不用注销重登。接下来确认 udev 规则存在ls /etc/udev/rules.d/*samsung* /etc/udev/rules.d/*scanner* 2/dev/null如果找不到三星设备相关规则写一条 udev 规则固定设备节点权限sudo tee /etc/udev/rules.d/60-samsung-scanner.rules EOF SUBSYSTEMusb, ATTR{idVendor}04e8, ATTR{idProduct}341b, MODE0664, GROUPscanner EOF规则内容解析SUBSYSTEMusb限定 USB 子系统ATTR{idVendor}04e8和ATTR{idProduct}341b精确匹配设备MODE0664给 owner 和 group 读写权限GROUPscanner把节点组改为 scanner。保存后让它生效sudo udevadm control --reload-rules sudo udevadm triggerudevadm trigger会重新触发内核设备事件新规则立即应用。此时ls -l /dev/bus/usb/001/003能看到组已经是 scanner。要注意设备号会随 USB 端口变化所以规则里按 vendor/product ID 匹配是最稳的。4.3 scanimage 参数实战从一次普通扫描到参数调优权限和驱动都正常后第一次扫描建议先用命令行试探不要直接用 GUI 工具。GUI 工具会把参数报错包装成抽象提示命令行能直接看到后端返回的信息。先看这个后端支持哪些参数scanimage --help | sed -n /Options specific to device/,/^$/p这段输出会列出--mode、--resolution、-l、-t、-x、-y等参数的取值范围。不同型号差异很大有的彩色分辨率最高 600dpi灰度能到 1200dpi先把范围搞清楚再选。执行一次彩色 A4 扫描scanimage --device samsungmfp:libusb:001:003 \ --mode Color --resolution 300 \ -l 0 -t 0 -x 210 -y 297 \ --formattiff /tmp/scan.tiff参数含义--device指定后端设备 ID必须与scanimage -L输出一致--mode Color选彩色模式黑白文档可选Gray纯文字可选Lineart--resolution 300是 300dpi普通文档存档够用-l 0 -t 0是扫描起始坐标以毫米为单位-x 210 -y 297是扫描宽度和高度正好覆盖 A4 纸。--formattiff尽量用 TIFF老后端对 JPEG 编码支持不稳定。这套参数里最容易出错的是--device字符串。USB 设备在总线上的编号变化会导致001:003改变如果设备被重插后扫描命令报找不到设备用scanimage -L重新查看实际编号或者直接省略--device让 SANE 自动选择第一个可用设备。对于批量扫描场景-x 210 -y 297固定纸面范围能省去每页重新对位的麻烦但注意不同型号的扫描面板可能有 12mm 的边距误差首次使用后用标尺校准一次。另外老三星一体机的扫描 CIS 元件对光源衰减敏感扫出来的图像发黄或偏暗时不要急着调后端参数先检查玻璃面板和光源这是硬件问题驱动救不回来。扫描完成后的文件格式处理用 ImageMagick 转换即可convert /tmp/scan.tiff -quality 90 /tmp/scan.jpgTIFF 保留原始信息JPG 便于传输和预览。批量扫多页时先分别扫成 TIFF 再合并convert /tmp/page1.tiff /tmp/page2.tiff /tmp/page3.tiff all.pdfconvert按文件名顺序把多页 TIFF 合成一个 PDF。这种操作适合合同、票据归档扫描分辨率保持 300dpi文件体积适中且文字清晰。5. 避坑老驱动在新 Linux 发行版上常见的五个翻车点5.1 安装脚本写坏 ld.so.conf重启后大量命令报 libc 错误现象执行完./install.sh后系统正常重启进入桌面发现终端、文件管理器全部打不开命令行下ls都报/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.xx not found。原因install.sh 在追加驱动路径到/etc/ld.so.conf时覆盖了原有的多行内容把系统库目录挤掉了。解决进 recovery mode 启动到 root shell编辑/etc/ld.so.conf恢复基础路径echo -e /usr/local/lib\n/lib/x86_64-linux-gnu\n/usr/lib/x86_64-linux-gnu\n/usr/lib/samsung /etc/ld.so.conf ldconfig这条命令把标准系统库路径和三星驱动路径一起写回。以后安装任何 Linux 驱动包养成先备份/etc/ld.so.conf的习惯一条cp /etc/ld.so.conf /etc/ld.so.conf.bak就能留后悔药。这也是这类老驱动安装最惊险的一个坑大批系统命令集体失效时别急着重装系统。5.2 扫描进程被 killed日志里只有 SIGABRT现象scanimage -L能看到设备但一执行扫描进程直接消失dmesg尾部显示sane-scanimage[pid] segfault at ... ip ...。原因驱动自带的扫描后端是 32 位 ELF而系统里缺 32 位运行库最典型的是libstdc.so.6的 32 位版本。解决按发行版补装 32 位兼容库Debian/Ubuntu 用sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libstdc6:i386 libpng12-0:i386RHEL/CentOS 用yum install -y glibc.i686 libstdc.i686装完先不急着跑扫描用ldd /usr/lib/sane/libsane-samsungmfp.so确认not found消失。这类故障在 linux 运维故障案例中出现频率不低本质是发行版逐步取消 32 位库支持而驱动没有同步更新。5.3 最新版 CUPS 添加队列时找不到三星 PPD现象执行lpadmin指定 PPD 文件时系统提示文件损坏或无法识别图形界面列表里也搜不到三星。原因新 CUPS 把 PPD 的格式校验收紧老驱动带的 PPD 里某些字段比如cupsFilter指令里的旧版本号不符合新规范。解决不要理会系统自带列表直接用命令行指定驱动安装时复制到/usr/share/cups/model/下的 ppd 文件。如果这个文件都加载不了复制一份到当前目录再改权限cp /usr/share/cups/model/Samsung_SCX_series.ppd /tmp/ lpadmin -p SAMSUNG_SCX -v usb://SAMSUNG/SCX-xxxx -P /tmp/Samsung_SCX_series.ppd -E还有一种例外情况是驱动根本没把 ppd 文件复制进 model 目录这时手动从解压包里找find /path/to/driver -name *.ppd找到后手动复制过去就行。5.4 一段时间不用后打印机掉线打不了也不扫不了现象刚装好时打印和扫描都正常隔半小时再用打印机就绪灯亮着但设备无响应。原因内核 USB 自动挂起autosuspend把一体机的 USB 接口切到了低功耗状态老设备固件里没有完整的唤醒协商机制。解决关闭 USB 自动挂起永久性设置建议写进 udev 规则sudo tee /etc/udev/rules.d/60-usb-samsung-no-suspend.rules EOF ACTIONadd, SUBSYSTEMusb, ATTR{idVendor}04e8, ATTR{idProduct}341b, ATTR{power/control}on EOF如果设备号不确定直接对整台机器关闭 autosuspend 也是一种办法编辑/etc/default/grub在GRUB_CMDLINE_LINUX_DEFAULT里加usbcore.autosuspend-1然后update-grub。代价是 USB 设备功耗略增对一体机这种固定设备没有实际影响。这个坑容易误判成驱动失效实际是内核电源管理在背后作怪排查时先试这条别急着重装驱动。5.5 扫描设备一直拒绝访问root 能用但普通用户不能现象sudo scanimage -L能看到设备普通用户的scanimage -L输出为空运行扫描报Permission denied。原因设备节点权限默认只给了 root 所在的组当前用户既不在scanner组也没有对应的 udev 规则把节点归到可用组。解决先确认用户组存在Debian 系会在安装 SANE 时创建scanner组然后执行sudo usermod -aG scanner $USER接着按前面 4.2 的方法补 udev 规则。需要较真的地方是usermod后当前 session 的组权限不会立即刷新用newgrp scanner或重新登录。之前有同事在这个坑上浪费了半天因为只执行了usermod就以为设置生效id命令显示的组还是旧的扫描器依然拒绝访问。6. 别依赖图形界面三个命令验证驱动再写一个批量扫描脚本驱动装好、队列建好后用lpstat -p和scanimage -L确认两端都在基本就算稳了。但日常使用中图形界面偶尔会抽风打不出任务这时候命令行反而是最快的诊断工具。我的习惯是固定一套三板斧lpstat -p -d看打印队列状态scanimage -L看扫描后端状态再往后端日志里翻错误。这三个命令按顺序跑一遍十分钟内能定位绝大多数驱动问题。批量扫描场景值得写一个小脚本避免每次重复敲一堆参数。以下脚本把多页文档逐页扫描并合并成 PDF#!/bin/bash DEVICE$(scanimage -L | grep samsungmfp | awk -F {print $2} | head -1) OUTDIR/tmp/scan_$(date %Y%m%d%H%M%S) mkdir -p $OUTDIR for i in $(seq 1 $1); do echo 扫描第 $i 页请放入纸张后按回车... read -r scanimage --device $DEVICE --mode Gray --resolution 300 \ -l 0 -t 0 -x 210 -y 297 --formattiff $OUTDIR/page_$i.tiff done convert $OUTDIR/page_*.tiff 扫描结果_$(date %Y%m%d).pdf echo 输出文件扫描结果_$(date %Y%m%d).pdf脚本逻辑说明第一行scanimage -L | grep samsungmfp从后端输出里提取设备 ID避免手动填001:003这种会变的值循环里的seq 1 $1接收脚本第一个参数作为总页数每页开始前用read -r等待人工翻页--mode Gray --resolution 300是文档扫描的通用配置图片和合同用 300dpi 灰度既清晰又省体积。convert合并时按文件名升序排列所以页号用零填充的两位数更稳妥。最后是一个伴随我很久的习惯老设备驱动安装完别急着删安装包把 tar.gz 和装好的 PPD 文件备份到/opt/drivers/下。系统升级后再遇到装备问题回退到老版本熟悉的操作路径比从零折腾新驱动省心得多。驱动版本这种事和固件管理一个道理最新不一定最适配老版本在特定硬件上可能更稳。日常维护时给打印机这种外设单独记录一份驱动版本号和发行版组合的笔记能省下日后大量排查时间。希望这篇实战经验对你有所帮助。本文还有配套的精品资源点击获取
返回列表