---
title: 第7章 マルチメディア
part: パートII. 日々の生活
prev: books/handbook/desktop
next: books/handbook/kernelconfig
description: FreeBSD は数多くの種類のサウンドカードに対応しており、FreeBSD システムで原音に忠実な出力を楽しむことができます。
tags: ["multimedia", "sound card", "MP3", "MythTV", "scanner", "SANE"]
showBookMenu: true
weight: 10
params:
  path: "/books/handbook/multimedia/"
---

[[multimedia]]
= マルチメディア
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 7
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/multimedia/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[multimedia-synopsis]]
== この章では

FreeBSD は数多くの種類のサウンドカードに対応しており、 FreeBSD システムで原音に忠実な出力を楽しむことができます。 これには録音機能と、MPEG Audio Layer 3 (MP3) や Waveform Audio File (WAV), Ogg Vorbis などをはじめとした多くの形式の音楽の再生機能が含まれます。 加えて FreeBSD の Ports Collection には、 録音した音楽を編集したり、音響効果を加えたり、接続された MIDI 機器を制御するためのアプリケーションが用意されています。

FreeBSD ではビデオファイルおよび DVD の再生もできます。 FreeBSD の Ports Collection には、さまざまなビデオメディアをエンコード、 変換、再生するアプリケーションが用意されています。

この章では FreeBSD 上でサウンドカード、ビデオの再生、TV チューナカード、 スキャナを設定する方法について説明します。 また、これらのデバイスを使うためのアプリケーションについても説明します。

この章を読むと、以下のことがわかります。

* FreeBSD でのサウンドカードの設定方法
* サウンドの設定に関するトラブルシューティング
* MP3 およびその他の形式の音声を再生、エンコードする方法
* FreeBSD システムでのビデオ再生の準備
* DVD, [.filename]#.mpg# および [.filename]#.avi# ファイルを再生する方法
* CD および DVD の情報をファイルに抽出する方法
* TV カードの設定方法
* MythTV を FreeBSD にインストールして設定する方法
* 画像スキャナの設定方法
* Bluetooth ヘッドホンの設定方法

この章を読む前に、以下のことを理解しておく必要があります。

* アプリケーションのインストール方法 (crossref:ports[ports,アプリケーションのインストール - packages と ports])

[[sound-setup]]
== サウンドカードの設定

設定をはじめる前に、サウンドカードのモデル、 そのカードが使用しているチップを確認してください。 FreeBSD は サウンドカードに幅広く対応しています。 使用しているカードが対応しているかどうか、 どの FreeBSD ドライバを使うかについて、 link:{u-rel120-hardware}[ハードウェアノート] の対応オーディオデバイスの一覧を確認してください。

サウンドデバイスを使うためには、 デバイスドライバを読み込まなければいけません。 もっとも簡単な方法は man:kldload[8] を使ってサウンドカードのカーネルモジュールを読み込むことです。 次の例は、Intel 仕様のビルトインオーディオチップセットのドライバを読み込む例です。

[source,shell]
....
# kldload snd_hda
....

このドライバを起動時に読み込むように設定するためには、 [.filename]#/boot/loader.conf# にドライバを追加してください。 このドライバの場合は以下の行になります。

[.programlisting]
....
snd_hda_load="YES"
....

他に利用可能な読み込み可能なサウンドモジュールは [.filename]#/boot/defaults/loader.conf# に記載されています。 どのドライバを利用すればいいか確かでなければ、 [.filename]#snd_driver# モジュールを読み込んでください。

[source,shell]
....
# kldload snd_driver
....

[.filename]#snd_driver# モジュールは、 一般に使用されるカードに対応したドライバをまとめて一度に読み込むメタドライバです。 このドライバを使用すれば、速やかに正しいドライバを探し出すことができます。 [.filename]#/boot/loader.conf# ファイルを使用して、 すべてのサウンドドライバを読み込むこともできます。

[.filename]#snd_driver# メタドライバの読み込み後に、 どのドライバがサウンドカードに選択されたのかを知るには、 `cat /dev/sndstat` と入力してください。

=== サウンドに対応したカスタムカーネルを設定する

この節は、 サウンドカードのドライバをカーネルへ静的に組み込もうと考えているユーザ向けです。 カーネル再構築の詳細は crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] を参照してください。

サウンドに対応したカスタムカーネルを使うときには、 オーディオフレームワークドライバをカーネルコンフィグレーションファイルに追加してください。

[.programlisting]
....
device sound
....

次に、サウンドカードに対応したドライバを追加します。 前節の Intel 仕様のビルトインオーディオチップセットの例では、 カスタムカーネルコンフィグレーションファイルに以下の行を追加してください。

[.programlisting]
....
device snd_hda
....

ドライバのマニュアルページを読んで、 ドライバが使用するデバイス名を調べてください。

PnP 非対応の ISA サウンドカードでは、 IRQ および I/O ポートの設定を [.filename]#/boot/device.hints#　 に指定する必要があるかもしれません。 システムの起動時に、man:loader[8] はこのファイルを読み、設定情報をカーネルに渡します。 たとえば、PnP 非対応の古い Creative SoundBlaster(R) 16 (ISA 接続) には `snd_sb16` とともに man:snd_sbc[4] ドライバを使用します。 このカードを使用する場合には、 カーネルコンフィグレーションファイルに以下の行を追加してください。

[.programlisting]
....
device snd_sbc
device snd_sb16
....

もしカードが `0x220` I/O port と IRQ `5` を使用している場合には、 [.filename]#/boot/device.hints# に以下の行を追加してください。

[.programlisting]
....
hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"
....

[.filename]#/boot/device.hints# に用いるべき構文は、man:sound[4] および、 サウンドカードの各ドライバのマニュアルページに記載されています。

これまでの設定はデフォルトのものです。 カードを使用する状況によっては、 IRQ やその他の設定を変更する必要があるかもしれません。 このカードについての詳細は、 man:snd_sbc[4] をご覧ください。

[[sound-testing]]
=== サウンドのテスト

必要となるモジュールを読み込むか、カスタムカーネルで再起動すると、 サウンドカードが検出されます。 確認をするには、`dmesg | grep pcm` と実行してください。 この例は、ビルトイン Conexant CX20590 チップセットを搭載したシステムのものです。

[source,shell]
....
pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1
....

サウンドカードの状態は、 以下のコマンドを使用して確認することもできます。

[source,shell]
....
# cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
Installed devices:
pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default
....

この出力は、サウンドカードによって異なります。 [.filename]#pcm# デバイスがなければ、 適切なデバイスドライバが読み込まれているか、 カーネルに追加されてコンパイルされているかどうかを確認してください。 次の節では、良くある問題とその解決方法をリストアップしています。

すべてうまくいけば、サウンドカードが FreeBSD で機能するでしょう。 CD または DVD ドライブのオーディオ出力端子がサウンドカードと適切に接続されていれば、 man:cdcontrol[1] を使ってドライブ内のオーディオ CD を再生できます。

[source,shell]
....
% cdcontrol -f /dev/acd0 play 1
....

[WARNING]
====
オーディオ CD は特別なエンコーディングが行われているため、 man:mount[8] を使ってマウントすべきではありません。
====

package:audio/workman[] のように、 よりよいインタフェースを提供するさまざまなアプリケーションがあります。 package:audio/mpg123[] port をインストールして MP3 オーディオファイルを聞くことができます。

手っ取り早くカードをテストするには、 [.filename]#/dev/dsp# デバイスにデータを送ってみてください。

[source,shell]
....
% cat filename > /dev/dsp
....

ここで [.filename]#filename# は、どのような形式のファイルでも構いません。 このコマンドラインを実行すると雑音が発生するはずです。 これにより、サウンドカードが動作していることを確認できます。

[NOTE]
====
[.filename]#/dev/dsp*# デバイスノードは、 必要に応じて自動的に作成されます。 デバイスノードが使用されていない場合には存在せず、 man:ls[1] の出力に表示されません。
====

[[bluetooth-headset]]
=== Bluetooth サウンドデバイスの設定

Bluetooth デバイスへの接続についての説明は、この章の範囲外です。 詳細については crossref:advanced-networking[network-bluetooth,Bluetooth] をご覧ください。 

FreeBSD のサウンドシステムで Bluetooth サウンドシンクを動かすには、最初に package:audio/virtual_oss[] をインストールしてください。

[source,shell]
....
# pkg install virtual_oss
....

package:audio/virtual_oss[] を使うには、 カーネルに `cuse` が読み込まれている必要があります。

[source,shell]
....
# kldload cuse
....

システムのスタートアップ時に `cuse` を読み込むには、以下のコマンドを実行してください。

[source,shell]
....
# echo 'cuse_load=yes' >> /boot/loader.conf
....

package:audio/virtual_oss[] でヘッドホンをサウンドシンクとして使うには、 Blueooth オーディオデバイスに接続後、 仮想デバイスを作成する必要があります。

[source,shell]
....
# virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 768 -R /dev/null -P /dev/bluetooth/headphones -d dsp
....

[NOTE]
====
この例において、 _headphones_ は、 [.filename]#/etc/bluetooth/hosts# に記載されているホスト名です。 代わりに `BT_ADDR` を使えます。
====

詳細については、man:virtual_oss[8] をご覧ください。

[[troubleshooting]]
=== サウンドカードの問題についてのトラブルシューティング

<<multimedia-sound-common-error-messages>> は、 良くあるエラーメッセージとその解決法の一覧です。

[[multimedia-sound-common-error-messages]]
.良くあるエラーメッセージ
[cols="1,1", frame="none", options="header"]
|===
| エラー
| 解決方法

|`sb_dspwr(XX) timed out`
|

使用する I/O ポートが適切に設定されていません。

|`bad irq XX`
|

使用する IRQ が正しく設定されていません。 サウンドカードの IRQ と設定した IRQ が同じかどうか確かめてください。

|`xxx: gus pcm not attached, out of memory`
|

デバイスを使用するのに十分なメモリを確保できません。

|`xxx: can't open /dev/dsp!`
|

`fstat \| grep dsp` と入力して、 他のアプリケーションがデバイスを使用しているか調べてください。 注目すべきトラブルメーカは esound と KDE のサウンド機能です。
|===

最近のグラフィックカードの中には、 HDMI を利用するため、 グラフィックカード自身がサウンドカードを持つものがあります。 このようなサウンドデバイスには、 時としてサウンドカードより若い番号が付けられることがあります。 そのような場合には、 サウンドカードをデフォルトプレイバックデバイスとして利用できません。 このことが原因かどうかを確認するには、dmesg を実行して `pcm` を探してください。 以下のような出力を得るかもしれません。

[.programlisting]
....
...
hdac0: HDA Driver Revision: 20100226_0142
hdac1: HDA Driver Revision: 20100226_0142
hdac0: HDA Codec #0: NVidia (Unknown)
hdac0: HDA Codec #1: NVidia (Unknown)
hdac0: HDA Codec #2: NVidia (Unknown)
hdac0: HDA Codec #3: NVidia (Unknown)
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
...
....

この例では、グラフィックカード (`NVidia`) には、サウンドカード (`Realtek ALC889`) より若い番号が付けられています。 サウンドカードをデフォルトのプレイバックデバイスとして利用するには、 `hw.snd.default_unit` をプレイバックで使用するユニット番号に変更してください。

[source,shell]
....
# sysctl hw.snd.default_unit=n
....

ここで、`n` は使用するサウンドデバイスの番号です。 この例では `4` です。 [.filename]#/etc/sysctl.conf# に以下の行を入れると、 設定の変更が常に反映されるようになります。

[.programlisting]
....
hw.snd.default_unit=4
....

[[sound-multiple-sources]]
=== 複数音源の利用

同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。 FreeBSD では、"仮想サウンドチャネル" を使ってカーネル内でサウンドを合成することにより、 サウンドカードの再生を多重化することができます。

仮想チャネルの数を決めるのに三つの man:sysctl[8] 変数を設定できます。

[source,shell]
....
# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4
....

この例では四つの仮想チャネルを設定しています。 これは通常利用する上で十分実用的な数です。 `dev.pcm.0.play.vchans=4` と `dev.pcm.0.rec.vchans=4` は、 デバイスが取り付けられた後で設定できます。 これらは [.filename]#pcm0# が再生や録音のために持っている仮想チャネルの数です。 `hw.snd.maxautovchans` は、 man:kldload[8] を用いて認識された新しいデバイスの仮想チャネル数です。 [.filename]#pcm# モジュールはハードウェアドライバとは独立して読み込むことができるので、 `hw.snd.maxautovchans` は、オーディオデバイスが取り付けられた時に、 デバイスに与えられる仮想チャネルの数を表しています。 より詳細な情報については man:pcm[4] を参照してください。

[NOTE]
====
デバイスを使用しているときに仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。
====

[.filename]#/dev/dsp0# を必要とするプログラムが意識しなくても、 適切な [.filename]#pcm# デバイスが自動的に設定されます。

=== ミキサチャネルの初期値を設定する

各ミキサチャネルの初期値は man:pcm[4] ドライバのソースコードにハードコーディングされています。 man:mixer[8] および他のサードパーティ製のアプリケーションやデーモンによって、 サウンドカードのミキサレベルを変更できますが、 永続的な解決方法ではありません。 そのかわり以下の例のように、 適切な値を [.filename]#/boot/device.hints# ファイルに記述することによって、 ドライバレベルでミキサの初期値を設定することができます。

[.programlisting]
....
hint.pcm.0.vol="50"
....

この例では、man:pcm[4] が読み込まれたと同時に、 ボリュームチャネルの初期値を `50` に設定します。

[[sound-mp3]]
== MP3 オーディオ

この節では、FreeBSD で利用できる MP3 プレイヤや、オーディオ CD トラックを吸い出す方法、 および MP3 のエンコード、 デコードの方法について説明します。

[[mp3-players]]
=== MP3 プレイヤ

Audacious は 人気のあるグラフィカルな MP3 プレイヤです。 Winamp スキンや追加のプラグインに対応しています。 Audacious のプレイリスト、 グラフィックイコライザ等のインタフェースは直感的です。 Winamp を使いなれている人は簡単に Audacious を使えるでしょう。 FreeBSD では、Audacious は package:multimedia/audacious[] の port または package からインストールできます。 Audacious は、XMMS の子孫です。

package:audio/mpg123[] package もしくは port は、 は代替となる コマンドライン上の MP3 プレイヤです。インストールしたら、再生する MP3 ファイルをコマンドラインから指定してください。 もしシステムが、複数のオーディオデバイスを搭載しているのであれば、 サウンドデバイスを同様に指定してください。

[source,shell]
....
# mpg123 -a /dev/dsp1.0 Foobar-GreatesHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.18.1; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
....

他の MP3 プレイヤも Ports Collection から利用できます。

[[rip-cd]]
=== CD オーディオトラックの抽出

CD 全体または CD トラックを MP3 に変換する前に、CD 上のオーディオデータをハードディスク上に抽出する必要があります。 これは raw CD Digital Audio (CDDA) データを WAV ファイルにコピーすることで行われます。

package:sysutils/cdrtools[] スイートからインストールされる `cdda2wav` ツールを用いて、CD からオーディオデータを抽出できます。

CD をドライブにいれて次のコマンドを `root` 権限で実行すると、 CD 全体をトラックごとに個々の WAV ファイルに抽出できます。

[source,shell]
....
# cdda2wav -D 0,1,0 -B
....

この例では、`-D _0,1,0_` は SCSI デバイス [.filename]#0,1,0# が抽出する CD を表します。 `cdrecord -scanbus` を使って、 システムの適切なデバイスパラメータを取得してください。

個々のトラックを抽出するには、 次のように `-t` でトラックを指定してください。

[source,shell]
....
# cdda2wav -D 0,1,0 -t 7
....

範囲を指定して、 一番目から七番目のトラックまで抽出したい場合、 次のようにします。

[source,shell]
....
# cdda2wav -D 0,1,0 -t 1+7
....

ATAPI (IDE) CDROM ドライブから抽出するには、 SCSI ユニット番号をデバイス名に置き換えて指定します。 たとえば IDE ドライブから七番目のトラックを抽出するには、 次のようにします。

[source,shell]
....
# cdda2wav -D /dev/acd0 -t 7
....

または、crossref:disks[duplicating-audiocds,「オーディオ CD の複製」] で説明されているように、`dd` を使って ATAPI ドライブ上のオーディオトラックを展開できます。

[[mp3-encoding]]
=== MP3 のエンコードとデコード

lame は、 ポピュラーな MP3 エンコーダです。 package:audio/lame[] port からインストールできます。 特許の問題から、package は利用できません。

次のコマンドを実行すると、抽出した WAV ファイル [.filename]#audio01.wav# を使って [.filename]#audio01.mp3# に変換します。

[source,shell]
....
# lame -h -b 128 --tt "曲名" --ta "アーティスト名" --tl "アルバム名" \
--ty "年" --tc "コメント" --tg "ジャンル" audio01.wav audio01.mp3
....

ここで指定している 128 kbits は、MP3 の標準のビットレートです。 160 kbits または 192 kbits のビットレートは、 さらに高音質を提供します。 ビットレートが高くなるにつれて作成される MP3 ファイルは多くのディスク領域を消費します。 `-h` オプションを指定すると "低速高品質" モードとなります。 `--t` ではじまるオプションは ID3 タグを設定します。 このタグにはたいてい曲の情報が含まれており、 MP3 ファイルに格納されます。 Lame のマニュアルを参照すれば、 他のエンコーディングのオプションが見つかるでしょう。

MP3 からオーディオ CD を作成するには、 まず非圧縮のファイル形式に変換しなければなりません。 XMMS は WAV 形式へ変換できますが、 mpg123 は raw Pulse-Code Modulation (PCM) オーディオデータに変換します。

mpg123 を使って [.filename]#audio01.mp3# を変換するには、PCM ファイルを指定してください。

[source,shell]
....
# mpg123 -s audio01.mp3 > audio01.pcm
....

XMMS を使って MP3 を WAV 形式に変換するには、 以下の手順に従ってください。

[.procedure]
====
*Procedure: XMMS を使って WAV 形式に変換する*

. XMMS を起動します。
. 右クリックで XMMS メニューを表示します。
. `Options` から `Preferences` を選択します。
. Output Plugin を "Disk Writer Plugin" に変更します。
. `Configure` を押します。
. 非圧縮ファイルを書き出すディレクトリを入力、 または選択します。
. 普段通り XMMS へ MP3 ファイルを読み込みます。 音量は 100% でイコライザの設定はオフにします。
. `Play` を押します。 XMMS は MP3 を再生しているかのように表示しますが、 音声はきこえません。 実際には MP3 をファイルに出力しています。
. 終了したら、再び MP3 を聴けるように Output Plugin を以前のように元に戻すのを忘れないでください。
====

WAV と PCM 形式は、 cdrecord で利用できます。 WAV ファイルを使用する場合、 それぞれのトラックの先頭に小さなノイズが入るのに気づくでしょう。 これは WAV ファイルのヘッダ情報です。 package:audio/sox[] port または package を使うとヘッダ情報を削除できます。

[source,shell]
....
% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw
....

FreeBSD での CD 作成の詳しい情報は crossref:disks[creating-cds,「光メディア (CD & DVD) の作成と使用」] を参照してください。

[[video-playback]]
== ビデオ再生

ビデオ再生のための設定をはじめる前に、 ビデオカードのモデルおよびチップセットを確認する必要があります。 Xorg はさまざまなビデオカードに対応していますが、 すべてのカードがビデオ再生に性能を発揮できるとは限りません。 利用しているビデオカードの Xorg サーバが対応している拡張機能のリストを得るには、 Xorg を実行中に `xdpyinfo` を実行してください。

さまざまなプレイヤやオプションを試すのに、 テストファイルとして小さな MPEG ファイルを用意しておくのはよい考えです。 いくつかの DVD アプリケーションは DVD メディアを [.filename]#/dev/dvd# として初期設定しているか、ハードコーディングしているので、 次のように適切なデバイスにシンボリックリンクを張っておくと便利かもしれません。

[source,shell]
....
# ln -sf /dev/cd0 /dev/dvd
....

man:devfs[5] の仕様により、 このように手動で作成されたリンクはシステムを再起動すると消えてしまいます。 システムの起動時にこれらのシンボリックリンクを自動的に作成するには、 [.filename]#/etc/devfs.conf# に下記の設定を追加してください。

[.programlisting]
....
link cd0 dvd
....

特別な機能を必要とする DVD の抽出には、 DVD デバイスへの書き込み権限が必要です。

Xorg インタフェースの使う共有メモリを拡張するために、 以下の man:sysctl[8] 変数の値を増やすことが推奨されています。

[.programlisting]
....
kern.ipc.shmmax=67108864
kern.ipc.shmall=32768
....

[[video-interface]]
=== ビデオ機能の決定

Xorg においてビデオ表示性能を改善する方法はいくつかあり、 正しく動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。

よく知られたビデオインタフェースは次の通りです。

. Xorg: 共有メモリを用いた通常の出力
. XVideo: 特別なアクセラレータによって、 drawable オブジェクトに直接ビデオを表示する Xorg インタフェースの拡張機能です。 この拡張を使うことで廉価なコンピュータでも高品質の再生が可能になります。 次の節では、 この拡張が動作していることの確認方法について説明します。
. SDL: Simple Directmedia Layer は、 さまざまなオペレーティングシステムの間でサウンドとグラフィックスを効果的に利用したクロスプラットホームアプリケーションを開発することを目的としたレイヤです。 SDL はハードウェアに対する低レベルの抽象的概念を提供し、 時には Xorg インタフェースを使用するよりも効果的なことがあります。 FreeBSD では、SDL は、 package:devel/sdl20[] package または port によりインストールできます。
. DGA: Direct Graphics Access は、 プログラムが Xorg サーバを介せず直接フレームバッファを変更することを可能にする Xorg の拡張機能です。 低レベルのメモリマッピングが実行できることを期待しているので、 この機能を使うプログラムは `root` 権限で実行されなければなりません。 DGA 機能拡張は man:dga[1] によってテストとベンチマークができます。 `dga` 実行中はキーボードを押せばいつでもディスプレイ色が変更されます。 中止するには kbd:[q] を押します。
. SVGAlib: 低レベルコンソールグラフィックレイヤ

[[video-interface-xvideo]]
==== XVideo

この拡張機能が動作しているかどうかを調べるには、 `xvinfo` を使います。

[source,shell]
....
% xvinfo
....

以下のような結果が得られたならば、カードは XVideo に対応しています。

[source,shell]
....
X-Video Extension version 2.2
  screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0
....

リストにある形式、YUV2, YUV12 などが XVideo のすべての実装で存在するとは限りません。 対応している形式が少ないために、 あるプレイヤでは悪影響が出るかもしれないことにも注意してください。

出力が以下のような場合、

[source,shell]
....
X-Video Extension version 2.2
screen #0
no adaptors present
....

カードはおそらく XVideo に対応していないのでしょう。 このことはディスプレイでビデオを表示するのに、 ビデオカードおよびプロセッサによっては、 計算上の要求を満たすことがより困難になることを意味します。

[[video-ports]]
=== ビデオを扱う ports および packages

この節では Ports Collection で利用可能な、 ビデオの再生に使用できるソフトウェアについて紹介します。

[[video-mplayer]]
==== MPlayer および MEncoder

MPlayer はコマンドラインのビデオプレイヤで、 高速性と柔軟性をもたらすグラフィカルなインタフェースも持っています。 MPlayer の他のグラフィカルなフロントエンドも Ports Collection からインストールできます。

MPlayer は package:multimedia/mplayer[] package または port からインストールできます。 いくつかのコンパイル時のオプションを設定することができ、また、 構築の際にさまざまなハードウェアのチェックがおこなわれます。 そのため、package からインストールを行わず、 port から構築することを好むユーザもいます。

port を構築する際に、メニューのオプションは、port にコンパイル時にオプションとしてどの形式に対応するかを決定するため、 見ておく必要があります。 オプションが選択されていなければ、 MPlayer はその形式のビデオ形式を表示することは出来ません。 矢印キーとスペースキーを使って必要な形式を選択してください。 選択が終わったら、kbd:[Enter] を押して、 port の構築とインストールを続けてください。

デフォルトでは、この packege または port は、 `mplayer` コマンドラインユーティリティと `gmplayer` グラフィカルユーティリティを構築します。 ビデオをエンコードする必要があれば、 package:multimedia/mencoder[] port をコンパイルしてください。 ライセンスの制限のため、 MEncoder の package は利用できません。

MPlayer を初めて起動すると、 各自のホームディレクトリ内に [.filename]#~/.mplayer# が作成されます。このサブディレクトリには、 ユーザ固有の設定ファイルのデフォルトバージョンが含まれています。

この節では、一般的な使用法についてのみ説明します。 数多くのオプションの完全な説明については、 mplayer(1) のマニュアルに記載されています。

[.filename]#testfile.avi# というファイルを再生するには、以下の例のように、 `-vo` とともに、 ビデオインタフェースを指定してください。

[source,shell]
....
% mplayer -vo xv testfile.avi
....

[source,shell]
....
% mplayer -vo sdl testfile.avi
....

[source,shell]
....
% mplayer -vo x11 testfile.avi
....

[source,shell]
....
# mplayer -vo dga testfile.avi
....

[source,shell]
....
# mplayer -vo 'sdl:dga' testfile.avi
....

ビデオ再生の相対的性能は多くの要因に依存し、 ハードウェアに応じて著しく変わると思われるので、 これらのオプションをすべて試してみる価値はあるでしょう。

DVD を再生するには、 [.filename]#testfile.avi# を `dvd://_N_ -dvd-device _DEVICE_` に置き換えてください。 <N> には再生するタイトル番号を、 _DEVICE_ は DVD のデバイスノードを指定します。 たとえば、[.filename]#/dev/dvd# から 2 番目のタイトルを再生するには以下のようにします。

[source,shell]
....
# mplayer -vo xv dvd://3 -dvd-device /dev/dvd
....

[NOTE]
====
デフォルトの DVD デバイスは、 MPlayer port の構築時に `WITH_DVD_DEVICE=/path/to/desired/device` を追加することでで定義できます。 デフォルトでは、デバイスは [.filename]#/dev/cd0# です。 詳細はこの port の [.filename]#Makefile.options# をご覧ください。
====

停止、休止、 再生などをするにはキーバインディングを使ってください。 キーバインディングの一覧を見るには、`mplayer -h` を実行するか、もしくは、mplayer(1) を読んでください。

再生に関する追加のオプションがあります。 全画面モードにする `-fs -zoom` オプションと、 性能を向上させる `-framedrop` オプションです。

よく使用するオプションについては、各ユーザの [.filename]#.mplayer/config# に以下のように追加してください。

[.programlisting]
....
vo=xv
fs=yes
zoom=yes
....

`mplayer` を使って、 DVD タイトルを [.filename]#.vob# に抽出できます。 DVD から 2 番目のタイトルをダンプするには次のようにします。

[source,shell]
....
# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd
....

出力された [.filename]#out.vob# ファイルは MPEG 形式です。

UNIX(R) ビデオについて、 高レベルのノウハウを得たいと考えている方は link:http://www.mplayerhq.hu/DOCS/[mplayerhq.hu/DOCS] をご覧ください。技術的な情報があります。 このドキュメントは、 バグを報告する前に、読むべきものです。

`mencoder` を使う前に、link:http://www.mplayerhq.hu/DOCS/HTML/en/mencoder.html[mplayerhq.hu/DOCS/HTML/en/mencoder.html] を読んでオプションに慣れておくのはよい考えです。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 コマンドラインオプションを不適切に組合せると、 `mplayer` でさえ再生できない出力ファイルを作成してしまいます。

 はじめは単純なファイルのコピーです。

[source,shell]
....
% mencoder input.avi -oac copy -ovc copy -o output.avi
....

したがって、単にファイルを抽出したいときには、 `mplayer` に `-dumpfile` をつけます。

[.filename]#input.avi# を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには、まず最初に package:audio/lame[] port をインストールしてください。 ライセンスの制限により、package は利用できません。 インストールしたら、以下のように入力してください。

[source,shell]
....
% mencoder input.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
....

これは `mplayer` や `xine` といったアプリケーションで再生可能な出力ファイルを作成します。

DVD タイトルを直接再エンコードするためには、 上記のコマンドラインの [.filename]#input.avi# を `dvd://1 -dvd-device /dev/dvd` に置き換えて、 `root` 権限で実行します。 期待する結果を得るには何度か繰り返すことになるので、 かわりにタイトルをファイルにダンプして、 ファイルに対して作業することをおすすめします。

[[video-xine]]
==== xine ビデオプレイヤ

xine は、 再利用可能な基本ライブラリと、 プラグインで拡張できる実行可能なモジュールを提供するビデオプレイヤです。 package:multimedia/xine[] package または port からインストールできます。

実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応している必要があります。 XVideo インタフェースとともに xine ビデオプレイヤを使うのが最良です。

デフォルトでは、xine プレイヤは GUI 付きで起動するでしょう。 メニューを使用して特定のファイルを開くことができます。

xine は、 再生するファイル名を指定することで、 コマンドラインから実行することもできます。

[source,shell]
....
% xine -g -p mymovie.avi
....

link:http://www.xine-project.org/faq[xine-project.org/faq] には、より多くの情報やトラブルシューティングがあります。

[[video-ports-transcode]]
==== Transcode ユーティリティ

Transcode は、 ビデオおよびオーディオファイルを再エンコードするためのツール一式です。 Transcode を使えば、stdin/stdout ストリームインタフェースとともにコマンドラインツールを用いることで、 ビデオファイルの統合や、壊れたファイルの修復ができます。

FreeBSD では、Transcode は、 package:multimedia/transcode[] package もしくは port からインストールできます。 多くのユーザは port からコンパイルすることを好みます。 port では、 コンパイルで有効にするサポートやコーデックを指定するコンパイルオプションのメニューを利用できるためです。 オプションを選択しないと、Transcode は、その形式をエンコード出来ないでしょう。 矢印キーとスペースバーを使って、 必要とするフォーマットを選択してください。 選択が終わったら、 kbd:[Enter] を押して、port のコンパイルとインストールを続けてください。

この例では、DivX ファイルを PAL MPEG-1 (PAL VCD) に変換する使用例を示します。

[source,shell]
....
% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa
....

作成された MPEG ファイル、 [.filename]#output_vcd.mpg# は、 MPlayer を使って再生できます。 また、package:multimedia/vcdimager[] および package:sysutils/cdrdao[] といったユーティリティを使って、 ファイルを CD メディアに書き込むことでビデオ CD も作成できます。

`transcode` のマニュアルページに加え、link:http://www.transcoding.org/cgi-bin/transcode[transcoding.org/cgi-bin/transcode] から、更なる情報や使用例を得てください。

[[tvcard]]
== TV カードの設定

TV カードを使用することで、 TV 放送をコンピュータで見ることができます。 これらの多くのカードは RCA または S-video 入力端子を備えており、 FM ラジオチューナを装備したカードもあります。

FreeBSD は、Brooktree Bt848/849/878/879 をビデオキャプチャチップに採用した PCI TV カードに man:bktr[4] ドライバで対応しています。 このドライバは、ほとんどの Pinnacle PCTV ビデオカードに対応しています。 TV カードを購入する前に、対応しているチューナの一覧について、 man:bktr[4] を参照してください。

=== ドライバを読み込む

カードを使用するには、man:bktr[4] ドライバを読み込む必要があります。 起動時に自動的に読み込むためには、 [.filename]#/boot/loader.conf# に以下の行を追加してください。

[.programlisting]
....
bktr_load="YES"
....

あるいは、カスタムカーネルに TV ビデオカードへのサポートを静的に組み込むこともできます。 この場合には、 次の行をカーネルコンフィギュレーションファイルに追加してください。

[.programlisting]
....
device	 bktr
device	iicbus
device	iicbb
device	smbus
....

カードコンポーネントは I2C バス経由で連結されているため、 man:bktr[4] ドライバに加えてこれらのデバイスが必要になります。 編集したら新しいカーネルを構築し、インストールします。

チューナが適切に検出されたかどうかを確認するため、 システムを再起動してください。 起動時のメッセージに TV カードが以下のように認識されるでしょう。

[.programlisting]
....
bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
iicbb0: <I2C bit-banging driver> on bti2c0
iicbus0: <Philips I2C bus> on iicbb0 master-only
iicbus1: <Philips I2C bus> on iicbb0 master-only
smbus0: <System Management Bus> on bti2c0
bktr0: Pinnacle/Miro TV, Philips SECAM tuner.
....

これらのメッセージはハードウェアに応じて異なります。 必要であれば、man:sysctl[8] や、 カーネルコンフィギュレーションファイルオプションで、 検知されたいくつかのパラメータを変更できます。 たとえば、チューナを Philips SECAM チューナとして検知されるようにするには、 カーネルコンフィギュレーションファイルに以下の行を追加します。

[.programlisting]
....
options OVERRIDE_TUNER=6
....

または、直接 man:sysctl[8] を使用して変更します。

[source,shell]
....
# sysctl hw.bt848.tuner=6
....

利用可能な man:sysctl[8] パラメータおよびカーネルオプションについては man:bktr[4] を参照してください。

=== 便利なアプリケーション

TV カードを使用するためには、 以下のアプリケーションの一つをインストールする必要があります。

* package:multimedia/fxtv[] はウィンドウ内に TV 映像を映します。 画像/音声/ビデオを取り込むこともできます。
* package:multimedia/xawtv[] も同様の機能を持った TV アプリケーションです。
* package:audio/xmradio[] は TV カードに搭載された FM ラジオチューナを使用するためのアプリケーションです。

他にも多くのアプリケーションが FreeBSD の Ports Collection に収録されています。

=== トラブルシューティング

TV カードに関する問題が起きたときには、man:bktr[4] が本当にビデオキャプチャチップおよびチューナに対応しているか、 オプションが正しく設定されているかどうかをまず確認してください。 TV カードに関するサポートや質問に関しては、 {freebsd-multimedia} メーリングリストを参照してください。

[[mythtv]]
== MythTV

MythTV は、広く使われているオープンソースの Personal Video Recorder (PVR) アプリケーションです。 この節では、FreeBSD に MythTV をインストールし、 設定する方法について説明します。 MythTV の使用法に関するより詳細な情報については、link:http://www.mythtv.org/wiki/[mythtv.org/wiki] をご覧ください。

MythTV は、フロントエンドおよびバックエンドを必要とします。 これらは、同じシステム上でも、 異なるコンピュータ上でも動かすことが可能です。

フロントエンドについては、 package:multimedia/mythtv-frontend[] package または port から FreeBSD にインストールできます。 crossref:x11[x11,X Window System] で説明されているように、 Xorg をインストールして設定する必要もあります。 このシステムは X-Video Motion Compensation (XvMC) に対応し、 オプションとして、Linux Infrared Remote Control (LIRC)-互換のリモートに対応したビデオカードを持っていることが理想的です。

FreeBSD にバックエンドとフロントエンドの両方をインストールするには、 package:multimedia/mythtv[] package または port を使ってください。 MySQL(TM) データベースサーバも必要となりますが、 自動的に依存でインストールされます。オプションで、 チューナカードと録音したデータを保存するためのストレージが必要です。

=== ハードウェア

MythTV は、 エンコーダやチューナなどのビデオ入力デバイスへのアクセスに Video for Linux (V4L) を用います。 FreeBSD では、USB DVB-S/C/T カードにおいて最もよく動作します。 なぜならば、このカードは、 V4L ユーザランドアプリケーションを提供する package:multimedia/webcamd[] package または port により良くサポートされているためです。 webcamd により対応している Digital Video Broadcasting (DVB) カードは、MythTV で動作するはずです。 動作することが知られているカードの一覧が link:http://wiki.freebsd.org/WebcamCompat[wiki.freebsd.org/WebcamCompat] にあります。 Hauppauge カードのドライバもまた、 package:multimedia/pvr250[] および package:multimedia/pvrxxx[] port として利用可能ですが、 標準的ではないドライバのインタフェースを提供しており、 0.23 より後の MythTV では動作しません。 ライセンスの制限により、package は利用できません。 そのため、これらの ports はコンパイルをしなければなりません。

link:http://wiki.freebsd.org/HTPC[wiki.freebsd.org/HTPC] ページは、DVB ドライバのすべての一覧を提供しています。

=== MythTV バックエンドの設定

バイナリ package を使って MythTV をインストールしてください。

[source,shell]
....
# pkg install mythtv
....

あるいは、Ports Collection からインストールするには、 以下のように実行してください。

[source,shell]
....
# cd /usr/ports/multimedia/mythtv
# make install
....

インストールが終わったら、 MythTV データベースを設定してください。

[source,shell]
....
# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql
....

その後、バックエンドを設定してください。

[source,shell]
....
# mythtv-setup
....

最後にバックエンドを起動してください。

[source,shell]
....
# sysrc mythbackend_enable=yes
# service mythbackend start
....

[[scanners]]
== 画像スキャナ

FreeBSD では、画像スキャナに対するアクセスは SANE (Scanner Access Now Easy) によって実現されており、 FreeBSD の Ports Collection で提供されています。 SANE はスキャナのハードウェアにアクセスするために FreeBSD デバイスドライバを使用します。

FreeBSD は SCSI 接続および USB 接続のスキャナのどちらにも対応しています。 スキャナのインタフェースに依存して、異なるドライバが必要となります。 設定を始める前に、 SANE がスキャナに対応していることを確認してください。 対応しているスキャナに関してのより詳細な情報については、link:http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] をご覧ください。

この節では、FreeBSD がどのようにしてスキャナを認識するかについて説明します。 その後、FreeBSD システム上で SANE を設定して使用する方法の概要について説明します。

[[scanners-kernel-usb]]
=== スキャナの確認

[.filename]#GENERIC# カーネルには USB スキャナに対応するためのデバイスドライバが搭載されています。 カスタムカーネルを使用する際には、 以下の行がカーネルコンフィグレーションファイルにあることを確認してください。

[.programlisting]
....
device usb
device uhci
device ohci
device ehci
device xhci
....

USB スキャナが認識されたかを確認するには、 スキャナを接続して、`dmesg` を利用し、 システムメッセージバッファで、 スキャナが認識されているかどうかを確認してください。 認識されていたら、以下のようなメッセージが表示されます。

[source,shell]
....
ugen0.2: <EPSON> at usbus0
....

この例では、EPSON Perfection(R) 1650 USB スキャナが [.filename]#/dev/ugen0.2# 上で認識されています。

スキャナのインタフェースが SCSI であれば、 どの SCSI コントローラボードを使用するかを知ることが重要です。 使用する SCSI チップセットによって、 カスタムカーネルコンフィグレーションファイルを調整する必要があります。 [.filename]#GENERIC# カーネルは、 一般に使用される SCSI コントローラのほとんどに対応しています。 [.filename]#/usr/src/sys/conf/NOTES# ファイルを読んで、 適切な行をカーネルコンフィグレーションファイルに追加してください。 また、SCSI アダプタドライバに加えて、 以下の行をカスタムカーネルコンフィグレーションファイルに記述する必要があります。

[.programlisting]
....
device scbus
device pass
....

デバイスがメッセージバッファに出力されていることを確認してください。

[source,shell]
....
pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfers
....

システムを起動する際にスキャナの電源を入れてなければ、 `camcontrol` を使用して SCSI バスをスキャンし、 以下のように手動でデバイスを検出させることもできます。

[source,shell]
....
# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful
....

すると、スキャナは SCSI デバイスの一覧に現れるでしょう。

[source,shell]
....
# camcontrol devlist
<IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)
....

FreeBSD における SCSI デバイスについての詳細は、 man:scsi[4] および man:camcontrol[8] をご覧ください。

=== SANE の設定

SANE システムは、 バックエンド (package:graphics/sane-backends[]) を経由してスキャナに対するアクセスを提供します。 バックエンドが対応している画像スキャナについては、link:http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] を参照してください。 グラフィカルなスキャニングインタフェースは、 Kooka (package:graphics/kooka[]) または XSane (package:graphics/xsane[]) といったサードパーティ製のアプリケーションによって提供されています。 SANE のバックエンドは、 スキャナを試すには十分です。

バイナリ package から、バックエンドをインストールするには、 以下のように実行してください。

[source,shell]
....
# pkg install sane-backends
....

あるいは、Ports Collection からインストールするには、 以下のように実行してください。

[source,shell]
....
# cd /usr/ports/graphics/sane-backends
# make install clean
....

package:graphics/sane-backends[] port または package をインストールしたら、 `sane-find-scanner` コマンドを使用して、 SANE システムで検出されているスキャナを確認してください。

[source,shell]
....
# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
....

この出力から、 スキャナインタフェースの種類と システムに接続されているスキャナが使用するデバイスノードがわかります。 ベンダ名や製品のモデル名は表示されないかも知れません。

[NOTE]
====
いくつかの USB スキャナではファームウェアを読み込む必要がある場合があります。 詳細については、sane-find-scanner(1) および sane(7) を参照してください。
====

次に、スキャナがフロントエンドで認識されるか調べてください。 SANE のバックエンドには `scanimage` が付属します。 このコマンドを使用すると、 デバイスの一覧を表示したり画像を取得することができます。 スキャナデバイスの一覧を表示するには、 `-L` オプションを使ってください。 以下の最初の例は、SCSI スキャナ用のもので、 次の例は、USB スキャナ用のものです。

[source,shell]
....
# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner
....

2 番目の出力において、 `epson2` がバックエンド名で、 `libusb:000:002` は `/dev/ugen0.2` を意味し、 スキャナが使用するデバイスノードです。

`scanimage` がスキャナの認識に失敗した場合には、 以下のようなメッセージが表示されます。

[source,shell]
....
# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
....

このような場合には、[.filename]#/usr/local/etc/sane.d/# にあるバックエンドの設定ファイルを編集して、 使用するスキャナデバイスを設定してください。 例えば、認識されなかったスキャナのモデルが、 EPSON Perfection(R) 1650 で、`epson2` バックエンドを使っているのであれば、 [.filename]#/usr/local/etc/sane.d/epson2.conf# を編集してください。 編集作業を行う際には、 使用するインタフェースとデバイスノードを指定する行を追加します。 この例では、以下の行を追加します。

[.programlisting]
....
usb /dev/ugen0.2
....

編集を保存し、 適切なバックエンド名とデバイスノードでスキャナが認識されたかどうかを確認してください。

[source,shell]
....
# scanimage -L
device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner
....

`scanimage -L` を実行してスキャナが認識されたことがわかれば、設定は終了です。 スキャナを使用する準備ができました。

`scanimage` を使用してコマンドラインから画像を取得することができますが、 GUI を使用して画像を取得できることが望ましいでしょう。 Kooka や xsane といったアプリケーションは、 広く使われているスキャニングフロントエンドです。 これらには、さまざまなスキャニングモード、 色補正、バッチスキャンなど先進的な機能があります。 XSane は、GIMP のプラグインとして使用することもできます。

=== スキャナの許可属性

スキャナにアクセスするには、 ユーザはスキャナが使用するデバイスノードへの読み込み権限と書き込み権限が必要です。 今回の例では、USB スキャナは [.filename]#/dev/ugen0.2# デバイスノードを使用しています。 このデバイスノードは、 [.filename]#/dev/usb/0.2.0# へのシンボリックリンクです シンボリックリンクとデバイスノードは、 それぞれ `wheel` および `operator` グループが所有しています。 ユーザをこれらのグループに加えると、 スキャナを使用できるようになりますが、 ユーザを `wheel` に追加することは、セキュリティの観点からお勧めできません。 良い方法は、 スキャナデバイスにアクセスできるグループを作成することです。

この例では、`_usb_` という名前のグループを作成します。

[source,shell]
....
# pw groupadd usb
....

その後、シンボリックリンク [.filename]#/dev/ugen0.2# および、[.filename]#/dev/usb/0.2.0# デバイスノードに対して、 `usb` グループが利用できるように書き込みの許可属性 `0660` または `0664` を設定してください。 [.filename]#/etc/devfs.rules# に次の行を追加すれば設定できます。

[.programlisting]
....
[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0666 group usb
....

[NOTE]
====
デバイスを追加したり外すことにより、 デバイスノードが変わることがあります。 そのため、すべての USB デバイスにアクセスしたい場合には、 代わりに以下のルールセットを使ってください。

[.programlisting]
....
[system=5]
add path 'ugen*' mode 0660 group usb
add path 'usb/*' mode 0666 group usb
....

====

このファイルの詳細については、 man:devfs.rules[5] を参照してください。

つぎに、/etc/rc.conf でルールセットを有効にしてください。

[.programlisting]
....
devfs_system_ruleset="system"
....

そして、man:devfs[8] システムを再起動してください。

[source,shell]
....
# service devfs restart
....

最後に、スキャナを利用するユーザを `_usb_` グループに追加してスキャナを利用できるようにしてください。

[source,shell]
....
# pw groupmod usb -m joe
....

詳細については、man:pw[8] をご覧ください。
