mattintosh note

Hello Raspberry Pi!

🐧 Linux Mint 17 や Ubuntu 14.04 で Canon 製プリンタのドライバがインストールできない問題

Linux Mint 17 や Ubuntu 14.04 で Canon 製プリンタのドライバがインストールできない問題に関する解決方法やその時のメモなど。

某所で他の方とやりとりした内容だけど、どうにも掲示板には書きづらいので自分のブログに残しておく。

Linux Mint 17 や Ubuntu 14.04 に libtiff4 をインストールするには

Linux Mint 17 や Ubuntu 14.04 で Canon 製プリンタのドライバをインストールしようとすると libtiff4 の依存関係問題に遭遇するらしい。ドライバに付属の install.sh というスクリプトを用いてインストールを行うようだが、libtiff4 が無いためインストールに失敗するが、dpkg の時点で失敗してもすぐに止まらない仕様になっているせいかわかりづらい。

http://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=libtiff によれば libtiff4 パッケージは Ubuntu 13.10 Saucy までの提供になっており、Linux Mint 17 のベースになっている Ubuntu 14.04 Trusty では libtiff5 に変更されている。

libtiff はセルフビルドすることがあるので公式から CVS でリポジトリを複製しているのだけどまだ 4 までしか出てないような…と思って確認したら Ubuntu の libtiff4 パッケージでは libtiff 3.x.x 系、libtiff5 パッケージでは libtiff 4.x.x 系のソースを使っているようだ。libpng や libjpeg はバージョンを合わせてあるのに何故 libtiff だけ違うのだ…。

Linux Mint 17 や Ubuntu 14.04 で libtiff4 パッケージを導入する場合はパッケージを独自にダウンロードしてインストールすればいいらしい。ブラウザでのダウンロードは http://packages.ubuntu.com/saucy/libtiff4 から行える。ミラーはいっぱいあるので好きなところからダウンロードすべし。

64-bit

wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_amd64.deb
sudo gdebi libtiff4_3.9.7-2ubuntu1_amd64.deb

32-bit

wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_i386.deb
sudo gdebi libtiff4_3.9.7-2ubuntu1_i386.deb
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Building data structures... Done 
Building data structures... Done 

Tag Image File Format (TIFF) library (old version)
 libtiff is a library providing support for the Tag Image File Format
 (TIFF), a widely used format for storing image data.  This package
 includes the shared library.
Do you want to install the software package? [y/N]:y
(Reading database ... 260656 files and directories currently installed.)
Preparing to unpack libtiff4_3.9.7-2ubuntu1_i386.deb ...
Unpacking libtiff4:i386 (3.9.7-2ubuntu1) over (3.9.7-2ubuntu1) ...
Setting up libtiff4:i386 (3.9.7-2ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6.3) ...

libtiff4(32-bit) のファイルリスト

/.
/usr
/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/libtiff.so.4
/usr/lib/i386-linux-gnu/libtiff.so.4.3.6
/usr/share
/usr/share/doc
/usr/share/doc/libtiff4
/usr/share/doc/libtiff4/README
/usr/share/doc/libtiff4/README.Debian
/usr/share/doc/libtiff4/TODO
/usr/share/doc/libtiff4/changelog.Debian.gz
/usr/share/doc/libtiff4/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libtiff4

libtiff5(32-bit) のファイルリスト

/.
/usr
/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/libtiff.so.5
/usr/lib/i386-linux-gnu/libtiff.so.5.2.0
/usr/share
/usr/share/doc
/usr/share/doc/libtiff5
/usr/share/doc/libtiff5/README
/usr/share/doc/libtiff5/README.Debian
/usr/share/doc/libtiff5/TODO
/usr/share/doc/libtiff5/changelog.Debian.gz
/usr/share/doc/libtiff5/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libtiff5

この後は Canon 製プリンタのドライバインストールマニュアル通りに進めれば OK なようだ。


ひとつ気になるのが、libtiff.so はどうなるのか?という点。libtiff5 がインストールされている場合、libtiff.so は libtiff.so.5.2.0 へのシンボリックリンクとして作成される。

-rw-r--r-- 1 root root 633066 May  6 04:40 /usr/lib/i386-linux-gnu/libtiff.a
-rw-r--r-- 1 root root    950 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.la
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.so -> libtiff.so.5.2.0
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.so.5 -> libtiff.so.5.2.0
-rw-r--r-- 1 root root 463820 May  6 04:40 /usr/lib/i386-linux-gnu/libtiff.so.5.2.0

libtiff4 を後からインストールすると libtiff.so が libtiff.so.4.3.6 へのシンボリックリンクに変更されるのではないか?と思い、確認してみたところ、libtiff.so のリンクは変更されないようだ。

-rw-r--r-- 1 root root 633066 May  6 04:40 /usr/lib/i386-linux-gnu/libtiff.a
-rw-r--r-- 1 root root    950 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.la
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.so -> libtiff.so.5.2.0
lrwxrwxrwx 1 root root     16 Sep  3  2013 /usr/lib/i386-linux-gnu/libtiff.so.4 -> libtiff.so.4.3.6
-rw-r--r-- 1 root root 403176 Sep  3  2013 /usr/lib/i386-linux-gnu/libtiff.so.4.3.6
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/i386-linux-gnu/libtiff.so.5 -> libtiff.so.5.2.0
-rw-r--r-- 1 root root 463820 May  6 04:40 /usr/lib/i386-linux-gnu/libtiff.so.5.2.0

equivs による libtiff4 のダミーパッケージの作成

パッケージマネージャには依存関係を満たすだけのダミーパッケージというものがあり、equivs を使うことで簡単に作成できるらしいのでやってみた。

sudo aptitude install equivs

適当なディレクトリに移動してベースになるファイルを作成する。

cd /tmp
equivs-control libtiff4

equivs-control の引数に与えた名前のファイルが作成されるのでこれを編集する。このうち必ず書き換えが必要になるのが Package: の行。

### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: <source package name; defaults to package name>
Section: misc
Priority: optional
# Homepage: <enter URL here; no default>
Standards-Version: 3.9.2

Package: <package name; defaults to equivs-dummy>
# Version: <enter version here; defaults to 1.0>
# Maintainer: Your Name <yourname@example.com>
# Pre-Depends: <comma-separated list of packages>
# Depends: <comma-separated list of packages>
# Recommends: <comma-separated list of packages>
# Suggests: <comma-separated list of packages>
# Provides: <comma-separated list of packages>
# Replaces: <comma-separated list of packages>
# Architecture: all
# Copyright: <copyright file; defaults to GPL2>
# Changelog: <changelog file; defaults to a generic changelog>
# Readme: <README.Debian file; defaults to a generic one>
# Extra-Files: <comma-separated list of additional files for the doc directory>
# Files: <pair of space-separated paths; First is file to include, second is destination>
#  <more pairs, if there's more than one file to include. Notice the starting space>
Description: <short description; defaults to some wise words> 
 long description and info
 .
 second paragraph

Package: 行だけさくっと書き換え。

sed -i '/^Package:/s/<.*/libtiff4/' libtiff4

deb パッケージを作成する。

equivs-build libtiff4
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package `libtiff4' in `../libtiff4_1.0_all.deb'.

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

出来上がった deb ファイルをインストールする。

sudo gdebi libtiff4_1.0_all.deb

次にシンボリックリンクでダミーのライブラリを作成する。確認してみたところ cifmg6330 というファイルが libtiff.so.4 を参照していた。アーキテクチャ毎のツリーは汚したくないので /usr/lib に作成。libtiff 4.x.x って上位互換…だよね?

64-bit

sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/libtiff.so.4

32-bit

sudo ln -s /usr/lib/i386-linux-gnu/libtiff.so.5 /usr/lib/libtiff.so.4

Canon 製プリンタドライバのディレクトリに移動して install.sh を実行する。

今回は実機がなくプリンタの検出ができないためパッケージを手動でインストールすることにした。common パッケージをインストールしたあとにプリンタごとのパッケージをインストールする。尚、install.sh を使用する場合でもプリンタの選択は「Q」で省略ができる。

64-bit

sudo gdebi packages/cnijfilter-common_3.80-1_amd64.deb
sudo gdebi packages/cnijfilter-mg6300series_3.80-1_amd64.deb

32-bit

sudo gdebi packages/cnijfilter-common_3.80-1_i386.deb
sudo gdebi packages/cnijfilter-mg6300series_3.80-1_i386.deb

CUPS サーバを再起動し、lpadmin でプリンタを登録する。-m で指定するファイルは /usr/share/ppd に置いてあるものをパスではなく名前で指定する。LAN の場合はデバイス URI に MAC アドレスを指定する。

sudo service cups restart
lpadmin -p MG6330USB -m canonmg6330.ppd -v cnijusb:/dev/usb/lp0 -E
lpadmin -p MG6330LAN -m canonmg6330.ppd -v cnijusb:/00-00-00-00-00-00 -E

システム環境設定のプリンタに lpadmin で登録したプリンタが表示される。(このスクリーンショットを撮影したときは LAN 側を登録し忘れた)

Linux Mint 17 Qiana Cinnamon

Linux Mint 17 Qiana Cinnamon


という感じで色々やってみたけど実機がないので実際うまくいくものなのかどうかはわからない。

もし自分がキヤノンのプリンタを使うことになったときに役には立つかな〜と思ったり。ダミーパッケージの作成とか lpadmin のコマンドの勉強になった。