気の向くままに辿るIT/ICT/IoT
システム開発

NetBSDでプリンタ/デジカメ/イメージスキャナ/オーディオ

ホーム前へ次へ
NetBSDのインストールと運用/NetBSD/i386 6.1.x編

NetBSDでプリンタ/デジカメ/イメージスキャナ/オーディオ

NetBSDでプリンタ/デジカメ/イメージスキャナ/オーディオ

 ここでは、NetBSDでプリンタ、デジカメ、イメージスキャナを使う方法、CD/DVDの視聴方法、動画や音楽のストリーミングサービスの利用と、その手順を記します。

 CLIやウィンドウマネージャでも構いませんが、ここでは、統合デスクトップ環境を使うものとします。

 NetBSDの公式リポジトリには、既にGNOME2、KDE3.5、KDE4、Xfce4といった統合デスクトップ環境の他、数多くのウィンドウマネージャがあります。

 また、非公式ながらwipには、LXDE、MATE、Cinnamonもあります。(2016年07月12日pkgsrc-2016Q2でLXDE 1.0/MATE 1.14.0については公式にリポジトリ登録されました。)

UNIX系OSと周辺機器

 作業を始める前に*BSD/PC-UNIX/Linuxのちょっとした違いや背景を再確認しておいた方がよいかもしれません。

 *BSD/PC-UNIX/Linuxでも当然ながらプリンタやデジカメ、イメージスキャナなどのPC周辺機器を利用することができます。

 フリーソフトウェア・オープンソースの文化が根付いている*BSD/PC-UNIX/Linuxは、CLIでもGUIならウィンドウマネージャ(WM/Window Manager)単体、または、これをベースとした統合デスクトップ環境(IDE/Integrated Desktop Environment)が、それぞれ複数あり、自由に選択できます。

 周辺機器の利用も含め、この中で最も手軽に様々なことを柔軟に行うことができる(ように作られている)のが、GNOMEやKDE、Xfce、LXDEといった統合デスクトップ環境です。

 これは、一般にCLI上にWMが、WM上にIDEが実装されており、その分、ベースとなる機能に新たな機能が追加されていることを意味します。

 こうした統合デスクトップ環境は、Linuxへの実装に始まり、*BSD/PC-UNIX、Windowsなどにも移植されるに至りました。

 *BSDは、最小構成のシステムから必要なものを個々に積み上げていくことで制約の多いマシンやシステムリソースが少ない古いマシンから最新のマシンまで幅広く対応できる、というより、個々人が必要な機能だけを選りすぐってシステムを構築できるようになっています。

 Linuxの中にもGentooやArch Linuxのように一部こうしたディストリビューションもあるにはありますが、Linuxの場合、Windowsを強く意識してか、その多くは、インストール後、あらゆる人々が、あらゆる使い方をしても、たいていの場合、すぐに使える多機能なオールインワン(逆に言うと多くの人にとって必要ない機能を満載すること)を前提とするケースが多い傾向にあります。

 よって充実した機能を備える先の統合デスクトップ環境は、オールインワンを前提とするLinuxディストリビューションにおいては、あらかじめこれを使うことを前提に機能が盛り込まれているため、その利用が容易でスムースであることが多くなっていますが、一部のLinuxや*BSDでは、大前提としていない分、若干手順が多くなり、その結果として容易に利用できないケースも稀にありますが、昔ながらの方法含めた代替手段により全く利用できないということはありません。

 他方、いかなるGNU/LinuxディストリビューションもLinuxカーネルと(ユーザーランドとして)GNUユーティリティを共有しているため、軽量化を図るにあたっては、Xubuntuやlubuntuのように軽量なXfceやLXDEなどのデスクトップ環境を選ぶか、Damn Small Linux/DSLやTiny Core Linux、Puppy Linuxのように組み込み系で利用されているコマンド群を集約することで軽量化を図るBusyboxというトリッキーな手法をとりますが、カーネル及びユーザーランドがオリジナルでコンパクトな*BSD、特にNetBSDやOpenBSDは、標準システムで対応でき、コンパクトであるがゆえに、その分、デスクトップ環境を含むソフトウェアにリソースを割り振ることができるので往々にして同じマシンリソースでも利用可能なソフトウェアの幅が広がる可能性があります。

NetBSDとオーディオ再生・ストリーミング再生

 NetBSDでオーディオCD/DVDを再生してみようという場合、マルチプラットフォーム対応のVLCメディアプレーヤーをインストールするのが手っ取り早いでしょう。

$ sudo groupadd operator
$ sudo usermod -G operator User_Name
$ sudo pkgin in vlc
$

 VLCは、往々にしてpkgsrcのソース情報からインストールした方が、新しいと思いますが、バイナリでもOKです。

 後でも先でもよいのでNetBSDにおけるCD/DVDドライブ操作用グループoperator(Linuxではaudio)をなければ、作成し、これに利用するユーザーを登録しておきます。(Linuxのuseraddでは-Gだけでなく追加用-aオプションも必要)

 [メディア(M)]、[ディスクを開く(D)]でデバイスに[/dev/cd0d](2台以上ある場合には、[cd1d]...の場合もある)を指定して[再生]ボタンをクリックすればCD/DVDの再生が開始されます。

 なぜ、VLCかと言うと、音源や映像をコンピュータで扱う場合、それぞれ種類に応じて多種必要となるコーデックのほとんどを内蔵して(くれて)いるからです。

 このようなプレイヤーを使うことなく、最小構成から組み上げていくNetBSDで音源や動画(オーディオ)を視聴する場合、こうした多種多様なコーデックもリポジトリに用意されてはいるものの、個々に必要なものを見繕ってインストールする必要があり、その方面への理解が相応に深ければ、よいですが、そうでないと手間取る可能性が高いからです。

 NetBSDでYouTube、radiko、らじるらじるなどFlashによるサービスを視聴するには、NetBSD/i386におけるadobe-flash-plugin11のインストールの要領で[adobe-flash-plugin11]とFirefoxやSeamonkeyといったMozilla系ブラウザををインストールすればOKでflashをインストールすれば、プラグインにShockwave Flashが表示されます。

例えば...
$ sudo pkgin in firefox24 firefox24-l10n
とか
$ su -
Password:
# unset PKG_PATH
# cd /usr/pkgsrc/www/seamonkey
# make install clean
# exit
$ sudo pkgin in seamonkey-l10n
とか
# cd /usr/pkgsrc/www/firefox31
# make install clean
# exit
$ sudo pkgin in firefox31-l10n
$

 Firefoxは、バイナリも用意されているものの、firefox24と若干バージョンが古く、気付けば、pkgsrcには、もう少し新しいfirefox31が入っている一方、Seamonkeyのバイナリはリポジトリにはないものの、pkgsrcからインストールすれば、最新のブラウザを入手できます。

 尚、何れの場合も日本語対応させるために言語パック(*-l10nパッケージ)もインストールしますが、これは、Firefox31含め、バイナリも用意されており、バイナリでもpkgsrcのソース情報からでもOKです。

 Firefox24やSeamonkeyでは、起動後、表示されるタブの内、日本語の言語パックを選択してインストールすると共にアドレス入力欄にabout:configと入力して[Enter]、[general.useragent.locale]の設定値をja-JPにする必要がありますが、Firefox31については、言語パックインストール後、ブラウザを起動して日本語の言語パックを選んでインストールすれば、ブラウザを再起動させるまでもなく日本語表示されます。

 また、[adobe-flash-plugin11]もadobe-flash-plugin11のインストールの手順に沿ってpkgsrcのソース情報からインストールします。

NetBSDとスキャナ

 NetBSDでイメージスキャナを利用したい場合には、バイナリ及びpkgsrcの公式リポジトリにXSANEがあります。

$ sudo pkgin in xsane
or
$ sudo pkgin in sane-frontends

 XSANEを利用する場合、sane-frontendsパッケージ、または、より機能が充実したフロントエンドxsaneパッケージをインストールします。(何れのケースでも依存関係としてsane-backendsもインストールされると思いますが、そうでなければ併せてインストールします。)

 スキャナによっては、JWMでも簡単なスキャナ設定にあるようにスキャナの検出テストや、ちょっとした設定が必要となる場合があります。

LXDE on NetBSD/i386
LXDE on NetBSD
非公式ながらLXDEは既に十分機能する
写真の一部はXSANE

 NetBSDにおいては、未だ非公式なLXDE上で、なぜかフリスクのケースが写っているパネルとその右側のパネルが、XSANE、使用したスキャナは、年代物のUSB接続のEpson GT-7600Uです。

 XSANEは、各種ウィンドウマネージャはもちろん、統合デスクトップ環境でも利用でき、統合デスクトップ環境の場合、多くの場合、メニューにも自動登録されるはずですが、依存関係上インストールされるGIMPはメニューに登録されるものの、XSANEについては、手作業でメニューに登録する必要がある場合があります。

 もし、XSANEがメニューに登録されない場合には、次のようにするとよいでしょう。

$ cd /usr/pkg/share/applications
$ ls
... any_software.desktop ...
$ cp any_software.desktop ~/.local/share/applications
$ cd ~/.local/share/applications
$ mv any_software.desktop xsane.desktop
$ vi xsane.desktop
[Desktop Entry]
...
Type=Application
Encoding=UTF-8
Name=XSane
...
Name[..]=XSane
...
Comment[ja]=シンプルなイメージスキャナ
...
GenericName[ja]=イメージスキャナ
...
Categories=...
EXEC=/usr/pkg/bin/xscanimage
Icon=...
Icon=...
StartupNotify=...
...
$

 ウィンドウマネージャや統合デスクトップ環境の種類に関わらず、メニューに追加されているアプリケーションは、拡張子[.desktop]のファイルが、NetBSDの場合、[/usr/pkg/share/applications]や[~/.local/share/applications]ディレクトリに、デスクトップ上に表示されるアイコンは、[~/Desktop]ディレクトリに置かれます。

 LXDE含め、統合デスクトップ環境ならメニューにある当該ソフトウェア上で右クリックすれば、[デスクトップに追加]/[Add to Desktop]といったメニューからデスクトップアイコンをおくこともでき(、この場合、自動で先のディレクトリに*.desktopファイルが配置され)ます。

 パッケージソフトウェアをインストールすると多くの場合、[/usr/pkg/share/applications]に拡張子[.desktop]のファイルが置かれますが、これが生成されないものもあり、当該ディレクトリ下の管理が面倒になることもあるので個人所有のマシンでも追加で必要なものは、[~/.local/share/applications]に入れておくとよいでしょう。

 [.desktop]ファイルは、[項目=設定値]の並びから成る単なるテキストファイルであり、今回のXSaneのように[.desktop]のファイルが自動作成されないパッケージソフトウェアがある場合には、既存の似たようなソフトウェアの[.desktop]ファイルをコピーして編集するのがよいでしょう。

 尚、ファイル名は、自身が識別さえできればよく、任意です。

NetBSDとデジカメ

 USB接続のデジカメは、Windowsでの利用を前提とするとともに汎用性も考慮してファイルシステムはFAT(FAT16/FAT32)となっているのが一般的で、その扱いは、USB接続のHDDなどと同様、NetBSDでは、scsiエミュレーションによりデバイスは、sd[0-9]として認識されます。(dmesgコマンドで確認可能。)

 まずは、Linux/*BSD/PC-UNIXにおいてオーソドックスな伝統的な仮想ターミナルからmountコマンドを使う方法について。

$ sudo disklabel sd0
...
a: ...
b: ...
e: ...    MSDOS ...
...
$ sudo mount /dev/sd0e /mnt
$ ls /mnt
...
$

 NetBSDでは、ウィンドウマネージャJWMでデジカメを使うでも記したようにdisklabelでBSDパーティションを確認すると多くの場合、MSDOS(FAT)は、パーティションe(デジカメならeがなく、aとbのみでパーティションa)に割り当てられていることでしょう。

 よって0からカウントする1つめのscsiエミュレーションによるデバイスsd0のパーティションeのファイルシステムがMSDOSとなっていれば、対応するデバイスは、/dev/sd0e(、パーティションaなら/dev/sd0a)、それに作成済みの任意のマウントポイントを指定してmountコマンドを実行します。

 これで仮想ターミナルからでもファイルマネージャからでも画像関連ソフトウェアからでもマウントポイントを通じてデジカメに保存されている写真にアクセス可能です。

 尚、NetBSDでは、かなり正確に自動認識してくれるので明示的に[-t msdos]とファイルタイプを指定しなくてもマウントできるでしょう。

$ cat /etc/fstab
...
/dev/sd0e  /mnt/usb0  ro,noauto  0 0
/dev/sd1e  /mnt/usb1  ro,noauto  0 0
...
$ sudo mount /mnt/usb0
$ ls /mnt/usb0
...
$

 ちなみに前もって接続後のデバイスを予測できる場合には、あらかじめ[/etc/fstab]に作成済みのマウントポイントを指定しておけば、カメラを(USB)接続後、認識されたデバイスのマウントポイント(デバイス指定不要、マウントポイントのみ)を指定すれば、マウントできるのでタイプ数を減らすことができますし、noautoをautoにすれば、マシン起動時に自動的にマウントされるのでmountコマンドを実行するまでもありません。

 が、NetBSDでは、デバイスとしてcd0、cd1のように認識されるCD/DVDにおいては、内蔵とあっても外付けの2台程度でしょうからnoautoを指定するケースは現実的でしょうが、autoは現実にそぐわないでしょうし、NetBSDでデバイスsdと認識されるUSB機器は多々あるため、/etc/fstabへの記述は、引数にauto/noautoの何れを使うかに関わらず、状況によっては、適切でない場合もあるでしょう。

 NetBSDでは、そうした場合、CD/DVDも含め、amd(Auto Mount Daemon)を使えば、/etc/fstabに記述しなくても同様のことを、しかもより汎用的に行うことができますし、自作スクリプトなどを使えば、さらに機能を拡張することもできる可能性があります。

 ちなみにamdは、Linuxでは、autofsやdevfsに相当します。

 一方、近年、KDEやGNOMEなどのデスクトップ環境の機能向上も著しく、USB機器のホットプラグ(プラグ&プレイ、オートマウント)機能により、USB接続後、デスクトップ上やファイルマネージャ上に表示されるデバイスのアイコンをクリックすれば、内容を閲覧できたり、デジカメであれば、写真を開くソフトウェアを聞かれた際に指定することで、さらに、あらかじめひもづけられているソフトウェアがあれば、自動的に表示されたりするようになっています。

 Linuxにおいては、そうした機能は、hal+dbus、hal+dbus+avahi、udev、Udisksといった変遷を経て執筆時点では、接続されたUSBデバイス名を特定できないudevに代わりUdisksが広く採用されるに至っています。

 一方、*BSDは、hal+dbus、hal+dbus+avahiに留まっており、今のところ、udevやUdisksに代わる機能は存在しません。

 NetBSDにおけるGNOME2やKDE4は、それ自体の起動にhalとdbusを要しますが、一方でGNOMEプロジェクトやKDEプロジェクトの最新の状況としては、ホットプラグ機能において少なくともLinuxにおいては数世代前の機能であるhalとdbusの利用は、実質、非推奨という微妙な状況にあります。

 そんな中、NetBSD上のGNOME2/KDE4/Xfce4/LXDEとNautilus/Dolphin/Thunar/PCManFMにおいてもUSB接続のデジカメなどのデバイスの抜き挿しでデスクトップにもファイルマネージャにもアイコンは表示/非表示されますし、KDE4に至っては、通知アイコンを通じて画像ビューワGwenviewで開くか、ファイルマネージャ(Dolphin)で開くかまで訊いてきてくれるものの、halやdbusの構成ファイルの設定の問題なのか、Policykitの関係なのか、あと一歩というところのはずですが、今のところ、検証においてアイコンクリックによるマウントができずにいます。

 できる・できない含めて検索しても今ひとつめぼしい情報が見当たらないので継続して検証してみたいと思います。

NetBSDとプリンタ

 *BSD/PC-UNIX/Linuxでは、ウィンドウマネージャJWMでプリンタを使うでも記したようにBSD lpr/lpd、LPRng/lpd、CUPSといった変遷を経て執筆時点では、CUPSが広く採用されています。

 LPRngは、BSD lpr/lpdで自作したフィルタが標準化されたり、より柔軟に、より機能的にしたものですが、その反面、複雑化しており、一方、対応プリンタが増えたというわけでもなく、CUPS登場までのつなぎとなったか否かといったところで微妙な位置づけとなっています。

 BSD lpr/lpdについては、マジックフィルタを含め、リンク先の通り、一応、印刷できたわけですが、ここでは、USB接続のプリンタHP DeskJet 970CxiをNetBSD上のCUPSを使って印刷するケースについて記します。

 相当、試行錯誤した結果、以下の対応により、NetBSD+CUPS+USB接続プリンタで印刷できました。

 と言ってもファイルへの出力(PDF/Postscrip/SVG)は、ソフトウェアに何を使うかに関わらず、ASCII、日本語、画像など全て正常に出力可能である一方、プリンタへの出力については、ASCII文字は印字できるものの、日本語含む多バイト文字が印字できない、それもXfce標準マウスパッドでは印刷できるが、KDE標準KWrite/Kate、GNOME標準geditやMATE標準Pluma、LXDE標準Leafpadでは、プリンタまで到達せず、印刷できないことが判明。

 現在、原因調査中につき、以下の内容は枠内に入れておきます。

 NetBSDでCUPSを使って印刷する場合、少なくとも執筆時点では、CUPSと関連パッケージのインストール・設定の他、GUIの実装にQTを使うKDEを除き、GNOME/Xfce/(未だ非公式のlight-desktopいわゆる)LXDEやウィンドウマネージャなどGUIにGTKを採用する環境では、これらに対してもCUPSの利用に際してコンパイルオプションの設定をする必要がありました。

 よってNetBSDでCUPSを使うつもりなら、インストール直後、使用するデスクトップ環境を決めたら、それをインストールする前に後述のCUPSの設定をしておくのが賢明と言えます。

CUPSと関連パッケージのインストール

$ sudo pkgin av | grep -i cups
...
$ sudo pkgin av | grep -i ghostscript
...
$ sudo pkgin av | grep -i foomatic
...

 NetBSDのバイナリのリポジトリにもCUPS、Ghostscript、そしてHPプリンタ用のfoomaticはありますが、これらは、依存関係にあり、特にGhostscriptについては、コンパイルオプションを指定する必要があること、日本語対応させるにあたってghostscript-cidfonts-ryuminパッケージのインストールにも必要となることからpkgsrcでコンパイルオプションを付加してソース情報からコンパイル・インストール、バイナリパッケージの生成を行うべきでしょう。

 また、HPプリンタにおいてHPLIPが必要な場合、バイナリはなく、pkgsrcにはあるので自ずとソース情報からインストールすることになります。

$ sudo pkgin in pkg_select
or
$ sudo pkgin in pkgfind
$ sudo vi ~/.profile
...
export PKGSRCDIR=/usr/pkgsrc
...
$ . ~/.profile
$

 ここでは、ローカルに展開したpkgsrcが/usr/pkgsrc以下にあるものとして話を進めます。

 pkgsrcを検索するのに[make search key=...]を使う方法もありますが、pkg_selectやこれにも含まれるpkgfindを使うとカレントパスに関わらず、検索できたり、簡易説明付きで結果表示されることもあり、便利なのでインストールしておくものとします。

 pkg_selectは、/usr/pkg/etc/pkg_select/repositories.confでバイナリのリポジトリやpkgsrcの展開場所(/usr/pkgsrcなど)、pkgfindは、~/.profileなど初期構成ファイルに環境変数PKGSRCDIRにpkgsrcの展開場所を設定しておきます。

$ pkgfind cups
...
$ pkgfind ghostscript
...
$ pkgfind foomatic
...
$ pkgfind hplip
...

 pkgfindの場合、パッケージ名や簡易説明に含まれそうなキーワードを指定して実行するだけで該当するパッケージ(群)のパスと簡易説明が表示されます。

 尚、これらのパスは全て[print/]です。

$ su -
Password:
# unset PKG_PATH
# cd /usr/pkgsrc/print/cups/
# make install clean
# vi /etc/mk.conf
...
PKG_OPTIONS.ghostscript = disable-compile-inits
PKG_OPTIONS.ghostscript += cups
...
# cd ../ghostscript-gpl/
# make install clean
# cd ../hplip/
# make install clean
#

 CUPSとGhostscript、HPLIPパッケージをインストールします。

 Ghostscriptをインストールする前に[/etc/mk.conf]で初期設定のコンパイルオプションを使わないように[disable-compile-inits]を設定しておきます。

 また、CUPSを使う場合には、同じくGhostscriptのコンパイルオプションにcupsフラグを設定しておく必要があるようです。(設定して印刷できることは確認済みですが、未設定の場合の検証はしていません。)

 ghostscriptには、ghostscript-agplとghostscript-gplパッケージがあり、これまで*-agplを試したことはないものの、後述のオプション概要からしてもcupsに触れている*-gplにする必要がある?のかもしれませんが、ここでは、何も考えず、*-gplをインストールしたら、依存関係上、ghostscirptパッケージもインストールされました(が、同じく後述のようにデフォルトではghostscirptをmake installすると*-gplがインストールされ、ghostscirptにオプションを渡すと*-gplに反映される模様)。

 そこでpkgsrcにおいてghostscript、ghostscript-agpl、ghostscript-gplでそれぞれmake show-optionsしてみるとghostscriptは、*-agpl、*-gplのラッパで*-gplの方ではcupsフラグに触れているものの、*-agplでは触れられておらず、デフォルトは*-gplとなっており、PKG_OPTIONS.ghostscriptとすれば、*-gplのオプションの設定に反映される模様です(実際には、確認するのを忘れたので設定前からcupsフラグが有効だったのかどうかについては不明)。

$ sudo pkgin foomatic-db
$ sudo pkgin fomatic-db-engine
$ sudo pkgin foomatic-filters
$ sudo pkgin foomatic-filters-cups
$ sudo pkgin foomatic-ppds
$ sudo pkgin foomatic-ppds-cups
$

 さらにfoomatic関連のパッケージをインストールします。

 表示上、数回に分けているだけなので一度にインストールして構いません。(依存関係上インストールされるケース、逆に依存関係にある主たるパッケージがないと単独ではインストールできないものもあるかも。)

$ sudo pkgin in gutenprint-lib
...
$

 必要ならgutenprint-libもインストールします。

 Gutenprint(旧GIMP Print)は、Canon、Epson、LexmarkやPCLプリンタ用ドライバでNetBSD上ではライブラリ(gutenprint-lib)ですが、対応メーカーや機種が増えているようで同じマシン上のFedoraの設定を見るとGutenprintがHPプリンタのドライバとしても使われており、現に印刷できています。

# ls /usr/pkg/share/examples/rc.d
...
# cp /usr/pkg/share/examples/rc.d/cupsd /etc/rc.d
# echo cupsd=yes >> /etc/rc.conf
# /etc/rc.d/cupsd start
...
#

 インストールが終わったらCUPS用デーモンcupsdをサンプルパスから[/etc/rc.d/]にコピー、[/etc/rc.conf]に[cupsd=yes]と追記の上、開始します。

 cupsdをスタートしたら任意のブラウザを開いてアドレスバーに[localhost:631]や[http://localhost:631]として[Enter]を押すなどするとCUPSのWEBインタフェースが表示されるはずです。

 プリンタを共有するなどローカルマシン以外からも利用できるようにするためには、[CUPSの管理]をクリックしたり、[http://localhost:631/admin]を指定するなどして出てくる画面の右側にあるサーバー部の[設定ファイルの編集]ボタンや、これに反映されるその下の各種チェックボックスのON/OFFなどにより設定します。

 それらの設定が終わったら管理画面のプリンタ部にある[プリンタの追加]ボタンをクリックして対話的にプリンタを追加していきます。

 プリンタを追加し終わったら、管理画面上の[プリンタの管理]ボタンや[プリンター]リンクをクリック、もしくは、[http://localhost:631/printers]と指定して登録したプリンタを選ぶと操作画面が表示されます。

 [メンテナンス]メニューには、[テストページの印刷]もあるので、かなり、インクは消耗しますが、必要なら選択してもよいでしょう。

GTKとCUPS

 ただ、前述の通り、NetBSDにおいては、KDEを除き、GUIの実装にGTKを使うGNOME2、Xfce4、LXDE(執筆時点ではLXDE、MATE、Cinnamonはwipにあるのみ)といった各種統合デスクトップ環境やウィンドウマネージャで使われる印刷ダイアログについては、デフォルトでは、CUPSが無効になっていてCUPSやCUPSプリンタの検出・表示がされませんから、実際に印刷する前に、もっとよいのは、NetBSDのインストール直後のデスクトップ環境導入前にこれらを設定しておく必要があります。

 今回検証しているNetBSDでは(、マルチブートしているFedoraもですが)、各種デスクトップ環境を入れており、GNOME2/KDE4/Xfce4/LXDE/Openboxをkdmで切り替えて使える状態になっている為、CUPSを利用するにあたっては、別途設定が必要となります。

 GNOMEとKDE、Xfce4は、それぞれプリントマネージャを持っており、LXDEは持っておらず、ことLinuxとこれら統合デスクトップ環境に関しては、LXDEと印刷マネージャを持っているXfce4も(、また、GNOME2から派生のMATE、GNOME3から派生のCinnamonでは、)GNOME/GTK開発・標準のsystem-config-printer、system-config-printer-libs、system-config-printer-applet、system-config-printer-udev、CUPS利用時にPolicyKitを使わせる為のcups-pk-helperなどが、KDE4では、kde-print-managerとkde-print-manager-libsが採用されているようです。

 他方、NetBSD上のGNOME2/LXDEにおいては、system-config-printerパッケージはなく、libgnomeprintとlibgnomeprintuiというライブラリとGTKで、Xfce4は、オリジナルの印刷マネージャとGTKで実装されている模様です。(KDE4は不明、MATE、Cinnamonはwipにあるのみでまだスムースに利用できる状況ではないので除外。)

 NetBSDにおいてもKDE4では、何もしなくてもCUPSで登録したプリンタが各種ソフトウェアの印刷ダイアログ上にも検出・表示されており、選択可能となっています。

 一方、NetBSD上のGUIの実装にGTKを使っているXfce4、GNOME2、LXDEについては、デフォルトでは、印刷ダイアログなどでファイル出力やBSD LPRの選択は可能ですが、CUPSという選択肢やCUPSプリンタの検出・表示もされない為、NetBSDにおけるXfce4やGNOME2、LXDEでCUPSを使う場合には、一部pkgsrcパッケージ内のファイルを編集してコンパイル・アップデート、または、インストールする必要があります。

$ su -
Pasword:
# cd /usr/pkgsrc/print/xfce4-print
# vi options.mk
...
# make update clean
#

 Xfce4でCUPSを使う場合には、pkgsrcのXfce4-printパッケージにあるoptions.mkでSunOSとLinux以外は、BSD LPRを使うようになっているのでこれを編集してCUPSを有効にすれば、Xfce4の[印刷マネージャ]で選択肢CUPSを選べるようになり、これを選べば、Xfce4系のソフトウェアの印刷ダイアログ上でCUPSで指定したプリンタが自動検出・表示され、選択可能となります。

$ su -
Pasword:
# cd /usr/pkgsrc/print/libgnomeprint
# vi Makefile
...
# make update clean
#

 GNOME2では、以前インストールしたlibgnomeprintやlibgnomeprintuiパッケージのpkgsrcパスをよくよく調べてみた結果、libgnomeprintのMakefileを編集(するか、PKG_OPTIONS:Mcupsを設定)するに至りましたが、これやgeditやleafpadをmake updateしてみても、さらに再ログインや再起動してみても、これだけでは有効になりませんでした。

# vi /etc/mk.conf
...
PKG_OPTIONS.ghostscript += cups
PKG_BUILD_OPTIONS.libgnomeprint = cups
PKG_OPTIONS.libgnomeprint += cups
PKG_OPTIONS.gtk2 += cups
PKG_OPTIONS.gtk3 += cups
PKG_OPTIONS.cups += slp
...
# cd /usr/pkgsrc/x11/gtk2
# make && make update clean
#

 よく考えてみると、そうか、GNOMEは、GTKを使っているんだからgtkを調べてみる必要があるか。。。ということでpkgsrcを眺めてみるとgtk/gtk2/gtk3というパッケージがあり、その内、gtk2とgtk3のコンパイルオプションにcupsフラグがあり、デフォルトではcupsが無効になっている模様であることが判明。

 というわけで先の対処も/etc/mk.confで行なうものとし、PKG_BUILD_OPTIONS.libgnomeprint、PKG_OPTIONS.libgnomeprintを追記、更にPKG_OPTIONS.gtk2、PKG_OPTIONS.gtk3の設定を追記することにしました。

 念の為、他にもあるのか?と思い、検索してみるとmk.conf - IMMANUELK.NETにたどり着き、PKG_OPTIONS.cupsも追記してみることに。

 その後、gtk2をmake && make updateしたところ、GTKを使っているgedit、Leafpad、Seamonkey、Firefoxなどの印刷ダイアログにもCUPSプリンタが表示されるようになりました。(現時点では、GTK3を使ったソフトウェアはなかった模様。)

 slpは、非CUPSプリンタをネットワークを介した印刷環境で使えるようにしたり、ネットワークプリンタを検出する機能がある模様、slpには、slpdというデーモンがあるので/usr/pkg/share/examples/rc.dから/etc/rc.dにコピー、/etc/rc.confにslpd=yesと追記、/etc/rc.d/slpd startとしておく必要があるでしょう。

 これでKDE4だけでなく、Xfce4の[印刷システムの設定]に[CUPS]という選択肢が、Xfce4、GNOME2、LXDEで標準となっている各種ソフトウェアの印刷ダイアログでもCUPSプリンタがリアルタイムに検出され、表示されるようになりました。

 (実用上、困ることはないものの、プリンタが表示される模様のXfce4の[印刷(プリンタ)マネージャ]には、どのようにすれば、表示されるのかわかりません。)

 ただ、hplip、hplip-cups、foomatic、cups gutenprintといろんなドライバでhttp/ipp/socket/usb、hp-probeやhp-setupコマンドで検出されるhp:/usb...、同じマシンでマルチブートしていて同プリンタをCUPS+Gutenprintドライバを使ったCUPSが自動設定されていて印刷できているFedoraの設定usb://HP/...、他にもusb:/dev/ulpt0...これら全ての検証はしていないものの、CUPS自体も1.5、1.7、2.02と違うバージョンも試していますが、印刷するとスプールは完了する(CUPS Web上もHP Device Manger上も/usr/pkg/bin/lpr、/usr/pkg/bin/lpq、/usr/pkg/bin/lprmも正常に機能する)組み合わせがある一方、なぜか何れの組み合わせでもプリンタを検出できていないのか、プリンタの反応がありません。

 前述の通り、Fedoraを見るとほとんどのデスクトップ環境でsystem-config-printer(おそらくsystem-config-printer-kdeというものもあったようなので、それがベースと思われるkde-print-manager)が使われており、USB接続のプリンタの検出は、system-config-print-udevで行っている模様であることからして、これの代替機能が必要かと思われますが、NetBSDにおいてslp/slpdはネットワークプリンタの検出のみでUSB接続のプリンタの検出はできない?(USB接続の非CUPSプリンタではない?)のか、そうだとすると、こうした用途にはlibusbを使うべきなのか?それともhal+dbus+avahiあたりで、権限云々がある場合、PolicyKitで実現可能なのか、他に方法があるのか?

# cd /usr/pkgsrc/print/cups15
# make show-options
...
# vi /etc/mk.conf
...
PKG_OPTIONS.cups += -libusb
...
#

 そこでlibusbに注目して調べてみたら、cups 1.4.3 working on usb?にたどり着き、なんと、そこでデフォルトのコンパイルオプションからlibusbを外したら印刷できたという回答が。

 どうやら、本来有用なlibusbが、こと/dev/ulpt*の検出を妨げてしまっているということらしいです。

 make show-optionsでcupsのコンパイルオプションを調べてみるとlibusbが有効となっていました。

 そこでlibusbを無効にすべく、/etc/mk.confにPKG_OPTIONS.cupsに-libusbを設定した後、やってみたら、プリンタが見事に反応し、印刷できました。

 lpinfo -vとした結果にも以前にはなかったusb:/dev/ulpt0とusb:/dev/ulpt1があります。

 NetBSD+CUPS。。。道のりは、相当長かったけど、やっとできた。。。

 とりあえず、印刷できることを確認した環境は、NetBSD/i386 6.1.5、CUPS 1.5.4、ドライバhpcups 3.14.6、デバイス(接続先)usb:/dev/ulpt0、USB接続プリンタHP DeskJet970Cxiです。

 紛らわしいことに直前に別件で印刷環境が雑然となってしまい、この時点では、ASCII文字は正常も、日本語が化けてたり、印刷開始位置が中央あたりから始まるなどズレていたりはしますが、とにかく、NetBSDでCUPSを使ってUSB接続のプリンタで紙面に印刷できることはわかったので引き続き、環境を整え、検証・確認したいと思います。

 foomatic関連、hplipを再インストール、いつの間にかghostscriptもなくなっていたので再インストールなどをやったところ、印刷開始位置は正常になりました。

 残るは、日本語の印字ですが、もしかしてCUPSでも/dev/ulpt0の場合、/etc/printcapでフィルタを噛ませないと日本語などの多バイト文字を印字できないのか。。。?

 と思ったら、さらなる課題が。。。

 接続先をusb:/dev/ulpt0とした場合、CUPS GutenprintとFoomatic/cdj970、Foomatic/pcl3では印刷できたが、互換性がありそうなFoomatic/cdj550では印刷できない、BSD lprでは、前方互換?があって古いドライバでも印刷できるが、CUPSでは、これは正常なのか。。。それともcdj550はありそうに見えて実はないのか?

 また、Xfce標準のマウスパッドからなら印刷できるが、gedit/Pluma、さらにはKWriteやKateでは印刷できないことが判明。。。原因調査中。。。

 GNOME2/Xfce4/LXDE標準アプリほかGTKに依存するパッケージは膨大なのでデスクトップ環境を複数入れる場合はなおのこと、CUPSを使うこと前提なら、これらのフラグはNetBSDをインストールした直後から設定しておくのが賢明です(って初めからわかってたら当然そうするよね。。。って話ですけど。。)。

ホーム前へ次へ