PulseAudioでライン入力を使う

PCの熱が辛い

最近暖かくなってきました.NotePCにあまり仕事をさせていなくてもCPU温度は65~75度くらい.

$ acpi -ti
Thermal 0: ok, 71.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 99.0 degrees C

Flash動画をブラウザ経由で再生すると初めのうちはそうでもないけどすぐに130%くらいCPUを使ってPCの動作重く&CPU熱くなります(特にニコ生TS).そして最近は100度を超えてシャットダウンしてしまうように.

  • 再生初め

$ top -bn1 | grep -A 3 PID
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
21114 mk        20   0 1114852 214732 103616 S  43.8  1.3   0:13.54 plugin-containe
22343 mk         9 -11  588044  12992   9416 S  12.5  0.1   1:30.03 pulseaudio
 3816 mk        20   0  561012 172172 147924 S   6.2  1.1   1:51.02 Xorg
  • 暫く経ったら

$ top -bn1 | grep -A 3 PID
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
21114 mk        20   0 1168452 241256 125892 S 147.1  1.5   2:12.09 plugin-containe
25291 mk        20   0   43820   3936   3176 R  17.6  0.0   0:00.03 top
 3816 mk        20   0  574540 171532 146696 S  11.8  1.1   2:08.95 Xorg

※plugin-containeがpepperflashのプロセス.

pepperflashをAdobe Flash Playerに変更するとましになったような気もしましたがよくクラッシュする&スクリーンセーバ自動抑制機能などもないようなのでちょっと使いづらいです.

$ sudo update-alternatives --config flash-mozilla.so
alternative flash-mozilla.so (/usr/lib/mozilla/plugins/flash-mozilla.so を提供) には 2 個の選択肢があります。

  選択肢    パス                                                                          優先度  状態
------------------------------------------------------------
* 0            /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so   70        自動モード
  1            /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so   70        手動モード
  2            /usr/lib/flashplugin-nonfree/libflashplayer.so                                   50        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:

スマホやChromeCastで動画再生を試みる&PC経由でBluetoothヘッドセットで音声を聞きたい

スマホやChromeCastで再生して外部ディスプレイに映すようにしたらどうだろうと試してみるとニコニコ動画/生放送は画質が悪くなってしまうけど他のサービスでは良さそうです.しかし音声をBluetoothヘッドセットで聞きたいです.それもPCと一緒に.
ということで,以下のような接続を試してみました.PC(Debian)でのBluetoothはblueman-appletを,音声デバイスの切り替えなどはpavucontrolを,Bluetooth音声のプロファイルはA2DPを利用しています.

  • ○ Android → Bluetooth → PC(Debian) → Bluetooth HeadSet

  • ○ iOS → Bluetooth → PC(Debian) → Bluetooth HeadSet

  • ✘ Android → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

  • ✘ iOS → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

  • ✘ ChromeCast → HDMI → HDMIモニタ → 3.5mmライン → PC(Debian) → Bluetooth HeadSet

Bluetooth ではうまく行くのですが,3.5mmライン入力がうまく行きません.ChromeCastはBluetoothが使えないのでちょっと困ります.
ライン入力の波形は出ているしレコーダアプリでラインからの音の録音は出来るのでPCに音は流れてきているようです.

以下のFAQページによると`module-loopback`モジュールを読み込むと良いようです.

以下のようにすると反映されてライン入力からの音が出るようになりました.

$ pactl load-module module-loopback

ログアウトすると設定は消えるので以下の辺りの設定ファイルに書いておくと良さそうです.

$ man default.pa|grep -A5 'SYNOPSIS'
SYNOPSIS
       ~/.config/pulse/default.pa

       /etc/pulse/default.pa

       /etc/pulse/system.pa

/etc/pulse/default.pa~/.config/pulse/default.pa にコピーして編集してPulseAudioを再起動して反映出来ました.

$ mkdir -p ~/.config/pulse
$ cp /etc/pulse/default.pa ~/.config/pulse/default.pa
$ vi ~/.config/pulse/default.pa
$ diff /etc/pulse/default.pa ~/.config/pulse/default.pa
167a168,170
>
> # 3.5mm Juck In
> load-module module-loopback
$ /usr/bin/pulseaudio -k
$ /usr/bin/pulseaudio --start --log-target=syslog

再起動しても問題無さそうです.
とりあえずこの状態でライン入力からの音声とPCの音声が同時にBluetoothヘッドセットで聞ける状態になりました.

しかし問題点がひとつ.ライン入力とBluetooth(A2DP)入力を同時に行おうとするとライン入力の音が聞こえなくなってしまいます.これは要調査ですね…….

<追記>

~/.config/pulse/default.pa の以下をコメントアウトで行けてるよう.これ出力側だけかと思ってたんですが入力も効くんですかね.

> #load-module module-switch-on-connect

てことでライン入力とBluetooth入力とPCの音声が全部同時に出力できるようになりました :)

</追記>

環境

鹿児島Linux勉強会2016.04に参加

鹿児島らぐの鹿児島Linux勉強会 2016.04に参加してきました.

熊本で地震があったばかりでどうしようかなとちょっと思いましたが鹿児島は被害も無さそうだし開催しました.参加希望者は全員集まったし良かったのではないかと思っています.

今回の会場は谷山だったので早めに家を出たのですが思ってた以上に時間掛って3時間以上掛ってしまいましたorz

今回参加者は6人.うち1人は埼玉からと前回に続き遠征組がΣ
ナンデ?いえ嬉しいんですけれどね.わざわざ遠征してくるほどのものができているかというとどうかなーと思ってしまって.

26550962131 44215d88ab n 26013294703 c95b8ea987 n
集合場所の日本最南端の電停の碑とお土産の十万石まんじゅう

前回に続きTwitterのハッシュタグ( #kagolug ) TitanPadも利用.しかしどちらも使われず遅刻者のTweetにもなかなかきづけずダメダメでした.次は自分が喋っている時にもTweetに気づけるようpopupするようにしておこうと思います.TitanPadは勉強会中にもっとピックアップするように&気長にやるしか無いかな?
でも以前のように一人で何個もネタを用意しないと時間が持たないということがなくなってきたのは良い感じです.毎回5つくらいネタ用意してるんですが一人で発表しててもあれですし…….

今回の新しい試みとして参加登録時にアンケートを設けてそれを以下のようにスライドに貼ってみました.


matoken (matoken)

  • この勉強会を何で知りましたか?

    • 脳内

  • 発表や相談したいことがある人は良かったら書いてください

    • ちょっと古いマシンにUbunuMATE入れた話とか?


発表したいことは 「(回答なし)」となっていることが多かったですが,実際はあったりして聞いたその場で埋めていきました.
これは後で思い出せなくなるので良かったと思います.
ちなみにDebian勉強会の真似だったりします.

Tip
Debian勉強会の資料は以下で見ることが出来ます.
過去の資料過去の資料pdf版
第 107 回 関西 Debian 勉強会 2016 年 2 月 のかわだてつたろうさん「勉強会資料の歩き方」が参考になります.

私の発表はこれで,前回古いXPマシンをLinuxにしたいという方がいたのでその助けにならないかと思ってこのネタを選びました.

前半のFMV-U8250にUbuntu MATE入れたとこまで発表しました.でも後半だけ発表したほうが良かったかもなーと後で思ったりしました.

26590185566 45da709206 n 26010821964 50a3a9bbcc n
勉強会の様子

勉強会終了後路面電車の最終電車で天文館方面へ.そして遠征者のチェックインを待って懇親会を行いました.

26010719854 65c8a45c12 n

懇親会が終わって桜島フェリー桟橋に向かっている時に地震を知らせる防災無線そして震度4の地震がありました.歩いていても揺れを感じてびっくり.フェリー出るのかなと思いつつフェリー乗り場に付くとちょうど出港したところでした.平常運転.

26523381402 078be00d6e n

桜島フェリーは24時間運行ですがこの時間帯は1時間に1本ということでNHKのらじる☆らじるを聞きながら1時間近く待合所でPCいじっていたのでした.フェリーで桜島にわたってから家までは落石とか怖いので遠回りして車通の多い道で帰りました.何事もなく5時前くらいに帰宅.

次回は5月にやりたいけれど未だ何も決まっていません.誰か手を上げてくれると嬉しいけどどうなるかな?

Mutt 1.6.0を試す

Mutt 1.6.0がリリースされました.安定版としては2007年のMutt 1.4.2.3以来9年ぶり!?

Muttはターミナルで動作するメーラーです.似たものにAlpine(旧pine)があります.emacs使いだとMewを使う方も居ますね. MuttとAlpineについては以下の記事が参考になると思います.

使いはじめるまでの速さはAlpineが一番だと思います. GPGやらカスタマイズやらのしやすさはMuttかな?(個人の感想です)

最近Alpineで1000000通を超えるメールボックスで1000000通目までしか見られないという現象やSubjectに♪などがあると動作や表示が崩れるといった問題に遭ったのでMutt環境を作りなおしたところでした.せっかくなのでMutt 1.6.0もBuild ざっとこんな感じでbuildしました.はじめprefixしか指定せずにbuildしてimapに繋がらないとかやってしまいましたorz

$ #stretchのMutt Version
$ mutt -v|head -1
Mutt 1.5.24 (2015-08-30)
$ # stretchのMutt configure 確認
$ mutt -v|grep Configure\ 
Configure options: '--prefix=/usr' '--sysconfdir=/etc' '--mandir=/usr/share/man' '--with-docdir=/usr/share/doc' '--with-mailpath=/var/mail' '--disable-dependency-tracking' '--enable-compressed' '--enable-debug' '--enable-fcntl' '--enable-hcache' '--enable-gpgme' '--enable-imap' '--enable-smtp' '--enable-pop' '--with-curses' '--with-gnutls' '--with-gss' '--with-idn' '--with-mixmaster' '--with-sasl' '--without-gdbm' '--without-bdb' '--without-qdbm' '--build' 'x86_64-linux-gnu' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-z,relro' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2 -I/usr/include/qdbm'
$ sudo apt-get build-dep mutt
$ wget ftp://ftp.mutt.org/pub/mutt/mutt-1.6.0.tar.gz ftp://ftp.mutt.org/pub/mutt/mutt-1.6.0.tar.gz.asc
$ gpg --verify mutt-1.6.0.tar.gz.asc 
gpg: 署名されたデータが'mutt-1.6.0.tar.gz'にあると想定します
gpg: 2016年04月03日 03時22分52秒 JSTにRSA鍵ID 80316BDAで施された署名
gpg: "Kevin J. McCarthy <kevin@8t8.us>"からの正しい署名
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: 8975 A9B3 3AA3 7910 385C  5308 ADEF 7684 8031 6BDA
$ tar tvf mutt-1.6.0.tar.gz |lv
$ tar xf mutt-1.6.0.tar.gz
$ cd mutt-1.6.0
$ ./configure --prefix=$HOME/usr/local --disable-dependency-tracking --enable-compressed --enable-fcntl --enable-hcache --enable-gpgme --enable-imap --enable-smtp --enable-pop --with-curses --with-gnutls --with-gss --with-idn --with-mixmaster --with-sasl --with-slang --without-gdbm --without-bdb --without-qdbm --build x86_64-linux-gnu
$ make
$ make install

Mutt 1.6.0にしても設定は1.5.24のものがそのまま使えているようです. 1000000通目以降も読めます.1034161通までは確認.Subjectに♪があると崩れたりするのはMutt 1.6.0でも同じでした.これはS-Langとかの問題なのかな?configureとかもちゃんと確認したほうがいいかもですね.

普通にGUIのメーラーを使えばいいんじゃ?と思われるかもしれませんがメールボックスが大きくなってくると辛くなってきます.そういう環境でもサーバで起動しっぱなしにしてるとサクサク動くしsshさえ使えればメールの読み書きもできるしということで使っています. ということで今はWebではSquirrelMail/gmail,GUIではSylpeed/ClawsMail,端末ではAlpine/Muttをという感じで併用中です.

MATE環境でのキーボードレイアウト変更方法

先日setxkbmapでXのキーボードレイアウトをアドホックに変更できるようにしたのですが,

MATE環境だと切替後暫くすると設定が戻ってしまいます. setxkbmapの代わりにdconfの設定を書き換えればいいのではと思いdconf dump /してそれらしい項目を探して書き換えてみると設定の見た目は変わるのですが実際に入力してみると設定が反映されません.

$ dconf write /org/mate/desktop/peripherals/keyboard/kbd/layouts "['us', 'jp']"

dconfには他にそれらしい設定は無さそうです.


$ dconf dump /|grep us
start-with-status-bar=true
custom-format=''
button-lid-ac='suspend'
button-suspend='suspend'
button-lid-battery='suspend'
layouts=['us', 'jp']
mousekeys-accel-time=1200
mousekeys-max-speed=750
mousekeys-enable=false
mousekeys-init-delay=160
$ dconf dump /|grep jp
layouts=['us', 'jp']

GUIで設定変更をして設定が反映された前と後でも/org/mate/desktop/peripherals/keyboard/kbd/layouts部分しか変わっていません.dconf以外のどこかにも設定がありそうです.

$ dconf dump / > /tmp/before
$ # GUIで設定変更
$ dconf dump / > /tmp/after
$ diff /tmp/before /tmp/after
 
193c193
< layouts=['us', 'jp']
---
> layouts=['jp', 'us']

ここでGUIの設定画面(「システム」->「設定」->「ハードウェア」->「キーボード」の「レイアウト」タブ)を見ると複数のレイアウトが登録できます.ここに日本語と英語を登録して,「オプション」ボタンを押して「Switching to another layout」に適当なショートカットを選ぶとこのショートカットでレイアウト変更ができるのに気づきました.

Screenshot at 2016-04-03 12:48:47

Screenshot at 2016-04-03 12:48:35

ということで最近の環境だとこの機能で切り替えるのが良さそうです.

—-



Xでキーボードレイアウトをアドホックに変更する

今日本語キーボードのNotePCを設定しています,これまではこのマシンはi386のテストや横に置いて動画再生などをする程度にしか使っていなかったのですが,X220の調子が悪いので外に持ち出せるマシン出来ないかと設定中です.

小さなA5サイズのマシンな上に日本語配列(購入時は英語配列となっていたが日本語配列のものが届いた……)なので英語配列の外部キーボードを利用したいところです.

こんな感じでGUIで設定してもいいのですが,繋ぎ直すたびにこれをするのは面倒です. Screenshot at 2016-03-31 18:27:09

コンソールではloadkeysというコマンドでアドホックにキーボードレイアウト変更が出来ます.

同じような感じでXでも設定できないか探してみました. setxkbmapコマンドで実現できそうです.しかし,以下のようにうまく行く時とエラーになる場合があります.

$ setxkbmap -layout us
$ setxkbmap -layout jp
Error loading new keyboard description

少し試行錯誤してこんな感じでエラーが出なくなりました.

$ setxkbmap -model pc105 -layout us,jp
$ setxkbmap -model pc105 -layout jp,us

適当なキーにこれを割り当てておくと便利な感じです.

余録

現在の設定の確認

$ setxkbmap -print -verbose 10

Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

鹿児島Linux勉強会2016.03に参加

DP1M1045

ちょっと前の話になりますが,3/12(sat)に「鹿児島Linux勉強会 2016.03」に参加してきました.

今回の参加者は東海地方から飛行機でやって来た(!)@kapper1224さんや飛び入りの方を含め8名でした.8名ならTENONさん予約可能だったなーとか.
(予約できないってことは埋まってた場合さすらう羽目になるので毎回不安だったり.)

私はRaspberry Piにdiskless modeのalpine linux導入の話をしました.

他の方の発表等は@kapper1224さんのblogやTogetterまとめをどうぞ.

Twitterやblogに投稿してくれる方が居るといいですね. 一人だと全然追いつきませんし. 毎回こんな感じだと中継なんかも再開できるかもですが…….

次回04月も開催予定です.今のところ4/15(Fri)に鹿児島市谷山方面で調整中です.
5月以降も俺が主催やってやるぜって方や,会場も募集中です.

状況を知りたい方は鹿児島らぐのMLを購読したりしてみてください.
(LingrやTwitterでもMLの内容配信してます)

コンポジットマネージャーのXcompmgrでウィンドウ透過設定

久々にMATE環境を使ってみています.
awesomeだとショートカットキーでウィンドウの配置を設定できるので簡単にウィンドウを並べ変えて動画を見ながら別のことをするといったことが簡単に出来ました.しかしMATEで同じことをしようとすると面倒.以前はGnome端末で背景を透過させていましたがこの機能はなくなっていました.

Gnome端末から無くなった後もMATE端末には透過機能が残っていましたがこちらからもいつの間にかなくなっていました.もう復活することは無さそうなので他の端末アプリを幾つか試してみましたが擬似透過しか見当たりません.

ということで今回はXcompmgrを試してみました.

前提

xorgでComposite, RENDER が有効になっている必要がああります.以下OKの例.

$ xdpyinfo | grep -i "render\|composite"
    Composite
    RENDER

必要パッケージの導入

コンポジットマネージャーのxcompmgrと,透過の設定をするtranssetの含まれたx11-appsを導入します.

$ sudo apt install xcompmgr x11-apps

コンポジットマネージャの起動

$ xcompmgr -c &

とか

$ xcompmgr -cf &

とか

$ xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &

とかお好みで.

transsetでの透過

xcompmgrが起動した状態でtranssetを使うとウィドウを透過させることが出来ます.
引数には0~1の値を設定します.0が完全に透明.1が不透明です.

$ transset 0.6

として実行するとマウスカーソルが+マークになり,クリックしたウィンドウが透過されます.
以下はブラウザフルスクリーンでニコ生を再生した上に透過設定したMATE端末を表示しています.

Screenshot at 2016-03-19 07:06:39

自動起動設定

毎回手動で起動&設定するのは面倒なのでこんな感じで自動起動設定をします.
コンポジットマネージャーは「システム」->「設定」>「ユーザ向け」->「自動起動するアプリ」から.

Screenshot at 2016-03-20 06:27:22

MATE端末の透過設定は~/.bashrcに以下のように書いてbash起動時にMATE端末だったらtranssetを起動するようにしてみました.sleepを付けないとうまく動きませんでした.sleepの値は環境によって変わると思います.

$ tail -4 ~/.bashrc
case "$COLORTERM" in
    mate-terminal) sleep 0.3 && transset -a 0.6 > /dev/null;;
esac
 

ショートカット設定

MATE端末だけを透過設定する場合はここまでの設定で大丈夫ですが,他のウィンドウや透過度を変更するのにショートカット設定をしておくと便利そうです.

「システム」->「設定」->「ハードウェア」->「キーボードショートカット」でtranssetを登録してショートカットを設定します.

ここで設定したtranssetのオプションは-aはアクティブウィンドウの指定,--inc/--decはインクリメント,デクリメントのオプションです.

Screenshot at 2016-03-20 07:48:08Screenshot at 2016-03-20 07:48:03

Screenshot at 2016-03-20 06:25:27

これで未設定のアプリで透過させたり,ちょっと透過度を調整したいと行った時にショートカットですぐ設定できるようになりました :)

Screenshot at 2016-03-20 06:30:06







Dragonboard 410c eMMC領域のOS入れ替え方法2種類

以下のガイドのとおりなんですが一応メモを.

microSD Card経由と,Fastboot経由の2種類があります.
microSD Card経由の場合はDIP switchの変更が必要でディスプレイとマウスが必要です.
Fastboot経由の場合はHostPCとmicroUSB Cableが必要です.USB-LANアダプタを使えばヘッドレスで全て設定できます.

#こういうのを使ったほうがいいけど.

microSD Card経由での書き込み

USBキーボード,マウス,HDMIモニタと4GB以上のmicroSDが必要です.

イメージの入手とmicroSD Cardへの書き込み

このファイル名は現在の最新です.以下のページを見て最新を入手してください.

$ wget http://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/dragonboard410c_sdcard_install_debian-66.zip http://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/MD5SUMS.txt
$ md5sum -c MD5SUMS.txt 2>&1 | egrep -v 'FAILED|ありません'
dragonboard410c_sdcard_install_debian-66.zip: 完了
md5sum: 警告: 一覧にある 15 個のファイルが読み込めませんでした
$ unzip -l dragonboard410c_sdcard_install_debian-66.zip
Archive:  dragonboard410c_sdcard_install_debian-66.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    14022  2016-02-27 14:36   license.txt
2621440000  2016-02-27 14:36   db410c_sd_install_debian.img
---------                     -------
2621454022                     2 files
$ unzip dragonboard410c_sdcard_install_debian-66.zip
$ cat ./db410c_sd_install_debian.img | pv | sudo dd of=/dev/sdz bs=4M

microSDからの起動とセットアップ

microSD CardをDragonboard 410cに差し込んで,基盤の裏面のDIP switch(s6)を操作してSD boot(2)だけをOnにします.シルクがあるので解りやすいです.
Dragonboard 410cにUSBキーボード,マウス,HDMIモニタを接続して起動するとシンプルなインストーラが起動するのでポチポチと押していくと完了です.

IMGP2730IMGP2731IMGP2732IMGP2733

一旦電源を切ってDIP swatchを元に戻し,microSD Cardを取り外して起動するとLXDEが起動してきます.

ちなみにDIP switchにUSB bootもあるので試してみましたが未実装化手順が違うのかうまく行きませんでした.

Fastboot経由での書き込み

microSD経由より手順が多いですが必要なものが少ない&DIP swatchの操作が必要ないのでケースに入れている場合などもいいかもしれません.
microUSB Cableは必要なので用意してください.

fastbootの導入

HostPCにfastbootを導入します.Android開発環境が既にある人は入っていそうですね.

$ sudo apt install android-tools-fastboot

bootloaderイメージの入手

次のsiteからbootloaderイメージを入手します.最新版を入手してください.
96Boards Builds for: latest

ディレクトリを掘って展開しておきます.

$ unzip -l dragonboard410c_bootloader_emmc_linux-46.zip 
Archive:  dragonboard410c_bootloader_emmc_linux-46.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
57344  2016-02-10 10:00   hyp.mbn
   744042  2016-02-10 10:00   emmc_appsboot.mbn
14022  2016-02-10 10:00   license.txt
   154980  2016-02-10 10:00   rpm.mbn
   483468  2016-02-10 10:00   tz.mbn
 23102976  2016-02-10 10:00   NON-HLOS.bin
   80  2016-02-10 10:00   sec.dat
   252868  2016-02-10 10:00   sbl1.mbn
34304  2016-02-10 10:00   gpt_both0.bin
  324  2016-02-10 10:00   flashall
---------                     -------
 24844408                     10 files
$ mkdir dragonboard410c_bootloader_emmc_linux-46
$ unzip dragonboard410c_bootloader_emmc_linux-46.zip

fastboot modeに入るために基板上の(-)ボタン(s4)を押しながら電源を投入します.すぐにfastboot modeになるのでfastboot devicesコマンドで確認します.何も出てない場合は失敗しているので電源投入をやり直します.

$ sudo fastboot devices
b5d12d18        fastboot

デバイスが認識できているのが確認できたらflashall scriptで書き込みを開始します.書き込みを開始した後は(-)ボタン(s4)を離しても大丈夫そうです.

$ sudo ./flashall
target reported max download size of 268435456 bytes
sending 'partition' (33 KB)...
OKAY [  0.005s]
writing 'partition'...
OKAY [  1.451s]
finished. total time: 1.457s
target reported max download size of 268435456 bytes
sending 'hyp' (56 KB)...
OKAY [  0.005s]
writing 'hyp'...
OKAY [  0.011s]
finished. total time: 0.016s
target reported max download size of 268435456 bytes
sending 'modem' (22561 KB)...
OKAY [  0.732s]
writing 'modem'...
OKAY [  0.756s]
finished. total time: 1.488s
target reported max download size of 268435456 bytes
sending 'rpm' (151 KB)...
OKAY [  0.008s]
writing 'rpm'...
OKAY [  0.010s]
finished. total time: 0.018s
target reported max download size of 268435456 bytes
sending 'sbl1' (246 KB)...
OKAY [  0.011s]
writing 'sbl1'...
OKAY [  0.010s]
finished. total time: 0.021s
target reported max download size of 268435456 bytes
sending 'sec' (0 KB)...
OKAY [  0.004s]
writing 'sec'...
OKAY [  0.006s]
finished. total time: 0.010s
target reported max download size of 268435456 bytes
sending 'tz' (472 KB)...
OKAY [  0.017s]
writing 'tz'...
OKAY [  0.015s]
finished. total time: 0.033s
target reported max download size of 268435456 bytes
sending 'aboot' (726 KB)...
OKAY [  0.026s]
writing 'aboot'...
OKAY [  0.025s]
finished. total time: 0.052s
erasing 'boot'...
OKAY [  0.036s]
finished. total time: 0.037s
erasing 'rootfs'...
OKAY [  0.267s]
finished. total time: 0.267s
erasing 'devinfo'...
OKAY [  0.034s]
finished. total time: 0.034s

boot/root領域の書き込み

OSイメージのboot/root領域のデータを入手して書き込みます.
書き込みはfastboot modeにしてから行ってください.

$ wget http://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/linaro-jessie-alip-qcom-snapdragon-arm64-20160227-66.img.gz http://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/boot-linaro-jessie-qcom-snapdragon-arm64-20160227-66.img.gz http://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/MD5SUMS.txt
$ md5sum -c MD5SUMS.txt 2&>1 |grep 完了
boot-linaro-jessie-qcom-snapdragon-arm64-20160227-66.img.gz: 完了
linaro-jessie-alip-qcom-snapdragon-arm64-20160227-66.img.gz: 完了
$ sudo fastboot flash boot ./boot-linaro-jessie-qcom-snapdragon-arm64-20160227-66.img 
target reported max download size of 268435456 bytes
sending 'boot' (17480 KB)...
OKAY [  0.562s]
writing 'boot'...
OKAY [  0.329s]
finished. total time: 0.891s
$ sudo fastboot flash rootfs ./linaro-jessie-alip-qcom-snapdragon-arm64-20160227-66.img 
target reported max download size of 268435456 bytes
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.309s]
writing 'rootfs'...
OKAY [ 18.304s]
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.236s]
writing 'rootfs'...
OKAY [ 19.888s]
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.255s]
writing 'rootfs'...
OKAY [ 19.759s]
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.295s]
writing 'rootfs'...
OKAY [ 19.834s]
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.317s]
writing 'rootfs'...
OKAY [ 19.828s]
sending sparse 'rootfs' (262140 KB)...
OKAY [  9.290s]
writing 'rootfs'...
OKAY [ 19.765s]
sending sparse 'rootfs' (59016 KB)...
OKAY [  2.118s]
writing 'rootfs'...
OKAY [  4.450s]
finished. total time: 179.649s

起動するとlxdeが起動してきます.sshdも起動してくるのでdhcpdの動いている環境でUSB-LANアダプタを接続すればヘッドレス環境で設定が可能です.avahiは動いてないのでipはポートスキャンなりarpなりで探してください.

$ sudo nmap -sP 192.168.2.200-255 --spoof-mac 00:90:cc:e8:0b:db

Starting Nmap 7.01 ( https://nmap.org ) at 2016-03-11 01:39 JST
Spoofing MAC address 00:90:CC:E8:0B:DB (Planex Communications)
Nmap scan report for 192.168.2.203
Host is up.
Nmap done: 56 IP addresses (1 host up) scanned in 19.15 seconds
$ sudo arp|grep 00:90:cc
192.168.2.214            ether   00:90:cc:e8:0b:db   C                     wlp3s0

ユーザ名はlinaroパスワードも同じです.

$ ssh linaro@192.168.2.202
$ uname -a
Linux linaro-alip 4.4.0-linaro-lt-qcom #1 SMP PREEMPT Sat Feb 27 04:55:16 UTC 2016 aarch64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.3 (jessie)
Release:        8.3
Codename:       jessie

ちなみに,セットアップ終了後のeMMCの容量はこのくらいです.

$ df /
Filesystem      1K-blocks    Used Available Use% Mounted on
/dev/mmcblk0p10   7260748 1814312   5120404  27% /

後は普通のDebianなのでsource listを日本に向けてUpdateしてほげりましょう.

/etc/apt/sources.list.d/の下はこんな感じ.後ろ2つは/etc/apt/sources.listと重複しているような?

$ find /etc/apt/sources.list.d/ -type f | xargs -n1 -I{} sh -c "echo \#-- {} ; cat {}"
#-- /etc/apt/sources.list.d/hwpack.qcom.list
deb http://repo.linaro.org/ubuntu/qcom-overlay jessie main
#-- /etc/apt/sources.list.d/linaro-overlay-repo.list
deb http://repo.linaro.org/ubuntu/linaro-overlay jessie main
deb-src http://repo.linaro.org/ubuntu/linaro-overlay jessie main
#-- /etc/apt/sources.list.d/hwpack.debian.list
deb http://ftp.debian.org/debian/ jessie main contrib non-free
#-- /etc/apt/sources.list.d/hwpack.backports.list
deb http://ftp.debian.org/debian/ jessie-backports main

Radikoを自動的に録音してPodcast化してくれるradicastを試す

Radikoを自動的に録音してPodcast化してくれるradicastというものを見つけました.

昔はこんな感じで録音したりしていましたが仕様が変わって録音できなくなって対応というのが面倒で最近は録音していませんでした.たまに聞くときはAndroidのRazikoを使っています.でもradicastならお手軽に動かせてPodcastとして扱えるので便利そうということで試してみました.

試した環境はUbuntu 14.04 amd64/Debian stretch testing amd64/Rasbian jessieですが,Ubuntu環境では録音開始時に以下のようにコアダンプしてしまうようでうまく行っていません :-(

2016/03/09 05:20:00 [radiko] start record
2016/03/09 05:20:00 [radiko] GET http://radiko.jp/player/swf/player_3.0.0.01.swf
2016/03/09 05:20:04 [radiko] POST https://radiko.jp/v2/api/auth1_fms
Segmentation fault (コアダンプ)

dockerでも動きますが,今回は実機で動かしています.

必要なpkgの導入

$ sudo apt install libav-tools swftools rtmpdump golang-go

※Debian stretchの場合はlibav-toolsの代わりにffmpegを導入.

go getで導入

$ GOPATH=~/usr/local/go go get github.com/soh335/radicast

オプションはこんな感じでした.

$ ~/usr/local/go/bin/radicast -h
Usage of /home/mk/usr/local/go/bin/radicast:
  -bitrate string
        bitrate (default "64k")
  -buffer int
        buffer for recording (default 60)
  -config string
        path of config.json (default "config.json")
  -converter string
        ffmpeg or avconv. If not set this option, radicast search its automatically.
  -host string
        host (default "0.0.0.0")
  -output string
        output (default "output")
  -port string
        port (default "3355")
  -setup
        initialize json configuration
  -title string
        title (default "radicast")

設定ファイル作成

--setupオプションでスケルトンを作成して,

$ ~/usr/local/go/bin/radicast --setup > ~/usr/local/go/etc/radicast.json
$ cat ~/usr/local/go/etc/radicast.json
{
  "HOUSOU-DAIGAKU": [],
  "MBC": [],
  "RN1": [],
  "RN2": []
}

次のページを参考にcron形式で設定します.crontabと違い秒単位まで指定できるようです.

例えば"0 0 7 * * MON-FRI" だと月曜から金曜の07:00:00の番組を録音となります.
録音停止は自動的にされるようです.

$ cat ~/usr/local/go/etc/radicast.json
{
  "HOUSOU-DAIGAKU": [],
  "MBC": [
    "0 0 5 * * MON-FRI",
    "0 10 5 * * MON-FRI",
    "0 0 7 * * MON-FRI"
  ],
  "RN1": [],
  "RN2": []
}

実行

設定ファイルを指定して実行します.

$ ~/usr/local/go/bin/radicast -config=$HOME/usr/local/go/etc/radicast.json
2016/03/09 05:00:12 [radicast] station:MBC spec:0 0 5 * * MON-FRI
2016/03/09 05:00:12 [radicast] station:MBC spec:0 10 5 * * MON-FRI
2016/03/09 05:00:12 [radicast] station:MBC spec:0 0 7 * * MON-FRI
2016/03/09 05:00:12 [radicast] start new cron
2016/03/09 05:00:12 [server] start 0.0.0.0:3355

指定時刻になると,番組情報を取得して録音が始まり,番組終了時に録音が終了して次のジョブまで待機します.

2016/03/09 06:30:00 [radiko] start record
2016/03/09 06:30:00 [radiko] GET http://radiko.jp/player/swf/player_3.0.0.01.swf
2016/03/09 06:30:04 [radiko] POST https://radiko.jp/v2/api/auth1_fms
2016/03/09 06:30:05 [radiko] POST https://radiko.jp/v2/api/auth2_fms
2016/03/09 06:30:06 [radiko] GET http://radiko.jp/v2/api/program/today?area_id=JP46
2016/03/09 06:30:07 [radiko] start recording モーニング・スマイル
2016/03/09 06:30:07 [radiko] rtmpdump command: /usr/bin/rtmpdump --live --quiet -r rtmpe://f-radiko.smartstream.ne.jp --playpath simul-stream.stream --app MBC/_definst_ -W http://radiko.jp/player/swf/player_3.0.0.01.swf -C S:"" -C S:"" -C S:"" -C S:J_Rb9kLWN2Cb5XlcGqQjfw --stop 1853 -o -
2016/03/09 06:30:07 [radiko] converter command: /usr/bin/ffmpeg -y -i - -vn -acodec libmp3lame -ar 44100 -ab 64k -ac 2 /tmp/radiko240330221/radiko_0.mp3

データは以下のようにoutput以下に保存されています.

$ find output -ls
  6724248      0 drwxr-xr-x   1 mk       mk             36  3月  9 05:55 output
  6724778      0 drwxr-xr-x   1 mk       mk             44  3月  9 05:55 output/20160309053000_MBC
  6724327  10168 -rw-r--r--   1 mk       mk       10409132  3月  9 05:55 output/20160309053000_MBC/podcast.mp3
  6724779      4 -rw-r--r--   1 mk       mk            650  3月  9 05:55 output/20160309053000_MBC/podcast.xml

録音中のテンポラリファイルは/tmp以下に作られます.

$ ls -lA /tmp/radiko077215706/
合計 5184
-rw-r--r-- 1 mk mk 5223512  3月  9 07:10 radiko_0.mp3

録音したデータはPodcastとして配信されます.このURLは規定値ではlocalhostからしかアクセスできません.このURLをPodcast Aggregatorに指定してあげると普通にPodcastとして扱えます :)

$ xmllint http://localhost:3355/rss
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
    <channel>
        <title>radicast</title>
        <itunes:owner/>
        <itunes:image/>
        <itunes:category/>
        <item>
            <title>生島ヒロシのおはよう一直線 (2016-03-09 05:30:00 +0900 JST)</title>
            <itunes:author>生島ヒロシ</itunes:author>
            <itunes:summary> &lt;br /&gt;&lt;A href="http://www.mbc.co.jp/radio/" target="_blank"&gt;&lt;img src="http://www.mbc.co.jp/radio/radiko/bn/mbcradio_pr1410.png" alt="MBCradio" /&gt;&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;twitterハッシュタグは「&lt;a href="http://twitter.com/#!/search/%23mbc1107"&gt;#mbc1107&lt;/a&gt;」</itunes:summary>
            <itunes:image/>
            <enclosure url="http://localhost:3355/podcast/20160309053000_MBC.mp3" length="10409132" type="audio/mpeg"/>
            <pubDate>Wed, 9 Mar 2016 05:55:45 +0900</pubDate>
        </item>
    </channel>
</rss>

Podcast Aggregatorとこのサーバが別の場合以下のように-hostオプションを指定してインターフェイスに割り当てたipを指定するとそのネットワークからアクセスできるようになります.

$ ~/usr/local/go/bin/radicast -config=$HOME/usr/local/go/etc/radicast.json -host 192.168.2.203
  :
2016/03/09 07:42:34 [server] start 192.168.2.203:3355

proxy

は使えない感じかな?

$ w3m -dump http://radiko.jp/area
document.write('<span class="JP46">KAGOSHIMA JAPAN</span>');
$ tsocks w3m -dump http://radiko.jp/area
document.write('<span class="JP13">TOKYO JAPAN</span>');
$ ALL_PROXY=socks5h://localhost:8080 ~/usr/local/go/bin/radicast -setup
2016/03/09 07:56:00 [radiko] GET http://radiko.jp/player/swf/player_3.0.0.01.swf
2016/03/09 07:56:01 [radiko] POST https://radiko.jp/v2/api/auth1_fms
2016/03/09 07:56:02 [radiko] POST https://radiko.jp/v2/api/auth2_fms
2016/03/09 07:56:02 [radiko] GET http://radiko.jp/v2/api/program/today?area_id=JP46
{
  "HOUSOU-DAIGAKU": [],
  "MBC": [],
  "RN1": [],
  "RN2": []
}
$ tsocks ~/usr/local/go/bin/radicast -setup
   :
  "MBC": [],
   :
$ tsocks ~/usr/local/go/bin/radicast -setup
   :
  "MBC": [],
   :
$ ALL_PROXY=http://localhost:8080 ~/usr/local/go/bin/radicast -setup
   :
  "MBC": [],
   :

ストリーミング配信補助ソフトのCastawesomeを試す

3/5はOpenDataDayでした.
去年までは鹿児島市で募ってMapCafeと称してOSMする集まりをしていたのですが人が集まらないので今年は家で地図を書こうかと.そしてそのデスクトップをストリーミングしてみようかなと.

ということデスクトップストリーミングの話です.

いつものようにffmpegでRTMP配信なのですが,今回はCastawesomeというGUIの皮を見つけたので試してみました.これを使うとオプションなどがGUIで入力するだけで埋まっていくので便利です.

導入はcloneした後makeするだけ.システムに導入したいならmake installも.(Raspberry Piでも動きました.)
ffmpeg or avconvとPython 3, GTK-3ライブラリなどが必要です.(make時に足りないものがある場合DEPENDSが参考になります)

$ git clone -b 0.16.0 https://github.com/TheSamsai/Castawesome.git
$ cd Castawesome
$ make

の後

$ ./castawesome.py

or

$ sudo make install

してスタートメニューから実行.

こんな画面が出てきてフォームを埋めていくだけでOKです.
配信先はTwitch/YouTube/Hitbox/Pocarto/Local/Customに対応.多分Customを使えばUstream.tvも行けますね.

20160305_22:03:24-21661

ただ,細かい設定は苦手だったりエラーチェックも甘く配信されないことも多いのでそういう場合にはターミナルから起動して配信(「録画」ボタン)した時の以下のようなログを利用してffmpegで配信するようにするのが良さそうです.

ffmpeg -f x11grab -show_region 0 -s 1366x768 -framerate " 8" -i :0.0+0,0 -f pulse -ac 1 -i  -vcodec h264 -s 798x449 -preset medium -acodec mp3 -ar 44100 -threads 4
-qscale 3 -b:a 128k -b:v 300k -minrate 300k -g 16 -pix_fmt yuv420p -f flv "rtmp://a.rtmp.youtube.com/live2/<_stream_key_>"

設定ファイルは~/.config/castawesome以下に保存されます.keyはYouTubeのものを設定しても.twitch_keyというファイルに保存されていました.

$ ls -A ~/.config/castawesome/
.twitch_key  config.txt

よし,これで配信準備出来たと思ったのですが体調悪くスクリーンセーバーを垂れ流しながら寝落ちしてしまっていましたorz