FranGarcia.me (Posts about cups)
https://www.frangarcia.me/categories/cups.atom
2024-03-15T13:54:12Z
Fran Garcia
Nikola
Installing a Brother DCP-L2550DN printer and scanner in Fedora 37
https://www.frangarcia.me/posts/installing-a-brother-dcp-l2550dn-printer-and-scanner-in-fedora-37/
2023-03-31T14:58:46+02:00
2023-03-31T14:58:46+02:00
Fran Garcia
<p><img alt="Bother DCP-L2550DN printer" src="https://www.frangarcia.me/files/dcpl2550dn-main.webp"></p>
<p>My trusty, 15 year old Brother HL-2030 printer died with a Laser sensor error,
so it was due time for a replacement. Brother has been known to make good printers
and I wanted to get a replacement ASAP.</p>
<p>My requirements for the printer were:</p>
<ul>
<li>Laser B&W / monochrome. I only print a few pages per year, but I really need to
work OK (as I'm usually <strong>very</strong> remote to the printer).</li>
<li>Reasonable low cost (under 200€).</li>
<li>Network attachable (Ethernet), wifi optional.</li>
<li>Fedora compatible.</li>
</ul>
<p>So I found this <strong>Brother DCP-L2550DN</strong> on Amazon, and after a couple of days for
shipping, I was ready to get it installed.</p>
<h2>Installing the printer</h2>
<p>In my case, I just had to remove the old printer, and replace in place with the
new one. I connected the same USB-A (computer) to USB-B (printer) cable, and it
was immediately recognized by <code>lsusb</code>.</p>
<div class="code"><pre class="code literal-block">#> lsusb | grep -i Brother
Bus 001 Device 005: ID 04f9:0423 Brother Industries, Ltd DCP-L2550DN series
</pre></div>
<p>The Brother support page instructs you to download the installer script, which
in my case was:</p>
<ul>
<li>linux-brprinter-installer-2.2.3-1</li>
<li>dcpl2550dnpdrv-4.0.0-1.i386.rpm</li>
<li>brscan-skey-0.3.1-2.x86_64.rpm</li>
<li>brscan4-0.4.11-1.x86_64.rpm</li>
</ul>
<p>After running the script and asking for the specific model (<strong>DCP-L2550DN</strong> in
my case, hyphen included), CUPS reported it as configured.</p>
<div class="code"><pre class="code literal-block"><span class="err">#</span><span class="p">></span><span class="w"> </span><span class="p">.</span><span class="o">/</span><span class="nx">linux</span><span class="o">-</span><span class="nx">brprinter</span><span class="o">-</span><span class="nx">installer</span><span class="o">-</span><span class="m m-Double">2.2.3</span><span class="o">-</span><span class="mi">1</span><span class="w"> </span>
<span class="nx">Input</span><span class="w"> </span><span class="nx">model</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">-></span><span class="nx">DCP</span><span class="o">-</span><span class="nx">L2550DN</span>
<span class="nx">You</span><span class="w"> </span><span class="nx">are</span><span class="w"> </span><span class="nx">going</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">install</span><span class="w"> </span><span class="nx">following</span><span class="w"> </span><span class="nx">packages</span><span class="p">.</span>
<span class="w"> </span><span class="nx">dcpl2550dnpdrv</span><span class="o">-</span><span class="m m-Double">4.0.0</span><span class="o">-</span><span class="mi">1</span><span class="p">.</span><span class="nx">i386</span><span class="p">.</span><span class="nx">rpm</span>
<span class="w"> </span><span class="nx">brscan4</span><span class="o">-</span><span class="m m-Double">0.4.11</span><span class="o">-</span><span class="mi">1</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="w"> </span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">-</span><span class="m m-Double">0.3.1</span><span class="o">-</span><span class="mi">2</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">OK</span><span class="p">?</span><span class="w"> </span><span class="p">[</span><span class="nx">y</span><span class="o">/</span><span class="nx">N</span><span class="p">]</span><span class="w"> </span><span class="o">-></span><span class="nx">y</span>
<span class="nx">rpm</span><span class="w"> </span><span class="o">-</span><span class="nx">ihv</span><span class="w"> </span><span class="o">--</span><span class="nx">nodeps</span><span class="w"> </span><span class="o">--</span><span class="nx">replacefiles</span><span class="w"> </span><span class="o">--</span><span class="nx">replacepkgs</span><span class="w"> </span><span class="nx">dcpl2550dnpdrv</span><span class="o">-</span><span class="m m-Double">4.0.0</span><span class="o">-</span><span class="mi">1</span><span class="p">.</span><span class="nx">i386</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">Verifying</span><span class="o">...</span><span class="w"> </span><span class="err">########################################</span>
<span class="nx">Preparing</span><span class="o">...</span><span class="w"> </span><span class="err">########################################</span>
<span class="nx">Updating</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">installing</span><span class="o">...</span>
<span class="nx">dcpl2550dnpdrv</span><span class="o">-</span><span class="m m-Double">4.0.0</span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="err">########################################</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">lpd</span><span class="o">/</span><span class="nx">rawtobr3</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">lpd</span><span class="o">/</span><span class="nx">brprintconflsr3</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">inf</span><span class="o">/</span><span class="nx">brDCPL2550DNrc</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">usr</span><span class="o">/</span><span class="nx">lib</span><span class="o">/</span><span class="nx">cups</span><span class="o">/</span><span class="nx">filter</span><span class="o">/</span><span class="nx">brother_lpdwrapper_DCPL2550DN</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">usr</span><span class="o">/</span><span class="nx">share</span><span class="o">/</span><span class="nx">cups</span><span class="o">/</span><span class="nx">model</span><span class="o">/</span><span class="nx">brother</span><span class="o">-</span><span class="nx">DCPL2550DN</span><span class="o">-</span><span class="nx">cups</span><span class="o">-</span><span class="nx">en</span><span class="p">.</span><span class="nx">ppd</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">usr</span><span class="o">/</span><span class="nx">share</span><span class="o">/</span><span class="nx">ppd</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">brother</span><span class="o">-</span><span class="nx">DCPL2550DN</span><span class="o">-</span><span class="nx">cups</span><span class="o">-</span><span class="nx">en</span><span class="p">.</span><span class="nx">ppd</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">lpadmin</span><span class="w"> </span><span class="o">-</span><span class="nx">p</span><span class="w"> </span><span class="nx">DCPL2550DN</span><span class="w"> </span><span class="o">-</span><span class="nx">E</span><span class="w"> </span><span class="o">-</span><span class="nx">v</span><span class="w"> </span><span class="nx">usb</span><span class="p">:</span><span class="c1">//Brother/DCP-L2550DN%20series?serial=E78284M2N111836 -P /usr/share/ppd/brother/brother-DCPL2550DN-cups-en.ppd</span>
<span class="nx">lpadmin</span><span class="p">:</span><span class="w"> </span><span class="nx">Printer</span><span class="w"> </span><span class="nx">drivers</span><span class="w"> </span><span class="nx">are</span><span class="w"> </span><span class="nx">deprecated</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="nx">will</span><span class="w"> </span><span class="nx">stop</span><span class="w"> </span><span class="nx">working</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">future</span><span class="w"> </span><span class="nx">version</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">CUPS</span><span class="p">.</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">lpd</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="nx">DCPL2550DN</span><span class="o">/</span><span class="nx">cupswrapper</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="err">#</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">bin_t</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">cupsd_rw_etc_t</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">cupsd_rw_etc_t</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">cupsd_rw_etc_t</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">inf</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">bin_t</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">lpd</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">lpd</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span>
<span class="nx">semanage</span><span class="w"> </span><span class="nx">fcontext</span><span class="w"> </span><span class="o">-</span><span class="nx">a</span><span class="w"> </span><span class="o">-</span><span class="nx">t</span><span class="w"> </span><span class="nx">bin_t</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">cupswrapper</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span>
<span class="nx">ValueError</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">context</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span><span class="o">/</span><span class="p">(.</span><span class="o">*/</span><span class="p">)?</span><span class="nx">cupswrapper</span><span class="p">(</span><span class="o">/</span><span class="p">.</span><span class="o">*</span><span class="p">)?</span><span class="w"> </span><span class="nx">already</span><span class="w"> </span><span class="nx">defined</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">R</span><span class="w"> </span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">Printers</span>
<span class="nx">restorecon</span><span class="w"> </span><span class="o">-</span><span class="nx">RFv</span><span class="w"> </span><span class="o">/</span><span class="nx">usr</span><span class="o">/</span><span class="nx">lib</span><span class="o">/</span><span class="nx">cups</span><span class="o">/</span><span class="nx">filter</span>
<span class="nx">setsebool</span><span class="w"> </span><span class="o">-</span><span class="nx">P</span><span class="w"> </span><span class="nx">cups_execmem</span><span class="w"> </span><span class="mi">1</span>
<span class="nx">Will</span><span class="w"> </span><span class="nx">you</span><span class="w"> </span><span class="nx">specify</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">Device</span><span class="w"> </span><span class="nx">URI</span><span class="p">?</span><span class="w"> </span><span class="p">[</span><span class="nx">Y</span><span class="o">/</span><span class="nx">n</span><span class="p">]</span><span class="w"> </span><span class="o">-></span>
<span class="mi">0</span><span class="p">:</span><span class="w"> </span><span class="nx">beh</span>
<span class="mi">1</span><span class="p">:</span><span class="w"> </span><span class="nx">ipp</span>
<span class="mi">2</span><span class="p">:</span><span class="w"> </span><span class="nx">cups</span><span class="o">-</span><span class="nx">brf</span><span class="p">:</span><span class="o">/</span>
<span class="mi">3</span><span class="p">:</span><span class="w"> </span><span class="nx">https</span>
<span class="mi">4</span><span class="p">:</span><span class="w"> </span><span class="nx">socket</span>
<span class="mi">5</span><span class="p">:</span><span class="w"> </span><span class="nx">serial</span><span class="p">:</span><span class="o">/</span><span class="nx">dev</span><span class="o">/</span><span class="nx">ttyS0</span><span class="p">?</span><span class="nx">baud</span><span class="p">=</span><span class="mi">115200</span>
<span class="mi">6</span><span class="p">:</span><span class="w"> </span><span class="nx">lpd</span>
<span class="mi">7</span><span class="p">:</span><span class="w"> </span><span class="nx">http</span>
<span class="mi">8</span><span class="p">:</span><span class="w"> </span><span class="nx">ipps</span>
<span class="mi">9</span><span class="p">:</span><span class="w"> </span><span class="nx">smb</span>
<span class="mi">10</span><span class="w"> </span><span class="p">(</span><span class="nx">I</span><span class="p">):</span><span class="w"> </span><span class="nx">Specify</span><span class="w"> </span><span class="nx">IP</span><span class="w"> </span><span class="nx">address</span><span class="p">.</span>
<span class="mi">11</span><span class="w"> </span><span class="p">(</span><span class="nx">A</span><span class="p">):</span><span class="w"> </span><span class="nx">Auto</span><span class="p">.</span><span class="w"> </span><span class="p">(</span><span class="nx">usb</span><span class="p">:</span><span class="c1">//dev/usblp0)</span>
<span class="nx">select</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">number</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">destination</span><span class="w"> </span><span class="nx">Device</span><span class="w"> </span><span class="nx">URI</span><span class="p">.</span><span class="w"> </span><span class="o">-></span><span class="mi">11</span>
<span class="nx">lpadmin</span><span class="w"> </span><span class="o">-</span><span class="nx">p</span><span class="w"> </span><span class="nx">DCPL2550DN</span><span class="w"> </span><span class="o">-</span><span class="nx">v</span><span class="w"> </span><span class="nx">usb</span><span class="p">:</span><span class="c1">///etc/usblp0 -E</span>
<span class="nx">Test</span><span class="w"> </span><span class="nx">Print</span><span class="p">?</span><span class="w"> </span><span class="p">[</span><span class="nx">y</span><span class="o">/</span><span class="nx">N</span><span class="p">]</span><span class="w"> </span><span class="o">-></span>
<span class="nx">You</span><span class="w"> </span><span class="nx">are</span><span class="w"> </span><span class="nx">going</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">install</span><span class="w"> </span><span class="nx">following</span><span class="w"> </span><span class="nx">packages</span><span class="p">.</span>
<span class="w"> </span><span class="nx">brscan4</span><span class="o">-</span><span class="m m-Double">0.4.11</span><span class="o">-</span><span class="mi">1</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">rpm</span><span class="w"> </span><span class="o">-</span><span class="nx">ihv</span><span class="w"> </span><span class="o">--</span><span class="nx">nodeps</span><span class="w"> </span><span class="o">--</span><span class="nx">replacefiles</span><span class="w"> </span><span class="o">--</span><span class="nx">replacepkgs</span><span class="w"> </span><span class="nx">brscan4</span><span class="o">-</span><span class="m m-Double">0.4.11</span><span class="o">-</span><span class="mi">1</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">Verifying</span><span class="o">...</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">Preparing</span><span class="o">...</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">Updating</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">installing</span><span class="o">...</span>
<span class="w"> </span><span class="mi">1</span><span class="p">:</span><span class="nx">brscan4</span><span class="o">-</span><span class="m m-Double">0.4.11</span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">This</span><span class="w"> </span><span class="nx">software</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="nx">based</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nx">part</span><span class="w"> </span><span class="nx">on</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">work</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">Independent</span><span class="w"> </span><span class="nx">JPEG</span><span class="w"> </span><span class="nx">Group</span><span class="p">.</span>
<span class="nx">You</span><span class="w"> </span><span class="nx">are</span><span class="w"> </span><span class="nx">going</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">install</span><span class="w"> </span><span class="nx">following</span><span class="w"> </span><span class="nx">packages</span><span class="p">.</span>
<span class="w"> </span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">-</span><span class="m m-Double">0.3.1</span><span class="o">-</span><span class="mi">2</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">rpm</span><span class="w"> </span><span class="o">-</span><span class="nx">ihv</span><span class="w"> </span><span class="o">--</span><span class="nx">nodeps</span><span class="w"> </span><span class="o">--</span><span class="nx">replacefiles</span><span class="w"> </span><span class="o">--</span><span class="nx">replacepkgs</span><span class="w"> </span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">-</span><span class="m m-Double">0.3.1</span><span class="o">-</span><span class="mi">2</span><span class="p">.</span><span class="nx">x86_64</span><span class="p">.</span><span class="nx">rpm</span>
<span class="nx">Verifying</span><span class="o">...</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">Preparing</span><span class="o">...</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">Updating</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">installing</span><span class="o">...</span>
<span class="w"> </span><span class="mi">1</span><span class="p">:</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">-</span><span class="m m-Double">0.3.1</span><span class="o">-</span><span class="mi">2</span><span class="w"> </span><span class="err">#################################</span><span class="w"> </span><span class="p">[</span><span class="mi">100</span><span class="o">%</span><span class="p">]</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">brscan_mail</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">snmp</span><span class="p">.</span><span class="nx">cfg</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">scantofile</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">scantoimage</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">scantoocr</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">etc</span><span class="o">/</span><span class="nx">opt</span><span class="o">/</span><span class="nx">brother</span><span class="o">/</span><span class="nx">scanner</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="o">/</span><span class="nx">scantoemail</span><span class="p">.</span><span class="nx">config</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
<span class="nx">ln</span><span class="p">:</span><span class="w"> </span><span class="nx">failed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">create</span><span class="w"> </span><span class="nx">symbolic</span><span class="w"> </span><span class="nx">link</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="nx">usr</span><span class="o">/</span><span class="nx">bin</span><span class="o">/</span><span class="nx">brscan</span><span class="o">-</span><span class="nx">skey</span><span class="err">'</span><span class="p">:</span><span class="w"> </span><span class="nx">File</span><span class="w"> </span><span class="nx">exists</span>
</pre></div>
<p>I tried printing a test page but nothing would work because it was configured
to use a device called /dev/usb/lp0 , or /dev/usblp0 . Neither of those existed
on my system so I was troubleshooting for a while.</p>
<p>Some useful resources:</p>
<p><a href="https://fedoraproject.org/wiki/How_to_debug_printing_problems">https://fedoraproject.org/wiki/How_to_debug_printing_problems</a></p>
<h2>Configuring the right CUPS queue</h2>
<p>In the end, I used good old <code>system-config-printer</code> graphical assistant, which
automatically detected the printer, and configured it in cups in the following
manner:</p>
<div class="code"><pre class="code literal-block">#> lpstat -p
printer Brother-DCP-L2550DN-series is idle. enabled since Thu Mar 30 14:46:53 2023
</pre></div>
<div class="code"><pre class="code literal-block"><span class="n">Description</span><span class="o">:</span><span class="w"> </span><span class="n">Brother</span><span class="w"> </span><span class="n">DCP</span><span class="o">-</span><span class="n">L2550DN</span><span class="w"> </span><span class="n">series</span>
<span class="n">Location</span><span class="o">:</span><span class="w"> </span><span class="n">mycomputer</span>
<span class="n">Driver</span><span class="o">:</span><span class="w"> </span><span class="n">Brother</span><span class="w"> </span><span class="n">DCPL2550DN</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">CUPS</span><span class="w"> </span><span class="o">(</span><span class="n">grayscale</span><span class="o">,</span><span class="w"> </span><span class="n">duplex</span><span class="o">)</span>
<span class="n">Connection</span><span class="o">:</span><span class="w"> </span><span class="n">usb</span><span class="o">://</span><span class="n">Brother</span><span class="o">/</span><span class="n">DCP</span><span class="o">-</span><span class="n">L2550DN</span><span class="o">%</span><span class="mi">20</span><span class="n">series</span><span class="o">?</span><span class="n">serial</span><span class="o">=</span><span class="n">XXXXXXXXXXXXX</span>
<span class="n">Default</span><span class="w"> </span><span class="n">Options</span><span class="o">:</span><span class="w"> </span><span class="n">Banners</span><span class="o">=</span><span class="n">none</span><span class="o">,</span><span class="w"> </span><span class="n">none</span><span class="w"> </span><span class="n">paper</span><span class="o">=</span><span class="n">iso_a4_210x297mm</span><span class="w"> </span><span class="n">sides</span><span class="o">=</span><span class="n">one</span><span class="o">-</span><span class="n">sided</span>
</pre></div>
<h2>Configuring SANE</h2>
<p>This was my first try with SANE in 20+ years using Linux, and I only had to
install the driver as performed with the automatic installer.</p>
<p>Fedora ships <code>simple-scan</code>, which takes care of scanning pages both from
the external feeder or the internal scanner. It works nicely and can output
images to both JPGs or PDFs (for documents).</p>
<p>Happy hacking!</p>