Linux1

今回はLinuxサーバ機で音楽を鳴らすというお題目です。
実はLennyの時代に一度行っていたのですが、ハードウェア老朽化により機器交換となり、現バージョンのWheezyで動かす場合の備忘録です。
※某所で館内放送を使い、Linuxサーバ機で時報(業務開始、お昼休み、業務終了)を鳴らしたり、BGMを流したりしています。

目的:Linuxサーバ機でMP3やWAV音源の音楽を鳴らす。また、インターネットラジオの受信方法も合わせて記載します。

 ハードウェア shuttle製XS35 V2

http://global.shuttle.com/news/productsDetail?productId=1487
※このマシンはファンレスでCPUがAtom D525(1.8GHz)ですので、そこそこ使えます。…というか、SSDを搭載すると可動部品が無くなるので、マイクロサーバとしては優秀ですが、以下の点に注意が必要です。

○Realtekのr8168というギガNICを搭載しています。このNICはLinuxのインストーラーが誤認識するので、OSのインストール後に手動でドライバーの再インストールが必要です。
※誤認識していてもなんとなく動くのでやっかいです(苦笑)。

○ファンレスなので夏場に室温が35℃を超えるような場合にはちょっと辛くなります。この際には、USB扇風機等を使い強制空冷する事をお勧めします。

 Linux

Debian 6.0 GNU Linux Wheezy  kernel 3.2.0-4-686-pae

 NICのドライバーをインストールする準備

aptitude install vim linux-headers-3.2.0-4-686-pae make

RealtekのWebサイトより最新のドライバーをダウンロードして、/usr/srcに置きます。
※2015/03/09現在は8.039.00が最新です。
【追記】2016/08/10現在は8.042が最新です。

tar xvfj r8168-8.039.00.tar.bz2
cd r8168-8.039.00
./autorun.sh

ドライバーのインストールが始まります。もし、SSHで接続していても大丈夫です。結構時間がかかりますが、気長に待って下さい。

Check old driver and unload it.
rmmod r8168
Build the module and install
Warning: you may need to install module-init-tools
See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt
DEPMOD 3.2.0-4-686-pae
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Completed.

プロンプトが戻ってきてインストール終了です。再起動しましょう。
注意:kernelのアップデート等でinitrdを再作成した際には、必ず上記NICのドライバーも再インストールして下さい(自動でできる方法もあるみたいですが…)。

再起動後、

# dmesg | grep r8
[    2.612289] r8168 Gigabit Ethernet driver 8.039.00-NAPI loaded
[    2.612418] r8168 0000:02:00.2: setting latency timer to 64
[    2.612565] r8168 0000:02:00.2: irq 43 for MSI/MSI-X
[    2.638595] r8168: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[    2.638626] r8168  Copyright (C) 2014  Realtek NIC software team <nicfae@realtek.com>
[   10.707096] r8168: eth0: link up

と表示されれば正常に新しいドライバーがインストールされています。

 音楽再生用のプレーヤーをインストール

サーバ機の場合にはGUI環境は無い事の方が多いので、CUI環境で使うよう、テキストベースのプレーヤーをインストールします。

aptitude install alsaplayer-text alsa-base

インストール後、プレーヤーの初期化をします。
※これはインストール直後に1度行えば再起動しても有効です。
※Linuxカーネールでちゃんと認識しているのに音が出ない…という時は、この初期化を忘れている場合が多いです。Wheezyではalsaconfというコマンドはなくなりました。

# alsactl init
Found hardware: "HDA-Intel" "Intel CedarTrail HDMI" "HDA:111d76d1,12974012,00100107 HDA:80862880,80860101,00100000" "0x1297" "0x4012"
Hardware is initialized using a generic method

それでは音楽を再生してみましょう。
本体のスピーカージャックにイヤフォンかヘッドフォンを接続します。
何かmp3の音源ファイルを用意して下さい。

alsaplayer sample.mp3

で無事音楽が流れてくれば成功です。音量が大きい時には音量調整ができます。
※音量パラメータは0~1.0で、私の場合は0.4位が丁度良かったです。詳しくはmanをご覧下さい。

alsaplayer sample.mp3 -l 0.4

最後にインターネットラジオを受信する方法です。
.plsというフォーマットのファイルを用意します。中身はこんな感じです。

Windowsのiniファイルみたいです。
このファイルは簡単に取得出来ます。
まずは、 http://www.shoutcast.com/ へ行き、画面左のメニューより気に入ったジャンルを選んで下さい。
画 面の右側にインターネットラジオ局が表示されますので、右向き三角マークで視聴が出来ます。その右側にあるダウンロード・ボタンをclickすると、 Winamp M3U XSPF と3択が出ますので、一番上の Winamp を選ぶとplsフォーマットのファイルがダウンロードできます。

alsaplayer tunein-station.pls -l 0.4

このplsファイルをプレーヤーに指定するとインターネットラジオ局につながります。Bitrateが256な局を選んでみて下さい。音質も素晴らしくBGMとしては申し分有りません。

■以上、駆け足で書いてみましたが、Linuxサーバ機から、がんがん音楽が流れてくるのはなんだか変な感じがします。マシン負荷も0.1程度なので本業務にも問題にならないと思います。こういう事をする人は少ないと思いますが、誰かの参考になれば幸いです。


 追記 2016/01/06

新しいshuttleのベアボーン機(DS57U)にDebian 8.0 Jessieをインストールしました。
http://shuttle-japan.jp/ds57u/
上記の手順では音が出なかったので追記です。
※Debian 9.0 stretch でも、同様の手順で音がでるようになります。
※DS57UのNICはインテル製なので、NICドライバーの再インストールは必要ありません。

インストールは、

aptitude install alsa-utils alsaplayer-text

で、最低限のモジュールはインストールされます。

# alsactl init
Found hardware: "HDA-Intel" "Intel Broadwell HDMI" "HDA:80862808,80860101,00100000" "0x1297" "0x4028"
Hardware is initialized using a generic method

初期化が正常に完了しているようですが、実はこの状態では音が出ません。MP3ファイル等を再生しようとすると、このようなメッセージが表示されます。

ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
snd_pcm_open: No such file or directory (default)
Failed to initialize plugin!
Failed to register plugin: /usr/lib/alsaplayer/output/libalsa_out.so
Failed to load output plugin "alsa". Trying defaults.
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
snd_pcm_open: No such file or directory (default)
Failed to initialize plugin!
/usr/lib/alsaplayer/output/libalsa_out.so failed to load
NOTE: THIS IS THE NULL PLUGIN.      YOU WILL NOT HEAR SOUND!!

調べてみると、2つの音源デバイスがあってデフォルトはHDA Intel HDMIが使われているようです。しかし背面のコネクターはアナログ用なので、もう一つの音源デバイスであるALC662 rev3 Analogをデフォルトにしなくてはいけません。

/etc/modprobe.d/default.conf というファイルを新しく作成して、この一行だけ中に書いておきます。
※これはIndex=0が最優先(デフォルト)になるので、HDMIの優先度を下げる意味になります

options snd_hda_intel index=1

上記ファイルを作成したら、rebootします。

立ち上がってきたら、もう一度初期化をします。

# alsactl init
Found hardware: "HDA-Intel" "Realtek ALC662 rev3" "HDA:10ec0662,12972048,00100300" "0x1297" "0x4028"
Hardware is initialized using a generic method

このようにRealtek ALC662 rev3が見えたら初期化成功です。

これで正常に音楽が再生されました。

 参考にしたサイト

http://forums.debian.net/viewtopic.php?f=6&t=123902
http://docs.slackware.com/howtos:hardware:audio_and_snd-hda-intel

 おまけ

お気に入りのインターネットラジオ局