ไดรเวอร์เครื่องพิมพ์ Canon CAPT ปิดแหล่งที่มาและห้องสมุดไบนารีที่จัดทำโดย Canon รวบรวมสำหรับ i386 ดังนั้นหากคุณใช้ amd64 คุณจะต้องเปิดใช้งาน multiarch ก่อนและติดตั้งบางไลบรารี:
# amd64 only
dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386
ติดตั้งถ้วยถ้าคุณยังไม่ได้:
apt-get install cups
ดาวน์โหลดและแกะไดรเวอร์เครื่องพิมพ์ Canon CAPT:
wget http://gdlp01.c-wss.com/gds/6/0100004596
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
ติดตั้งไดรเวอร์ 32- บิตหรือ 64- บิตขึ้นอยู่กับสถาปัตยกรรมของคุณ:
ค้นหา/usr/share/cups/model
ไฟล์ ppd ที่อธิบายเครื่องพิมพ์และเลือกไฟล์ที่ตรงกับ (หรือใกล้เคียงที่สุด) เครื่องพิมพ์ของคุณ:
# grep -H ModelName /usr/share/cups/model/*.ppd | less
...
/usr/share/cups/model/CNCUPSLBP6018CAPTS.ppd:*ModelName: "Canon LBP6000/LBP6018 CAPT (US)"
ในกรณีนี้เราเลือกCNCUPSLBP6018CAPTS.ppd
รุ่นที่ตรงกับ LBP6000
เพิ่มเครื่องพิมพ์:
# lpadmin -p LBP6000 -m CNCUPSLBP6018CAPTS.ppd -v ccp://localhost:59687
# lpadmin -p LBP6000 -E
# ccpdadmin -p LBP6000 -o /dev/usb/lp0
และกำหนดค่าระบบของคุณเพื่อเริ่มต้น Canon ccpd daemon โดยอัตโนมัติ:
# update-rc.d ccpd defaults
ปัญหาที่เกิดขึ้น
มีปัญหาหลายอย่างกับไดรเวอร์เครื่องพิมพ์ Canon:
มันถูกสร้างขึ้นสำหรับ Debian และ Ubuntu รุ่นที่รองรับล่าสุดคือ 12.04 มันทำงานใน 14.04 แม้ว่า
มันประกอบไปด้วยไลบรารีไบนารีแบบปิดแหล่งที่สร้างขึ้นสำหรับ 32 บิต i386 ดังนั้นจึงไม่สามารถเรียกใช้แบบดั้งเดิมบน amd64 (แม้แต่ในแพ็คเกจ 64 บิต)
captstatusui รวมถึงการโทรไม่ จำกัดstrcpy
ใน cnsktmodule.c ซึ่งล้มเหลวด้วยข้อผิดพลาดaborted *** buffer overflow detected ***
ในบางระบบ
ไดรเวอร์เครื่องพิมพ์ Canon เป็น daemon ที่แยกต่างหากซึ่งพูดคุยกับถ้วยบนซ็อกเก็ตเครือข่ายหรือ - มันออกจากพอร์ตเครือข่ายเปิดในระบบของคุณและฉันสงสัยว่ารหัส Canon ได้รับการตรวจสอบช่องโหว่ด้านความปลอดภัยแล้ว
เครื่องพิมพ์สามารถปรากฏขึ้นสองครั้งในถ้วย (หนึ่งครั้งสำหรับเครื่องพิมพ์ USB ที่ตรวจพบโดยอัตโนมัติเช่นเดียวกับ Canon CCPD daemon) แต่เครื่องพิมพ์ "USB" จะไม่ทำงานหากคุณลองและพิมพ์ไป ในการตั้งค่าเครื่องพิมพ์หากคุณเห็นว่าเครื่องพิมพ์กำหนดค่าเป็นเครื่องพิมพ์ USB คุณต้องปิดการใช้งานด้วยตนเอง (คลิกขวาปิดการใช้งาน)
Canon ใช้ซอฟต์แวร์และโปรโตคอลที่เป็นกรรมสิทธิ์ของตัวเองสำหรับพูดคุยกับเครื่องพิมพ์ซึ่งเป็นสาเหตุที่ไม่ได้รวมเข้ากับถ้วยไม่ตรวจพบโดยอัตโนมัติและต้องติดตั้งไดรเวอร์ด้วยตนเอง มีเหตุผลที่คาดว่าจะตรวจพบเครื่องพิมพ์โดยอัตโนมัติและทำงานได้ แต่ Canon LBP ไม่สามารถทำได้ เครื่องพิมพ์ต่อไปของฉันจะเป็นเครื่องพิมพ์ที่ "เพิ่งทำงาน" กับไดรเวอร์โอเพ่นซอร์สซึ่งอาจเป็นเครื่องพิมพ์เครือข่ายที่รองรับPCL - ภาษามาตรฐานการพิมพ์คำสั่งของเครื่องพิมพ์เช่นBrother HL-2250DN (เครื่องพิมพ์เครือข่ายดูเพล็กซ์ราคาถูก หรือเครื่องพิมพ์ที่แนะนำของ HP Linuxที่ทำงานร่วมกับซอฟต์แวร์HPLIPโอเพนซอร์ซ
สคริปต์การสร้างสำหรับซอร์สโค้ดเก่าและค่อนข้างยุ่ง เนื่องจากการรวมของไลบรารีไบนารี i386 ปิดแหล่งที่มาและขาดการสนับสนุน multiarch ในสคริปต์การสร้างมันจะยากมากที่จะรวบรวมรุ่น 64 บิตที่ทำงานได้อย่างสมบูรณ์ การคอมไพล์รีลีส 32- บิตบนระบบ 32- บิตเป็นไปได้เมื่อคุณแก้ไขข้อผิดพลาดต่าง ๆ ในระบบบิลด์
ปัญหา: ccpd แฮงค์
บางครั้ง ccpd แฮงค์และคิวเพิ่งพูดว่า "กำลังดำเนินการตั้งแต่ ... "
ลองรีสตาร์ทด้วยตนเอง:
pkill -9 -x ccpd
pkill -9 -x captmoncnabc
/etc/init.d/ccpd start
/etc/init.d/ccpd status
ปัญหา: ccpd ไม่ทำงาน - เพียงหนึ่งกระบวนการ ccpd ที่ทำงานหลังจากการเริ่มต้นระบบ
สำหรับการดำเนินการปกติสองกระบวนการ ccpd ควรทำงานในระบบ ccpd daemon ขึ้นอยู่กับการทำงาน cups daemon ก่อนฟอร์กกระบวนการที่สอง คุณสามารถใช้วิธีการต่อไปนี้เพื่อแก้ไขปัญหา:
เปิดใช้งานสคริปต์ init ถ้วย (เริ่มต้น update-rc.d ถ้วย)
สั่งให้สคริปต์เริ่มทำงานของ ccpd เพื่อทำงานหลังจากเริ่มต้น cups (update-rc.d ccpd ค่าเริ่มต้น 99) หรือเพิ่ม "sleep 10 && /etc/init.d/ccpd start" ในสคริปต์ /etc/rc.local
หากคุณต้องการใช้กฎ UDEV และสคริปต์เริ่มต้นโปรดทราบว่ากฎ UDEV จะทำงานก่อนสคริปต์ CUPS ดังนั้นจึงอาจมีประโยชน์ในการเริ่มต้นสคริปต์ ccpd init ใหม่แทนที่จะเริ่ม ตัวอย่างเช่นคุณสามารถวางสตริงต่อไปนี้ใน "/etc/rc.local":
sleep 10 &&/etc/init.d/ccpd ทำการรีสตาร์ท
(โซลูชันจาก
Ubuntu wiki )
การรายงานข้อผิดพลาดและปัญหากับฝ่ายสนับสนุนของ Canon
Canon มีที่อยู่อีเมลอย่างเป็นทางการสำหรับการรายงานข้อผิดพลาดและปัญหากับไดรเวอร์:
sup-debian@list.canon.co.jp
สร้างจากแหล่งที่มา
หากคุณถูกล่อลวงให้ลองสร้างและติดตั้งจากแหล่งที่มาให้ทำตามคำแนะนำเหล่านี้ ( สคริปต์การสร้าง Archอาจช่วยได้เช่นกัน):
sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev
wget http://gdlp01.c-wss.com/gds/6/0100004596/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
cd Linux_CAPT_PrinterDriver_V260_uk_EN/Src/
# do cndrvcups-common
sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev
rm -rf cndrvcups-common-2.60-1/
tar -zxvf cndrvcups-common-2.60-1.tar.gz
cd cndrvcups-common-2.60-1/
sed -i -e 's/-lcups/-lcups -lgmodule-2.0/' cngplp/src/Makefile.am
dpkg-buildpackage -b -uc
cd ..
sudo apt-get install cups
sudo dpkg -i cndrvcups-common_2.60-1_amd64.deb
# do cndrvcups-capt
rm -rf cndrvcups-capt-2.60-1/
tar -zxvf cndrvcups-capt-2.60-1.tar.gz
cd cndrvcups-capt-2.60-1/
export echo=echo
sed -i -e 's/dh_shlibdeps/dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info/' debian/rules
sed -i -e 's/eval cmds=\"$old_archive_cmds/echo/' cngplp/ltmain.sh
sed -i -e 's:uimain.h":uimain.h"\n#include <cups/ppd.h>:' statusui/src/ppapdata.c
sed -i -e 's/cnsktmodule.la/cnsktmodule.la -lpthread/' statusui/src/Makefile.am
debian/rules configure
sed -i -e 's/RANLIB=/#RANLIB=/' cngplp/libtool
debian/rules build
fakeroot debian/rules install
fakeroot debian/rules binary-arch
cd ..
sudo dpkg -i cndrvcups-capt_2.60-1_amd64.deb
ฉันกำลังรวมสิ่งนี้ไว้เป็นข้อสังเกตสำหรับทุกคนที่อยากจะติดตามเส้นทางนี้ คนส่วนใหญ่ไม่ควรพยายามสร้างสิ่งนี้จากแหล่งที่มา แม้ในระบบ amd64 แพ็คเกจผลลัพธ์จะรวมไลบรารี i386 ที่ปิดอยู่