Solaris のシステム管理 (基本編)

第 28 章 USB デバイスの使用 (概要/手順)

この章では、USB (Universal Serial Bus) デバイスの概要と、Solaris 環境で USB デバイスを使用する手順について説明します。

USB デバイスを使った手順については、次の節を参照してください。

この章の内容は以下のとおりです。

動的再構成およびホットプラグについての一般的な情報については、第 27 章「デバイスの動的構成 (手順)」を参照してください。

USB プリンタの構成情報については、『Solaris のシステム管理 (上級編)』の「印刷の新機能」を参照してください。

USB デバイスの概要

USB (Universal Serial Bus) は、周辺機器 (キーボード、マウス、プリンタなど) をシステムに接続するために PC 業界で開発された低コストのソリューションです。

USB コネクタは 1 方向 1 種類のケーブルだけに適合するように設計されています。デバイスはハブデバイスに接続できます。ハブデバイスは、他のハブデバイスを含めて複数のデバイスを接続します。USB が設計された主な目的は、デバイスごとに異なる何種類ものコネクタを減らすことです。USB の設計により、システムの背面パネルの混雑を軽減できます。他にも、USB デバイスを使用すると次のような利点があります。

Sun は USB デバイスを次のようにサポートしています。

次の表に、Solaris 環境でサポートされるUSB デバイスを示します。

USB デバイス 

USB デバイスがサポートされるシステム 

オーディオデバイス上の HID コントロール 

SPARC および IA システム 

ハブ 

SPARC および IA システム 

キーボードとマウス 

ohci コントローラに基づいた Sun の USB がサポートされている SPARC システム

uhci コントローラに基づいた USB バ スを持つ IA システム

オンボードの USB コントローラだけがサポートされる。 

大容量ストレージ 

SPARC および IA システム 

プリンタ 

SPARC および IA システム 

スピーカおよびマイク 

SPARC および IA システム 

よく使用される USB 関連の略語

次の表に、Solaris 環境で使用される USB の略語について説明します。USB の構成要素と略語についての詳細は、http://www.usb.org を参照してください。

略語 

定義 

USB 

Universal Serial Bus 

USBA 

USB アーキテクチャ (Solaris) 

USBAI 

USBA クライアントドライバインタフェース (Solaris) 

HCD 

USB ホストコントロールドライバ 

USB バスの説明

USB 仕様は、ライセンス料を払わずに入手することができます。USB 仕様は、バスとコネクタの電気的および機械的なインタフェースを定義します。

USB が採用するトポロジでは、ハブが USB デバイスに接続点を提供します。ホストコントローラには、システム内のすべての USB ポートの起点となるルートハブが含まれます。バスの詳細については、USB ホストコントローラとルートハブを参照してください。

図 28-1 USB 物理デバイスの階層

この図は、合成デバイス (ハブとプリンタ) と複合デバイス (キーボードとマウス) を含む、有効な USB ポートが 3 つ搭載されたシステムを示しています。

図 28–1 は、有効な USB ポートが 3 つ搭載されたシステムを示しています。1 番目の USB ポートは Zip ドライブに接続されています。この Zip ドライブにはハブが組み込まれていないため、他のデバイスは接続できません。2 番目の USB ポートはハブに接続されており、このハブには Jaz ドライブと、キーボードとマウスの複合デバイス が接続されています。2 番目のハブのポートの 1 つには、組み込みハブを 1 つ持つキーボードが接続されており、そのハブにマウスが接続されています。

図 28–1 は、ハブとプリンタの合成デバイスの例も示しています。ハブとプリンタは両方とも同じプラスチック製のケースに入っていますが、異なる USB バスアドレスを持ちます。また、図 28–1 は複合デバイスの例も示しています。キーボードとマウスの複合デバイスは、同じプラスチック製のケースに入っていますが、同じ USB バスアドレスを持ちます。この図では、1 本のケーブルが USB マウスをキーボードとコントローラの複合デバイス に接続しています。

次の表に、図 28–1 に示したデバイスの一部について、デバイスツリーパス名を示します。

Zip ドライブ 

/pci@1f,4000/usb@5/storage@1

キーボード 

/pci@1f,4000/usb@5/hub@2/device@1/keyboard@0

マウス 

/pci@1f,4000/usb@5/hub@2/device@1/mouse@1

Jaz ドライブ 

/pci@1f,4000/usb@5/hub@2/storage@3

プリンタ 

/pci@1f,4000/usb@5/hub@3/printer@1

USB デバイスとドライバ

USB デバイスは複数のデバイスクラスに分類されます。各デバイスクラスには対応するドライバがあります。1 つのクラス内のデバイスは、同じデバイスドライバで管理されます。ただし USB 仕様では、特定のクラスに属さない、ベンダー固有のデバイスも許可しています。類似した属性とサービスを持つデバイスはグループ化されます。

Human Interface Device (HID) クラスには、ユーザーが制御するデバイス (キーボード、マウス、ジョイスティックなど) が含まれます。Communication Device クラスには、電話に接続するデバイス (モデムや ISDN インタフェースなど) が含まれます。その他にも、Audio Device、Monitor Device、Printer Device、Storage Device などのデバイスクラスがあります。各 USB デバイスはデバイスのクラスを表す記述子を持っています。デバイスクラスは、そのメンバーが構成とデータ転送についてどのように動作するかを指定します。クラス情報についての詳細は、http://www.usb.org サイトを参照してください。

Solaris USB アーキテクチャ (USBA)

USB デバイスは、2 つのレベルのデバイスツリーノードとして表現されます。デバイスノードは、USB デバイス全体を表します。1 つまたは複数の子インタフェース ノードはデバイス上にある個々のUSB インタフェースを表します。特殊なケースとして、デバイスノードとインタフェースノードが 1 つのノードに結合される場合もあります。

ドライバのバインドは、互換性のある名前属性を使用することによって実現されます。詳細については、『IEEE 1275 USB binding (英語版)』の 3.2.2.1 項と『Writing Device Drivers (英語版)』を参照してください。ドライバは、デバイス全体にバインドしてすべてのインタフェースを制御することができます。また、1 つのインタフェースだけにバインドすることも可能です。たとえば、キーボードやマウスだけにバインドすることもできます。デバイス全体にバインドするドライバがベンダーにもクラスにも存在しない場合、汎用 USB マルチインタフェースドライバがデバイスレベルのノードにバインドされます。1275 バインドの 3.2.2.1 項で定義されているように、このドライバは互換名プロパティを使用して、各インタフェースに対してドライバのバインドを試みます。

Solaris USB アーキテクチャ (USBA) は、USB 1.0 および 1.1 の仕様に加え、Solaris ドライバ条件に準拠しています。USBA モデルは Sun Common SCSI Architecture (SCSA) に似ています。USBA とは、汎用 USB トランスポート層という概念をクライアントドライバに提供する薄い層のことです。

SCSA と USBA の違いは、SCSA がバスを検査するときに .conf ファイルを使用するのに対して、USB ハブドライバは自己検査ネクサスドライバであることです。

Solaris 環境における USB について

次の節では、Solaris 環境における USB について知っておく必要のある情報を説明します。

USB キーボードとマウス

公式にサポートされているのは、Sun USB キーボードとマウスデバイスだけです。また Solaris 環境では複数の USB キーボードとマウスをサポートしていないため、USB キーボードとマウスは常に 1 つだけシステムに接続するようにしてください。詳細については、次の説明を参照してください。

USB ホストコントローラとルートハブ

USB ハブは次のことを行います。

USB ホストコントローラにはルートハブという組み込みハブがあります。システムの背面パネルに見えるポートはルートハブのポートです。USB ホストコントローラは次のことを行います。

USB ハブデバイス

SPARC: USB 電源管理

SPARC システムでは、USB デバイスの保存停止・復元再開機能が完全にサポートされます。ただし、稼働中のデバイスを保存停止したり、システムの電源がオフになっているときにデバイスを取り外すことは決してしないでください。

SPARC システムで電源管理を有効にしている場合、USB のフレームワークはすべてのデバイスの電源管理を最大限に試みます。USB デバイスの電源管理により、ハブドライバはデバイスが接続されているポートの中断も行います。リモートウェイクアップ (呼び起こし) をサポートするかしないかは、デバイスによって異なります。デバイスがリモートウェイクアップをサポートしている場合は、イベントの発生時 (たとえばマウスが移動したときなど) に、接続されているハブを呼び起こします。アプリケーションがデバイスに入出力を送信した場合も、ホストシステムはデバイスを呼び起こすことができます。

リモートウェイクアップ機能がサポートされている場合、すべてのHID (キーボード、マウス、スピーカ、マイクなど)、ハブ、およびストレージデバイスは、デフォルトで電源管理されます。USB プリンタが電源管理されるのは、2 つの印刷ジョブ間だけです。

電源消費を減らすために電源管理を行う場合、まず USB 末端デバイスの電源が切断されます。次に、しばらくしてから親ハブの電源が切断されます。また、ポートに接続されているすべてのデバイスの電源が切断されると、しばらくしてからハブの電源が切断されます。最も効率的に電源管理をするためには、あまり多くのハブをカスケード接続しないでください。

USB ケーブルに関するガイドライン

市販されている USB ケーブル延長機器は絶対に使用しないでください。デバイスを接続するときは、必ずハブと充分な長さのあるケーブルを使用してください。USB デバイスを接続するときは、必ずフルレイト (12M ビット/秒) の 20/28 AWG ケーブルを使用してください。

USB 大容量ストレージデバイスの使用 (作業マップ)

作業 

説明 

参照先 

1. ホットプラグ可能な USB 大容量ストレージデバイスを追加する 

vold を使用して、ホットプラグ可能な USB 大容量ストレージデバイスを取り付ける

vold を使用してホットプラグ可能な USB 大容量ストレージデバイスを追加するには

 

vold を使用しないで、ホットプラグ可能な USB 大容量ストレージデバイスを取り付ける

vold を使用しないでホットプラグ可能な USB 大容量ストレージデバイスを追加する

2. ホットプラグ可能な USB 大容量ストレージデバイスを取り外す 

vold を使用して、ホットプラグ可能な USB 大容量ストレージデバイスを取り外す

vold を使用してホットプラグ可能な USB 大容量ストレージデバイスを取り外すには

 

vold を使用しないで、ホットプラグ可能な USB 大容量ストレージデバイスを取り外す

vold を使用しないでホットプラグ可能な USB 大容量ストレージデバイスを取り外すには

3. USB 大容量ストレージデバイスをマウントする 

vold を使用して、ホットプラグ可能な USB 大容量ストレージデバイスをマウントする

vold を使用して USB 大容量ストレージデバイスをマウントまたはマウント解除するには

 

vold を使用しないで、ホットプラグ可能な USB 大容量ストレージデバイスをマウントする

vold を使用しないで USB 大容量ストレージデバイスをマウントまたはマウント解除する

4. ホットプラグ可能な USB カメラを追加する 

ホットプラグ可能な USB カメラを追加してデジタル画像にアクセスする 

ホットプラグ可能な USB カメラを追加するには

USB 大容量ストレージデバイスの使用

Solaris 9 から、USB の CD-RW、ディスク、DVD、デジタルカメラ、Zip、Jaz、Clik!、SmartMedia、CompactFlash、および ORB などのリムーバブル大容量ストレージデバイスがサポートされるようになりました。

Solaris 環境でサポートされるデバイスについては、http://www.sun.com/io_technologies/usb.html を参照してください。

これらのデバイスは、ボリューム管理を実行している場合でも実行していない場合でも管理することができます。ボリューム管理を実行している場合のデバイス管理 については、vold(1M) を参照してください。

非準拠 USB 大容量ストレージデバイスの使用

Solaris 9 で動作するシステムに USB 大容量ストレージデバイスを接続したが、システムでそのデバイスを使用できない場合、/kernel/drv/scsa2usb.conf ファイルでこのデバイスに一致するコメントエントリがあるかどうか確認できます。推奨されている USB 大容量ストレージデバイスの一覧については、http://www.sun.com/io を参照してください。

デバイスの識別が間違っていたり、USB 大容量ストレージクラスと互換性がないとされているドライバでも、USB 大容量ストレージドライバをサポートする場合があります。scsa2usb.conf ファイルには、大容量デバイスに対応するかどうかを示す、ベンダー ID、製品 ID、およびバージョンを一覧表示した属性オーバーライドリストが含まれています。またデフォルトのデバイス属性をオーバーライドするフィールドも含まれています。このリストのエントリにはデフォルトでコメントが表示されています。特定のデバイスのサポートを有効にするために、コメントをコピーしたり削除したりすることもできます。

scsa2usb.conf ファイルの指示に従って、オーバーライド情報を使用して、特定のデバイスをサポートできるかどうか確認してください。

詳細については、scsa2usb(7D) を参照してください。

USB デバイスのホットプラグ

デバイスのホットプラグとは、オペレーティングシステムをシャットダウンしたりシステムの電源を切ったりしないで、デバイスを追加したり取り外したりすることを指します。

USB デバイスは、ホットプラグするとすぐにシステムのデバイス階層に表示されます (prtconf コマンドで確認できます)。また、デバイスが使用中でない限り、USB デバイスを取り外すとシステムのデバイス階層から消えます。

使用中の USB デバイスを取り外した場合、ホットプラグの動作は若干異なります。使用中の USB デバイスを取り外した場合、デバイスノードは残り、このデバイスを制御しているドライバはデバイス上のすべての動作を停止します。それ以降、このデバイスに発行される新しい入出力動作はエラーで戻されます。

このような場合、システムは元のデバイスを接続するようにプロンプトを表示します。使用中の USB デバイスを誤って取り外してしまった場合は、次のようにして回復します。

  1. 元のデバイスを同じポートに接続します。

  2. そのデバイスを使用しているアプリケーションを停止します。

  3. デバイスを取り外します。

元のデバイスが再びプラグインされるまで、USB ポートは使用できません。デバイスが使用できない場合は、USB ポートは次にリブートするまで使用できません。


注 -

動作中の、つまり開いているデバイスを削除すると、データの整合性が損なわれる可能性があります。デバイスを取り外す前には、必ずデバイスを閉じるようにしてください。ただし、コンソールキーボードとマウスは例外で、動作中でも移動することができます。


vold を使用してホットプラグ可能な USB 大容量ストレージデバイスを追加するには

次の手順は、vold を使用してホットプラグ可能な USB デバイスを追加する方法を示します。

  1. USB 大容量ストレージデバイスを追加します。

  2. vold を再起動します。


    # pkill -HUP vold
    
  3. デバイスが取り付けられていることを確認します。


    $ ls device-alias
    

vold を使用しないでホットプラグ可能な USB 大容量ストレージデバイスを追加する

次の手順は、vold を使用しないでホットプラグ可能な USB デバイスを追加する方法を示しています。

  1. ホットプラグ可能な USB デバイスを USB ポートに追加します。

  2. USB デバイスが追加されたことを確認します。


    $ ls /dev/rdsk/cntndnsn
    

vold を使用してホットプラグ可能な USB 大容量ストレージデバイスを取り外すには

次の手順では、vold を使用してホットプラグ可能な USB デバイスを取り外す例として、Zip ドライブを使用しています。

  1. デバイスをマウント解除します。


    $ volrmmount -e zip0
    
  2. そのデバイスを使用しているアプリケーションを実行中の場合は、そのアプリケーションを停止します。

  3. デバイスを取り出します。


    $ eject zip0
    
  4. スーパーユーザーになり、vold を停止します。


    # /etc/init.d/volmgt stop
    
  5. USB 大容量ストレージデバイスを取り外します。

  6. vold を開始します。


    # /etc/init.d/volmgt start
    

vold を使用しないでホットプラグ可能な USB 大容量ストレージデバイスを取り外すには

次の手順は、vold を使用しないでホットプラグ可能な USB デバイスを取り外す方法を示しています。

  1. スーパーユーザーになります。

  2. そのデバイスを使用しているアプリケーションを実行中の場合は、そのアプリケーションを停止します。

  3. ホットプラグ可能な USB デバイスを取り外します。

    1. デバイスをマウント解除します。


      # umount /mount-point
      
    2. デバイスを取り外します。

vold を使用または使用せずに USB 大容量ストレージデバイスをマウントする

Solaris 共通デスクトップ環境 (CDE) が動作している場合は、USB リムーバブル大容量ストレージデバイスは、CDE ファイルマネージャのコンポーネントであるリムーバブルメディア・マネージャによって管理されます。CDE ファイルマネージャについての詳細は、dtfile(1) のマニュアルページを参照してください。


注 -

この節に記載されているマニュアルページを表示するには、MANPATH 変数に /usr/dt/man ディレクトリを含める必要があります。これらのコマンドを使用するには、パスに /usr/dt/bin ディレクトリを含め、さらに CDE を実行している必要があります。また、これらのコマンドをリモートで使用する場合は、DISPLAY 変数を設定する必要があります。


次の表に、リムーバブルメディア・マネージャが CDE 環境からストレージデバイスを管理する際に使用するコマンドを示します。

コマンド 

マニュアルページ 

作業 

sdtmedia_format

sdtmedia_format(1)

デバイスのフォーマットおよびラベル付けを行う 

sdtmedia_prop

sdtmedia_prop(1)

デバイスのプロパティを表示する  

sdtmedia_prot

sdtmedia_prot(1)

デバイスのアクセス権を変更する 

sdtmedia_slice

sdtmedia_slice(1)

デバイス上のスライスを作成または変更する 

USB デバイスのフォーマットが終了すると、通常は /rmdisk/label ディレクトリの下にマウントされます。リムーバブルストレージデバイスの構成方法についての詳 細は、rmmount.conf(4) または vold.conf(4) のマニュアルページを参照してください。

デバイスノードは /vol/dev ディレクトリの下に作成されます。詳細については、scsa2usb(7D) のマニュアルページを参照してください。

USB 大容量ストレージデバイスは、ボリュームマネージャ (vold) を使用しないで管理することもできます。ボリュームマネージャを使用しないようにする方法は、次の 2 とおりあります。

次の手順は、vold を使用しないで USB 大容量ストレージデバイスを管理する方法を示しています。デバイスノードは、文字型デバイスについては /dev/rdsk ディレクトリ、ブロック型デバイスについては /dev/dsk ディレクトリの下に作成されます。詳細については、scsa2usb(7D) を参照してください。

vold を使用して USB 大容量ストレージデバイスをマウントまたはマウント解除するには

  1. すべてのリムーバブル大容量ストレージデバイス (USB 大容量ストレージデバイスを含む) について、デバイスの別名を表示します。


    $ eject -n
    .
    .
    .
    rmdisk0 -> /vol/dev/rdsk/c4t0d0/clik40    (Generic USB storage)
    cdrom0 -> /vol/dev/rdsk/c0t6d0/audio_cd   (Generic CD device)
    zip1 -> /vol/dev/rdsk/c2t0d0/fat32        (USB Zip device)
    zip0 -> /vol/dev/rdsk/c1t0d0/zip100       (USB Zip device)
    jaz0 -> /vol/dev/rdsk/c3t0d0/jaz1gb       (USB Jaz device)
  2. 上記のようにリストされたデバイス別名を使用して、USB 大容量ストレージデバイスをマウントします。


    $ volrmmount -i device-alias
    

    次の例では、USB Jaz ドライブ (/rmdisk/jaz0 ) をマウントします。


    $ volrmmount -i jaz0 
    

  3. USB 大容量ストレージデバイスをマウント解除します。


    $ volrmmount -e device-alias
    

    次の例では、USB Zip ドライブ (/rmdisk/zip0) をマウント解除します。


    $ volrmmount -e zip0
    
  4. USB デバイスを、汎用 USB ドライブから取り出します。


    $ eject device-alias
    

    たとえば、次のようになります。


    $ eject rmdisk0
    

    注 -

    デバイスのマウントが解除されていない場合、eject コマンドは、そのデバイスのマウント解除も行います。また、そのデバイスにアクセスするアプリケーションが実行されている場合は、そのアプリケーションを終了させます。


vold を使用しないで USB 大容量ストレージデバイスをマウントまたはマウント解除する

  1. スーパーユーザーになります。

  2. USB 大容量ストレージデバイスをマウントします。


    # mount -F fs-type /dev/dsk/cntndnsn /mount-point
    

    このコマンドは、デバイスが読み取り専用の場合には失敗することがあります。CD-ROM デバイスには、次のコマンドを使用します。


    # mount -F fs-type -o ro /dev/dsk/cntndnsn /mount-point
    

    たとえば、次のようになります。


    # mount -F hsfs -o ro /dev/dsk/c0t6d0s2 /mnt
    
  3. USB 大容量ストレージデバイスをマウント解除します。


    # umount /mount-point
    
  4. デバイスを取り出します。


    # eject /dev/[r]dsk/cntndnsn
    

ホットプラグ可能な USB カメラを追加するには

次の手順でホットプラグ可能な USB カメラを追加します。

  1. スーパーユーザーになります。

  2. USB カメラを差し込み、電源をオンにします。

    USB サブシステムおよび SCSA サブシステムは、カメラ用に論理デバイスを作成します。カメラが差し込まれると、/var/adm/messages ファイルにメッセージが出力されます。

  3. /var/adm/messages ファイルの出力を確認します。

    出力表示を確認すると、どの論理デバイスが作成されたかを確認でき、そのデバイスを使用してイメージにアクセスできます。出力表示は次のようになります。


    # more /var/adm/messages
    Jul 15 09:53:35 buffy usba: [ID 349649 kern.info]       OLYMPUS, C-3040ZOOM,
     000153719068
    Jul 15 09:53:35 buffy genunix: [ID 936769 kern.info] scsa2usb1 is 
    /pci@0,0/pci925,1234@7,2/storage@2
    Jul 15 09:53:36 buffy scsi: [ID 193665 kern.info] sd3 at scsa2usb1: 
    target 0 lun 0
  4. USB カメラファイルシステムをマウントします。

    ほとんどの場合、カメラのファイルシステムは PCFS ファイルシステムです。作成されたデバイス上にファイルシステムをマウントするために、ディスクを表すスライスを指定する必要があります。スライスは通常、SPARC システムでは s0、Intel システムでは p0 です。

    たとえば、Intel システムにファイルシステムをマウントするには、次のコマンドを実行します。


    # mount -F pcfs /dev/dsk/c3t0d0p0:c /mnt
    

    SPARC システムにファイルシステムをマウントするには、次のコマンドを実行します。


    # mount -F pcfs /dev/dsk/c3t0d0s0:c /mnt
    

    ファイルシステムのマウントの詳細については、第 39 章「ファイルシステムのマウントとマウント解除 (手順)」を参照してください。

    異なる PCFS ファイルシステムのマウントの詳細については、mount_pcfs(1M) を参照してください。

  5. イメージが使用可能であることを確認します。

    たとえば、次のようになります。


    # ls /mnt/DCIM/100OLYMP/
    P7220001.JPG*  P7220003.JPG*  P7220005.JPG*
    P7220002.JPG*  P7220004.JPG*  P7220006.JPG*
  6. USB カメラが作成したイメージファイルを表示します。


    # /usr/dt/bin/sdtimage &
    
  7. カメラを切り離す前に、ファイルシステムをマウント解除します。

    たとえば、次のようになります。


    # umount /mnt
    
  8. カメラの電源をオフにし、切り離します。

USB オーディオデバイスの使用 (作業マップ)

作業 

説明 

参照先 

1. ホットプラグ可能な USB オーディオデバイスを追加する 

ホットプラグ可能な USB マイクおよびスピーカを追加する 

ホットプラグ可能な USB オーディオデバイスを追加するには

2. システムの主オーディオデバイスを特定する 

システムの主オーディオデバイスを特定する 

システムの主オーディオデバイスを識別するには

3. 主 USB オーディオデバイスを変更する 

USB オーディオデバイスを取り外したり変更したりする場合、特定の 1 つのオーディオデバイスを主オーディオデバイスにすることがある 

主 USB オーディオデバイスを変更するには

4. 使用していない USB オーディオデバイスリンクを取り外す 

システムの電源がオフのときに USB オーディオデバイスを取り外すと、 /dev/audio デバイスが、存在しない /dev/sound/* デバイスを指したままになることがある

使用されていない USB オーディオデバイスのリンクを削除するには

5. USB オーディオデバイス障害に対処する 

USB スピーカの電源を再投入する必要がある 

USB スピーカ障害に対処する

USB オーディオデバイスの使用

この Solaris リリースでは、2 つの連携するドライバ、usb_ac および usb_as の実装によって、USB オーディオサポートを提供しています。オーディオコントロールドライバである usb_ac は USBA (Solaris USB Architecture) 準拠のクライアントドライバで、ユーザーアプリケーションのインタフェースを制御します。オーディオストリーミングドライバである usb_as は、再生中および録音中にオーディオデータメッセージを処理し、サンプル周波数と精度を設定し、usb_ac ドライバからのエンコーディング要求を処理します。

どちらのドライバも、USB オーディオクラス 1.0 仕様に準拠しています。

Solaris では、再生専用または録音専用の外部 USB オーディオデバイスをサポートします。オンボードの USB オーディオデバイスはサポートされません。サポートされているオーディオデータ形式については、usb_ac(7D) を参照してください。

主オーディオデバイスは、/dev/audio です。次のコマンドを使用して、/dev/audio が USB オーディオを指しているかを確認できます。


% mixerctl
Device /dev/audioctl:
  Name    = USB Audio
  Version = 1.0
  Config  = external

Audio mixer for /dev/audioctl is enabled

使用する USB オーディオデバイスを接続した後、audioplay コマンドおよび audiorecord コマンドを使用して、次のファイルにアクセスします。


/dev/sound/N

AUDIODEV 環境変数を設定するか、audioplay コマンドおよび audiorecord コマンドで -d オプションを指定して、特定のオーディオデバイスを選択できます。ただし、/dev/audio をオーディオファイルとしてハードコードしているアプリケーションでは AUDIODEV は動作しません。

USB オーディオデバイスを差し込むと、/dev/audio が使用中でない限り、自動的にそれが主オーディオデバイス /dev/audio になります。オンボードのオーディオから USB オーディオへ、および USB オーディオからオンボードのオーディオへ /dev/audio を変更する方法については、主 USB オーディオデバイスを変更するには および usb_ac(7D) のマニュアルページを参照してください。

複数の USB オーディオデバイスのホットプラグ

USB オーディオデバイスがシステムに差し込まれると、それが主オーディオデバイス /dev/audio になります。そのデバイスは、システムをリブートした後でも、主オーディオデバイスのままです。USB オーディオデバイスが追加で差し込まれた場合、最後に差し込まれたデバイスが主オーディオデバイスになります。

USB オーディオデバイスに関する障害追跡についての詳細は、usb_ac(7D) のマニュアルページを参照してください。

ホットプラグ可能な USB オーディオデバイスを追加するには

次の手順で、ホットプラグ可能な USB オーディオデバイスを追加します。

  1. USB スピーカとマイクを差し込みます。

    主オーディオデバイス /dev/audio は通常、オンボードのオーディオを指します。USB オーディオデバイスを接続した後、/dev/audio/dev/sound ディレクトリで認識される USB オーディオデバイスを指します。

  2. 作成されたオーディオデバイスファイルを確認します。


    % ls /dev/sound
    0     0ctl  1     1ctl  2     2ctl
  3. 左右の USB スピーカをテストします。


    % cd /usr/share/audio/samples/au
    % audioplay -d /dev/sound/1 -b 100 spacemusic.au
    % audioplay -d /dev/sound/1 -b -100 spacemusic.au
    
  4. USB マイクをテストします。


    % cd $HOME/au
    % audiorecord -d /dev/sound/2 -p mic -t 30 test.au
    

システムの主オーディオデバイスを識別するには

この手順は、すでに USB オーディオデバイスが接続されていることを前提としています。

  1. 現在のオーディオデバイスのリンク状態を識別します。

    たとえば、次のようになります。


    % ls -lt /dev/audio*
    lrwxrwxrwx   1 root     root         7 Jul 23 15:41 /dev/audio -> sound/0
    lrwxrwxrwx   1 root     root        10 Jul 23 15:41 /dev/audioctl -> 
    sound/0ctl
    % ls -lt /dev/sound/* 
    lrwxrwxrwx   1 root     other       66 Jul 23 14:21 /dev/sound/0 -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio
    lrwxrwxrwx   1 root     other       69 Jul 23 14:21 /dev/sound/0ctl -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audioctl
    %

    主オーディオデバイス /dev/audio は、現在オンボードのオーディオ、/dev/sound/0 を指しています。

  2. (省略可能) 新しい USB オーディオデバイスを追加します。

  3. システムの新しいオーディオリンクを調べます。

    たとえば、次のようになります。


    % ls -lt /dev/audio*
    lrwxrwxrwx   1 root     root         7 Jul 23 15:46 /dev/audio -> sound/1
    lrwxrwxrwx   1 root     root        10 Jul 23 15:46 /dev/audioctl -> 
    sound/1ctl
    % ls -lt /dev/sound/*
    lrwxrwxrwx   1 root     root        74 Jul 23 15:46 /dev/sound/1 -> 
    ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,audio
    lrwxrwxrwx   1 root     root        77 Jul 23 15:46 /dev/sound/1ctl -> 
    ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,aud...
    lrwxrwxrwx   1 root     other       66 Jul 23 14:21 /dev/sound/0 -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio
    lrwxrwxrwx   1 root     other       69 Jul 23 14:21 /dev/sound/0ctl -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audioctl
    % 

    主オーディオデバイス /dev/audio が、新しく差し込まれた USB オーディオデバイスの /dev/sound/1 を指していることがわかります。

    ここで USB オーディオデバイスを取り外しても、主オーディオデバイス /dev/audio はオンボードのオーディオには戻りません。主オーディオデバイスをシステムのオンボードのオーディオに戻す方法については、次の手順を参照してください。

    prtconf コマンドを使用して USB デバイス情報を参照して、システム上の USB オーディオデバイスを調べることもできます。


    % prtconf
    .
    .
    .
    usb, instance #0
       hub, instance #0
            mouse, instance #0
            keyboard, instance #1
            device, instance #0
                sound-control, instance #0
                sound, instance #0
                input, instance #0
    .
    .
    .

主 USB オーディオデバイスを変更するには

USB オーディオデバイスを取り外すか変更して、特定のオーディオデバイス 1 つを主オーディオデバイスにしたい場合は、次の手順を実行してください。この手順では、例として主オーディオデバイスをオンボードのオーディオデバイスに変更します。

  1. スーパーユーザーになります。

  2. すべてのオーディオアプリケーションを閉じます。

  3. オーディオドライバおよび USB ドライバが読み込まれているかを調べます。


    # modinfo | grep -i audio
    124 780e6a69   bb6e   -   1  audiosup (Audio Device Support 1.12)
    # modinfo  | grep -i usb
     48  13dba67  18636 199   1  ohci (USB OpenHCI Driver 1.31)
     49 78020000  1dece   -   1  usba (USBA: USB Architecture 1.37)
     50  12e5f1f    35f 195   1  hubd (USB Hub Driver 1.4)
     51  13ef53d   5e26 194   1  hid (USB HID Client Driver 1.16)
     54  13f67f2   1b42  10   1  usbms (USB mouse streams 1.6)
     56  127bbf0   2c74  11   1  usbkbm (USB keyboard streams 1.17)
    # 
  4. オンボードのオーディオドライバを読み込んで再接続します。


    # devfsadm -i audiocs
    

    オンボードのオーディオドライバは、Sunblade 1000 では audiocs、 Sunblade 100 では audiots です。

  5. 主オーディオデバイスのリンクがオンボードのオーディオを指していることを確認します。


    # ls -lt /dev/audio*
    lrwxrwxrwx   1 root     other        7 Jul 23 15:49 /dev/audio -> sound/0
    lrwxrwxrwx   1 root     other       10 Jul 23 15:49 /dev/audioctl -> 
    sound/0ctl
    # ls -lt /dev/sound/*
    lrwxrwxrwx   1 root     other       66 Jul 23 14:21 /dev/sound/0 -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio
    lrwxrwxrwx   1 root     other       69 Jul 23 14:21 /dev/sound/0ctl -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audioctl
    #
  6. オンボードのオーディオが主オーディオデバイスになっていることを確認します。


    % audioplay /usr/demo/SOUND/sounds/bark.au
    

    audioplay コマンドは、デフォルトでオンボードのオーディオデバイスを使用します。

  7. (省略可能) 別の USB オーディオデバイスを差し込む前に、読み込み解除できるオーディオドライバをすべて読み込み解除します。

    1. すべてのオーディオアプリケーションを閉じます。

    2. オーディオドライバ情報を表示して、オーディオドライバが読み込まれていないことを確認します。


      # modinfo | grep -i audio
       60 78048000   bb6e   -   1  audiosup (Audio Device Support 1.12)
       61 78152000  39a97   -   1  mixer (Audio Mixer 1.49)
       62 78118000   bf9f   -   1  amsrc1 (Audio Sample Rate Conv. #1 1.3)
      128 7805e000  14968  54   1  audiocs (CS4231 mixer audio driver 1.21)
      # 
    3. オーディオドライバを読み込み解除します。


      # modunload -i 0
      # modinfo | grep -i audio
       60 78048000   bb6e   -   1  audiosup (Audio Device Support 1.12)
       61 78152000  39a97   -   1  mixer (Audio Mixer 1.49)
      #

      この時点で、オンボードのオーディオドライバ audiocs は読み込み解除され、オープンすることはできません。ただし、主オーディオデバイスの /dev/audio は、アプリケーションによって開かれている場合は何も変化しません。

  8. (省略可能) USB オーディオデバイスを差し込みます。

  9. (省略可能) 新しいオーディオリンクを調べます。


    % ls -lt /dev/audio*
    lrwxrwxrwx   1 root     root         7 Jul 23 16:12 /dev/audio -> sound/1
    lrwxrwxrwx   1 root     root        10 Jul 23 16:12 /dev/audioctl -> 
    sound/1ctl
    % ls -lt /dev/sound/*
    lrwxrwxrwx   1 root     root        77 Jul 23 16:12 /dev/sound/1ctl -> 
    ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,aud...
    lrwxrwxrwx   1 root     root        74 Jul 23 16:12 /dev/sound/1 -> 
    ../../devices/pci@1f,4000/usb@5/hub@1/device@3/sound-control@0:sound,aud...
    lrwxrwxrwx   1 root     root        66 Jul 23 15:59 /dev/sound/0 -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,audio
    lrwxrwxrwx   1 root     root        69 Jul 23 15:59 /dev/sound/0ctl -> 
    ../../devices/pci@1f,4000/ebus@1/SUNW,CS4231@14,200000:sound,aud...
    % 

使用されていない USB オーディオデバイスのリンクを削除するには

システムの電源がオフのときに USB オーディオデバイスを取り外した場合には、次の手順を実行します。システムの電源がオフのときに USB オーディオデバイスを取り外した場合、/dev/audio デバイスが、存在しない /dev/sound/* デバイスを指したままになることがあります。

  1. スーパーユーザーになります。

  2. すべてのオーディオアプリケーションを閉じます。

  3. 使用されていないオーディオリンクを削除します。


    # devfsadm -C -c audio
    

USB オーディオデバイスに関する障害追跡

この節では、USB オーディオデバイスに関する問題に対処する方法を説明します。

USB スピーカ障害に対処する

ドライバを適用し、音量も上げているのに、USB スピーカから音が出ないことがあります。デバイスをホットプラグしてもこの動作が変化しないことがあります。

この問題を解決するには、USB スピーカの電源を再投入します。

オーディオデバイスの所有権に関する注意事項

オーディオデバイスを操作するときは、オーディオデバイスの所有権に関する、次に挙げる点に注意してください。

cfgadm コマンドを使用した USB デバイスのホットプラグ (作業マップ)

作業 

説明 

参照先 

1. USB デバイス情報を表示する 

USB デバイスおよびバスについての情報を表示する 

USB デバイス情報を表示する方法

2. USB デバイスの構成を解除する 

システムに物理的に接続されている USB デバイスを論理的に構成解除する 

USB デバイスの構成を解除する方法

3. USB デバイスを構成する 

以前に構成を解除した USB デバイスを構成する 

USB デバイスの構成方法

4. 論理的に USB デバイスの接続を解除する 

物理的にシステムの近くにいないときには、USB デバイスを論理的に切り離すことができる 

論理的に USB デバイスを接続解除する方法

5. 論理的に USB デバイスに接続する 

以前に論理的に接続解除または構成解除した USB デバイスを物理的に接続する 

論理的に USB デバイスを接続する方法

6. USB デバイスのサブツリーの接続を解除する 

ハブの下位階層 (または下位のツリー) である USB デバイスサブツリーの接続を解除する 

論理的に USB デバイスのサブツリーを接続解除する方法

7. USB デバイスをリセットする 

USB デバイスをリセットして、デバイスを論理的に削除し、再作成する 

USB デバイスのリセット方法

cfgadm コマンドを使った USB デバイスのホットプラグ

cfgadm コマンドを使用せずに稼働中のシステムから USB デバイスを追加または削除することができます。ただし、USB デバイスは、デバイスを物理的に削除しなくても「論理的に」ホットプラグすることができます。 この方法は、リモートで作業中に機能していない USB デバイスを無効にしたりリセットしたりする必要がある場合に便利です。cfgadm コマンドを使うと、メーカーや製品情報を含む USB デバイスツリーを表示することもできます。

cfgadm コマンドは接続点についての情報を表示します。接続点とは、動的再構成を行うことができるシステム内の特定の場所のことです。接続点は、次の要素から構成されています。

接続点は、論理と物理の両方の接続点 ID (Ap_Id) で表現されます。物理 Ap_Id は接続点の物理的なパス名です。論理 Ap_Id は物理 Ap_Id に代わるユーザーに理解しやすい ID です。Ap_Id の詳細については、 cfgadm_usb(1M) を参照してください。

cfgadm コマンドを使用すると、USB デバイスステータス情報を取得できます。

受容体の状態 

説明 

empty/unconfigured 

デバイスが接続されていない 

disconnected/unconfigured 

デバイスが論理的に接続解除されており利用不可。デバイスが物理的に接続されていても、devinfo ノードが削除される 

connected/unconfigured 

デバイスは論理的に接続されているが利用不可。devinfo ノードが存在する 

connected/configured 

デバイスは接続されており利用可能 

次の節では、cfgadmin コマンドを使用した USB デバイスのホットプラグ方法について説明します。次のすべてのサンプル USB デバイス情報は、関連した情報に焦点を合わせるために一部省略されています。

USB デバイス情報を表示する方法

prtconf コマンドを使用して USB デバイス情報を表示します。


$ prtconf
        usb, instance #0
                 hub, instance #2
                     device, instance #8
                         interface (driver not attached)
                     printer (driver not attached)
                     mouse, instance #14
                     device, instance #9
                         keyboard, instance #15
                         mouse, instance #16
                     storage, instance #7
                         disk (driver not attached)
                     communications, instance #10
                         modem (driver not attached)
                         data (driver not attached)
                 storage, instance #0
                     disk (driver not attached)
                 storage, instance #1
                     disk (driver not attached)

cfgadm コマンドを使用して USB バス情報を表示します。たとえば、次のようになります。


% cfgadm
Ap_Id                       Type         Receptacle   Occupant     Condition
usb0/4.5                    usb-hub      connected    configured   ok
usb0/4.5.1                  usb-device   connected    configured   ok
usb0/4.5.2                  usb-printer  connected    configured   ok
usb0/4.5.3                  usb-mouse    connected    configured   ok
usb0/4.5.4                  usb-device   connected    configured   ok
usb0/4.5.5                  usb-storage  connected    configured   ok
usb0/4.5.6                  usb-communi  connected    configured   ok
usb0/4.5.7                  unknown      empty        unconfigured ok
usb0/4.6                    usb-storage  connected    configured   ok
usb0/4.7                    usb-storage  connected    configured   ok

前の例で usb0/4.5.1 は、第 2 レベルの外部ハブのポート 1 に接続されているデバイスを識別します。この第 2 レベルハブは第 1 レベルの外部ハブのポート 5 に接続されており、また第 1 レベルのハブは最初の USB コントローラのルートハブであるポート 4 に接続されています。

次の cfgadm コマンドを使用して、特定の USB デバイス情報を表示します。たとえば、次のようになります。


% cfgadm -l -s "cols=ap_id:info"
Ap_Id       Information
usb0/4.5.1  Mfg: Inside Out Networks Product: Edgeport/421 NConfigs: 1 Config: 0  : ...
usb0/4.5.2  Mfg: <undef> Product: <undef>   NConfigs: 1 Config: 0  <no cfg str descr>
usb0/4.5.3  Mfg: Mitsumi Product: Apple USB Mouse NConfigs: 1 Config: 0 <no cfg str descr>
usb0/4.5.4  Mfg: NMB  Product: NMB USB KB/PS2 M NConfigs: 1 Config: 0  
usb0/4.5.5  Mfg: Hagiwara Sys-Com  Product: SmartMedia R/W  NConfigs: 1 Config: 0 : Default
usb0/4.5.6  Mfg: 3Com Inc.  Product: U.S.Robotics 56000 Voice USB Modem  NConfigs: 2 ...
usb0/4.5.7
usb0/4.6    Mfg: Iomega  Product: USB Zip 250  NConfigs: 1  Config: 0  : Default
usb0/4.7    Mfg: Iomega  Product: USB Zip 100  NConfigs: 1  Config: 0  : Default
# 

USB デバイスの構成を解除する方法

システムに物理的に接続されている USB デバイスの構成を解除することはできますが、ドライバを適用することはできません。USB デバイスの構成を解除すると、そのデバイスが prtconf 出力に表示されます。

  1. スーパーユーザーになります。

  2. USB デバイスの構成を解除します。


    # cfgadm -c unconfigure usb0/4.7
    Unconfigure the device: /devices/pci@8,700000/usb@5,3/hub@4:4.7
    This operation will suspend activity on the USB device
    Continue (yes/no)? y
    
  3. デバイスの構成が解除されていることを確認します。


    # cfgadm  
    Ap_Id                       Type         Receptacle   Occupant     Condition
    usb0/4.5                    usb-hub      connected    configured   ok
    usb0/4.5.1                  usb-device   connected    configured   ok
    usb0/4.5.2                  usb-printer  connected    configured   ok
    usb0/4.5.3                  usb-mouse    connected    configured   ok
    usb0/4.5.4                  usb-device   connected    configured   ok
    usb0/4.5.5                  usb-storage  connected    configured   ok
    usb0/4.5.6                  usb-communi  connected    configured   ok
    usb0/4.5.7                  unknown      empty        unconfigured ok
    usb0/4.6                    usb-storage  connected    configured   ok
    usb0/4.7                    usb-storage  connected    unconfigured ok

USB デバイスの構成方法

  1. スーパーユーザーになります。

  2. USB デバイスを構成します。


    # cfgadm -c configure usb0/4.7 
    
  3. USB デバイスが構成されていることを確認します。


    # cfgadm usb0/4.7
    Ap_Id                  Type         Receptacle  Occupant    Condition
    usb0/4.7               usb-storage  connected   configured  ok

論理的に USB デバイスを接続解除する方法

システムから USB デバイスを取り外し、 prtconf 出力を削除したいが、物理的にシステムの近くにいない場合、USB デバイスの接続を論理的に解除できます。デバイスが物理的に接続されているが、論理的に接続解除されている場合には、そのデバイスは使用できず、システムにも表示されません。

  1. スーパーユーザーになります。

  2. USB デバイスの接続を解除します。


    # cfgadm -c disconnect -y usb0/4.7
    
  3. デバイスが接続解除されていることを確認します。


    # cfgadm usb0/4.7
    Ap_Id                  Type      Receptacle    Occupant      Condition
    usb0/4.7               unknown   disconnected  unconfigured  ok

論理的に USB デバイスを接続する方法

次の手順を使用して、以前に論理的に接続解除または構成解除された USB デバイスを論理的に接続します。

  1. スーパーユーザーになります。

  2. USB デバイスを接続します。


    # cfgadm -c configure usb0/4.7
    
  3. デバイスが接続されていることを確認します。


    # cfgadm usb0/4.7
    Ap_Id                  Type         Receptacle  Occupant    Condition
    usb0/4.7               usb-storage  connected   configured  ok

    デバイスを利用できるようになり、システムにも表示されるようになります。

論理的に USB デバイスのサブツリーを接続解除する方法

次の手順を使用して、USB デバイスのサブツリーを接続解除します。サブツリーは、ハブの下位デバイスの階層 (ツリー) です。

  1. スーパーユーザーになります。

  2. USB デバイスサブツリーを削除します。


    # cfgadm -c disconnect -y usb0/4
    
  3. USB デバイスサブツリーの接続解除を確認します。


    # cfgadm usb0/4
    Ap_Id                  Type       Receptacle   Occupant     Condition
    usb0/4                 unknown    disconnected unconfigured ok

USB デバイスのリセット方法

USB デバイスでエラーが発生した場合は、cfgadm コマンドを使ってデバイスをリセットします。このコマンドを使うと、デバイスを論理的に削除し、再作成することができます。

  1. スーパーユーザーになります。

  2. デバイスが使用中でないことを確認します。

  3. デバイスをリセットします。


    # cfgadm -x usb_reset -y usb0/4.7
    
  4. デバイスが接続されていることを確認します。


    # cfgadm usb0/4.7
    Ap_Id                  Type         Receptacle   Occupant     Condition
    usb0/4.7               usb-storage  connected    configured   ok