Windows Vista の代わりに Linux をインストールすべきでない5つの理由

 2017年4月11日に Windows Vista の延長サポート期間が終了するそうです。以後セキュリティホールが発見されても修正はされないということであり,Windows Vista を使い続けることは非常に危険となります。したがって可能な限り速やかに新しい環境に乗り換えることが必要になりますが,その中で,雑誌やウェブサイトなどで「Linux 1 に乗り換えれば無料で安全」という記事を目にした方も多いのではないかと思います。この記事は,そのような記事には書かれていない事実を伝え,時間と労力を浪費する人が一人でも減ることを期待して書いたものです。
 なお本記事はコンピュータに詳しくない方のために書いたものであるため,用語や解説に不正確な部分があることを予めご了承ください。

1. 買い換えたほうがずっと快適
 技術の進歩が日進月歩であることを指して,犬の1年はヒトの5,6年程度に相当するとされることから「ドッグイヤー」と言ったりしますが,ことコンピュータの世界では「マウスイヤー」なんて言葉が使われることがあります。マウス(ハツカネズミ)の寿命は2年程度とされ,じっさい,冷蔵庫や洗濯機などの家電であれば10年かかるような変化が毎年起きているのがコンピュータの世界です。
 Passmark というベンチマーク 2があります。その数値が公開されていますので,ここからお持ちのパソコンの CPU の数値を探してみてください。見つかりましたか? では,「1261」 という数値と比べてみてください。この数値がいったい何なのかというと,Atom x5-Z8350 という CPU の数値 3であり,2万円ちょいで販売されている 4 ASUS VivoBook R209HA など,現行パソコンの中で最低クラスのものの性能です。もちろん新品です。しかもこちらのほうがバッテリが持ちますし(公称9.5時間),液晶も綺麗で,軽量で(980g),発熱が少なく冷却ファンもありません。6万円前後の安物の12.1型モバイルマシンで見かける Core m3 7Y30 なら 3676 5,同価格帯の15.6型据置マシンに多い Core i5 7200U なら 4713 6 です。買った時は高価でも,今ではそのパソコンの性能はこの程度です。それでも使い続けるだけの価値があるか,一度よく考えてみてください。

2. Windows 10 のほうが即戦力になる
 Windows Vista は大飯喰らいの OS 7 です。ちゃんと使うためには最低限デュアルコア CPU と 2GB 程度の RAM 8 は必要でしょうか。それくらいの性能があれば Windows 10 を動作させることができます。2万円近い出費はたしかに痛手ですが,まだまだ使い続けたい愛機であれば,決して無駄な投資ではないでしょう。なにしろ,使い慣れたソフトをこれまで通り使えることで,今までどおりバリバリ使い続けることができるようになるのですから。生産性を考えれば,下手に知らない OS を入れて置物にしてしまうよりお得です。

3. 新しく学ばなければならないことが多い
 「どうせ売っても値段がつかないし,今後はほとんど使うつもりのないマシンだから」とお考えではありませんか? 実は,そういった場合にこそ Linux の導入を考えなおす必要があります。それ自体は無料でも,学習コストを負担する必要があるからです。
 Linux は Windows とは全く違った OS です。今までの経験は全く役に立ちません。たとえ表面的な見た目が似ていても,その中身は全くの別物です。「aptitude」の使い方を知っていますか? 「systemd」って何だか知ってますか? 英語のドキュメントは読めますか? 使いこなすためには,新しいことを恐れず自ら積極的に学ぶ姿勢がなければなりません。「そんなの面倒くさい」という方,今使っている Windows もイマイチ使いこなせていないという方,悪いことは言いませんので Linux に手を出すのはやめましょう。大切な休日を無駄にしてしまうだけです。多少のお金を出し惜しんで,短い人生の限られた余暇を面倒な作業で潰してしまうのは馬鹿馬鹿しいことです。もし買い替えや Windows 10 購入ではなく Linux インストールを検討する理由が節約なのであれば,「貧すれば鈍す」に陥っていると言わねばなりません。

4. 思っているほど軽くないし手軽でもない
 Linux は軽いらしい,という話を聞いたことがあるはずです。Vista 以降との比較で言えば,これは確かに嘘ではありません。しかし,決して魔法か何かが込められているわけではありません。もしお使いのパソコンの CPU の性能がイライラするほど低いのであれば,Linux でもやはりイライラしますし,多少マシにはなるかなという程度です。また,ページファイルに頻繁にアクセスするほどメモリが足りないのであれば,Linux でもやはりハードディスクにアクセスしっぱなしになります。ここで過大な期待してしまって失望を味わうことになる人というのは実に多いです。まるで買い換えたかのような劇的な違いというのはありえません。無理に使い続けてフラストレーションを溜めるよりは,廃棄して資源リサイクルに貢献するほうがよほど賢明なのではないでしょうか。それに,軽いというのはやっている仕事が少ないということでもあります。Windows にある機能のうち,詳しい人に好まれない機能は省かれていることもあります。たとえば,Windows の「システムの復元」に相当する機能は Linux では搭載されていない場合が多いです。上級者向けのものでは自動アップデート機能さえ使われていないことも多いです。
 また,Windows でできることは違うソフトを使うことで Linux でもできる,という話を聞いたことのある方もいるかもしれませんが,こちらは嘘に近いです。動画や音楽などで DRM 9 の関わることは大抵できませんし,ゲーム用グラフィックボードは大抵 Windows より性能を引き出せません。「Wine で Windows 用のソフトを実行できる」というのも,複雑なソフト,3D グラフィック機能を多用するソフトでは使えないことが多いです。逆に Linux でしかできないことも多いのですが,単にパソコン用 OS として使う上ではあまり関係ありません。

5. そもそも Windows とは用途が違う
 Windows は最初からパソコン用の OS として開発されたもので,今も主にパソコン用の OS として使われています。また,商品として売るためのものであるため,可能な限り市場を大きくできるように作られています。一方の Linux は全く違います。Linux はもともと UNIX という OS と同等の環境が個人でも手軽に使えるように作られたもので,UNIX は研究所などで使われる高性能なサーバ 10のための OS でした。現在の Linux も同様に,殆どはサーバ用の OS として使われています。パソコン用の OS としての利用はあくまでもオマケ程度のものです。Linux がパソコン用の OS としても使われるようになったのは比較的近年のことで,パソコン用の OS として実用的になったのはここ10年くらいのことです。また,Linux は出来合いの商品ではなく,多くの人が集まって進められているさまざまな非営利のプロジェクトの集合体です。誰でも自由に使える一方で,誰もが積極的に学び,更には開発に参加することが期待されているのです。したがって Windows と Linux では,同じ「使いやすい」という言葉でもその意味するところは違います。前者では難しい設定は隠されてユーザはボタンを押せば済むことを意味して,後者では技術的背景を理解したり自分好みに作り変えたりしやすいことを意味します。
 
 
 
 Windows XP のサポート期間終了の時もそうでしたが,Linux に手を出してみたものの使いこなせず,こう言ってはなんですが,逆恨みする人が後を絶ちません。彼らも最初は Linux に興味を持って触れたはずであるということを考えると,無責任に Linux への乗り換えを勧める記事は誰にとっても不幸なものであると思います。同じ Linux に触れるのでも,「Windows XX からの代用」というような時間的用途的に制約された使い方でなければ,また違う出会いになったかもしれないのですから…… ここまで読んでいただいた方には,そのような不幸な道を辿ってほしくありません。Linux は Windows の「代用品」として使えるものではありません。「たけのこの里」を買う代わりに「きのこの山」で我慢するような話ではないのです(と争いの火種を蒔く)。
 とまあ,ここまで書きましたが,それでもインストールする人はインストールすることはわかっています。なにしろ私もそうでしたから。自分の場合,高校生の頃,たしか雑誌の付録についてきた Knoppix で初めて Linux というものに触れてから1ヶ月くらい,Windows Me が入っていたマシンに Debian をインストールしてから一週間くらいで apt-get を使ったり vim で設定ファイルを書き換えたりできるようになりました。それから間もなく Linux に完全に乗り換えて現在に至ります。好奇心と多少の素養さえあれば難しいことは何もありません。慣れれば本当にいい所ですよ。ようこそ,Linux の世界へ。

17/04/11 記事タイトルを(多少)短く修正,Core m3/i5 の Passmark スコアについての言及などを追記
17/07/24 わかりにくかった部分をちょっとだけ加筆。ところで,まさか今もまだ Vista を使ってる人はいませんよね?

Notes:

  1. 詳しい人向け:「Windows」や「macOS」との対比を意識し,この記事においては全て「GNU/Linux ディストリビューション」の意味で「Linux」という語を使っています。
  2. コンピュータの性能を計測するためのソフトウェアやその結果のこと。ただしあくまでも一定のテストの結果で,実際の使用感を調べられるわけではないので,あくまでも目安として利用しましょう。
  3. 17/3/26現在。
  4. 同上。
  5. 17/4/11現在。
  6. 同上。
  7. Operating System の略で,「基本システム」と訳されることもある。その上でアプリケーション――ブラウザやオフィススイートなど――を動作させるためのシステム。
  8. メモリないし DRAM とも言う。ハードディスクではない方。
  9. Digital Rights Management(デジタル著作権管理)の略で,指定された環境でしか再生できなくするなどして権利者の意図しない利用を防ぐ機能のこと。反対する立場からは Digital Restrictions Management (デジタル制限管理)と呼ばれることもある。
  10. より正確にはミニコン,ワークステーションなど。

Debian Jessie + Xfce で UIM ツールバーのアイコンの背景色がおかしいのを直すには

デフォルトでは GTK3 用のツールバーが使用されるため,GTK2 を使っている Xfce パネルと外観が揃わないのが原因。
GTK2 用のツールバーを使用するよう明示的に指定すれば解決する。

$ sudo update-alternatives --config uim-toolbar
alternative uim-toolbar (/usr/bin/uim-toolbar を提供) には 6 個の選択肢があります。

  選択肢    パス                             優先度  状態
------------------------------------------------------------
* 0            /usr/bin/uim-toolbar-gtk3-systray   90        自動モード
  1            /bin/true                          -100       手動モード
  2            /usr/bin/uim-toolbar-gtk            60        手動モード
  3            /usr/bin/uim-toolbar-gtk-systray    70        手動モード
  4            /usr/bin/uim-toolbar-gtk3           80        手動モード
  5            /usr/bin/uim-toolbar-gtk3-systray   90        手動モード
  6            /usr/bin/uim-toolbar-qt4            50        手動モード

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

以上のような選択肢が提示される。
このうち,/usr/bin/uim-toolbar-gtk-systray の番号(この場合は「3」)を選択し,エンターキーを押す。

忙しい時ほどついどうでもいいことを調べてしまうのはどうしたことか……

Debian 上の GTK デスクトップ(Xfce, Gnome 等)で Qt アプリの外観を統合したい

何度やっても忘れるのでメモ。

1. qtconfig をインストールする。

$ sudo aptitude update && sudo aptitude upgrade
$ sudo aptitude install qt4-qtconfig

他の Qt パッケージにはあまり依存しておらず(自分の環境では libphonon4 が入っただけ)コンパクトに収まる。

2. qtconfig を起動する。

$ qtconfig

qtconfig-qt4 でもよい。インストールパッケージ名とは微妙に違うので注意。

3. 「外観」タブの「GUI スタイル」セクションにある「GUI スタイルの選択(S)」プルダウンメニューを開き,「GTK+」を選択。左上の「ファイル(F)」>「保存(S)」を選択するか,ウィンドウを閉じる際に表示されるダイアログで「はい(Y)」を選択すると設定が保存される。

4. Virtualbox とか Keepassx とかがいい感じになる。やったぜ。

参考:
Qt と GTK アプリケーションの外観の統合 – ArchWiki
arch linux – qtconfig tool for Qt 5? – Unix & Linux Stack Exchange Qt5 には qtconfig がないらしい

謎のシンクライアント,ION A603 で遊ぶ

 無くなりそうで無くならない秋葉原某店の300円ジャンクシンクライアントの話。記事を書こうと思いつつ棚から無くなりつつあるのを見て「やっぱりいいか……」となるのを何度か繰り返しましたが,先週行った時にはまたみっちり並んでいたので,まだたくさん隠し持っている(?)と見なしてひとまず記事にします。
 
 まず,本体シールからこいつの機種名は「ION A603」であることが判明しています。これで検索してみると,いくらか情報が出てきます。早速タイトルの「謎」が謎でなくなっていますが,気にしないこと。
・製造元らしき FIC のページ http://www.fic.com.tw/product/iona603.aspx
・AMD ウェブサイトでも紹介されている http://wwwd.amd.com/catalog/salescat.nsf/doclookupweb/CEF3492F57763CCF8625725800148E8D
 これらの表によると,CPU は AMD Geode LX800 (500MHz) のようです。この石の性能は同クロックの C3 よりはマシという程度の模様。もっともグラフィックやメモリのおかげか体感的にはもうちょっと速いです。また,4ポート USB 2.0,100M イーサ,RAM は最大1GB対応と,今でもアプライアンスサーバ的な使い方なら充分使えるスペックだということがわかります。また,定格電流が3.33Aであることも判明しました(以前 AC 付きも売られていた時にも購入しており,その AC アダプタも 12V 3.33A センタープラスで,Li Shin International Enterprise Corp. 製 LSE0107A1240 というものでした。FIC ロゴなどはありませんが,おそらくこれが純正品だと思います)。3A でも代用可能だと思います。HDD の消費電力分を考えると 2.5A でもたぶん行けるでしょう。

 それでは実物を見ていきましょう。「ROUTER」のシールは自分で貼ったものなので気にしないように(ラズパイルータの代替ハードウェアとして導入予定……だがなかなか取り掛かれず)。金属製のしっかりした上質な筐体です。萌えー
 前面には USB 2.0 ポートが4つ,インジケータ,電源ボタン,スピーカ,マイク端子とヘッドフォン端子。

 背面には LINE OUT,VGA 端子,LAN,電源コネクタ,ケンジントンロック用の穴。電源コネクタは一般的な外径5.5mm/内径2.1mmではなく5.5mm/2.5mmですが,千石などでアダプタを購入できます(100円程度)。入力は上記の通り 12V 3.33A センタープラスです。

 マザーボードはこんな感じ 1。筐体に排気口がないことからもわかりますが,ファンレス仕様です。萌えー
 一般的なケーブルを用立てれば 2.5 の IDE HDD が乗るようです。キャパシタは変なのも多いですが大きいやつは一応三洋の105℃品です。

 裏側。オンボードではなく 512MB の DDR SODIMM が挿されています。これはなかなか!

 ところでこれ…… SoC にヒートシンクも何も付いてないんですが,元々こんなものなんでしょうか? どうも心配です。HDD マウンタまで熱を逃してやりたいところですが,基板から直接外装へ熱を逃がす作りになっているようにも見え,かえってキャパシタの寿命を縮めるのではないかという感じもします。

 組み立ては逆にすればいいのですが,少々コツがいります。まず,下の赤丸の部分にプラスティックのツメがあるので,筐体下側から先にはめること。

 また,下の赤丸部分に金属の細かな接点?があるので,これを破壊しないよう,気をつけながら挿していきます。

 BIOS は一般的な Award BIOS で,特に面白そうな項目はありませんでした。
 目論見通り USB ブートに対応しており,Debian Jessie を USB メモリに普通の i586 用インストールメディアを使って難なくインストールできました。
 (なお,今回インストールした環境では,そのままでは”atempt to read or write outside of disk ‘hd0′”というエラーが出て起動できませんでした。起動ドライブの UUID が変わって発生するエラーのようだと踏んで,Grub の設定を UUID でなく /dev/* の指定を渡すよう記述を変えましたが効果はないようです。とりあえず起動時に Grub のオプションを適当にいじる 2,たとえば noacpi を指定してやる 3と(なぜか)起動できるので,今回はそれで済ませました。しばらく前に別のマシンにインストールした環境は大丈夫なのでカーネル絡み,何らかのデータ破損,BIOS 設定のいずれかだと思いますが目下検証する時間がないので……時間ができたらまた書きます。)
 17/3/26追記:追記を忘れていましたが,デスクトップ環境とディスプレイマネージャもインストールしたところ問題なく起動しました。ここにきて再びの謎です。ハードウェア省電力機能とかの話なのかもしれません。

/proc/cpuinfo はこんな感じ。

processor		: 0
vendor_id		: AuthenticAMD
cpu family		: 5
model			: 10
model name		: Geode(TM) Integrated Processor by AMD PCS
stepping		: 2
microcode		: 0x8b
cpu MHz			: 498.027
cache size		: 128 KB
fdiv_bug		: no
f00f_bug		: no
coma_bug		: no
fpu				: yes
fpu_exception	: yes
cpuid level		: 1
wp				: yes
flags			: fpu de pse tsc msr cx8 sep pge cmov clflush mmx mmxext 3dnowext 3dnow vmmcall
bogomips		: 996.05
clflush size	: 32
cache_alignment	: 32
address sizes	: 32 bits physical, 32 bits virtual
power management:

 一応 i686 互換対応っぽいです。

lspci はこんな感じ。ちゃんと 100M イーサですね。

00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] Host Bridge (rev 33)
00:01.1 VGA compatible controller: Advanced Micro Devices, Inc. [AMD] Geode LX Video
00:01.2 Entertainment encryption device: Advanced Micro Devices, Inc. [AMD] Geode LX AES Security Block
00:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (rev 10)
00:0f.0 ISA bridge: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] ISA (rev 03)
00:0f.2 IDE interface: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] IDE (rev 01)
00:0f.3 Multimedia audio controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] Audio (rev 01)
00:0f.4 USB controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] OHC (rev 02)
00:0f.5 USB controller: Advanced Micro Devices, Inc. [AMD] CS5536 [Geode companion] EHC (rev 02)

 lsusb には 1.1/2.0 の root hub しかありませんでした。
 とりあえず今回はこんな感じで!

17/3/26:記事タイトルから「(1)」を削除

Notes:

  1. 特にこの季節は,基板類に触る前に必ず大きな金属製品などに触れて静電気を逃しましょう!
  2. リスト画面で E キー,起動は Ctrl-X
  3. “linux /boot/vmlinux-… ro quiet” とある行が起動時カーネルオプションです。

Linux におけるラップトップマシン向け電力管理スイートの紹介(Pm-utils, Laptop-mode-tools, Powertop, TLP)

 Linux をラップトップマシンにインストールすると Windows に比べてバッテリの持ちが悪い,ということが言われることがあります。
 これは事実でしょう。最大の理由は,電力管理の設定が最適化されていないことです。Windows ではメーカが機種ごとに作成した環境のリカバリディスク,あるいはドライバやユーティリティ類がありますが,大半の Linux ディストリビューションでは,32コアのワークステーションでもポケットサイズのモバイルマシンでも同じ DVD を使ってインストールします。したがって初期設定はまずはどんな環境でもそつなく動くようにしておく必要があり,マシンの特性に合わせた最適化は施されていないのです。
 幸い,Linux ではさまざまな省電力機能がサポートされていますし,それらを一括して管理できる見通しの良いツールもあります。数十分ほどの時間をかければメーカが用意した Windows 環境並み,そして(大抵は Linux 環境の方が負荷が軽いこともあり)それを超える電力管理をも実現できます。私のメインモバイルマシンである CF-SX1 は Windows より Debian の方がファンが静かな上に快適に動きますし,バッテリの持ちも良いです。
 この記事では Linux 環境の代表的な電力管理スイートを4つ簡単に紹介します。あくまでも私の個人的な意見であることに注意してください。公式サイトに加え Arch Linux Wiki (Arch Linux ユーザでなくとも極めて役立つ必見リソースです)の該当記事へのリンクも付けましたので参考にしてください。

Pm-utilsArch Linux Wiki 記事
 他のツールと組み合わせることで電源管理にも利用できるため Laptop-mode-tools 等と並べて名前が出ることも多いですが,pm-utils 自身はあくまでもコマンドラインから電源を操作するためのツールです。
 電源管理スイートとして使うためには様々な設定・スクリプト作成が必要で,しかも利用できる機能は限定的です。そのうえ systemd 移行により機能が被ってメリットが失われ,それどころか問題の原因となりうることもあって,今ではあまり人気がないようです。既に pm-utils を利用するスクリプトを多く書いて利用しているという方はともかく,今から導入するメリットは薄いように思います。

Laptop-mode-toolsArch Linux Wiki 記事
 長らくラップトップ用電源管理スイートとしてスタンダードの地位を占めてきたツールです。名称は,カーネルに組み込まれている機能である「Laptop mode」を利用する(しやすくする)ためのツールという意味で,ラップトップマシンのための電源管理スイートの草分け的存在と言えるでしょう。私が最初に導入したツールがこれで,4年ほど前まで使用していました。
 現在でも使われていますが,いかんせん古いソフトという印象で,どうも設定が煩雑でわかりにくいです。よいソフトではあるのですが,他と比較すると,今から導入するメリットは薄いかもしれません。
 もっとも現在も開発は続いていますし,最近は github のコミットも活発になっているようです。これから大きく変わることもありえます。今後の発展に期待です。

PowertopArch Linux Wiki 記事
 Intel 謹製の電源管理スイート……というより,電源管理診断ツールといったものです。公式ウェブサイトでも「a Linux tool to diagnose issues with power consumption and power management」とされています。電源管理機能はあくまでも診断の便宜のためといったスタンスで,再起動すると設定は失われてしまいます。設定を永続化させるためには起動時に自動で powertop に命令するスクリプトを組むなどする必要がありますが,これが少々手間です。また,あくまでも診断のための機能のため,バッテリ駆動時と AC 駆動時でプロファイルを分けるといったこともできず(やるならこれも自前でスクリプトを組んでステートが変わるたびいちいち命令させる必要がある),あまり細かいことをするとデバッグの手間が出てきます。手抜きの荒業としては rc.local に(今なら systemd のサービスを)書いて /usr/sbin/powertop --auto-tune を起動時に自動実行させるというのもありますが(TLP 導入に先立って一時期そうしていました),細かい設定ができないことによる副作用があるうえ,マシンによっては大きな問題が発生することもありえます。
 一方で設定のチューニングには非常に使いやすいツールです。下記の TLP と併用している人が多いようです。概算の消費電力が表示されるのもなんだか楽しいです。

TLPArch Linux Wiki 記事
 結論です。今から入れるならコレ! 機能と手軽さの両面で他の3つを上回っています。
 公式サイトには「TLP comes with a default configuration already optimized for battery life, so you may just install and forget it」と頼もしいことが書かれています(もちろん,実際にはマシンや利用スタイルに合わせた調整もしたほうがより良いのですが)。Powertop と違いシステムの一部を構成する電源管理スイートとして設計されており,解説付きの設定ファイルを少しいじるだけで電源管理を最適化することができます。また,バッテリ駆動時と AC アダプタ利用時での別のプロファイルの利用に標準対応しています。systemd との親和性も高いです。
 現状では主として linrunner 氏という匿名の個人のみによって開発されていて開発の継続性や方向性がやや不透明なのが短所といえば短所ですが(cf. xscreensaver),既に6年以上開発が続いており,実績は充分です。
 Debian の場合,TLP はターミナルから以下を実行することで導入され,機能を開始します(詳しくは Arch Linux Wiki を参照)。

$ su
# aptitude update
# aptitude install tlp tlp-rdw
# systemctl enable tlp.service
# systemctl enable tlp-sleep.service
# systemctl disable systemd-rfkill.service
# tlp start

Raspberry Pi Foundation,PC 向け GNU/Linux ディストリビューションを公開

PIXEL for PC and Mac – Raspberry Pi
Raspberry Pi Foundation releases operating system for PCs, Macs • The Register

Introducing PIXEL – Raspberry Pi

 今年9月,Raspberry Pi Foundation は,Raspbian のデスクトップ環境に “PIXEL” という新しい名前を与えました。PIXEL という名前は「Pi Improved Xwindows Environment, Lightweight」の(ちょっと苦しい)略とのことですが,「ZX81 で BASIC のプログラムを勉強していた頃を思い出させてくれるもの」とのことでもあります。この変化はどちらかといえば目立たないものでしたが,デスクトップ環境が Raspbian から切り離されたことで面白いことができるようになりました。Raspbian のデスクトップ環境 PIXEL を Raspbian 以外の環境でも使う,ということです。
 上記記事では,デスクトップ環境として PIXEL を使用した Debian の実験版へのリンクが貼られています。書きぶりからすると,独立したデスクトップ環境としてというよりは Debian ベースの x86 用 GNU/Linux ディストリビューションとして開発してゆくものと見られます(elementary OS と Pantheon の関係に似ています。Linux Mint の Cinnamon・MATE のように専用から始めてだんだんと独立したデスクトップ環境としても成熟させてゆく考えかもしれません)。少々ややこしいですが,このディストリビューションも PIXEL と呼んでいるようです。
  PIXEL のベースとなっている LXDE 自体軽量デスクトップ環境として代表的なもので,しかもその見た目を Raspberry Pi 用に調整してきたものであるため,とても軽量なうえ低解像度環境にも向いたものとなっています。Eben Upton 氏の記事では「512MB以上の RAM があれば私の ThinkPad X40 のようなビンテージ物のマシンでも動く」として実際に X40 で PIXEL が動作している写真がアップされています。これまで「軽い Linux ディストリビューション」が現れては消えてきましたが,使いやすさとシンプルさのバランスが取れているのみならず開発の継続性に実績がある Raspberry Pi Foundation によって提供されることとなる PIXEL は新しい定番となるでしょう。
 PIXEL が公開されることにより Raspberry Pi に及ぼされる影響は,今のところよくわかりません。記事中では,学校では PIXEL・家では Raspberry Pi の Raspbian を利用するなどしてほぼ同様の環境を容易に提供できるようになる,デスクトップ環境としての PIXEL をより良いものとしてゆくために役立つ,という2つの理由が挙げられています。逆に,たとえば学校の授業で Raspberry Pi を使っている子どもが Windows に慣れるより先に Raspbian に慣れて,家に帰っても慣れた環境,すなわち PIXEL を使うようになる,ということもあるかもしれません。
 ともあれ,今後に期待ができそうです。

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 のものはどれも電源連動に対応していますし,規格上対応が必須になるなどしたのではないか? という気がします。

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 に変更)。

追記その3(17/03/20):
 どうしたわけかいつの間にか(おそらく前回 dist-upgrade してから)また画面ロック後のサスペンドが効かなくなってしまっていました。設定ファイルを見るとデフォルトの状態に上書きされてしまっているようです。普通はこういうことはありませんので,何らかの手違いでしょうか。たしかにまあ,本来は考慮されていない使い方なわけで,セキュリティに深く関わる機能であることを鑑み,念のため Light-locker を使う時は画面ロック時=サスペンド時としたほうがいいのかもしれません。(しかしデスクトップ環境の電源管理ユーティリティとの統合を考えるとこの仕様?は問題があると思います)
 ところで xscreensaver の一件は Debian では xscreensaver から単に警告表示部分を取り除くことで対応する方向性のようですが,個人的には,他の部分――名称と見た目も変更しておいてくれないものかと思います。仮想パッケージとして “xscreensaver” からのエイリアスを残しておけばあえて xscreensaver としての登録にこだわる必要はないと思いますし,なによりあのロゴを見てウイルスかと勘違いされたことがありますので……(笑)

 以下前置きです。

 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 ディストリビューションはハッカーのみならずコンピュータ科学以外の分野の研究者,医療従事者,ごく普通の事務職員までが日常的に使用するものとなりました。多くのニーズに応えるためにシステムがより大きく複雑になる一方,コミュニティへの貢献の道はあらゆる人へと開かれ,コーディングに限らず,各人のできることでのコミュニティへの貢献が尊重され,かつ必要とされるようになりました。ハッカーならぬ私はこの新しい時代はとても素晴らしいものだと思っていますが,古くからのハッカーにとっては必ずしもそうでもないのかもしれません。
 ともあれ,早期の円満な解決を祈っています。

参照:
#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” と続く。要するに知識も調べる気もないユーザを揶揄しての囃し文句。

Debian 8 で Bluetooth DUN

 Debian 8 Jessie で Bluetooth DUN しようとして……泥沼にハマった。
 Bluez のバージョンが 5 に入り仕様が大きく変わったようで,これまでの定石が通用しません。一応 blueman や gnome-bluetooth なども入れて試してみましたが,やはりうまくいかない。つなぐ先も「BlueDUN」という市販のアプリを入れた Android スマートフォンで,こっちが特殊な仕様である可能性もあります。せめて他にいくつかモデムがあればいいのですが……なんとか調べながら設定してはみるものの,正体不明のエラーとか……検索してみるとバグがうんたらかんたらとか言ってるし……うわこのコマンドも無くなったのか……このエラーは何だ?……しかし眠い……寒い……外明るくなってきた……つらい……などと合計10時間以上を無為に費やし,「これは複雑なバグまたは心霊現象が関与しており自分の手には負えない」という結論に達したところで以下のページを見つけました。

delx » Bluetooth DUN Tethering with Linux and a Nokia Symbian Phone

 2014年? Arch? もしや,これでいける? 藁にもすがる気持ちで試してみると……いやっほううう!!! 繋がった!!! 何度再起動して試してもオーケー。引っ掛かりポイントは Debian では「python-dbus」ではなく「python3-dbus」が必要であるという点と始めに wlan の接続を切ってから試さないとダメという2点くらいで,本当に書いてあるとおりにコピペして書き換えて実行するだけ。恐ろしく簡単。
 スクリプトを眺めてみるとなにやら見たことのないことをしている部分がある。やっぱり仕様変更絡みで別のやり方をする必要があったらしい。この辺はそのうちちゃんと調べないといけませんね。
 いやあ,ありがたやありがたや。