せっかくだからLinuxからだって印刷したい

  • 投稿日:
  • by
  • カテゴリ:

プリンタを新調したのは、随分前のこと。Windows VISTAへのエプソンのやる気のない対応に腹を立てて、それまでずっとEPSONでサービスサービス(古い)だったのに、PM-980Cを知人に無償で差し上げて、キヤノンMP-960に乗り替えたわけです。

以前のキヤノンのプリンタと言えば、写真画質で、ややエプソンに劣るし、やたらと出力がビビッドで不自然な臭いがする感じだったのですが、すっかりそのあたりは変っていて、今ではもうすっかりキヤノンのプリンタのファンです。エプソンなんて屁ですよ、屁。(嘘です。エプソンもサポートのテキトーさを除けばオッケーです。)

で、乗り替えて、不満はほとんどなく使っていたのですが、唯一と言っても言い不満が、Linuxからの印刷ができない、という点だったのです。何しろ、キヤノンは何故か、MP-960のLinux用のドライバを公開してくれないのです。MP-510/610用なんて言うのがあったので、印刷してみても、めためたな結果になってしまって、その後放置状態だったのです。が、昨日、不意に、やる気が出て、解決に向けて動いてみたのです。

どうやら、型番の類似性よりも、インクの色数の方が重要らしいです。MP-960はCMYKの四色に、PM/PCのフォトカラー二色、それに顔料黒を加えた七色編成。これと同じ編成で、サポートされているのが iP7500になります。

わい。それじゃあiP7500のドライバをインストールすればいいんだ、と、Linux版のRPMパッケージを持ってきたら、思いっきり、パッケージの依存関係で蹴られました。ダメです、パッケージが古すぎます。ソースパッケージも同じ理由で再構築できません。

仕方がないので、ニコイチです。最新版のV2.90というドライバーのソースパッケージと、iP7500の入っているV2.6のドライバーのソースパッケージを持ってきて、ppd/canonip7500.ppd と、266 以下のファイルを全部まるっとV2.9側へコピーします。あとは、V2.90に iP7500のドライバもビルドされるように、SPECファイルと、configure.inのいくつかを書き換えて、リビルドしてやります。と、恐ろしいくらいにあっさり、パッケージができました。

おそるおそる、印刷もしてみると、テストページが、色も文字もずれることなくばっちりと、印刷されて出て参りました。PM960なのに、CUPS上では iP7500-Ver2.60とか表示されてしまうのが難点ですが、ヨシとします。

勿論、こんなの、メーカが保証している使い方でも何でもないので、やってみようと思う方は自己責任でどうぞ。どんだけの差分を当てたかが気になる人は、続きをご覧ください↓

具体的な差分は、こんな感じー。(行が長すぎるところは折り返しています。このままコピペしても使えません。)

diff -Nur cnijfilter-common-2.90.orig/cnijfilter-common.spec
cnijfilter-common-2.90/cnijfilter-common.spec
--- cnijfilter-common-2.90.orig/cnijfilter-common.spec    2008-04-10
08:27:42.000000000 +0900
+++ cnijfilter-common-2.90/cnijfilter-common.spec    2008-09-07
11:17:22.000000000 +0900
@@ -1,5 +1,5 @@
%define VERSION 2.90
-%define RELEASE 1
+%define RELEASE 2
%define _prefix    /usr/local
%define _bindir %{_prefix}/bin
@@ -8,14 +8,17 @@
%define PR1     ip100
%define PR2     ip2600
-%define BUILD_PR     %{PR1} %{PR2}
+%define PR3     ip7500
+%define BUILD_PR     %{PR1} %{PR2} %{PR3}
%define PKG1     ip100series
%define PKG2     ip2600series
+%define PKG3     ip7500series
%define PR1_ID     303
%define PR2_ID     331
-%define BUILD_PR_ID     %{PR1_ID} %{PR2_ID}
+%define PR3_ID     266
+%define BUILD_PR_ID     %{PR1_ID} %{PR2_ID} %{PR3_ID}
%define CNBP_LIBS libcnbpcmcm libcnbpcnclapi libcnbpcnclbjcmd libcnbpcnclui
libcnbpess libcnbpo
@@ -45,6 +48,13 @@
Group: Applications/Publishing
Requires: %{name} >= %{version} cups popt libxml2 gtk2 libtiff libpng
+%package -n cnijfilter-%{PKG3}
+Summary: IJ Printer Driver Ver.%{VERSION} for Linux
+License: See the LICENSE*.txt file.
+Vendor: CANON INC.
+Group: Applications/Publishing
+Requires: %{name} >= %{version} cups popt libxml2 gtk2 libtiff libpng
+
%description
IJ Printer Driver for Linux.
This IJ Printer Driver provides printing functions for Canon Inkjet
@@ -60,6 +70,11 @@
This IJ Printer Driver provides printing functions for Canon Inkjet
printers operating under the CUPS (Common UNIX Printing System) environment.
+%description -n cnijfilter-%{PKG3}
+IJ Printer Driver for Linux.
+This IJ Printer Driver provides printing functions for Canon Inkjet
+printers operating under the CUPS (Common UNIX Printing System) environment.
+
%prep
%setup -q
@@ -221,6 +236,30 @@
     rmdir -p --ignore-fail-on-non-empty %{_bindir}
fi
+%post -n cnijfilter-%{PKG3}
+if [ -x /sbin/ldconfig ]; then
+    /sbin/ldconfig
+fi
+%postun -n cnijfilter-%{PKG3}
+if [ -x /sbin/ldconfig ]; then
+    /sbin/ldconfig
+fi
+# remove cnbp* libs
+for LIBS in %{CNBP_LIBS}
+do
+    if [ -h %{_libdir}/${LIBS}%{PR3_ID}.so ]; then
+        rm -f %{_libdir}/${LIBS}%{PR3_ID}.so
+    fi   
+done
+# remove directory
+if [ "$1" = 0 ] ; then
+    rmdir -p --ignore-fail-on-non-empty %{_prefix}/share/locale/*/LC_MESSAGES
+    rmdir -p --ignore-fail-on-non-empty %{_prefix}/share/cngpijmon%{PR3}
+    rmdir -p --ignore-fail-on-non-empty %{_prefix}/share/printui%{PR3}
+    rmdir -p --ignore-fail-on-non-empty %{_libdir}/bjlib
+    rmdir -p --ignore-fail-on-non-empty %{_bindir}
+fi
+
%files
%defattr(-,root,root)
%{_libdir}/cups/filter/pstocanonij
@@ -265,5 +304,22 @@
%{_libdir}/bjlib/cnb_%{PR2_ID}0.tbl
%{_libdir}/bjlib/cnbpname%{PR2_ID}.tbl
+%files -n cnijfilter-%{PKG3}
+%defattr(-,root,root)
+%{_bindir}/cngpijmon%{PR3}
+%{_bindir}/lgmon%{PR3}
+%{_bindir}/printui%{PR3}
+%{_ppddir}/share/cups/model/canon%{PR3}.ppd
+%{_prefix}/share/locale/*/LC_MESSAGES/cngpijmon%{PR3}.mo
+%{_prefix}/share/locale/*/LC_MESSAGES/printui%{PR3}.mo
+%{_prefix}/share/cngpijmon%{PR3}/*
+%{_prefix}/share/printui%{PR3}/*
+
+%{_bindir}/cif%{PR3}
+%{_libdir}/libcnbp*%{PR3_ID}.so*
+%{_libdir}/bjlib/cif%{PR3}.conf
+%{_libdir}/bjlib/cnb_%{PR3_ID}0.tbl
+%{_libdir}/bjlib/cnbpname%{PR3_ID}.tbl
+
%ChangeLog
diff -Nur cnijfilter-common-2.90.orig/printui/configure.in
cnijfilter-common-2.90/printui/configure.in
--- cnijfilter-common-2.90.orig/printui/configure.in    2007-11-22
20:32:57.000000000 +0900
+++ cnijfilter-common-2.90/printui/configure.in    2008-09-07
11:03:23.000000000 +0900
@@ -17,6 +17,7 @@
case "${program_suffix}" in
   ip100) CNCL_LIB_ID=303;;
   ip2600) CNCL_LIB_ID=331;;
+  ip7500) CNCL_LIB_ID=266;;
esac
AC_SUBST(CNCL_LIB_ID)
diff -Nur cnijfilter-common-2.90.orig/cnijfilter/configure.in
cnijfilter-common-2.90/cnijfilter/configure.in
--- cnijfilter-common-2.90.orig/cnijfilter/configure.in    2007-11-16
13:34:49.000000000 +0900
+++ cnijfilter-common-2.90/cnijfilter/configure.in    2008-09-07
11:04:30.000000000 +0900
@@ -33,6 +33,7 @@
case "${program_suffix}" in
   ip100) CNCL_LIB_ID=303;;
   ip2600) CNCL_LIB_ID=331;;
+  ip7500) CNCL_LIB_ID=266;;
esac
AC_SUBST(CNCL_LIB_ID)