Ubuntu (Ubuntu-Studio) 16.04をオーディオ用OSに仕立てる

何も聞こえなくなった
2016年5月~Document made with KompoZer

<目次>
1.はじめに
2.とりあえず何をすればよいのか
3.lowlatencyカーネルを自分でビルドする
4.リアルタイム・カーネルを自分でビルドする
5.RME Fireface UCX


1.はじめに
(1)Ubuntu_OSは、デフォルトでは
オーディオ再生に向いていない。それは、サウンドサーバ(*)(複数の音源から音声を受け取って合成してドライバに渡すソフト、既定はPulseAudio)が入っていて、それが音質を悪くしているからである(**)オーディオプリアンプには複数の入力のうち、いずれか一つの入力を選択して通す入力セレクタが必ず付いているが、2つ以上の入力をミックスするような入力セレクタは見たことがない。しかしサウンドサーバは、2つ以上の入力をミックスするようになっているのだ(例えばPCで音楽を聞きながら効果音が聞こえる)。
Ubuntu_OSでは、サウンドサーバを削除できる(あるいは休ませる)仕組みがある。サウンドサーバがなくなれば、プレーヤーとドライバの直結ができる。これができればUbuntu_OSはオーディオ再生用OSに生まれ変わる。なお、Linuxではサウンドカードのドライバはメーカーの用意するドライバではなく、ALSAになる。ALSAはほとんどのサウンドカードまたはUSB−DACに対応している。
Ubuntu_OSでわざとサウンドサーバを使う、という使い方もある。サウドサーバの色付けを楽しみたい場合である。しかし、既定のPulseAudioはまったく適しておらず、このときはレーテン シーの低いJackを使う。Jackのインストールの仕方も解説するただしUbuntu_StudioでははじめからJackが付いている)

(2)
Ubuntu_OSでは、カーネル(***)リアルタイム型あるいは ローレーテンシー型のものに取り替えできるリアルタイム型のカーネルの作り方は大変だが、ローレーテンシー型のカーネルなら簡単にインストールできる(ただしUbuntu_Studioでははじめからローレーテンシー型のカーネルが付いている)。

(3)結局、PulseAudioを削除し(あるいは休ませ)、リアルタイム型もしくはローレーテンシー型のカーネルを使い、あとはサウンドカードまたはUSB−DACに高品質のもの(価格も張るが)を選べば、それ なりの、CDプレーヤーに劣らない音質が得られるはずである。
 
(*)サウンドサーバとは、1つ 又は複数の音を集めて、サウンドドライバ(ALSAやOSS)に注ぎ入れるための貯蔵庫のようなものである。ビット数やサンプルレートの違う複数の音(各種 プレーヤーの音とか、ウェブサイトにあるYouTubeなど各種コンテンツの音とか、各種の効果音)を1つに集めて一括して扱うことのできるサウンドサー バは、一般ユーザにとっては便利なものである。サウンドサーバ? ALSA? Pulseaudioって何? という人にはこの解説書が参考になる。

(**)Pulseaudioは時 間遅延が著しく、プレーヤーから出力されるせっかくの力強い音が寝ぼけた音に変わってしまう。我々のようなオーディオ・ファンやAVファンにとっては、 はっきり言って邪魔である。しかもLinuxで使える多くのオーディオプレーヤーや動画プレーヤーは、PulseAudioを必須としていない。これらの プレーヤーからALSAに、直接音を渡すことも可能なのである。PulseAudioのメリットというか、存在価値は、(1)システム効果音を再生できる、(2)プレーヤーの「設定」を特にしなくても、既定のままで音を出すことができる、くらいなものか。

(***)リアルタイムカーネルはppa:abogani/realtime リポジトリから既成のものが簡単に入手できたが、この既成のリアルタイムカーネルはLTSのUbuntu12.04しか対応しない、一部のusb機器を認識しない、メーカー製のビデオカード・ドライバと共存できないなど問題が多 いので、できればカーネル・ソースコードをダウンロードし、自分でRT-PREEMPTパッチを当て、コンパイルして自家製のリアルタイム・カーネルを作 られることをおすすめする。それが難しい人は上記既成のリアルタイムカーネルを使ってみて、すんなりと動けば良いが、何か問題が起こればあきらめて、ローレーテンシー・カーネルを使われることをおすすめする。自家製のリアルタイム・カーネルの作り方はここを参照。


2.とりあえず何をすればよいのか
(1)
PulseAudioを眠らせる
PulseAudioを眠らせようと、 $ Pulseaudio --kill をやっても、次のコンテンツを再生するときに、ゾンビのように蘇る。これをspawnという。そこでPulseAudioが勝手に起動しないようにする。
/etc/pulse/client.confをエディタで開いて、
 ; autospawn=yes → 
autospawn=no
 ; daemon-binary=/usr/bin/pulseaudio →   daemon-binary=/bin/true
と書き換えて(セミコロンも外す)、再起動する。これでpulseaudioは自動起動しなくなる。$ pulseaudio --startをやると起動し、
$ pulseaudio --killとすると再び眠ってくれる。
ところがPulseAudioがいなくなるサウンドデバイスの認識順がリブート毎に変わってしまう。サウンドインター フェイスが1個だけならば問題ないが、複数のサウンドインターフェイスデバイスを接続している場合、リブートするたびに認識番号とそれに割り当てられているサウンドインターフェイスとの対応関係が変わってしまい、プレーヤーの出力 先がPCIサウンドカードになったり、USBオーディオ機器になったりしてしまう。PCを起動するたびにAlsaの設定画面を開いて出力先を変更しなくて済 むように認識順を固定する。固定方法はこのサイト
http://cobo4u.blog87.fc2.com/blog-entry-237.html
を参考にさせてもらった。わかりやすく書かれていて感謝します。要するにrootの権限で、/etc/modprobe.d/というディレクトリに、各サウンドカードの認識順
    options snd_usb_audio index=0
    options snd_ice1724 index=1
    options snd_hda_intel index=2
などと記述したテキストファイルを作って置けば良い。"alsa-order.conf"というファイル名がわかりやすくて良いかもしれない。そこにカードと順番を書き足す。 順番は任意。hda_intelというのはビデオカードのHDMIのドライバである。ice1724はマザーボード基板に挿し込むサウンドカードである。マザーボード内蔵のサウンドカードは、BIOSで予め無効にしておくとよい。
具体的に、USBインターフェイスをトップにもってきたいときは、
$ sudo nano /etc/modprobe.d/alsa-order.confと打って、そこに
   options snd_usb_audio index=0
   options snd_hda_intel index=1
などと書き込んでctrl oを押して上書き保存すれば良い。
$ alsamixerを叩いて音量調節Alsamixerを呼び出す(図1-1)。「F2」を押して、/proc/asound/cardsを選んで、お目当ての サウンドカードが認識されていることを確認し、Frontの音量を調節する。S/PDIF出力を使いたいならば、矢印[→][←]で"S/PDIF 0"という列に行って、キーmを叩けば"S/PDIF [オフ]"を解除できる。

<図1-1>Alsamixer
alsamixer


ALSAドライバに内蔵されたテストトーンの再生の仕方は、
$ speaker-test -Dplug:front -c2とする。再生をやめるには、Ctrl+cを押す。
任意のwavファイルをALSAで再生するには、適当なディレクトリに試聴用wavファイル(名前をsample.wavとする)を置き、
$ aplay --device=plug:front -c2 sample.wav
と打つ。


(2)Jackをインストールし設定する
ソフトウェアセンターを開いてQjackctlをインストールする。UbuntuStudioなら初めから入っている。インストールするとき「リアルタイム実効優先度の設定を有効にしますか?」と聞 かれるのでYESにする。こ れでサウンドサーバJackが自動的にインストールされる(*)。UbuntustudioではJackは初めから入っている。
「マルチメディア」又は端末からQjackctlを開き、Setupを押すとこのような設定画面になる。
<図1-2>

 
Qjackctl

"Realtime", "No Memory Lock"にチェックを入れ、Priorityは"89"にする。Periods/bufferは2がデフォルトだが、3が良いようである、ここを参考にした。

サンプルレートは再生する音源のサンプルレートに合わせることが大事。サンプルレートの違う音源(例えば96kHzの音源)を再生するならば、それに合わ せてこ の数値を96000に変える必要がある(ミスマッチのまま再生すると音質が悪くなり音飛びが起こる)。

Frames/Periodは44100Hzならこんな値にするが、88200Hzや96000Hzにするならばこの2倍にす る。
Frames/PeriodにPeriods/BufferをかけてSampleRateで割った数 がレーテンシーとなる。この設定では2562/44100=11.6msec。この11.6msecと いう数字はかなり低く、普通はもっと大きいほうが良い。数字が小さいとカリカリした音になる。そこで Frames/Periodを大きくしたり、Periods/Bufferを増やしたりする。

Interfaceはお目当てのサウンドインターフェースのアドレスhw:0とかhw:1とか指定するようにする。右の">"を押すと参照できる (**)。

なお音質目的でないなら、
pulseaudioとjackdとの連携もできる。要するに、pulseaudio-module-jackというパッケージをインストールし、QjackctlのSetup→options→execute scrip after startupという欄に、
pacmd load-module module-jack-sink;
という一行を追加することである。
連携ができたら、起動の順番はqjackctlとPulseaudioのどちらを先にスタートしてもよい。終了時は、Pulseaudioを停止($ pulseaudio  --kill)してから、qjackctlを停止する。
flashplayerはJackに接続できないと思っていたが、Jackのサイトflashplayerを再生する方法が載っていたので、やってみたら成功した。

Jackdを手動で立ち上げるのは面倒なので、Linux起動と同時に自動起動するようにできる。それにはjack を『設定マネージャ』→「セッションと起動」→「自動開始アプリ」のなかに入れるとよい。書き込むコマンドは、$ /usr/bin/jackd - そのあとの引数は~/.jackdrcを参照、私の場合は$ /usr/bin/jackd -P89 -m -dalsa -dhw:0 -r96000 -p256 -n3 -Pこれでうまく行かないときは、$ qjackctl -s

jackdのリアルタイムスケジュールのセッティングをする。まだ勉強不足でよく理解していないが、Jackのサイトに 解説があったので、このとおりやってみた。/etc/security/limits.d/audio.confというファイルがあるので、@audio - rtprio という行の番号を95から99に変え、@audio memlock unlimitedという一行を加える。
#@audio -nice -19のコメントを外す。そして今のユーザをaudioグループに入れる。$ sudo usermod -a -G audio ユーザ名、そしてログアウトする。

(*)Alsa直結の音とjackdを通した音を聞き比べた。jackdのレーテンシーは34.8msecに設定。Alsa直結のほうが音は空間に良く広がる。しかしサ ラサラした感じで個々の音は比較的弱い。jackdを通すと、より平面的になり、個々の音は強くなる。ソロ楽器が良い感じでfeatureされる。 jackdを通すほうが、前世紀のアナログ録音ぽく聞こえ、直結のほうが現代的な精密な録音に聞こえる。これは好みである。


(**)Jackサーバ(Jackd)では,出力デバイスをhw:0, hw:1と言った番号で認識し ている。

(3)ローレーテンシー・カーネルを実装する。
Ubuntu 12.04以後なら
ローレーテンシー・カーネルはデフォルトのリポジトリに入っている。UbuntuStudio ならローレーテンシー・カーネルは初めからインストールされているので、そのまま使えて便利。
オーディ用OSはこれで仕立てられた。(^^)

以下はオプションである。

3.ローレーテンシー・カーネルを自分でビルドする
どんなUbuntuにも対応し、機能的にも優れたリアルタイムカーネルをゲットするには、ここに書いたように、自分でカーネルとリアルタイムパッチRT_Preemptをダウンロードして、自分でコンパイルするとよい。それが難しい人は、ローレーテンシー・カーネルが良いだろう。
以下、専門的になるが、好みの機能を持った、または不要な機能を削ったlowlatencyカーネルの作り方を説明する。元となるカーネルソースコードをまずダウンロードしなければいけない。Ubuntuから入手できるカーネルソースコードなら、Ubuntu用のパッチも当たっているし、安心して使えそうだが、Ubuntu12.04でsynapticを使ってダウンロードしたlinux-sourceはコンパイル時にエラーが出ることが多い。そこでKERNEL.ORGから汎用カーネル(色付けされていないという意味でバニラ・カーネルという)ダウンロードすることにした。カーネル再構築の解説はたくさんあり、そのとおりにやったらできる。特にこの解説が参考になった。

(3−1)コンパイル環境の整備
# apt-get install build-essential kernel-package libncurses-dev libqt3-mt-dev (Ubuntu 12.04)
# apt-get install build-essential kernel-package libncurses5-dev libqt4-dev (Ubuntu 13.04)

(3−2)まず、KERNEL.ORGから最新のソースコードをダウンロードする。このカーネルソースコードはUbuntu やFedoraになる前のバニラ・カーネルである。Ubuntu 12.04用なら3.2.45がエラーなしで使える(3.2.46はエラーが出て使えなかった)。ダウンロード先は任意に設定できるが、例えばホームフォルダとする。linux-3.2.45.tar.bz2という圧縮ファイルができている。

(3−3)ソースコードの展開 圧縮ファイルを$ tar xfjで展開するフォルダlinux-3.2.45ができる。$ cdでその中に入ると、Makefileがあるのでそれを開くと、
VERSION = 3
PATCHLEVEL = 2
SUBLEVEL = 45
EXTRAVERSION =
という表示がある。つまりこのカーネルのバージョンが3.2.45であることがわかる。EXTRAVERSION=に自分で識別しやすい枝番号やニック ネームを書き入れておく、例えば-lowlatency。こうすると、OSを起動するときの目印になりわかりやすい(この番号やニックネームがgrubの起動画面に出てくるので)。


(3−4)カーネルのコンパイル
/bootの下にある現在使っているカーネル(generic でもlowlatencyでもよい)の設定ファイルを、
$ cp /boot/config-最新番号 .config というコマンドを使って、フォルダlinux-source-3.2.45の中にコピーする。$ make oldconfigをして、現在使っているカーネルの設定内容をこれから作るカーネルに反映させる。$ make xconfigで本番のコンパイル作業に入る。まず自分特製のlowlatencyカーネルを作ろう。lowlatencyカーネルの要件についてはここを参考。

確認点:(1)Enable the Block LayerのI/Oスケジューラのデフォルトを[cfq]ではなく、[deadline]にすること、(2)Processor type and featuresのプリエンプション・モデルをLow- Latency desktopにすること、(3)
Processor type and featuresのタイマー周波数を1000Hzにすること、である。これらをxconfigを使って書き換える。

xconfigをsaveし、quitして、フォルダlinux-source-3.2.45を/usr/srcに移動させ、その中に入り、# make-kpkg --initrd --revision=20130601(←目印となる好きな番号を入れる) kernel_image kernel_headers というコマンドを打ってカーネル・イメージファイルとヘッダーファイルを作成する。これで/usr/srcにlinux-image- 3.2.45_20130601_amd64.debと、linux-headers- 3.2.45_20130601_amd64.debいうファイルが作られる。2〜3時間かかる。

(3−5)カーネルのインストール
できた
linux-image-3.2.45_20130601_amd64.debと、linux-headers-3.2.45_20130601_amd64.debとを# dpkg -iでインストールする。これで再起動する。 再起動後、もしGrubメニュー画面のトップに別のLinux_OSがあるならば、そのLinux_OS に入って、$ sudo update-grub2をして再起動する。これでlowlatencyカーネルが1つ追加されていることが確認できる。もし失敗すれば、起動するときに 「カーネル・パニック」の表示が出るので、諦めて、他のカーネルで再起動し、(7-8)に従って失敗したカーネルを削除する。

(3−6)Apparmor-compatibilityパッチ(カーネル3.2の場合)
作ったカーネルでUbuntuを立ち上げると、下の(7-3)に書いたように
Apparmor関連の警告が出る。Kernelそのものは十分使えるが、Securityに関係する警告なので放置するのは気持ちが悪い。そこでコンパイルする前に、(7-3)に書いたとおりApparmor-compatibilityパッチを当てたほうが良い。カーネル3.4以後ではApparmor-compatibilityパッチは、UBUNTU-SAUCE-AppArmor.....という名前になっているのでこれらを当てる。当 てたら(6-4)に書いた$ make oldconfigをするときにEnable AppArmor 2.4 compatability (SECURITY_APPARMOR_COMPAT_24) [Y/n/?] (NEW) と聞かれるので、yと答える。$ make xconfigでSecurity OptionsのEnable AppArmor 2.4 compatibilityにチェックが入ったことを確認する。

4.
リアルタイム・カーネルを自分でビルドする
(4−1)
ppa:abogani/realtimeというリポジトリから既成のリアルタイムカーネルを持ってくる方法は楽だが、現在(2013_June時点)、LTSのUbuntu12.04に対応するリアルタイムカーネルは用意されているが、Ubuntu12.10やUbuntu13.04に対応するリアルタイムカーネルは提供されていない。しかもカーネルの機能を省略しているのか、特定のデバイス(例えば特定機種のオーディオ・ インターフェィス)を認識しないことがある。例えばUbuntu12.04のLowlatency_kernelは私の FireFace_UCXを認識するが、上記リポジトリから入手したUbuntu12.04用のリアルタイムカーネルは認識しない。proprietaryなビデオドライバのインストールも拒否される。いつ対応するのか予測もつかない。

(4−2)そこで、UbuntuまたはKERNEL.ORGからカーネル・ソースコードを入手して、自分でリアルタイム・パッ チRT-PREEMPT_Patchという)を当てることができたら超便利である。UbuntuのデスクトップPCとしての機能は、いま使っているgeneric(またはlowlatency)kernelの機能をそのまま引き継ぐことができる。

上の(3-2)(3-3)と同じ方法でフォルダlinux-3.2.45を作る。$ cdでそのフォルダに入る。ダウンロードしたlinuxのversionは、Makefileに書かれているので確認できる。VERSION = 3, PATCHLEVEL = 2, SUBLEVEL = 45である。MakefileのEXTRAVERSION=に自分で識別しやすい記号、例えば-preemptを書き入れておけば、OSを起動するときの目印になりわかりやすい。そしてkernelのversion-と同じversionRT-PREEMPT_Patch (patch-3.2.45-rt66)をここから入手してホームフォルダの下に置く。linux-3.2.45フォルダの中に入って、パッチを当てる。コマンドは、$ bzcat ../patch-3.2.45-rt66.patch.bz2 | patch -p1である。一瞬にしてパッチがあたる。

(4−3)ただこのようにして作ったカーネル3.2でUbuntuを立ち上げると、起動画面に "Warning ...... (Kernel needs apparmor 2.4 compatibility patch)"という警告(Warning)がたくさん出る。apparmorの compatibilityパッチを当ててくださいと言っている(*)。boot.logを調べると37個も警告が出ていた。apparmorとは一体何ものであるのかはセキュリティの関係らしいがここでは省 略する。ここのApparmorのサイトのSource code, UserspaceのところにあるCurrent stable release のtar.gzを取ってくる。それを解凍すると、apparmor-2.8.1 というフォルダができるので、その下の kernel-patches 、その下の 3.2というフォルダを開く。その中に入っている3つのファイル
0001-AppArmor-compatibility-patch-for-v5-network-controll.patch
0002-AppArmor-compatibility-patch-for-v5-interface.patch
0003-AppArmor-Allow-dfa-backward-compatibility-with-broke.patch
がパッチ ファイルである。
フォルダlinux-3.2.45の中に入ってコマンド$ patch -p1 < ../各パッチファイル、で1つずつパッチを当てていく(**)RT-PREEMPT_Patch を先に当ててからこのApparmor-compatibilityパッチを当ててもよいし、その逆でも良い。このApparmor-compatibilityパッチを当ててカーネルを作って、Ubuntuを起動して、boot.logを調べると、起動時apparmor関係の警告数はゼロになっていた。
(*)多分Ubuntu から落としてくるlinux sourceならapparmorのパッチがすでに当たっていると思うが、私はバニラ・カーネルを使ったので、自分で当てないといけないようである。
(**)ただしこれはカーネル3.2の話である。カーネル3.6ではcompatibilityパッチの名前はなく、そのかわり、同じフォルダのkernel-patches 、その下の 3.6というフォルダUBUNTU-SAUCE-AppArmorなどという名前のパッチが3つあるのでこれらを当てる。カーネル3.8(Ubuntu13.04)に対応するApparmorパッチはまだできていないようであるが(2013年7月現在)、強引に3.6用のパッチを当てたらうまく行った。(4-6-2)に詳しく書いた。

(4−4)/bootの下にある現在使っているカーネル(generic でもlowlatencyでもよい)の設定ファイルを、ディレクトリlinux-3.2.45の中にコピー$ cp /boot/config-最新番号 .config して、$ make oldconfigをして、現在使っているカーネルの設定内容をこれから作るカーネルに反映させる。このとき
Preemption Model
> 1. No Forced Preemption (Server) (PREEMPT_NONE)
  2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
  3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW)
  4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)
  5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)
choice[1-5]:
と聞かれるので5を選択する。

Enable AppArmor 2.4 compatability (SECURITY_APPARMOR_COMPAT_24) [Y/n/?] (NEW) と聞かれるので、yと答える。


いよいよ$
make xconfigでコンパイル作業に入る。RT_PREEMPT HOWTOを参照すると、$ make xconfigをしたときにRealtime kernelのためにやっておきたい設定事項があり、それは、(a)Processor type and featuresのHigh Resolution Timer support (*)をオンにすること、(b)Processor type and featuresのプリエンプション・モデルをFully Preemptible kernel (RT)にすること、(c)Processor type and featuresのタイマー周波数を1000Hzにすること(d)Power manegement and ACPI optionsの下のACPI Supportの下の階層にあるサブモジュールのチェックを全部外すこと(**)、(e)Kernel hackingの下の階層のチェックを全部外すこと、(f)Enable the Block LayerのI/Oスケジューラのデフォルトを[deadline]にすること、 である。それと(4-3)の関連で、(f) Security OptionsのAppArmor supportにチェックが入り、Enable AppArmor 2.4 compatibilityにチェックが入り、Default security module がAppArmorになっていることを確認する。

(*)
High Resolution Timer supportのある場所はkernel-3.2ではProcessor type and featuresの下だが、kernel-3.8ではGeneral setup > Timers subsystemの下である。
(**)RT_PREEMPT HOWTOによれば「ACPI(電源管理)サポートを一括して外すと高精度タイマーが使えなくなるので、ACPI Supportの一括チェックは残し、その下の階層にある"fan", "processor", "button"などのサブモジュールのチェックを全部外すとよい」と書かれている。実は、ACPIサポートの一括チェックを外してカーネルを作ったことがあり、このときはACPIが全く使えなかった、シャットダウンしても電源オフにならず、サスペンドも出来なかった。ACPI Supportの一括チェックを入れて、その下層のチェックを全部外してカーネルを作ったら、シャットダウンしても電源オフになるし、サスペンドもできるようになった。

このほかに、応答速度を速めるため有効な設定があるようなのでそれに従う。
ここも参考になる。例 えば電源管理ではハイバーネートを使わないのでチェックを外す、私のCPUは低発熱シングルコ アなのでマルチコア&HT対応の設定やCPU周波数管理は不要と判断し、Processor type and featuresのSymmetric multi-processing supportのチェックを外す、電源管理のCPU frequency scalingのチェックも外すGeneral Setup > Control Group SupportのCpuset supportのチェックを外す。実際やってみたら、プラセボ効果なのかもしれないが、動きが速くなった感じである(*)。

(*)私のCPUは低発熱シングルコ アなのでマルチコア&HT対応のチェックやCPU周波数管理のチェックを外したが別に持っているクワッドコアCPU(インテルのコアi5, Sandy_bridge)のUbuntu13.04に対しても、まったく同じ設定で、つまりマ ルチコア 対応やCPU周波数管理のチェックを外した設定でリアルタイムカーネルを作ったことがある。何ら問題なく動作した。CPUは1つを除いて休止状態になり、 シングル CPUとして動作している($ cat /proc/cpuinfoで確認)。音質は良いと思うので、オーディオ諸子はトライされてみたらどうだろう。オーデイオを聞かないときは、マルチコア CPUの全機能を活かすために普通のgenericカーネルを立ち上げればよいだけのことである。

(4−5)xconfigをsaveしてquitすると、ディレクトリlinux-3.2.45を、/usr/src/の下にコピーまたは移動し、その中に入って、# make-kpkg --initrd --revision=20130605(←目印となる好きな番号) kernel_image kernel_headers をする。

長時間のコンパイルが終わるとlinux-image-3.2.45-preempt_20130605_amd64.debと、linux-headers-3.2.45-preempt_20130605_amd64.debという2つの.debファイルができているので、それぞれ# dpkg -iでインストールする。再起動する。

再起動後、もしGrubメニュー画面のトップに別のLinux_OSがあるならば、そのトップの
Linux_OSに入って、$ sudo update-grub2をして再起動する。新しいカーネルでUbuntuを起動し、確認のため$ uname-rをすると、「3.2.45-preempt-rt」が現れた。$ aplay -Lをすると、オーディオ・ インターフェィス FireFace_UCXを認識している! やたー☆

(4−6)Kernel 3.8 (Ubuntu13.04)のビルド
(4−6−1)Ubuntuのlinux-sourceを使う方法(非推奨)
Synapticでlinux-source-3.8.0をダウンロードする。/usr/srcの下にフォルダlinux-source-3.8.0と
linux-source-3.8.0.tar.bz2のリンクができている。そのリンクlinux-source-3.8.0.tar.bz2に対して# tar xjfをすると、フォルダlinux-source-3.8.0の中が上書きされるようである。上書きされたフォルダlinux-source-3.8.0に対して、# chmod a+x -Rv linux-source-3.8.0をして実行権限を付与する。フォルダlinux-source-3.8.0の中に入ってMakefileを読むとカーネルバージョンが3.8.13であることがわかる。ここから対応するRT-Preemptパッチであるpatch-3.8.13-rt13.patch.bz2を取ってきて、フォルダlinux-source-3.8.0に対して# bzcat ../patch-3.8.13-rt13.patch.bz2 | patch -p1をしてパッチを当てる。あとは(4-4)(4-5)と同じことをしてリアルタイムカーネルを作る(*)。
(*)実際Ubuntu 13.04でやってみたら、一回だけうまく行った。しかしその後Xubuntu 13.04でやってみたが、何度やっても失敗した。Ubuntuのlinux-sourceを使う方法は諦めた。

(4−6−2)バニラ・カーネルを使う方法(推奨)
こちらのバニラ・カーネルを使う方法が成功率は高いようである。Ubuntu13.04採用のカーネル3.8をビルドしたいところだが、カーネル3.8に対応するApparmorパッチがまだリリースされていない。なのでやむを得ずカーネル3.6にダウングレードする。上の(4-2)〜(4-5)と全く同様にできる。いままでうまく行った例はlinux-3.6.10とpatch- 3.6.10-rt22の組み合わせである(これ以外でも成功する組み合わせは多くあると思う)。

ApparmorのサイトのSource code, UserspaceのところにあるCurrent stable release: apparmor-2.8.1.tar.gzを解凍してできるフォルダの下のkernel-patches 、その下の 3.6というフォルダ
0001-UBUNTU-SAUCE-AppArmor-Add-profile-introspection-file.patch
0002-UBUNTU-SAUCE-AppArmor-basic-networking-rules.patch
0005-UBUNTU-SAUCE-apparmor-Add-the-ability-to-mediate-mou.patch
という3つのパッチがある(*)。これらのパッチを当てないでカーネルを作るとコンピュータとして動作はしたがApparmor関連の警告が出た。そこでこれらのパッチを当てるとノーエラーで起動したパッチを当てる個別の理由はよくわからない。
(*)
他に 0003, 0004, 0006という番号のついたパッチがあるが、これらのパッチは当てないほうがよい(当てたら起動時カーネル・パニックになった)。

カーネル3.8
に対応するApparmorパッチがまだリリースされていないのだが、linux-3.8.13とpatch- 3.8.13-rt14の組み合わせを使い、Apparmorの3.6のフォルダにある前記0001, 0002, 0005のpatchesをカーネル3.8.13に強引に当ててカーネルを作り、起動してみたら成功した(*)。
(*)この方法は自己責任になる。
上の0001のパッチを当てるだけでEnable AppArmor 2.4 compatabilityにチェックが入ったので、0002と0005は必要ないかもしれないが、0002-UBUNTU-SAUCE-AppArmor-basic-networking-rules.patchを当てたら「Hunk #1 succeeded at 747 (offset 2 lines)」などという表示が出た。これはversion違いのためパッチを当てる行がずれていたので、ずらして当てましたということである。しかしfailedという表示は一度も出なかったので、一応パッチは正しくあたったと思う。0005-UBUNTU-SAUCE-apparmor-Add-the-ability-to-mediate-mou.patchを当てた時も、Hunkの警告が出たが、全部succeededだった。実際、3つのpatchesをカーネル3.8.13に当ててコンパイルしたが、問題なく働いた。


(4−7)自分でビルドした
リアルタイムカーネルの下では、Nvidiaのproprietaryなビデオドライバも問題なく動作した。今までのaboganiの既成リアルタイムカーネルは、proprietaryなビデオドライバを拒否していたのである。aboganiの既成リアルタイムカーネルは欠陥だらけであることがわかった。これでもうppa:abogani/realtimeリポジトリとは「さよなら」し、自分で最新のリアルタイムカーネルをビルドしていくことを決意した(^^)v

(4−8)これでRT-Preemptカーネルと、いままでのGeneric(またはLowlatency)カーネルとが共存し、OS起動時に好きな方を選択できる状態になるが、RT-Preemptカーネルの番号のほうが常に大きいので、Grubは番号で判断してRT-Preemptカーネルを起動メニューのデフォルトにしてくれるようである。古くなったカーネルは、場所をとるので全部削除しても良いし、1〜2個残してあとを削除してもよい。
$ dpkg -l | grep linux-image
$ dpkg -l | grep linux-headers
$ sudo apt-get remove --purge linux-image-削除したいカーネルの番号
$ sudo apt-get remove --purge linux-headers-削除したいカーネルの番号


(4−9)自家製リアルタイム・カーネルをいつも最新版に更新していることが好ましいが、これは手動でチェックするしかない。ここRT -PREEMPT_Patchが最新の-rt番号になっているかどうかを適時チェックする。ただし同じカーネルversionかせいぜい隣のversionの範囲内で行うべきでlinux-3.2からlinux-3.8 に更新するのは良くないと思う。新しい-rt番号が出ていればそのRT -PREEMPT_Patchと、それに対応するversionのlinux-kernelとApparmorのパッチをダウンロードして、また同じことを行う。パッチの更新を自動的にチェックしてくれるソフトQuiltもあるが、コマンドラインであり、使い切れてない。


5.RME Fireface UCX(自分の防備録)
サウンド・インターフェースRME Fireface UCXを手に入れ、これをDDC & DACに使った。
(1)USB接続
Linuxで使うならばIEEE1394ケーブルで接続するのが本筋と思うが、ドライバ(FFADO)がまだRME Fireface UCX対応していない(平成25年夏の時点)。仕方なく、RME Fireface UCXをusbケーブルでつないだ。ドライバは既定でALSAになるが(Linuxの仕様)、ALSAがusb接続の RME Fireface UCXを認識してくれないという、とんでもない事態が起こった。これでは入口で立ち止まりである。今までSOtM, EDIROL, クリエイティブ, オンキョーなどサウンド・インターフェースを使ってきたが、どれもあっさり認識していたのだ。

RMEのサイトを調べると、どうやらクラス・コンプライアント(CC)・モードにしないと、使えないようである。Fireface UCXを クラス・コンプライアント・モードにして、無事に音が出た。

(2)
IEEE1394接続
ffadoドライバーを使う、本格的な接続方法である。
ffadoドライバーがあればffadoミキサーも使えるので、サウンド・インターフェース内部クロックを使うかOSのクロックを使うかを選択できるし、いろいろと調整できる。
(2−1)前準備
参考サイト

http://gitter.matrix.jp/voyage-mpd-main/setting-up-ffado-on-voyage-mpd/98/setting-of-ffado-and-jackd-for-ff400/

$ lsmod | grep firewire
firewire_ohci          32483  0
firewire_core          59103  41 firewire_ohci
crc_itu_t               1651  1 firewire_core

$ ls -la /dev | grep fw
crw-------   1 root root    251,   0  6月  9 07:47 fw0
crw-------   1 root root    251,   1  6月  9 07:47 fw1
↑rootしかアクセスが許可されていない。

IEEE1394インターフェイスへのアクセス許可設定をする。 /etc/udev/rules.d に設定ファイルを作成する。 ファイル名は任意で構わないが、上記のサイトに従って、 65-firewire.rules として編集する。

$ sudo nano /etc/udev/rules.d/65-firewire.rules
KERNEL=="fw0", OWNER="root", GROUP="audio", MODE="660"
KERNEL=="fw1", OWNER="root", GROUP="audio", MODE="660"
SUBSYSTEM=="firewire", GROUP="audio"
を書き入れて再起動。

$ ls -la /dev | grep fw

crw-rw----   1 root audio   251,   0  6月  9 14:12 fw0
crw-rw----   1 root audio   251,   1  6月  9 14:12 fw1
↑このようにaudioグループで読み書きできるようになった。
ffado-toolsというパッケージをインストールして、

# ffado-test ListDevicesと打って
=== 1394 PORT 0 ===
  Node id  GUID                  VendorId     ModelId   Vendor - Model
   0       0x000a350371575723  0x00000A35  0x00101800   RME - unknown
   1       0x0001b7000007b7d6  0x000001B7  0x00000000   Linux Firewire -
が出たらOK。

#  grep  .  /sys/bus/firewire/devices/fw*/*_name
/sys/bus/firewire/devices/fw0/model_name:Juju
/sys/bus/firewire/devices/fw0/vendor_name:Linux Firewire
/sys/bus/firewire/devices/fw1.0/model_name:Fireface UCX
/sys/bus/firewire/devices/fw1/vendor_name:RME!

(2−2)FFADOを設定する。
FFADOドライバがRME Fireface UCXに対応するまでお預けとする。

FFADOのサイトを時々覗いていると、2013年6月21日
Jwoitheさんのこんなメッセージがアップされていた。RMEオートスラリアの好意でFireFaceUFXが入手できた。ドライバの開発は早まるだろう。

"Thanks to RME, their Australian distributor and project donations, we now have a Fireface UFX. This will be used to extend the RME driver to support the newest generation of RME's interfaces (the UFX and UCX). As always there's no ETA but it's hoped that basic streaming will be brought up fairly quickly. At this stage the UFX will be more easily supported because we don't currently have a UCX. This may of course change in the future."




トップぺージに戻る


UbuntuをMPD化してリモコン可能に

Ubuntu 12.04を動画プレーヤーに仕立てる

Ubuntu 12.04をDLNAホームサーバーに仕立てる

Ubuntu 12.04で動画配信サービスHuluを堪能する


直接メールをお受けします。メールをお送り下さるときは、こちらにお願いします。