【LIVA】【Ubuntu server14.04】Juliusを使いたい(USBマイクセッティング編)

家電を音声で操る、という魅力的なテーマに挑戦したく、Juliusのセッティングに着手しましたが、事の顛末を記載しておきます。

 

1.Juliusとは

 詳しくはこちら。

大語彙連続音声認識エンジン Julius

発音辞書や言語モデル・音響モデルと組み合わせることで、特定の音声に対して色々動作をさせることができます。

 

2.下準備

マイクを用意します。

今回買ったのは「MM-MCUSB22」。部屋のどこからでも家電を操るとなると可能な限り集音が必要になりますので。

 

サンワサプライ WEB会議高感度USBマイク MM-MCUSB22

サンワサプライ WEB会議高感度USBマイク MM-MCUSB22

 

 

USBマイクのセッティングとして、以下のように対応します。 

①デバイスの確認

$sudo lsusb

Bus 001 Device 005: ID 0d8c:0010 C-Media Electronics, Inc.

(略)

Bus001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB

(略)

LIVAのUSBポートは2つありますが、今回はUSBハブにUSBマイクを設定しているため、上記のような出力になります(Device005がMM-MCUSB22)。

 

※2017/1/29追記

現在はラズパイ2で動かしていますが、その場合はUSBマイクを接続すると以下のようにオーディオモジュールが追加される。

$cat /proc/asound/modules 

0 snd_bcm2835
1 snd_usb_audio

この snd_usb_audioを0になるように変更する必要がある。

 

②USBマイク優先度の変更

$sudo vi /etc/modprobe.d/alsa-base.conf

options snd-usb-audio index=-2

options snd-usb-audio index=0

USBマイクの優先度が高くなるように、snd-usb-audioを0に変更します。

 

※2017/1/29追記

どうやら、ラズパイ2だと上記ファイルがないため作ります。以下のように作成。

$sudo vi /etc/modprobe.d/alsa-base.conf

options snd slots=snd_usb_audio,snd_bcm2835

options snd_usb_audio index=0

options snd_bcm2835 index=1

 

優先度を変更したら一度再起動します。

$sudo shutdown -r now 

 

③優先度の変更を確認

$cat /proc/asound/modules

 0 snd_usb_audio
 1 snd_hda_intel

0 snd_usb_audioとなっていれば成功。

 

④マイクの音量を変更

$sudo amixer set Mic 54

Simple mixer control 'Mic',0
  Capabilities: cvolume cvolume-joined cswitch cswitch-joined
  Capture channels: Mono
  Limits: Capture 0 - 57
  Mono: Capture 54 [95%] [18.52dB] [off]

環境によって違うと思われますが、私のマシンでは最大設定値は57だそうです。

 

⑤録音できるか確認

$sudo arecord -r 16000 -f S16_LE test.wav

止めるときはCtrl+Cで(多分)。

 

 ⑥再生できるか確認

$ aplay ./test.wav

 

※2017/05/06追記

バイスをちゃんと指定しておかないとaplayでファイル再生ができなくなったりするようなので、以下の対応を実施。明確にalsaで使うデバイスを指定する。

$ sudo aplay -l

**** ハードウェアデバイス PLAYBACK のリスト ****
カード 1: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 7/7
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
カード 1: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

 

$ sudo arecord -l

**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

 

上記の情報をもとにホームディレクトリ配下の.asoundrcを編集(記述場所はどこでもよさそうだけど、最初に記述)。

hw:X,Yの設定は、Xがカード番号、Yがデバイス番号です。

$ vi ~/.asoundrc

pcm.!default {
    type asym
    capture.pcm "mic"
    playback.pcm "speaker"
}

pcm.mic {
    type plug
    slave {
        pcm "hw:0,0"
    }
}

pcm.speaker {
    type plug
    slave {
    pcm "hw:1,0"
    }
}

WM3800Rをアクセスポイント化

さて、LIVAをルータ化しましたが、LIVAに入れたUbuntu Serverでは自力で無線ルータとして動作させることができないため、シェアリーWiMAXの契約が今月で切れて余るWM3800Rをアクセスポインタ化にすることで、タブレット等を無線接続させます。

 

1.WM3800Rのアクセスポイント化

まず、グレードルが必要です。これはシェアリーWiMAX契約時についてこないものなので、別途購入します。  

日本電気 AtermWM3800R用クレードル PA-WM08C

日本電気 AtermWM3800R用クレードル PA-WM08C

 

グレードルにWM3800Rを指し、グレードルの裏にあるスイッチを「RT」から「AP」に変更します。WM3800Rが勝手に再起動を始め、液晶画面が変われば完了です。

以上。

 

2.注意点

少しハマったのでメモ書き。

・APモードにするとブラウザからWM3800Rの管理画面に接続できなくなる。

→RTモードの時に予めMACアドレスフィルタリング等、セキュリティの設定をしておきましょう。誰でも使えるようになってしまいます。

 

タブレット等の設定で静的IPアドレス等を設定しておく。

→これはルータ化したLIVA(Ubuntu Server)でDHCPサーバアプリを入れてないからかもしれませんが、IPアドレスが無線端末に正常に割り振られないため、端末側で設定することで、

タブレット~(無線)~WM3800R→(有線)→LIVA(ルータ)→インターネットが実現できます。

【LIVA】【Ubuntu server14.04】iptablesのログを個別ファイルに出力

iptablesの設定でログを出力できますが、これらは「/var/log/kern.log」に出力されるので、必要なログだけを抜粋できるようにします。

 

1.出力設定ファイルを作る

$sudo vi /etc/rsyslog.d/iptables.conf
:msg,contains,"DROP" /var/log/iptables/DROP.log

 :msg~から続く記載をします。""で括った文字列がkern.logにあれば、それを/var/log/iptables/DROP.logに抽出します。

 

"DROP"という文字列は普通はkern.logされませんが、iptablesの設定で

/sbin/iptables -A xxx -j LOG --log-prefix "DROP: "
/sbin/iptables -A xxx -j DROP

というようにしておけば、DROPする前に「DROP:」という単語を先頭に含んでkern.logに情報を吐き出します。

 

ちなみに

$sudo view /etc/rsyslog.conf

 $IncludeConfig /etc/rsyslog.d/*.conf というのが、ファイルの最後に記載されているかと思います。

この記載があることで、rsyslog実行時に/etc/rsyslog.d/配下のconfファイルを自動で読み込んでくれます。

 

2.出力先ログファイルの作成

ubuntuを使用している場合、出力先のログファイル(今回はDROP.log)を先に作っておきます。自動では作られないため注意。

$sudo mkdir /var/log/iptables

$sudo touch /var/log/iptables/DROP.log

$sudo chown syslog /var/log/iptables/DROP.log

$sudo chgrp adm /var/log/iptables/DROP.log

作成と同時にkern.logと同じユーザ、グループに変更します。

 

3.rsyslogの再起動

$ sudo service rsyslog restart 

rsyslog stop/waiting
rsyslog start/running, process xxxxx

 

rsyslog後から自動で"DROP"を含むログ情報がDROP.logに出力されます。

 

【LIVA】【Ubuntu server14.04】Asteriskサーバで050plus収容(セキュリティ強化)

技術メモだからね。一応書かないとってことで。

 

乗っ取りなどで勝手に外線された場合を想定して最低限のことをしておきます。

$sudo vi /etc/asterisk/extensions.conf

[globals]

MYNUMBER=050xxxxxxxx

 

[default]

;050plus
;---注意点
;先頭のダミー番号について、先頭3を付与すると
;Auto fallthrough, channel 'SIP/XXXXX' status is 'UNKNOWN'
;とasterisk -vvvvcrを実行した時に表示され、外線発信できない。

;理由は不明。また、先頭5以外で許容される番号は不明(調べる気はあまりない)

 

exten => _567.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _567.,2,Set(CALLERID(name)=${MYNUMBER})
exten => _567.,3,Dial(SIP/${EXTEN:3}@050plus,120,T)

; 00 を禁止
exten => _56700., 1, Answer()
exten => _56700., 2, Wait(1)
exten => _56700., 3, Hanup
exten => _56718[46]00., 1, Answer()
exten => _56718[46]00., 2, Wait(1)
exten => _56718[46]00., 3, Hanup
; 010 を禁止
exten => _567010., 1, Answer()
exten => _567010., 2, Wait(1)
exten => _567010., 3, Hanup
exten => _56718[46]010., 1, Answer()
exten => _56718[46]010., 2, Wait(1)
exten => _56718[46]010., 3, Hanup

今回の設定に関連するものだけ抜粋してます。

まず、

exten => _567.,3,Dial(SIP/${EXTEN:3}@050plus,120,T)

ですが、「_567.」でダイヤル番号の先頭を偽装します。

普通は「_0.」と設定することで発信先番号(090xxxxxxxx)とSIPフォンソフトで発信することができますが、「_567.」と設定することで、567090xxxxxxxxとダイヤルした時のみ外線発信できるようになります。

ポイントは「SIP/${EXTEN:3}です。EXTEN:3を設定することで先頭の3桁を除いてAsteriskでダイヤル処理をします。つまり、567090xxxxxxxxでSIPフォンソフトで発信したら、Asteriskで567を除外した上で090xxxxxxxxで発信してくれます。

 

次に

exten => _56700., 1, Answer()
exten => _56700., 2, Wait(1)
exten => _56700., 3, Hanup 

ですが、56700が先頭に入っていたら外線発信させずに切断します。

先頭567をつければ外線発信出来てしまうことがバレてしまった場合の国際発信のガード処理と言えます。

 

exten => _56718[46]00., 1, Answer()
exten => _56718[46]00., 2, Wait(1)
exten => _56718[46]00., 3, Hanup

 は、184,186が設定された場合。

010の記載も理屈は同じです。

 

ただ、上記は国際発信をガード出来るだけなので、国内発信は該当しません。

そもそもAsteriskにアクセスさせない等のガード処理をいろいろ設定する必要があります。

 

【LIVA】【Ubuntu server14.04】シェルスクリプト自動実行登録

現在iptablesを構築中なわけですが、とりあえず作ったシェルをサーバ再起動時に自動実行できるように登録します。

$sudo chmod 755 iptables.sh

$sudo chown root iptables.sh

$sudo chgrp root iptables.sh

$sudo mv iptables.sh /etc/init.d

$cd /etc/init.d/

$sudo update-rc.d  iptables.sh defaults

update-rc.d: warning: /etc/init.d/iptables.sh missing LSB information
update-rc.d: see http://wiki.debian.org/LSBInitScripts
Adding system startup for /etc/init.d/iptables.sh ...
/etc/rc0.d/K20iptables.sh -> ../init.d/iptables.sh
/etc/rc1.d/K20iptables.sh -> ../init.d/iptables.sh
/etc/rc6.d/K20iptables.sh -> ../init.d/iptables.sh
/etc/rc2.d/S20iptables.sh -> ../init.d/iptables.sh
/etc/rc3.d/S20iptables.sh -> ../init.d/iptables.sh
/etc/rc4.d/S20iptables.sh -> ../init.d/iptables.sh
/etc/rc5.d/S20iptables.sh -> ../init.d/iptables.sh

前半から中盤のコマンドは実行権限をつけたり、ファイルユーザをrootにしたり。

update-rc.dを実行するとwarningが出たけど、とりあえず気にしない・・・

これでリブートすればiptabelsが自動で設定される。

 

【2014/10/31 追記】

自動実行の削除は以下のとおり。

$sudo update-rc.d -f  iptables.sh remove
 Removing any system startup links for /etc/init.d/iptables.sh ...
   /etc/rc0.d/K20iptables.sh
   /etc/rc1.d/K20iptables.sh
   /etc/rc2.d/S20iptables.sh
   /etc/rc3.d/S20iptables.sh
   /etc/rc4.d/S20iptables.sh
   /etc/rc5.d/S20iptables.sh
   /etc/rc6.d/K20iptables.sh

 

自動実行登録の確認は以下のとおり

$ ls /etc/rc2.d 

 ここで出力されていれば自動実行になる。出力されていなければ自動実行しない。

また、頭文字がKであれば停止用、Sであれば起動用になってる。

【LIVA】【Ubuntu server14.04】1つのNICに複数IPアドレス

1つのNICに対して、複数IPアドレスを設ける場合の設定。

 

1.設定変更

IPアドレスの設定は以下のファイルを弄る。

複数IPアドレスを設けるとは、すなわち1NICに仮想インタフェースを追加することになるため、例えば、NICに「eth0」という名前が割り振られていたら、「eth0:0」なり「eth0:1」と「:x」という形で設定してあげればいい。

$sudo vi /etc/network/interfaces 

 

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.11.138
netmask 255.255.255.0
network 192.168.11.0
gateway 192.168.11.1
broadcast 192.168.11.255
dns-nameservers 192.168.11.1

 

auto eth0:1
iface eth0:1 inet static
address 192.168.11.254
netmask 255.255.255.0
network 192.168.11.0
gateway 192.168.11.1
broadcast 192.168.11.255
dns-nameservers 192.168.11.1

2.リブート実施

$sudo shutdown -r now

リブートして起動が遅くなったと思ったら3へ。

 

3.サーバの起動が遅くなった場合の対処

上記の設定変更をすると、サーバ起動時の処理が遅くなる。

ので、以下のファイルを設定変更する。

$sudo vi /etc/init/failsafe.conf

  • sleep 20

→ sleep 5に変更

  • $PLYMOUTH message --text="Waiting for network configuration..." || :
  • sleep 40
  • $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
  •  sleep 59
  •  $PLYMOUTH message --text="Booting system without full network configuration..." || :
  • sleep 1

→すべてコメントアウト