Raspberry Pi + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ

 3大キャリアが横並びの料金・制度を維持している一方で,ドコモの回線網を利用する MVNO 業界はますます盛り上がりを見せています。各社とも特色あるプランを用意し,様々なニーズに応えられる便利かつわかりやすいシステムを発達させています。そしてそのどれもが3大キャリアの同等プランの数分の一の料金なのです。
 この春の契約見直しで,私は IIJmio のファミリーシェアプランを契約しました。音声通話オプションを付けて月額3520円,1ヶ月に10GBが利用でき,同一回線で SIM カードが3枚まで追加料金無しで利用できるというものです。10GBの高速通信容量の利用は回線ごとではなく SIM ごとに手軽にオン・オフすることができ,オフにすると最大200kbpsでの通信となります。スマートフォンならこんなものでも困りませんから,常時オフで使えば,スマートフォンでのデータ通信では容量が減らないことになります 1。これで,光回線と DTI の490円 SIM を置き換えることを狙いました。
 今回は,その IIJmio 回線で使う LTE ルータを Raspberry Pi + L-02C で仕立てたメモです。

全体像

  • Raspberry Pi をルータにする。回線は ドコモ LTE ネットワーク(MVNO : IIJmio)とし,L-02C で接続する。
  • RPi ルータには無線アクセスポイント機能を持たせず,市販のブロードバンドルータ(光回線で使っていたもの)を AP モードで運用,有線 LAN で RPi ルータに接続する。
  • apt-cacher-ng を導入する。
  • その他,BGM 再生機能,時報チャイム機能などを搭載する。

使ったもの

  • Raspberry Pi B 3500円 2
  • LG L-02C 2000円
  • システムトークス USB ハブ SUGOI HUB 4X AC アダプタ付き 2600円 バッファロー BSH4AE12 1600円(重要)
  • Transcend 16GB UHS-1 microSDHC カード 500円
  • テンキー 300円
  • アクティブスピーカ 500円
  • Raspberry Pi 用 USB-AC アダプタ 3 1000円
  • microUSB ケーブル 100円
  • 筐体(100均の箱・蝶番,ネジ) 600円

計:11100円
(価格は100の位までに四捨五入してあります)

 L-02C,USB ハブ,SD カードと筐体以外は実際には流用。後述しますが USB ハブの選択肢は非常に限られます。この機種を強く推奨します。

侮るなかれ熱暴走
 最初,こんな感じで使っていました。
DSCF2397
DSCF2405
 蓋を閉めて,すっきりしていいなあと満足していたのですが,なぜか止まってしまうことがあります。止まった状態でしばらく放置しても,SoC に電力は行っているようで,触ってみると熱を持っています。どうも熱暴走っぽい雰囲気です。SoC 温度のログを取ってみると,室温25度で60度近くまで行くようです。大した数字ではないようにも思いますが,初代 B で CPU が古い設計なので熱に弱いのかもしれません。熱で壊れたという話もちらほら聞くので,冷却は重要です。
 ファンをつけるというのが最も確実な対策ですが,ファンレスは男のロマンですので,なるべくファンレスの枠内でのエアフロー改善を目指しました。その結果,こんな感じになりました。
DSCF2416
DSCF2419
 はい,また100均です。前はもうちょっと精度の高いメッシュの小物入れも置いてあったのですが,近所3軒回ってなかったのでオシャレグッズコーナーにあったへなへなの小物入れで妥協しました。蝶番も100均で調達,ネジはホームセンターで購入した M3 の 8mm です。絶縁とホコリ除けのため,蓋側となる Raspberry Pi の下にはクリアフォルダから切り出したポリプロピレンのシートを敷いてあります。コンパクトさ重視のためエアフローは合理的とは言えませんが,効果はかなりあり,同条件で概ね43度以下で推移するようになりました。今のところハングアップもありません。夏場はどうなるかわかりませんが,50度を超えることはないでしょう。
 (16/5/4追記)ウワーだめだ。カーテンを開けたまま部屋のサーキュレータを止めて散歩に出かけて帰ってきたら春の陽気に誘われて意識不明の重体になっていました。室温はそれでも28度。残念ながら,部屋の隅に置く通信機器としては,来たるべき夏をファンレスで乗り切るのは難しそうです。とりあえず普段使っているBIGFAN 80Uを筐体の横に置いてみました。ファンコンスイッチを挟んで回転数を抑えてありますが冷える冷える。室温28度ですが32度で安定しています。ロマンの敗北は残念ですが,やむをえまい。次に秋葉原に行った時にでも静かそうで5V以下でも動きそうなファンを買ってきて筐体に組み付けたいと思います。

LTE 回線の仕様
 MVNO の LTE 回線には,プライベート IP アドレスが割り振られるものとグローバル IP アドレスが割り振られるものが存在しています 4。私が今回契約した IIJmio は前者です。プライベート IP アドレスはローカルエリアネットワーク内での居場所を指し示すものに過ぎず,インターネットの向こう側からこちらにアクセスすることはできません。したがって,LTE 回線を利用してサーバを公開したり,P2P ファイル交換を利用することはできません。逆に言えば,セキュリティについてはそれほど心配する必要はないでしょう。この記事はプライベート IP が割り当てられる回線を念頭に置いたものですのでご注意ください。グローバル IP が割り当てられる環境の場合,ファイアウォールやサーバ設定をより慎重に行い,ソフトウェアアップデートを欠かさず行う必要があります。

ハードウェアの仕様・問題
 Raspberry Pi は,誰もが忘れていますがあくまでも教育用のマイコンボードであり,常時稼動でバリバリ使う前提で作られているデバイスではありません。電源アダプタはノーブランド品を避け容量に余裕があるものを選択するだとか,SoC と LAN コントローラにヒートシンクをつけるだとかいった基本は抑えておきましょう。また,第一世代では USB 端子の出力電流が少なく,各ポート 100mA となっています 5。最大で 740mA 消費する 6L-02C はバスパワー駆動では全く足りないので,セルフパワーの USB ハブを用意する必要があります。B+/2B では設定の変更によって, 7,3B では,デフォルトで全ポート合計で最大 1.2A まで供給可能 8なので,一時的な使用であればバスパワーでも問題なさそうですが,後述のように安定して運用するためには USB ポートの電源を制御する機能が必須であり,B/B+/2B/3B の内蔵ハブともにその機能はないようですので,やはり SUGOI HUB を購入する必要が有ります。
 L-02C について,当初は問題が多かったようですが,最新ファームウェア V10e では安定しているようです 9。ただし,いくつか注意すべき点があります。
・初期設定では,始めに CD ドライブとして認識され,それを eject するとモデムとして改めて認識されるというわけのわからない仕様になっています。これは無効化できます(後述)。
・SIM カードの認識がシビアなようで,mini/micro/nano SIM にアダプタを噛ませた状態で挿入すると SIM を認識できません(インジケータが赤く点滅していたら,SIM を認識できていないということ) 10。これは厚みに起因するらしく,アダプタの「背」の部分を切り抜くことで解決します。

Raspberry Pi の準備
 OS として「Raspbian Jessie Lite」を使います。これは Raspbian から X 等を除いた最小版で,今回のように Raspberry Pi をデスクトップ用途でない目的に使用する場合に適しています。
 まず,Raspberry Pi Foundation 公式サイトから,Raspbian Lite のイメージをダウンロードします。
 zip ファイルを解凍のうえ,dd で SD カードに書き込みます。もし SD カードが /dev/sdc として認識されていれば,コマンドは以下のようになります。

$ sudo dd bs=1G if=Downloads/2016-03-18-raspbian-jessie.img of=/dev/sdc

 書き込み終えたら Raspberry Pi に挿入して起動し,ユーザ名 pi,パスワード raspberry でログインします。

raspi-config でもろもろの設定をする

$ sudo raspi-config

 ”Internationalization Options” および “Expand Filesystem”を実行,設定。Boot Options から Console Autologin を選択(後述するテンキーでの操作を可能とするため)。Advanced Options の SSH から SSH サーバ有効化。好みで Hostname や Memory Split 11も設定。
続きは SSH から。

ユーザ名を変更
 まあ好みの問題です。

$ sudo adduser hoge
$ sudo nano /etc/systemd/system/getty.target.wants/getty@tty1.service

 自動ログインするユーザを変更します。

ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM

となっている行の「pi」を新しく作ったユーザにします。

$ sudo gpasswd -a hoge adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi

 pi が入っているもろもろのグループに入っておきます。

$ sudo passwd

 su できたほうが便利なこともあるので,root のパスワードを設定して su できるようにします。

音が出るようにする
 Raspbian Lite では標準ではオーディオドライバが読み込まれていないので,これを読み込みます。

$ sudo modprobe snd-bcm2835
$ amixer sset PCM 100%
$ speaker-test

 音が出たら,起動時にカーネルモジュールを自動で読み込ませるようにします。

$ sudo nano /etc/modules

 末尾に以下の一行を追加。

snd-bcm2835

ルータ機能のセットアップ
L-02C のファームウェアアップデート,リセット,CD として認識される機能の無効化
 ファームウェアアップデートと端末リセットは Windows でやります。ドコモの製品ページに書いてあるとおりにやるだけです。
 次に CD として認識される機能を無効化します。AT コマンドを送ることで恒久的に 12無効化することが可能です。
 手順は以下を参照のこと。

L-02Cを最初からUSBモデムで認識させる/手動でAPN登録する – /dev/stkinosh

wvdial の設定,IP フォワーディング・IP マスカレード
 書こうと思ったのですが,こちらも既に素晴らしい記事が多くありますので紹介のみにとどめます。私が見つけた中で最も網羅的でかつわかりやすい記事は以下です 13

L-02CでLTEルータ作成 – /dev/stkinosh

ほぼ上のとおりにやりました。違うことをしたのは以下のみです。

  • usb_modeswitch は導入不要。
  • wvdial.conf で,
    Init3 AT+CGDCONT=1,"IP","iijmio.jp"

    を追加(フラッシュメモリに APN をあらかじめ書き込んでおいて使うのではなく,接続時に ID・パスワードと一緒に渡す)。元々の Init3 は Init4 に。

  • wvdial.conf で,/dev/ttyUSB2 ではなく /dev/serial/by-path/platform-bcm2708_usb-usb-[ここは環境によって違うはず].2-port0 を指定。こちらは(ttyUSB* と違い)物理的に同じ場所に挿される限り不変なので,L-02C を再起動した(抜いて挿し直した)場合にも Raspberry Pi の再起動が不要になる。
  • $ sudo vi /etc/network/interfaces
    iface eth0 inet manual

    となっているのを,

    auto eth0
    iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

    などとし,固定 IP を指定する。

  • iptables の設定保持用に netfilter-persistent (iptables-perssstent) を導入。仕上がったら
    $ sudo netfilter-persistent save

    するだけで保存して次回起動時にも読み込んでくれる。

  • まあ念の為ということで ssh は 192.168.0.0./24 および 192.168.1.0/24,domain および bootp (dhcp) は 192.168.1.0/24 からのアクセスのみを許可するよう変更。グローバル IP が振ってくる回線の人は必須です。別の回線から当該回線の IP に nmap -Pn してみて出てこなければオーケー。このへんがわかりやすい→iptablesの設定方法|さくらインターネット公式サポートサイト
  • ディレクトリ,ログ,DNS サーバなどを自分の好みに変更。

ほか,以下のページも参考にしました。
格安SIM(MVNO)とRaspberry Pi(ラズベリーパイ)でモバイルルータを作った 〜初期設定から完成まで〜 – $yuzu->log();
Qaplaの覚書・メモ・備忘録・独言 Raspberry Pi をUSBモデムでインターネット接続
Berrbear: Raspberry piでUSBモバイルモデム
SORACOM Air が使える USB 3G/LTE モデム、WiFi ルーターのまとめ – bearmini’s blog
Raspberry PiをL-02C+IIJmioでつないでみた: EeePCの軌跡
Raspberry Pi 2で0SIMをL-02Cで使ってみた。
Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom |
デジモノステーション2016年2月号付録の0SIMをRaspberry Piで試す | matoken’s meme

ルータ以外の機能のセットアップ
 ルータ以外の機能をセットアップします。apt-cacher-ng を導入する以外は以前書いた「Raspberry Pi ホームオートメーション計画(1)」とほぼ同じです 14。それぞれの機能は USB テンキーで操作できるようにします。

apt-cacher-ng
 Apt-Cacher Next Generation は,APT の deb ファイルをキャッシュしてくれるソフトウェアです。これを導入することによって,アップデートに伴うデータ通信を削減することができます。LAN 内に Debian 系で同じアーキテクチャ(i386 など)の同じディストリビューションが導入されたマシンが複数台ある場合に有用です。サーバにインストールしたうえでクライアントでプロキシの設定をするだけで利用できます。なお,場合によっては大量のデータをローカルに書き込みますので,SD カードの寿命を大きく削ることが予想されます。最初 USB メモリや USB HDD などに書き出すことも考えましたが,一度設定が完成したらオリジナルの(消えたら困る)データは蓄積されませんので 15,SD カード一本で行って壊れたら都度買い直して dd でイメージを書き戻すようにした方が手間を考えると低コストであると考え,とりあえずそれで様子を見ることにしました。

# aptitude install apt-cacher-ng

 次にポートを開けます。ローカルネットワークから,ポート3142への通信を許可します。上で紹介したページでの IP アドレスレンジ,rules の場合の例。

$ sudo iptables -I OPENNEW 4 -p tcp --dport 3142 -s 182.168.1.0/24 -j ACCEPT

 よくある凡ミスでパケットを全部 drop した後ろにルールを追加して反映されないというのがありますので気をつけてください 16。iptables は上から順番に逐次マッチングされて,最初に見つかった合致するルールだけが使われます。
 LAN 内のマシン全てに以下のファイルを作ります。

# vi /etc/apt/apt.conf.d/02proxy

中身はこんな感じで。

Acquire::http::Proxy "http://192.168.1.1:3142/";

 update のうえで何かインストールしてみて,/var/log/apt-cacher-ng/apt-cacher.log にきちんとログが残っていたらうまくいっています。http://192.168.1.1:3142/ にブラウザでアクセスすると,キャッシュのヒット率などを見てニヤニヤすることができます。
第315回 apt-cacher-ngを使ってAPT用キャッシュプロキシの構築:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

音楽再生
 次に ogg123 を導入します。この手の用途では mplayer がよく使われますが,多機能な一方 X に依存しているなどヘッドレス環境で使うにはあまり便利でないので,単機能でコンパクトなこちらのソフトを選択しました。

$ sudo aptitude install vorbis-tools

 たとえば,~/Music/Classical にある全ての ogg ファイルをシャッフルして無限ループさせる場合は以下のようにします。

$ ogg123 -r -z -q Music/Classical/*.ogg &

 mp3 ファイルを使用する場合は,mpg321 を使用します。ソフト名は mpg321 ですが,コマンドとしては mpg123 でもデフォルトでパスが通っています。逆に ogg321 はダメなので,ごっちゃにならないよう mpg123 として使うことをおすすめします。

$ sudo aptitude install mpg321
$ mpg123 -r -z -q Music/Classical/*.mp3 &

 これを後で alias に設定します。

チャイムを鳴らす
 部屋にいることが多い学生身分なので,だらだら過ごしてしまわないよう時報を鳴らすようにしています。私の設定は以下で,朝8時〜夜10時まで1時間ごとにチャイムが鳴ります。

$ crontab -e
0 8-22 * * * ogg123 -q [パス]/chime.ogg

なお,「crontab -e」しようとして「crontab -r」しちゃうというのは定番ネタですので,.bashrc に alias ‘crontab’=’crontab -i’ を加えておくのがおすすめです。
cron の設定ガイド

データ通信量を出す
 本当は「みおぽん API」を使おうと思ったのですが,この辺になるとそろそろめんどくさい短い人生の限りある時間を大切に使おうという気持ちが強まってきたので,/proc/net/dev を使って簡易的に済ませます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done

 これで eth0 を通った上り・下りのデータ量の合算を表示できます。単位は MB です。後述のように LTE の接続が切れて ppp0 が消えてしまうことがあり,その時に累積が消えてしまうので,入口の ppp0 ではなく LAN への出口の eth0 を見ています。Raspberry Pi の自体の通信(ソフトウェアアップデートなど)は反映されませんが,このさい細かいことは気にしない。
 /proc/net/dev は再起動するとリセットされるので,電源を切るときはどこかに書きだしておく必要があります。/var/log/packetcount.log に書き出すとして,以下のようにすると合算して表示できます。

$ grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done

 このまま実行するとファイルが存在せず何も挿入されず文法エラーになるので,/var/log/packetcount.log を作って 0 とだけ書いて保存しておいてください(雑

 これを毎月リセットするために,crontab を設定します。Raspberry Pi には RTC がなく,たとえば1日0時5分などとすると5分以内に NTP サーバとの通信がうまくいかなかった場合に実行されてしまいますので,余裕を持った時間指定にしておきます。

$ sudo crontab -e
1 10 1 * * echo '0' > /var/log/packetcount.log

ネットワークの転送量を調べる方法 – ぴょぴょぴょ? – Linuxとかプログラミングの覚え書き –

OpenJTalk で喋らせる

$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

 オプションを引数で指定するのが必須だったり,wav ファイルとして出力されるのでそれを別途再生する必要があったりといろいろ煩雑なので,引数として文字列を渡せばそのまま喋ってくれるスクリプトを用意しておきます。なお,Raspbian のベースが Wheezy から Jessie に変わった関係で,OpenJTalk の使い方もやや変わっているのでお気をつけ下さい。

$ nano /usr/local/bin/ojsay
#!/bin/bash
TEMP=$HOME/ojsay.wav
echo $1 | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow $TEMP
aplay --quiet $TEMP
rm $TEMP
$ chmod +x ojsay
$ ojsay 誰かがヨーゼフ・Kを中傷したにちがいなかった。悪いこともしていないのに,ある朝,逮捕されたのだ。

 少し待たされて,読み上げられるはずです。むちゃくちゃお手軽ですね。処理に時間がかかるのと,一文が長くなると突然読み上げがやたら遅くなるというバグ?があるようなので,一度に喋らせるのは一言二言にしておくのがおすすめです。
他のコマンドの出力やウェブスクレイプイングと組み合わせれば,可能性は無限大です。

$ ojsay "$(date +"%B%d日 %I時%M分")"

 日時を読み上げ。

$ ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"

 SoC の温度を読み上げ。

$ sudo aptitude install curl
$ ojsay "$(curl http://www.tenki.jp/forecast/3/16/4410/13101-daily.html 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)" | head -n1"

 天気を読み上げ。

$ ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"

朝日新聞社ウェブサイトの見出し読み上げ。(流石に結構待たされる)
RaspberryPiにOpenJTalkをインストールする – 試したこととか困ったこととか
Debian Jessie に OpenJtalk を入れてテキストを読み上げてみた – 残しときます(自分用)
Linux – シェルスクリプトで天気予報取得! – mk-mode BLOG

テンキーで操作できるようにする
 入力は USB テンキーから行います。最初はプログラマブルテンキー「NT-19UH2BK」を検討したのですが,金欠なので無駄をなくし環境負荷を軽減するために棚に転がっている普通のテンキーを有効活用することにしました。入力そのものは数字だとか記号だけですので alias でそれぞれにコマンドを割り当てます。まあ,今回の用途なら特に不足はありません。

とりあえず,こんな感じで割り当てました。

* 再起動
*** 停止
7 SoC 温度読み上げ
8 ニュース見出し読み上げ
9 音声出力オン
+ データ通信量読み上げ
+++ データ通信量リセット
4 天気予報読み上げ
5 日付読み上げ
6 音声出力オフ
1 再生開始1
2 再生開始2
3 再生停止
0 ping
00 L-02C 電源リセット(詳細は後述)
000 アップデート試行
000000 とてもつらい

以下を ~/.bashrc に追加します。

alias '*'='ojsay '再起動します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -r now"'
alias '***'='ojsay '停止します'; if [ "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $(((x2+x10) / 1024 / 1024)); done)" != "" ]; then sudo sh -c "echo "$(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)" > /var/log/packetcount.log"; fi; sudo sh -c "shutdown -h now"'
alias '7'='ojsay "現在のコア温度は $(echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000)) | sed s/\.[0-9]+$//g)度 です"'
alias '8'='ojsay "$(curl http://www.asahi.com/ 2> /dev/null | grep -A 1 "iref=comtop_6" | sed "-e s/<[^>]*>//g")"'
alias '9'='amixer sset PCM on'
alias '+'='ojsay "今月のデータ通信量は $(grep eth0: /proc/net/dev | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11; do echo $((((x2+x10) / 1024 / 1024)+$(cat /var/log/packetcount.log))); done)メガバイト です"'
alias '+++'='ojsay "データ通信量の記録をリセットします"; sudo sh -c "echo '0' > /var/log/packetcount.log"; sudo sh -c "shutdown -r now"'
alias '4'='ojsay $(curl http://www.tenki.jp/forecast/[お住まいの地域の URL] 2> /dev/null | grep -e "wethreDrtalIiconText" | sed "-e s/<[^>]*>//g" "-e s/^ *\(.*\)\$/今日の天気は \1 です/" | head -n1)'
alias '5'='ojsay "$(date +%B%d日%I時%M分)"'
alias '6'='amixer sset PCM off'
alias '1'='ogg123 -r -z -q ~/Music/Jazz/*.ogg &'
alias '2'='ogg123 -r -z -q ~/Music/Classical/*.ogg &'
alias '3'='sudo sh -c "pkill -f 'ogg123'"'
alias '0'='ojsay "$(ping=$(echo "$(ping -c1 8.8.8.8)"|grep " 0% packet loss"); if [ "$ping" = "" ]; then echo "ネット接続に問題があります"; else echo "ネット接続は正常です"; fi)"'
alias '00'='sudo sh -c "checkppp0"'
alias '000'='sudo sh -c "aptitude update; sudo aptitude upgrade -y"'
alias '000000'='ojsay "とてもつらい"'

 このままだと sudo sh がパスワード入力待ちで止まってしまいますので,これらのパスワード入力を不要にします(雑

$ sudo visudo
hoge ALL=(ALL) NOPASSWD: /bin/sh

を追加。ま,今回の場合パスワード入力は自分のフールプルーフになればいいのでこれでよしとします。
 テンキーにシールを貼るなどして割り当てた機能を書いておくとわかりやすいです。

L-02C の自動再起動を実現する
 よし完成,めでたしめでたし……と思ったら,ときどき通信が切れて,L-02C の電源を一度切るまで(ポートから一度抜いて挿しなおすまで)使えなくなることがあることに気が付きました。どうも L-02C のファームウェアの安定性に何かしら問題があるようです。数分おきに ping を飛ばすなどして自動切断の回避を試みるなどしても 17,あまり効果はないようです。他は完璧なのに,ここだけはどうやってもうまくいきません。
MR-GM2運用テスト、とりあえず失敗・・・ | めざせ東京リーマンの千葉週末田舎暮らし
MR-GM2運用テスト、その後・・・|めざせ東京リーマンの千葉週末田舎暮らし ー太陽光発電の売電収入で別荘が買えるかー
格安simをパソコンで使えるようにする曲者デバイスL-02cを紹介(オススメするとはいわない)|投げて、捨てて、シンプルライフ

 残念ながら AT コマンドでハードウェアを再起動させる方法はない模様です。しかしまあ,要するに,一度電源を切ってやればよいのです。/sys/bus/usb/drivers/unbind や /sys/bus/usb/devices/*/power/control 18 19 20から電源を切れますし……と思ったら,できない。前者は認識はしなくなるけど電源は切れない。後者は存在すらしない。なんで。
 しばらくさまよい歩くと,「hub-ctrl.c」というイカしたツールを見つけました。これを使えば,USB ポートの電源をより手軽に制御できるとのことです。――自分の環境ではできませんでしたが。なんでも,lsusb -v してみて Hub Descriptor に「Per-port power switching」とあるものでしか電源制御はできないらしい。「No power switching」や「Ganged power switching」とあるものはそもそもそのための回路が入っていないとのこと。最初に購入した U2HS-T201SBK という USB ハブは,案の定というか「Ganged power switching」でした。なんてこった。名前からはできそうな雰囲気が漂っているんですけどね…..光学マウスを付けて試してみたら,(全てのポートに一斉に反映されるのではなく)特定の1ポートのみに反映され,ランプが消えました。これは行けるか? と L-02C につなぎ替えてみたら無理でした。USB ランプ(単に電力を取ってるだけでなんの制御回路もなし)をつないでいると p=0 にしても光ったままですから,電源自体は供給されたままのようです。手元にあった U2HS-T201SBK(バスパワー)および BSH5U03(セルフパワー)の2機種で同じ挙動。また,実機が手元にないのと情報が少ないのでなんともいえませんが,今回使用した B に加え B+/2B/3B の内蔵ハブもポート個別の電源制御はできないようです。
 じゃ「Per-port power switching」なハブってどんなのがあるのというと,マザーボード内蔵のものを除き殆ど無いんだそうな。まあ確かに USB ハブのポートを個別に制御しようという需要なんてあんまりないでしょうからねえ。動作報告のある現行品で唯一の選択肢が,「SUGOI HUB 4X (USB2-HUB4X)」というものらしい。なんとなく不安になる製品ページですが,ともかく,4つあるポートの内なぜか2つだけですがちゃんと電源を制御でき,USB ランプのような電源ラインしか使っていない機器もオンオフできるらしい。ということで購入。予算オーバーつらい。
 喜び勇んで /sys/bus/usb/ 方面を漁ってみたのですが,power/control がない。ああそうだった。調べてみると,Raspbian が採用している4.1系のカーネルではこの制御方法は廃止されているようです。unbind にデバイス ID を書き込むやり方は使えて,無事にオンオフできましたが,両方のポート一斉にしかできません 21。まあそれでも困りませんが,せっかく買ったので実力を出し切りたい。幸い,先述の hub-ctrl を試してみたところ今のカーネルでもそのまま使えましたので,これを採用することにしました。

$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ sudo aptitude install libusb-dev
$ gcc -o hub-ctrl hub-ctrl.c -lusb
$ chmod +x ./hub-ctrl
$ mv ./hub-ctrl /usr/bin/
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 0
$ sudo hub-ctrl -b 001 -d 004 -P 2 -p 1

 おー,いけるいける。lsusb して NEC Corp. HighSpeed Hub とあるものの Bus を -b, Device を -d,ポート番号(向かって左から1,2)を -P で指定しています 22。-p 0 でオフ,-p 1 でオン。これさえあればこっちのものです。
というわけで,

$ sudo vi /usr/local/bin/checkppp0
#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" ); if [ "$pppalive" = "" ]; then /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 0; sleep 10; /usr/bin/hub-ctrl -b 001 -d 004 -P 2 -p 1; fi

 (crontab に一行で書こうと思ったけどなんかうまくいかなくて面倒くさくなってそのまま外部のスクリプトにしたというアレ)
 
 (16/9/11追記)追記し忘れていましたが,ハブを BSH4AE12 に交換して,1)ハブしか接続していなくても Device の番号がたまに変わるようになる,2)ポートのひとつひとつを選択して入切してやらないといけないっぽい?という仕様の違いがあったので,それに対応するために checkppp0 を修正しました。BSH4AE12 対応版は以下です。たぶん大丈夫と思いますがちゃんとチェックしてないのであんまり自信ない。

#!/bin/sh
pppalive=$( /sbin/ifconfig | grep "ppp0" )
if [ "$pppalive" = "" ]
        then
        HUB=`/usr/bin/lsusb -v 2>/dev/null | grep ^Bus | grep "Genesys Logic, Inc. USB-2.0 4-Port HUB"`
        BUS=`echo $HUB | awk '{print $2}'`
        DEV=`echo $HUB | awk '{print $4}' | sed -e "s/\(.*\)\:/\1/p;d"`
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 0
        done
        sleep 20
        for i in 1 2 3 4
        do
                /usr/local/bin/hub-ctrl -b $BUS -d $DEV -P $i -p 1
        done
fi

 
 ここまで何日もいじっていて,圏外(ランプ黄色),接続待機でのハングアップ?(ランプ白),接続再試行中のハングアップ?(ランプ青点滅)問わず通信ができなくなった時には確実にセッションも切れて(そしてそう認識されて) ppp0 が消えるらしいということがわかったので,単に ppp0 の存在確認をしています。ping を飛ばすのと違いネットワークに負担がかかりませんし,CPU も食いませんので,毎分だって実行できます。これによって,ダウンタイムを最小化でき,自宅回線としてストレス無く利用することができるようになります。15分の load average を見ても 0.1 を超えることはない(おおむね0.05〜0.07で推移)ようなので,更にチェックの頻度を上げるのもアリでしょう。
 (16/5/1追記)と書きましたが,ダメっぽいです。時々ひっそりと死んでいることがあります。理由は特定できていませんが,ログに出てないのでハードウェア側っぽく,熱は大丈夫なので電源周りっぽい雰囲気があります。2.4A対応アダプタ+ケーブルで試してもダメなので,本体の問題の模様 23。だとしたら,B+以降やポリヒューズ改造後の個体なら大丈夫かもしれません。そのへんはまた後で検討するとして,とりあえず毎分ではなく5分おきに実行するようにしてみたところ安定しています。
 (16/11/2追記)別ハードウェアで毎分の実行を試してみて気付きましたが,wvdial の自動再接続で事が済むような“正常な”接続断にまで L-02C 再起動で対応することが増えてしまうため,却ってダウンタイムが一気に増えてしまいます。やはりチェックのインターバルは数分程度はあったほうが良いようです。
 なお,今回は Raspberry Pi 本体にハブしか挿しておらず数字が変わらないのでベタ指定してますが,他のデバイスも挿している場合は,こちらを参考に lsusb から自動取得するようにするとよいでしょう 24
 
では,最後の敵をいざ倒さん。

$ sudo crontab -e
*/5 * * * * /usr/local/bin/checkppp0

 ふー,倒した。長かった。ともあれ,これでやっと RPi ルータが完全体になりました。

 (16/8/14追記)SUGOI HUB 4X が早くも故障してしまいました。享年4ヶ月という夭折です。改めてネットを眺めてみると,比較的ニッチな製品の割に故障報告が多く目に付きます。じっさい製品の値段もそう高くありませんし,回路は奢っていてもコンポーネントの質は高くないのかもしれません。修理をしても(これがまた販売店への持ち込み不可で最初にメールであれこれしないといけないとやたら煩雑なのですが,それはまた別の話……)また壊れてしまうかもしれません。そこで代替機種を調べてみることにしました。白羽の矢が立ったのが,「節電 USB ハブ」を謳うバッファロー BSH4AE06 です。とても小さい上,手にとってみると非常に軽く,おそらく中はスカスカでしょう。しかしその分,部品点数が少なく壊れにくいことが期待できます。この機種は既にディスコンになっており,後継機種として BSH4AE12 というものが出ています。型番や能書きを見る限り,中身は miniUSB 対応から microUSB 対応に修正された以外は同じものではないかと思われます。今はまだ BSH4AE06 の方が安いですが,まもなく入れ替わることになると思います。なお,USB 3.0 ハブにも目を向けると,電源制御に対応しているという報告のあるものがいくつもあります。 25ただし,セルフパワー対応のものはまだ値段がこなれていません。
 さて BSH4AE06 ですが,結論としては「当たり」でした。Per-port power switching ではなく ganged power switching ですが,先述のような,実際には電源制御できないのに(おそらくは設計上の不備によって)情報だけはそう渡していると思われるものではなく,「本物の」 ganged power switching ですので,ポートごとの電源制御はできませんが,ハブの全ての電源を一度にオンオフすることであれば可能です。lsusb すると「Genesys Logic, Inc. USB-2.0 4-Port HUB」というのがありますので,/usr/local/bin/checkppp0 を先述の要領で書き換えます。また,/etc/wvdial.conf のモデムのパスも書き換える必要があります。
 あと,この件に関する修正を加えるにあたって,この記事がものすごく役に立ちました。当然といえば当然ですが,何かするときに記録を細かく残すのは大切ですね。

 しばらく運用してみて大丈夫そうなら,完成です! おめでとう! 忘れずにバックアップしておきましょう。shutdown -h now したあとカードを別のマシンに刺して,わかりやすいファイル名で保存しておきます。圧縮をかけると未使用領域が縮んでナイス。

$ sudo sh -c "dd if=/dev/sdc | gzip -c > RPI-LTE-ROUTER-$(date "+%y-%m-%d").gz"

(/dev/sdc の部分は環境によって異なります)
 いやあ〜よかったよかった。
モーション検出でUSBライトのON・OFF
LinuxからUSB HUBの電源のON/OFFを制御してみる – memoメモ
電源制御型USBハブでUSBチューナーの見失い状態を解消する。(PX-W3U3、S3U2ほかUSBチューナー汎用): Vladiのブログ
IoTでアボカドの発芽促進とカビを防止する – Part2: BeagleBone Blackで植物育成LEDライトを制御する – Qiita
えびめも(2011-05-30)
GitHub – codazoda/hub-ctrl.c: Control USB power on a port by port basis on some USB hubs.

感想
 3,4年周回遅れなだけあり情報が多く,基本機能については OS 導入から DHCP で IP アドレスを貰ってネットに出られるようになるまでが1時間くらいで終わりました。が,そこからが長かった。ちょっとした問題を潰すために試行錯誤したり,問題の原因を探るために勉強しなおしたりで,期間で一週間以上,丸何日かを費やしました。この記事を書くにあたっても,調べなおしたり再現するか確かめたりしてさらに1日潰れました。いちおう2週間近く実用したうえでの記事公開ですが,まだ何か起こるかもしれないとヒヤヒヤです。しかし,市販のモバイルルータも常時稼動に対応するほどには安定してはいないらしく,データ通信ドングルに対応したルータもいまいち痒いところに手が届かないようですから,LTE 回線を自宅回線として使いたいのであれば,「Raspberry Pi で DIY する」というのがいまのところ最良の選択肢でしょう。ネットワークの復習を含めなかなか勉強になるので,時間に余裕があればやってみると面白いはずです。

4ヶ月使ってみての感想
 記事公開から4ヶ月ほど経ちました。しばらく光と併用していたので正味では2ヶ月くらいですが,中間報告をば。

  • 1ヶ月10GBに収めるためには1日あたり333MBまでの通信に収める必要があります。これはけっこう厳しいですが,ストリーミング系は禁止とし,漫然とウェブブラウジングすることもやめれば,特に問題ない範囲です。この負のインセンティブにより時間を有効に使えるようになるというメリットもあります(?) ブラウザを起動しない日を週に何日か取るようにすれば完璧です。土日は古今東西の名著を手にとったり近場を散歩したりして過ごしましょう。なんて健康的なんだ。
  • 通信速度はそれなりですが,LTE なので ping が速めで,体感としては割と快適です。テキストベースのサイトであれば光回線と違いがわかりませんし,画像の多いサイトでも少し引っかかる程度です。混雑する時間帯でも体感としては ADSL の遅いとき程度です。
  • 自動再接続のおかげで「使おうと思ったら繋がらない」ということはほとんどありませんが,回線が混雑する時間帯には複数のタブを同時に開くと読み込み中のまま止まったり接続がタイムアウトしたりすることがあり,その場合にはページを再読込する必要があります。
  • Linux ディストロのインストールディスクなど大きなファイルのダウンロードは困難です。通信速度が充分でも途中で失敗してしまうことが多いです。Wget などのダウンローダを使用すると多少改善しますが,それでも失敗が多いです。Bittorrent は“無駄”な通信が多いので容量制限のある回線では避けたほうが無難ですが,IIJmio では遮断されているようでそもそも使えません。ダウンロードに失敗するとその分のデータ容量が無駄となり痛いので,大きなファイルのダウンロードはなるべく避けましょう。なお,OS のアップデート程度であれば,回線が空いている時間帯であれば特に問題なくできます。
  • 空冷にしてからとても安定していますが,帰宅したらラズパイが落ちていたことが一度だけありました。電源か熱でしょうが,再現しないのでなんともいえません。思えば今使っている初代Bはもう4年くらい前に買ったブツですので,ハードウェアの変更も視野に入れています。

更新履歴

  • 16/05/01 接続確認の頻度が高すぎて動作が不安定になることがあった件を修正
  • 16/05/04 ファンレスの夢が破れた件について追記
  • 16/08/14 SUGOI HUB 4X がすごいすぐ壊れた話と BSH4AE06 への乗り換えについて追記
  • 16/09/08 4ヶ月使ってみての感想を追記

Notes:

  1. もっとも,高速通信オフ時は3日で366MBまでという制限があります。 通信規制はありますか? | IIJmio
  2. Raspberry Pi (1) B+ の現在の価格より
  3. SUGOI HUB 付属 AC アダプタの出力は 5V2A なので数値上は USB ハブから余裕を持って取れそうなのですが,なぜか正常動作しませんでした。気になりますが,面倒なので今回は調べません。
  4. 一般的には前者が多く,OCN 系や Biglobe 等はグローバル IP らしい。Interlink のように安価に固定 IP を提供しているところもあります。
  5. USB – Raspberry Pi Documentation
  6. マニュアル p.120
  7. Raspberry Piブログ : [コラム] Raspberry Pi Model B+でUSBの最大出力を1.2Aにグレードアップしよう, なお safe_mode_gpio=4 は古いバージョンでのオプションで,互換性のために書かれているだけのため,最近のバージョンを使っている場合は max_usb_current=1 だけで大丈夫です。
  8. Raspberry Pi • View topic – RPi 3 – Very poor wifi performance, 16/4/19 Raspberry Pi Foundation エンジニアの Dom 氏曰く,”1.2A is the default and max_usb_current has no effect on Pi3.”
  9. 価格.com – 『バージョンV10eで安定化』 docomo L-02C [レッド] のクチコミ掲示板
  10. L-02C SIM(UIM)カードが認識しなくて困っていたが解決のようです|ぽちびろの日々ツイート
  11. ディスプレイに繋いでも CUI のみで VRAM はほぼ使うことはないのでがっつり減らしてよい。その分,システムに割かれるメモリ容量を増やせる。ただ,最小値は16MBらしい。 RPiconfig – eLinux.org – http://elinux.org/RPiconfig
  12. 設定がフラッシュメモリに保存されます。
  13. さすがに LTE 回線を自宅回線にしようというニーズはまだ殆どないようで,安定しそうにない構成だったり,重要な情報が抜けていたり,中には明らかに問題のあることをしている記事も散見されますので,実際に作業を始める前に検討する必要があります。
  14. なお part2 は結局まだ書けていません。音声入力はやたら手間がかかる割にうまく行っても他の入力手段より実用上快適にはならないということがわかったので pending という名の放置中です。そのうちやる気と時間がある時にでも……
  15. 犯罪に巻き込まれたような場合にログが残ってなかったら困るな,という程度
  16. またやっちまった。
  17. 定期的に ping を飛ばす手順はこちらを参照のこと。 常時接続の維持 (PING コマンド)
  18. Controlling a USB power supply (on/off) with linux – Stack Overflow
  19. kernel – Turning off power to usb port. Or turn off power to entire usb subsystem – Unix & Linux Stack Exchange
  20. Power OFF and ON USB device in linux (ubuntu) – login: root
  21. 細かく指定しようとするとエラーが出る。
  22. そこに挿しているデバイスではなく,ハブを見ることに注意してください。
  23. Minecraft Pi もできたので,Bとはいえ改良後のリビジョンのはずなのですが……
  24. ただし,手数が増える分 CPU 負荷はやや増えるはずです。
  25. 詳しくないですが,USB HDD エンクロージャも USB 3.0 のものはどれも電源連動に対応していますし,規格上対応が必須になるなどしたのではないか? という気がします。

社会不適合者の偉人たち

あるいは名も無き社会不適合者の自己弁護。

ディオゲネス(前412? – 前323)ディオゲネス
 古代ギリシアのシノペに生まれた哲学者。服もまとわずそのへんに転がっていた大きな甕の中でゴロゴロして暮らし,あらゆる知識を鼻で笑い,あらゆる慣習を放棄した。そして,しかめ面をした哲学者たちをからかって回った。ポリス(都市国家)への帰属意識の高かった時代にコスモポリタンを名乗り,自足することを目指すべき徳とし,何も所有しないことを勧め,実際に何も所有しなかった。
 プラトンはディオゲネスを評して「狂ったソクラテス」と言ったという。もちろん軽蔑する意図での発言ながら,なんと魅力あふれる二つ名であることか。この徹底した社会不適合っぷりながら市民には慕われていて,ディオゲネスが必要とするものがあれば何でも提供されたという。
・Russell, Bertrand “History of Western Philosophy” (Routledge, 2004) pp.221-223
16.生と死に向き合った哲学者たち – 7. 第二のソクラテス「酒瓶に住んだシノペのディオゲネス」
Diogenes of Sinope – Wikipedia, the free encyclopedia 2016/4/16
・京大西洋史辞典編纂会『新編西洋史辞典改訂増補』(東京創元社,改訂増補,1993) p.480(「ディオゲネス」)
 
ヘンリー・キャンベンディッシュ(1731 – 1810)197px-Cavendish_Henry_signature
 18世紀英国の化学者・物理学者で,科学者としての実績もさることながら,とにかくものすごい人間嫌いとして有名な人物。名門貴族の当主で大金持ちなのに人間嫌い。当世一流の碩学で知られ全国の知識人から広く尊敬を集めているのに人間嫌い。人間嫌いなので大学も中退。人間嫌いなので生涯独身。どれくらい人間嫌いなのかというと,人に話しかけられても返事すらしない。あまりに人間嫌いすぎて,存命中から注目を集め高い地位についていたにもかかわらずその人となりについての記録はあまり残っていない。特に女性が苦手で,自分の家のメイドと顔を合わせることも非常に嫌がる。たまーになにか言ったり,自ら認めた論文を発表したりする。財産にも名誉にも全く興味がなく,ただ研究することのみを人生の意義として,78年の長い生涯を通して発見の多くは発表しなかったために,多岐にわたる分野の膨大な発見をしたにもかかわらず科学史に与えた影響はそれほど大きくなかった。死後発見された遺稿を見て科学者たちは「これが生前に公開されていたら」と惜しんだという。
イギリスのエキセントリック科学者の雄:ヘンリー・キャベンディッシュの生涯(1731.10.10-1810.2.24) 2016/4/16
Henry Cavendish – History of Science 2016/4/16
ヘンリー・キャヴェンディッシュ – Wikipedia 2016/4/16
Henry Cavendish – NNDB 2016/4/16
どこでもサイエンス (31) 天才&変人キャベンディッシュ | マイナビニュース 2016/4/16

フリードリヒ・ニーチェ(1844 – 1900)177px-Nietzsche187a
 ニーチェは幼い頃とても内気な少年だったという。やがて伝統的価値観への挑戦を志すようになるが,依然として人間嫌いのままだった。『新編西洋史辞典改訂増補』では「孤独で狷介な性格」と書かれている。キリスト教(欧州における伝統的価値観)をルサンチマンとして攻撃した彼は,実のところ自分自身についてはルサンチマンの塊だったようで,彼の著作には自らがあまり認められないことに対する苛立ちのようなものが見え隠れする。苛立ちが頂点に達したのが『この人を見よ』で,自分がいかにエラくてスゴいのかが延々と書き連ねてある。これを書き上げた翌年にはとうとう狂気に飲み込まれてしまった。
 プライベートでも多難だったらしい。女性に対して非常に奥手でぎこちない一方,すぐ深く恋に落ちてしまう性格だったようで,生涯を通してさまざまな女性にまわりくどくてなんだかよくわからない手紙を書いてみたり,かと思ったら突然告白しては断られたりしている。福岡女子大教授(当時)恒吉良隆氏は論文「ニーチェをめぐる女性たち:ニーチェの女性観の背景(I)」で,ニーチェが惹かれた女性は「どちらかというと小柄で,繊細な感じの,しかも音楽好きのタイプ」が多かったと指摘しており,これもなんかなるほどねという感じである。最も深く恋に落ちた相手はルー・ザロメという当時21歳の女性だったと言われ,共通の友人であるパウル・レーと争ったうえ唐突に求婚し,すげなく断られて失恋している。この際の傷心は相当のものであったようで,自殺の意向まで仄めかしている。なお,この時のニーチェの年齢は38歳。いい年したオッサンが何やってんだか。また,ニーチェにはエリーザベトというブラコンの妹がいたが,だんだん差別主義に凝り固まり,ユダヤ人差別や保守的道徳観によってニーチェの研究や恋路をひたすら邪魔する存在となり,ニーチェのただでさえつらい人生を更につらくしていった。敬愛する兄を「取られる」ことに嫉妬したのだとも言われているが,なんにせよ,全くモテないのに勝手に恋に患うニーチェにとってはさらに妨害まで入るなんて本当に迷惑極まりない話である。そのうえエリーザベト自身はブラコンのくせにちゃっかり結婚してるし。あげく,ニーチェの没後はその思想をナチズムのために都合のいいように利用して,長らくニーチェに対する後世の評価を落とす原因となった。散々である。根拠のない伝説では,ニーチェは広場で鞭打たれる馬を見,駆け寄って涙をこぼしながら抱擁し,そのまま二度と正気に戻ることはなかったという。史実ではないにせよ,ニーチェの生涯をよく表している気がする。
恒吉良隆「ニーチェをめぐる女性たち:ニーチェの女性観の背景(I)」,文芸と思想,66,pp.85-53,2002
恒吉良隆「ニーチェをめぐる女性たち:ニーチェの女性観の背景(II)」,文芸と思想,67,pp.143-174,2003
・Russell, Bertrand “History of Western Philosophy” (Routledge, 2004) pp.687-697
・宗像恵/中岡成文編著『西洋哲学史〔近代編〕科学の形成と近代思想の展開』(ミネルヴァ書房,初版,1995) pp.275-283
・京大西洋史辞典編纂会『新編西洋史辞典改訂増補』(東京創元社,改訂増補,1993)p.552(「フリードリヒ・ニーチェ」)

エリック・サティ(1866 – 1925)
168px-Erik_Satie_en_1909
 学校生活に馴染めずに名門パリ音楽院を中退し,長じてからはクラシック音楽の伝統を徹底して問いなおした異端児サティ。やはりというか,私生活でも変人だったようで,作曲家でなく「音響測定家」などと名乗っていたとか,信者が自分しかいない宗教を立ち上げて細かい設定まで考えていたとか,いつでも決まってスーツを着て山高帽をかぶりこうもり傘を携えていて死後アパートからは大量の傘が出てきたとか,そういう奇妙なエピソードには事欠かない。自らの編み出した「家具の音楽」に耳を傾ける聴衆に「お喋りを続けるんだ! 歩け,聴くんじゃない!」と叫んだサティは,自らの作品に取ってつけたようなナンセンスでしばしば猥雑な歌詞をつけるのが趣味だったようで,とにかくスノビーな価値観をいかに冒涜できるかに心血を注いでいたとしか思えない。音楽家にしては珍しく若い頃の浮いた話は残っておらず,27歳になってシュザンヌ・ヴァラドンという女性と交際を始めるものの,たった半年で振られている。その後は生涯独り身を貫いた。つらい。キャンベンディッシュのように自分の世界の中にしか興味がないのかといえばそうでもなく,政治活動や後進との交流にも積極的に取り組んでいたりするし,いい年してナンセンスなバカ映画に出演してはしゃいだりもしている。もう社会に適合できなくてもいいじゃないか,金も名誉も愛だっていらねえじゃねえかと思わせる,自由で愉快な生き様。
有田英也「音楽とテクスト――エリック・サティの音楽論をめぐる一考察――」 http://www.seijo.ac.jp/graduate/gslit/orig/journal/europe/pdf/seur-11-02.pdf
Erik Satie – Music Academy Online 2016/4/16
Erik Satie – Wikipedia, the free encyclopedia 2016/4/16
Erik Satie: a life less ordinary | Music | The Guardian 2016/4/16

フランツ・カフカ(1883 – 1924)
Kafka_portrait
 ここまでに紹介した他の4人とは違い,公務員として立派に社会に溶け込んでいた真っ当な人物である。ただし,自ら認めた作品は聴衆の前で好んで朗読するかと思えば,未発表の原稿は死後全て焼却するよう友人に遺言するなど,自意識過剰な完璧主義が透けて見え,また発言からは,人生について一貫して悲観的,虚無的であったことがわかる。やはりどちらかというとこっち寄りの人物だったようである。しかしその一方で,結婚こそしなかったもののいつでも誰かしら自らを愛してくれる女性に恵まれていて(このリア充め!),仕事にも熱心で,人当たりの良い人物だったという評価が残っている。そのためか,ユダヤ教の聖者のように仕立てあげられたり,逆に女たらしの野心家だったと言われたりと,人物像が一定しない。個人的には,悲観主義的で繊細ながら確固とした思想と,フレンドリーかつ謙虚な性格の持ち主であり,内に大きなエネルギーを秘めつつも現実的なところで妥協することを心得ている人物だったのだろうと思う。大学時代,本当は哲学に興味があったが,父の反対で断念。妥協の結果としてあまり気の進まない法律を学びつつ,芸術関係の講義を受けたり哲学の話をしたりして過ごす。そんなわけで成績はあまり良くなく,なんとか卒業できたという感じだったようだ。卒業後は政府の傷害保険局に勤務。有能な職員として出世は重ねたが,いわゆる普通の公務員としての生活を送った。しかしそのおかげで,安定した生活を維持しつつ自分の時間を多く取ることができ,執筆活動に精力的に取り組むことができた。また,彼の作品に登場する不条理なシステムのモデルはオーストリア・ハンガリー帝国末期の官僚制にあるというのはよく指摘されていることであるし,『流刑地にて』など,傷害保険局職員としての業務内容が色濃く反映されている傑作もある。もしカフカが現実に折り合いをつけて平凡な職業を選んでいなかったら,あの歴史に名を残す作品群は生まれていなかったかもしれない。
 ……あれ,おかしいな? 社会に適合したほうがいいみたいな結論になってしまった?
The Kafka Project | Biography | Kafka’s Life (1883-1924) 2016/4/16
フランツ・カフカ – Wikipedia 2016/4/16
Franz Kafka – Wikiquote 2016/4/16
第二十三話 フランツ・カフカの光と影 – 歴史ぱびりよん 2016/4/16

Firefox のマウスホイールでのスクロール量を増やす

ブラウザだけスクロール量を増やしたい。IMWheel みたいなのもあるけど,めんどくさ大げさな気がする。そんな時に。

1, about:config を開く

2, “mousewheel.system” で絞り込み

3, “mousewheel.system_scroll_override_on_root_content.enabled” を false から true にする(Windows ではデフォルトで true らしい)

4, “mousewheel.system_scroll_override_on_root_content.vertical.factor” をデフォルトの 200 より大きい任意の値,たとえば400にする

5, 横スクロールも増やしたい場合は,”mousewheel.system_scroll_override_on_root_content.horizontal.factor” の値を同様に変更する。

調べてみると,なんだか似たようなオプションがいろいろある上スクロール量ではなく加速度を上げるというアプローチもあってややこしいけど,ともかく自分の場合は上の設定だけで期待した通りの挙動になった。
Chromium (Chrome) では,ブラウザ本体の設定ではできないらしく,たとえば「Chromium Wheel Smooth Scroller」などのアドオンを導入する必要があるらしい。

参照:
Gecko:Mouse Wheel Scrolling – MozillaWiki
Can anyone explain mousewheel.default.delta_multiplier? • mozillaZine Forums
xorg – How to change my mouse wheel scroll rate? – Ask Ubuntu
29.0.1 Mouse Wheel : firefox

ThinkPad T61 に Debian 8 + xfce をインストールしたメモ

 ジャンクの ThinkPad T61 を買ったので Debian 8 + xfce セットアップのメモ。

1, まず普通にインストール

2, sources.list 編集

# nano /etc/apt/sources.list

cdrom: 行をコメントアウト。
contib/non-free が必要な場合、ついでに追加。

3, 最低限使うソフトをインストール

# aptitude update
# aptitude install sudo vim keepassx arandr xfce4-whiskermenu-plugin icedove icedove-l10n-ja zotero-standalone xul-ext-zotero

4, 自分をグループ sudo に入れる

# gpasswd -a hoge sudo

一度ログアウトするまで反映されない。

5, ユーザに戻って ~/ をデフォルト(英語)に

$ LANG=C xdg-user-dirs-update --force

6, トラックポイントでのスクロールを有効化

$ sudo vi /usr/share/X11/xorg.conf.d/20-thinkpad.conf

以下をコピペ。

 Section "InputClass"
     Identifier "Trackpoint Wheel Emulation"
     MatchProduct       "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|ThinkPad Compact USB Keyboard with TrackPoint|USB Trackpoint pointing device"
     MatchDevicePath    "/dev/input/event*"
     Option             "EmulateWheel"          "true"
     Option             "EmulateWheelButton"    "2"
     Option             "Emulate3Buttons"       "false"
     Option             "XAxisMapping"          "6 7"
     Option             "YAxisMapping"          "4 5"
 EndSection

もうちょっと詳しい話は Debian 公式 Wiki の当該項目を参照のこと

7, xfce の設定
– 標準からパネル1削除、パネル2を画面下端へ。
– ワークスペースを1つに。
– 標準メニューボタン、ワークスペーススイッチャー、アクションボタンを削除。
– Whisker Menu とシステム負荷モニターを追加。
– 合成処理有効化ほか、環境や気分に合わせ設定。
– 初回ログアウト時には確認画面の「次回ログインのためセッションを保存する」のチェックを外す。

8, Mozc の設定
 なにやら難しくてよくわからない理由により標準では一部の設定項目が変更できません。仕様の違いが原因のため、バグとしては扱われていません。なので何年も前からこの状態ですし、修正する予定もないようです。ワークアラウンドとしては、いったん uim-mozc を削除したうえで mozc-utils-gui を起動し設定を行えば問題なし。

$ sudo aptitude remove uim-mozc

句読点変更、サジェスト自動表示・リアルタイム変換を無効化したうえで

$ sudo aptitude install uim-mozc

9, CapsLock を Ctrl に
「設定>セッションと起動>自動開始アプリケーション」から「setxkbmap -option “ctrl:nocaps”」を追加。
液晶が見にくく感じる場合は、このとき「xgamma -gamma X.X」も追加してガンマ値を下げるなどしておくと良いかもしれません。バックライトが黄ばんでいる古いマシンでは -bgamma を上げるのもおすすめ。

10, 画面ロックを xscreensaver から light-locker に変更
先日の記事参照のこと。

11, 完了
やったぜ。

 この機種 T61 についてですが,1960年代にソビエト連邦が開発した第2世代主力戦車で……じゃなかった,2007年発売の14.1型ラップトップです。数字が同じ X61 と同世代のようです。
 T シリーズは初めてなのですが,なかなかいいですねコレ。X をそのまま引き伸ばした感じで,X 独特の“秘密基地感”のようなもの(伝われ)が出ています。その一方で画面が物理的に広々として見やすく,キーボードも無理がありません。スピーカもステレオで,ついつい用もなく音楽をかけてしまいます。それでいて「小脇に抱える」ことができる程度のフットプリント・軽さ・薄さを保っており,モバイルマシンならではのわくわく感(伝われ)が損なわれていません。Core2 Duo T7100 1.8GHz + GM965 Express のモデルなので性能は大したこと無いはずなのですが,インタフェースにゆとりがあるためか,体感としてはなかなか快適です。リース落ちが一気に出たようでかなり安かった(PC-NET で3千円)ので,買った翌週にも秋葉原に寄って実家用にもう一台確保してしまいました。
 
参照:
製品の概要 – ThinkPad T61, T61p – Lenovo Support (JP)
Hothotレビュー レノボ「ThinkPad T61」レビュー ~Santa Rosaとワイド液晶で強化

Debian 8 jessie + xfce 4 で xscreensaver から light-locker に移行する方法

 前置きを書いてたら長くなったので本題から先に。

 light-locker は lightdm に依存する画面ロックツールで,xscreensaver や gnome-screensaver の代替として利用可能。ただしスクリーンセーバ機能や独自のロック画面は提供せず,ロック画面として lightdm のログイン画面を利用する。Debian の xfce および LXDE の標準のセットアップではディスプレイマネージャとして lightdm を使用しているので,そのまま利用できる。

 レポジトリにあるので,apt でインストールできる。

# aptitude update
# aptitude install light-locker
# aptitude purge xscreensaver xscreensaver-data

 xflock4 は xfce のスクリーンロックを管理するプログラムで,実体は簡単なシェルスクリプト。xscreensaver, light-locker, gnome-screensaver という優先度でデーモンにコマンドを与え,そのうち存在するものが画面をロックするという仕組み。標準で light-locker にも対応した設定になっているので,特に何かする必要はなし。

$ cat /usr/bin/xflock4
...
for lock_cmd in \
    "xscreensaver-command --lock" \
    "light-locker-command --lock" \
    "gnome-screensaver-command --lock"
do
    $lock_cmd >/dev/null 2>&1 && exit
done
...

 xflock4 がそのまま使えるので,画面ロックまでの時間の設定は xfce 電源管理 (xfce4-power-manager) から可能。
 いじょ。

追記:
 Debian 8 における lightdm の初期設定では,ログイン画面にユーザリストが表示されないため,画面ロックを解除するたびにユーザ名も入力せねばならずやや煩雑。ユーザが自分のみであれば,ユーザ名のリストを表示する設定にすることで xscreensaver や gnome-screensaver の画面ロックと同じ手軽さになる。

設定ファイルにある「greeter-hide-users=false」のコメントアウトを外してサービスを再起動する。

# vi /etc/lightdm/lightdm.conf
...
greeter-hide-users=false
...
# service lightdm restart

追記その2:
 lightdm のログイン画面に戻るためか,画面のロック後に時間経過で自動的にサスペンドやシャットダウンをさせる設定(たとえば,20分間無操作で画面ロック,1時間無操作でサスペンドという設定)が,ユーザ権限では機能しない。複数人が同時にログインするマシンでない場合,以下の設定で解決する。

# vi /usr/share/polkit-1/actions/org.freedesktop.login1.policy
        ......
        <action id="org.freedesktop.login1.suspend">
                ......
                <defaults>
                        <allow_any>auth_admin_keep</allow_any>
                        <allow_inactive>auth_admin_keep</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
        </action>
        ......

これを

        ......
        <action id="org.freedesktop.login1.suspend">
                ......
                <defaults>
                        <allow_any>yes</allow_any>
                        <allow_inactive>yes</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
        </action>
        ......

こうする(allow_any と allow_inactive を auth_admin_keep から yes に変更)。

 以下前置きです。

 4月1日から,xscreensaver を使用している Debian jessie システムで,ログイン時に「This version of XScreenSaver is very old! Please upgrade!」(このバージョンの XScreenSaver は非常に古いです! アップデートしてください!)と書かれた仰々しく目立つポップアップウィンドウが出るようになり,物議を醸しています。同じ文面は xscreensaver のロック画面にも現れ,xscreensaver の設定画面には以下のような強い表現さえ使われています。「This version of xscreensaver is VERY OLD! Please upgrade! http://www.jwz.org/xscreensaver/ (If this is the latest version that your distro ships, then your distro is doing you a disservice. Build from source.)」(このバージョンの xscreensaver は非常に古いです! アップデートしてください! http://www.jwz.org/xscreensaver/ (もしこれがお使いのディストロが提供する最新のバージョンである場合,そのディストロはあなたに害を与えています。ソースからビルドしてください。))このメッセージは,作者である Zawinski 氏が書いたもので,そのバージョンのリリースからどれくらい時間が経過したかを見て,単純に12ヶ月を超えると表示される仕組みになっているようです。
 この問題について Debian のバグレポートメーリングリストに投稿した方が現れたのですが,そこへ作者でありこのメッセージを書いた本人である Zawinski 氏が登場して反論し,かなりの荒れ模様となっています。

#819703 – xscreensaver: please disable “This version of XScreenSaver is very old! Please upgrade!” message – Debian Bug report logs

両者の主張の要点は以下の通り。
Zawinski 氏:

  • 古いバージョンの xscreensaver をいつまでも提供し続けるディストロのせいで,既に修正したバグについての修正依頼が何度も舞い込み,大変迷惑している。
  • 私は言う,「あんたの使っているディストロはクソだ」。だけど彼らはいつもこうだ。「でもソースからコンパイルするなんてどうすればいいのかわからないんだけど 1
  • 古いバージョンのソフトウェアを何年も使い続けるなんてどうかしている。最新のバージョンを使うようにすべきである。仮にそれができないなら,私のソフトウェアを Debian から取り除いてくれ。
  • ライセンス上はこの要求を無視する権利もあるが,合法的なことと正しいことは違う。

反対意見:

  • まず,表示される警告メッセージがあまりに無礼かつ攻撃的である。ユーザにとって迷惑であり,社会通念上問題がある。
  • Debian の stable(安定版)リリースでは,バージョンは2年ごとのリリース時点で凍結し,セキュリティホールや重大なバグのみについて最低限の修正を加える仕組みになっている。これによって,修正に伴う新たな問題の発生を極力抑え,システムの安定性を長期的に最大限高く保つことができるようになっている。この仕組みを理解できていないのではないか。
  • 標準的な Debian システムに含まれる千数百のパッケージそれぞれがこのようなことをすれば,システムは不安定になり,ひどいことになる。
  • Debian における xscreensaver のバグは Debian のバグトラッキングシステムで管理されており,理論的には,直接メールなどで Zawinski 氏に報告が行くことはないはずである。仮に来ても,単に無視すれば手間ではないはずだ。
  • バージョンが古いことそれ自体はバグではない。
  • そもそも xscreensaver は自由ソフトウェアライセンスで提供されており,作者がその使われ方についてどうこう言うことはできない。ライセンスに規定されている以上の要求はソフトウェアの自由と相反するものである。

 そんなわけで,現在「レポジトリから xscreensaver を取り除け」(Zawinski 氏)という主張と「アホ言うな」という反応の間で侃々諤々の,というか感情的すぎるきらいのある議論が行われています。
 個人的には,ハードウェアに効果的な省電力機能が搭載され S3 スリープも普及しきった今ではスクリーンセーバの存在意義はかなり限定的であるように思いますし,xscreensaver のルックスはいかにも昔風で今時のデスクトップに合わないと思いますので,これを機にスッパリ xscreensaver を離れてもいいんじゃないかと思いますがね。
 Zawinski 氏が優れたハッカーであり,これまでコミュニティに多大な貢献をなしてきたことは疑う余地がありませんが,氏の理想は古き良き時代のハッカー文化にあり,それは今の世の中と少し乖離しているようです。昔は技術力こそが力であり,コードの書けない,ましてやコンパイルさえできないユーザは,”luser”(user + loser)として蔑まれました。しかし時代は変わりました。今や Linux ディストリビューションはハッカーのみならずコンピュータ科学以外の分野の研究者,医療従事者 2,ごく普通の事務職員 3までが日常的に使用するものとなりました。多くのニーズに応えるためにシステムがより大きく複雑になる一方,コミュニティへの貢献の道はあらゆる人へと開かれ,コーディングに限らず,各人のできることでのコミュニティへの貢献が尊重され,かつ必要とされるようになりました。ハッカーならぬ私はこの新しい時代はとても素晴らしいものだと思っていますが,古くからのハッカーにとっては必ずしもそうでもないのかもしれません。
 ともあれ,早期の円満な解決を祈っています。

参照:
#819703 – xscreensaver: please disable “This version of XScreenSaver is very old! Please upgrade!” message – Debian Bug report logs
Bug #1406825 “xscreensaver complains “This version of xscreensav…” : Bugs : xscreensaver package : Ubuntu
light-locker/README at master · the-cavalry/light-locker · GitHub
Set up light-locker with XFCE action buttons. / Newbie Corner / Arch Linux Forums
14.04 – Authentication required before suspend – Ask Ubuntu

Notes:

  1. ソースのコメントでは “herp derp I eat paste” と続く。要するに知識も調べる気もないユーザを揶揄しての囃し文句。
  2. 最近のレセコンは Linux ベースのものも多いようです
  3. 役所とか会社とか