Day 7104 在 Windows 10 下使用 LPD 打印服务共享打印机

自从 2021 年的 KB5005565 开始,微软就在玩坏 Windows 内置的打印机共享功能的道路上越走越远,虽然知道微软是为了修复 Windows 共享中的漏洞而做出的修改,但你要不要首先确保用户的功能可以继续正常使用?

时至今日,微软的出品质量越来越差,每一次的 Windows Update 都可能引入新的严重 bug,尤其是共享打印机功能,以前通常只需要考虑跨大版本不易解决(如 Win10 去连接 Win7 的共享打印机、XP 去连接 Win11 的打印机等等),而现在甚至同代系统之间都可以昨天还能用、今天就全炸锅了。

前一段时间因各种原因,给某公司组装了几十台办公电脑,由于并非常驻对方公司,无法像在供职公司一样出问题随时上门,在被 Windows 10 优秀的共享打印机功能教训过后(前一天同一个办公室还能用,第二天就全体报错,并且无法重新添加),终于在检索维护方案时,找到一种不需要额外投入成本的方法,即使用 Windows 目前还内置的 LPD 打印服务。

以下操作方式以 Windows 10 为例,Windows 11 操作相近,可自行摸索。

注:如果打印服务器和客户端同属于 Windows 10、11 系列,请优先将双方的网络配置文件设置为专有网络(专用网络),可以省掉很多问题。

一、安装  LPD 打印服务

在拟用作打印服务器(直连打印机)的电脑上打开“启用或关闭 Windows 功能”,启用“打印和文件服务”下的“LPD 打印服务”(无需勾选“LPR 端口监视器”,但选上也没有什么问题),点击确定安装此功能。

二、启用共享

为接下来要共享的打印机启用共享,此时需要记下共享名,稍后在其他机器添加打印机时会用到。

为达到最佳兼容性,共享名最好遵循以下规则:(1)全小写(录入时比较方便);(2)不要有空格;(3)限制在31个(含)字符内。

三、安装 LPR 打印端口

在打印客户端(其他电脑)上打开“启用或关闭 Windows 功能”,这次启用的是“打印和文件服务”下的“LPR 端口监视器”,点击确定安装此功能。

四、在客户机上添加打印机

(一)在“添加设备”对话框中直接点击“我所需的打印机未列出”,在下一步中选择“通过手动设置添加本地打印机或网络打印机”。

(二)选择“创建新端口”,端口类型选择“LPR Port”。

(三)在“添加 LPR 兼容打印机”对话框中,在“提供 LPD 的服务器的名称或地址”中输入打印服务器的 IP 地址,“服务器上的打印机名称或打印队列名称”中输入第二部中记下的共享名。

(四)在下一步中安装打印机驱动,可去厂商网站下载。

五、额外设置

安装完毕后,打开新增打印机的“打印机属性”,在“端口”中取消勾选“启用双向支持”,否则打印机可能没有反应,对于佳能 CAPT 协议的打印机而言,则可能报错“不支持打印机连接的端口”。

不过该方法也不是万能的,目前有观察到以下两种特殊情况:

一、HP Laserjet 1020 打印机的共享

作为一款经典型号,1020 打印机至今仍在生产新品,迄今已有 20 年的历史,其在官网上提供的“全功能软件和驱动程序”截止至 2016 年,安装程序也有很明显的 XP 年代的痕迹。

但是,如果用官方驱动进行 LPD 共享的话,无论如何无法成功,甚至连 Windows 自带的共享有时也困难重重,表现为可以成功添加打印机,可以成功发送打印任务,但打印机实际上不会有任何反应。

临时解决方案为:去 HP 官网下载官方的通用驱动(HP Universal Print Driver Series for Windows),将已添加的打印机驱动替换为这个通用驱动即可。(不保证 100% 修复,可能即使采用通用驱动也无法收到打印任务,最好还是能使用 Windows 自带的共享功能连接该型号的打印机)

此外,如果需要在 macOS 上添加此型号打印机的 LPD 共享连接,驱动程序选择 macOS 自带的 HP Laserjet 1022 即可(HP 官方没有提供 1020 的 macOS 驱动)。

二、LPD 服务报错找不到打印机

出现此错误时,其表象与上一个问题类似,即 LPD 共享可以正常添加,打印任务可以正常下达,但打印机不会有任何反应。

不同的是此时去客户机的事件查看器中,展开 Windows 日志-应用程序,会看到有级别为警告、来源为 Spooler-LPRSVC、事件 ID 为 2004 的记录,内容为:

行式打印机远程工具(LPR)服务无法将打印作业提交到主机(打印服务器 IP 地址)上的 Line Printer Daemon (LPD)打印机(打印机共享名),因为远程主机或打印机上的 LPD 服务正在拒绝打印作业。如果 LPD 服务正在处理其他打印作业则会发生这种情况。LPR 服务将重试打印,直到作业打印成功或用户取消打印作业为止。

在打印服务器上,可以看到级别为错误、来源为 Spooler-LPDSVC、事件 ID 为 4008 的记录,内容为(没有拍照所以为大致内容,来自对英语事件内容的翻译):

行式打印机远程工具(LPR)服务拒绝了来自(打印服务器 IP 地址)提供给(打印机共享名)的打印任务,因为指定的打印机不存在。请从客户端以正确的打印机名称重新发起打印任务。

此问题即便在客户机上添加 LPD 打印机时填写的共享名完全正确也可能发生(添加打印机时只校验服务是否可以连接,并不校验打印队列名称是否正确,所以请优先检查共享名称是否录入有误),临时解决方法为在服务器上给打印机换一个共享名,然后在客户机上重新添加 LPD 打印机,但也可能无效,具体原因仍有待探究。

三、其他一些添加共享打印机时问题的处理方案

(一)打印服务器为 Windows 10、客户端为 Windows 11,在服务器和客户机的网络配置文件均已设置为“专用网络”、打印服务器网络和共享设置已设置“启用文件和打印机共享”、“密码保护的共享”已经设置为“无密码保护的共享”且 Guest 账户没有被禁用的情况下,通过 \\IP 的 UNC 路径访问打印服务器提示“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁”

临时处理方法:

1 在出现上述提示时,使用账号 Guest、密码为空的凭据登录,此时可以看到共享打印机,但尝试安装会提示“0x00000040 指定的网络名不再可用”

2 在组策略“计算机配置-管理模板-打印机”中,将“配置 RPC 连接设置”中的“用于传出 RPC 连接的协议”从“RPC over TCP”修改为“命名管道上的 RPC”。

3 使用 gpupdate /force 更新组策略(或重启一下)。

TONT 31543 Microsoft Access 的名字是怎么来的?

原文链接:https://devblogs.microsoft.com/oldnewthing/20060413-09/?p=31543

We’ve seen how the names for some Microsoft products had to be changed due to a name conflict. I’m told that the people who had to come up with the name for the database product avoided this pitfall in a clever way: Instead of trying to avoid a name that was already taken, they intentionally used a name that was already taken: By Microsoft itself.

我们已经见识过一些微软产品的名字因为命名冲突而不得不改名的情况。据说要给一款数据库产品的员工巧妙地避开了这一大坑:没有选择不使用已经被占用的名字,而是恰恰相反选择了一款已经被占用的,(而占用它的不是别人,)正是微软自己。

They discovered that Microsoft had a long-forgotten terminal emulator product called Microsoft Access. “Access” sounded like an appropriate name for a database product, so they blew the dust off it and gave the name a new life.

这些人发现微软有一款被尘封许久的终端模拟器产品叫 Microsoft Access。「Access」一听就是个适合数据库产品的好名字,于是他们就为它掸去尘土,并为这个名字赋予了新生。

TONT 31563 为什么微软防护服务的服务名叫 msmpsvc?

原文链接:https://devblogs.microsoft.com/oldnewthing/20060412-09/?p=31563

(This is the first in a series of short posts on where Microsoft products got their names.)

(本文是一系列有关微软产品如何起名的小故事的第一篇。)

The original name for the malware protection service was “mpsvc” the “Microsoft Protection Service”, but it was discovered later that that filename was already used by malware! As a result, the name of the service had to be changed by sticking an “ms” in front, making it “msmpsvc.exe”. Therefore, technically, its name is the “Microsoft Microsoft Protection Service”. (This is, of course, not to be confused with “mpssvc.exe”, which is, I guess, the “Microsoft Protection Service Service”.)

恶意软件防护服务原来的服务名叫 mpsvc,是 Microsoft Protection Service 的缩写,结果后来我们发现,那个文件名居然已经被一款恶意软件给占掉了!于是乎,服务名称就得作出修改,而修改的方式就是在前面加上一个「ms」,使其变成了「msmpsvc.exe」。故而,技术上而言,msmpsvc 代表的是「微软微软防护服务」。(当然还是不要与 mpssvc.exe 混淆了,后者我估计是「微软防护服务服务」的缩写。)

Fortunately, the Marketing folks can attempt to recover by deciding that “msmpsvc” stands for “Microsoft Malware Protection Service”. But you and I will know what it really stands for.

幸运的是,营销人员们通过让「msmpsvc」代表「微软恶意软件防护服务」尝试挽回了损失,不过你我现在都知道它的本来含义了。

TONT 37203 「诱饵」显示控制面板

原文链接:https://devblogs.microsoft.com/oldnewthing/20060410-17/?p=32703

Last time, we saw one example of a “decoy” used in the service of application compatibility with respect to the Printers Control Panel. Today we’ll look at another decoy, this time for the Display Control Panel.

在上次的文章中,我们介绍了与打印机控制面板的有关的、一个为应用程序兼容性而设的“诱饵”控制面板的案例。今天我们来讲另一个案例,这次是为了显示(属性)控制面板的。

When support for multiple monitors was being developed, a major obstacle was that a large number of display drivers hacked the Display Control Panel directly instead of using the documented extension mechanism. For example, instead of adding a separate page to the Display Control Panel’s property sheet for, say, virtual desktops, they would just hack into the “Settings” page and add their button there. Some drivers were so adventuresome as to do what seemed like a total rewrite of the “Settings” page. They would take all the controls, move them around, resize them, hide some, show others, add new buttons of their own, and generally speaking treat the page as a lump of clay waiting to be molded into their own image. (Here’s a handy rule of thumb: If your technique works only if the user speaks English, you probably should consider the possibility that what you’re doing is relying on an implementation detail rather than something that will be officially supported going forward.)

早先开发多显示器支持的时候,我们遇到的一大问题是有为数众多的显示驱动程序是直接“黑”进显示控制面板(做修改)的,而没有使用文档中给出的扩展机制。

例如,某款驱动可能没有选择在显示控制面板的属性页里多加一页的方式,来增加对诸如虚拟桌面之类功能的支持,而是选择直接“黑”进显示控制面板的“设置”页面,然后在里面加上一个按钮。有些选手则更是重量级,选择干脆把整个“设置”页面重写一遍,把所有的控件挪来挪去、放大缩小、藏起这个、显示那个,再把自家的按钮大大方方地摆上台面。

基本上,这些驱动拿着“设置”页面当成了一块粘土,爱怎么揉全看它们自己的喜好。(这里有一条经验法则:如果你的做法只在用户的语言是英语的前提下才会起效,那你多半应该考虑你的所作所为是依赖实现细节、而不是会得到官方支持的做法。)

In order to support multiple monitors, the Settings page on the Display Control Panel underwent a major overhaul. But when you tried to open the Display Control Panel on a system that had one of these aggressive drivers installed, it would crash because the driver ran around rearranging things like it always did, even though the things it was manipulating weren’t what the developers of the driver intended!

为了开发多显示器支持,“设置”页面经历了大量的重构。但(在这之后,)如果你尝试在安装了上文所述的那种激进派驱动的系统上尝试打开显示控制面板的时候,页面会崩溃,因为那些驱动还在照例跑进控制面板里去大闹天宫,却发现他们要改造的那个世界已经不是那样了!

The solution was to create a “decoy” Settings page that looked exactly like the classic Windows 95 Settings page. The decoy page’s purpose in life was to act as bait for these aggressive display drivers and allow itself to be abused mercilessly, letting the driver have its way. Meanwhile, the real Settings page (which is the one that was shown to the user), by virtue of having been overlooked, remained safe and unharmed.

(对此的)解决方案是造一个跟 Windows 95 传统的(显示控制面板)设置页面一样的“诱饵”页面,它的存在意义则是当成香饽饽,让那些激进派驱动们进去按自己的想法大闹一番,同时又确保躲过一劫的、真正向用户展示的设置页面安然无恙。

There was no attempt to make this decoy Settings page do anything interesting at all. Its sole job was to soak up mistreatment without complaining. As a result, those drivers lost whatever nifty features their shenanigans were trying to accomplish, but at least the Display Control Panel stayed alive and allowed the user to do what they were trying to do in the first place: Adjust their display settings.

作诱饵的那个设置页面,除了默默承受驱动的胡搅蛮缠之外什么用处也没有。最后的结果是,驱动们想要通过诡计实现的那些花哨功能一个也没有展现出来,但至少(真正的)显示控制面板好好地活了下来,使用户得以实现它们本来的愿望:修改显示设置。

Day 7033 雪花

已经记不清是什么时候留存下来的网络歌曲,正确的创建和修改日期已在多次数据迁移中消失殆尽,留下的唯一信息是演唱者为裔天,词、曲作者已不可考。

在本文之前,这首歌在互联网上唯一剩下的记忆可能只剩下一个老式的 LRC 下载页面,以及一篇百度知道提问。

愿它的美丽从今天起能继续流传下去。

(Soundcloud 播放器所需梯子请自理)


作为 Blog 重建工作的一部分,顺手将原来「筱林乐音」这个分类下中的条目里原来的 Flash 播放器们更新为了 Youtube 或 Soundcloud 来源,只有一篇暂时无法立即找到可用源,就那样吧。

2025 年了,会搬梯子是基础技能。

Day 7032 洒水扬尘,抑或是喃喃自语

长久以来第一次正经写博文。

也不知道是否还会有访客意识到本博客的界面发生了变动,我想是没有的,毕竟除了基本上与原来没什么变化之外,还因为更新频次已经低于一年 10 篇文章,所以不指望会有多少访客,也就不指望会有人记得之前这里长什么样子。但不论如何,这个 WordPress 是从头重新安装的(当然数据还是恢复了的),甚至整台 VPS 都是格掉重来的。

新系统装完,不发点东西表示一下好像有点不好,于是以下是一大堆零零碎碎,权当我在记流水账。 继续阅读 “Day 7032 洒水扬尘,抑或是喃喃自语”

Day 6887 为 Photoshop 的“图像处理器”增加 CR2 格式打开支持

由于工作的缘故,需要快速将一批 RAW 图片转换为 JPEG 格式,该批文件的格式较新,手里现有的 AcdSee 和 XnView 无法打开,并且已经没有时间安装 Lightroom 等软件,经查找 Photoshop 的“图像处理器”(文件-脚本-图像处理器)可以完成这一操作。

然而,在操作过程中,发现文件夹中的 CR2 格式文件被尽数跳过。经搜索,原因为 Photoshop 自带的“图像处理器”脚本在判断需要用  CameraRaw 打开的文件时并不包含 CR2 扩展名,幸好这一插件的文件是纯文本,只需对其进行修改即可。

以 Photoshop 2020 为例,用文本编辑器打开下列文件:

C:\Program Files\Adobe\Adobe Photoshop 2020\Presets\Scripts\Image Processor.jsx

在大约115行的位置找到:

gFilesForCameraRaw = Array( “TIF”, “CRW”, “NEF”, “RAF”, “ORF”, “MRW”, “DCR”, “MOS”, “SRF”, “PEF”, “DCR”, “DNG”, “ERF”, “X3F”, “RAW”);

在末尾添加 CR2 扩展名(注意保持大写),使其变成:

gFilesForCameraRaw = Array( “TIF”, “CRW”, “NEF”, “RAF”, “ORF”, “MRW”, “DCR”, “MOS”, “SRF”, “PEF”, “DCR”, “DNG”, “ERF”, “X3F”, “RAW”, “CR2”);

保存后重新调用图像处理器即可。

Day 6604 Word 中取消自动更新格式

在 Word 中编辑文档时,由于各种各样的原因(尤以外来文档居多),总会在录入一部分内容后一按回车,全文的部分内容就会变换为特定的格式(例如全部变成微软雅黑、自动缩进等等),而有时并不需要它这样多此一举——尤其是在修改一些长文档时特别烦人。

多数解决方法会要求去 Word 的选项中关闭“正文”样式的自动更新,但经尝试效果不彰,经搜索,找到一则通过 VBA 一次性关闭所有当前文档内置样式自动更新的方法:

Sub 清除自动套用格式()
  Dim update As Style
  Set Updates = ActiveDocument.Styles
  For Each update In Updates
    If update.Type = wdStyleTypeParagraph Then
      update.AutomaticallyUpdate = False
    End If
  Next
End Sub

将上述代码保存在通用模板 Normal.dotm 中,即可在任意文档中进行使用。

此处假设读者了解如何通过内置的 VBA 编辑器向 Normal.dotm 中添加宏,相关操作步骤请另行搜索。

Day 6575 Windows 95 彩蛋音乐 Clouds.mid 的来源

这篇文章之前我居然没翻译?

原文地址:https://www.brianorr.com/blog/2010/01/14/windows-95-easter-egg-song-clouds-mid/


In early 1995, I was working at Microsoft as an intern software engineer on the Windows 95 team, and was approached to write the music for the hidden Windows 95 Easter Egg.

This ‘Easter Egg’ was tricky to find (see the instructions below), but once found it opened up a window with all the names of who worked on Windows 95, with my music as the theme.

1995 年的早些时候,我在微软公司的 Windows 95 团队中担任实习软件工程师,有人邀请我为隐藏的 Windows 95 彩蛋撰写音乐。

这个“彩蛋”不怎么好找(后附打开方式),不过只要找到了,系统就会打开一个窗口,展示所有为 Windows 95 开发做出贡献的人员名单,而它将会用我的作品作为背景音乐。

The only instructions I was given was that the music should invoke images of ‘clouds’ and feel ‘floating’ and ‘peaceful’ – this is how Windows 95 was going to be marketed. Well, and that it had to play well on all sound cards at the time. For 99.9% of computers, this meant through the Adlib synthesizer emulation of the Creative Labs Sound Blaster card (or equivalent clone). In other words – no sampled instruments, no effects – just simple FM synthesis. General MIDI at its finest.

So with that said, I really couldn’t do too much in terms of interesting instrumentation or sounds; and yes…it’s pretty funny to listen to the tune now. I’ve rendered it out using a GM sound module (which is better) but still doesn’t come close to the realism you’d expect from most computer music today.

我接到的仅有的指示是:这则音乐应囊括“云朵”的印象,并给人以“飘逸”、“平和”的感觉——而这正是 Windows 95 的市场定位。此外,它还需要能在当时所有的声卡上播放出来。对(当时)99.9%的环境来说,这意味着创新公司声霸卡(或者同类克隆)里的 Adlib 合成器模拟水平,换句话说,不许有采样乐器,不许有特殊效果,只能是简简单单的 FM 合成器音效,只能是最纯粹的 General MIDI。

由此,我在富有趣味性的乐器或音效方面大大受限,不过如今再度聆听这首旋律仍是一件乐事。我用 GM(Generan MIDI)的音效模块重新渲染了一下(略有提升),不过与当今多数的计算机音乐的真实度仍然难以相提并论。

Feel free to post comments or send me any questions. Here’s the tune:

请随意发表评论或向我提问(注:原文如此),曲子在这(注:以下内容托管在 Soundcloud 上,可能需要搬梯子):

These are the original instructions to actually see the Easter Egg in Windows 95. Note this doesn’t work in Windows 98 or above, nor under some versions of the Active Desktop under Windows 95.

以下是在 Windows 95 下调出彩蛋的原始方案。注意 Windows 98 及以上版本无效,在 Windows 95 下部分版本的 Active Desktop 下也可能不起效(译注:下面的文件夹命名一个字或一个标点也不能错,包括中间的空格也不能省略):

Create a new folder on the Desktop and name it EXACTLY like this

(在桌面上创建一个新文件夹,严格按照下列内容命名):

and now, the moment you’ve all been waiting for

Then rename it to:(然后将其改名为:)

we proudly present for your viewing pleasure

Rename this folder again to:(最后一次将其改名为:)

The Microsoft Windows 95 Product Team!

Double-click the new folder and enjoy the show!(现在双击这个文件夹,就能看到表演了!)