PC周辺機器の1つにデジタルカメラ(デジカメ)があります。
デジカメとは、言うまでもなく、撮った写真をデジタルデータとして保存できる機器です。
デジカメも当初こそ専用機でしたが、ケータイやスマホ、タブレットでも当然の如く搭載されるのが当たり前かのように標準機能と化しています。
そんなデジタルデータ、つまり、撮った写真も多くなればなるほどパソコンで管理できる方が楽でしょう。
デジカメは、USB接続できるのが普通でWindowsやMac OS/Mac OS Xなど製品としてのデジカメが対応を謳っているものは、一般に付属のCD/DVDなどの媒体やインターネットを介して当該デジカメ用のデバイスドライバを明示的にインストール、場合によっては、接続すれば、自動的にインストールされ、即利用できるケースも多いことでしょう。
*BSD/PC-UNIX/Linuxなどでデジカメを利用する場合でも、近年、GNOME、KDE、xfce、LXDEなどの統合デスクトップ環境ならPTP/Picture Transfer Protocol、USB Mass StarageなどUSB接続を前提としたプロトコルに対応していて自動認識され、Fedoraのように即利用できるでしょうし、ウィンドウマネージャ単体をデスクトップ環境として使っている場合などにおいては、明示的にマウントすればアクセスできるもの、場合によっては、更にひと手間必要となるものなどがあります。
ここでは、NetBSDのJWM環境でKonica Digital Revio KD-310Zを使用する例を挙げますが、結果から言うとこれは、「更にひと手間必要」でした。
Digital Revio KD-310Zは、これが新製品だった頃、確か10数年前に購入した相当古いものですが、Windows 98 SE、Windows XP、Windows Vistaでは、USB接続で自動認識、自動マウントされ、ちゃんと動いている代物です。
検証、動作確認は、Windows Vistaマシン上で仮想化ソフトウェアであるVMware Player 3.1.6で作成した仮想マシンにNetBSD 6.1.4を[Full Install]した状態でNetBSDマシンに直接デジカメを接続するものとします。
実際にやってみる前は、うすらぼんやりと新旧問わず、USB接続できるデジカメなら、BSD/PC-UNIX/Linuxでも特別なソフトを使わなくてもPCに接続すれば、自動認識され、接続時の表示、または、[dmesg]などでデバイスを特定し、マウントしてGQViewのような画像ファイラで見ればよいのだろうと考えていました。
そんな思いでデジカメの場合、自動認識、自動マウントはもちろん、一覧できる画像ビューワがあると便利、Windowsならファイルエクスプローラーがそれも兼ねていますし、BSDやLinuxでも一部表示できなかったものもあった気もするもののROX Filerなどで一覧できないこともないでしょうが、もう少し、気の利いたものがあるとより嬉しい、そこで画像ビューワについては、既にNetBSDに入れてあったGIMPとの連携を意図したGQViewを利用することにしようなんて思っていました。
そこでとにもかくにも接続してみようということでDigital Revio KD-310ZをNetBSDマシンに接続、[dmesg | grep KONICA]で確認してみるとscsiエミュレーションされ、デバイスとしてsd0が割り当てられていました。
ところが、(後にある意味当たり前と気づくのですが、)なぜか、マウントできません。
そこで以前、スキャナの時にインストールしたsaneにもデジカメを認識する機能としてxcamというのがあったみたいだし、他の方法を使うのが普通なのかな?というわけで、ざっと調べてみました。
するとGIMPとの連携を意識したgtkam、統合デスクトップ環境KDEのdigiKamというのがあるようでこれが使えそう、libgphoto/libgphoto2へのCLI/CUIインタフェースであるgphoto/gphoto2というデジカメ画像転送・デジカメ操作用のコマンドラインクライアントがあり、実は、gtkamやdigiKamは、これらのGUIフロントエンドらしいこと、libgphoto2は相当数のデジカメに対応している模様であること、対応していない場合にも画像データ転送用プロトコルlibptp(PTP/Picture Transfer Protocol)対応であれば、Windows MEやMac OS X 10.1含む以降は対応、BSD/PC-UNIX/Linuxでも使える可能性がありそうということなどがわかりました。
ただ、gphoto2(libgphoto2)の対応表を見る限り、Konicaの一部機種はあるものの、Digital Revio KD-310Zはもちろん、Digital Revioも残念ながら、ありませんでした。
また、何れにも対応していない場合でも、これらに対応したメモリカードリーダーを使ってリムーバブルディスクとして認識させるという方法があるといったような情報もあり、えっ?と思いつつも、更に探してみるとhttp://www.teaser.fr/~hfiguiere/linux/digicam.htmlというページがあり、そこには、Konica Revio KD310Zが載っており、UNIXライクなOSでのデジカメ利用において[media]は[memory stick]、[device]は[USB Mass Starage]となっており、libgphoto/libgphoto2/libptpには対応していないというか、はっきりわからないという見解のようであるものの、メモリスティックやSDカードを読み込ませることはできそうですし、更にUSB接続によるマウントもできそうな気配です。
え?と思ったのは、USB接続できるデジカメに入っているメモリスティックやSDカードが使える一方、自動検出されず、しかもマウントもできないということになるとUSB経由だとできないという意味にもなり、それは、矛盾していると言うか、おかしいと思ったからです。
また、コニカやDigital Revioではないものの、調べている間にも普通にmountコマンドで、しかも中には[-t]オプションでタイプ指定すらすることなく、マウントができたという情報もいくつか見かけたこともあり、そうだよね、マウントできないはずないよね。。。ということで、もう一度、落ち着いてマウントしてみることに。
そこでデジカメをUSB接続、[$ sudo fdisk]とすると当然のことながら(仮想)HDD全体に1つだけ入れてある使用中のNetBSDのディスク情報しか出てきません。
次に[$ sudo fdisk sd0]、更に[$ sudo disklabel sd0]で確認すると[disk: KD-310Z]となっており、幸いにもDigital Revioとしては認識できている模様。
一方、fdiskにある[offset]や[size]とdisklabelの[offset]や[size]を(もちろん[offset]の差を考慮して)比べてみるとfdiskのサイズの方が若干大きく、disklabelにおいて当該パーティションを表わすラベルaの[fstype]は[4.2BSD]となっていますが、BSD対応であるとは考えづらく。。。Windows 98 SE/XP/Vistaで使えていたカメラであることから、そこは、vfatやmsdosと考えられます。
[$ sudo disklabel sd0]の結果は、[disk: KD-310Z]自体を表わしているので、それならラベル[a]のfstypeを[4.2BSD]から[MSDOS]にして[mount -t msdos /dev/sd0a /mnt/camera]とすればマウントできるかもしれない、ついては、fdiskとdisklabelの[offset]と[size]も合わせておこう、というか、前述の通り、サイズは微妙に異なるのでdisklabel上のラベルdの値を上限としてfdiskで得られた[offset]値を差し引いたものをdisklabel上のラベルaの[size]値としておこうということで[$ sudo disklabel -e sd0]として変更しました。(まどろっこしいことをしましたが、もしかしたら、こうしたケースでもmbrlabelコマンドをオプション付きで使ってdisklabelを自動更新すれば、よかったかも?)
/mntでもいいですが、ここでは、[$ sudo mkdir /mnt/camera]としてカメラ用のマウントポイントを用意。
で。。。[$ sudo mount -t msdos /dev/sd0a /mnt/camera]としてみると。。。マウントでき、GQViewでパスを追うと。。。表示できました。
ちなみにGQViewに表示されている写真は、FMV C6320に入れたNetBSD 6.1.4のデスクトップ画面です。
この辺りは、気づけばfdisk結果については、デジカメのでなく仮想HDDのを無駄に載せてしまっていたり、そもそもDigital Revio KD-310Z接続直後のデフォルトのdisklabel内容(ラベルaのoffsetが0、sizeが124065、fstypeが4.2BSDのもの)がなかったりしますが、参考画像(クリックすると元のサイズで表示)で確認できます。
ただ、ラベルaの変更ってなんとなくイレギュラーな感じがしたので、試しにFAT32でフォーマット済みのUSB接続の外付けHDDを接続し、disklabelを確認してみるとNetBSDにおいては、ディスク全体を表わすラベルdと1つめの追加ディスクを表わすラベルeの2つから成っており、当該パーティションサイズを表わすラベルaはありませんでした。
結果どちらでも可能なわけですが、今回のデバイスsd0については、追加ディスクではなく、ディスク(デジカメ)そのものなのでラベルaを対応させる方が個人的には妥当だと思う一方、NetBSDのお作法的にどっちが正解なのか、どっちでもいいのかはわかりません。
そう言えば、近所の知人の子どもが撮影しまくり、いじり倒していたということも忘れていたし、深く考えもしなかったこともあり、デジカメ内の写真を整理していなかった上、作業前に事前に確認しなかったのではっきりしませんが、NetBSD上のGQViewで見た時も、後からWindowsでデジカメをマウントしてみた時もいくつかの写真が真っ黒だったのが、初めからあった写し損ないなのか、NetBSD上でfdiskとdisklabel上のサイズを微妙に違うままマウントしてしまったからなのかは、わかりません。
が、見事にKonica Digital Revio KD-310ZをNetBSDで利用できた今となっては、そんなことは、どっちでも良く、とても些細なこと。
尚、取り外す際には、事前に[$ sudo umount /mnt/camera]としておくとよいでしょう。
何気なく、NetBSDでやってみようと思い立った年代物3点セットの内、スキャナ(EPSON GT-7600U)、デジカメ(Konica Digital Revio KD-310Z)はできた。。。あとはプリンタ(HP DeskJet 970Cxi)での日本語出力です。