ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

KING JIM ポメラDM200でEmacs、Vim、Ruby、Pythonが動くなんて素敵すぎる!

      2018/11/14

Pomera dm200 linux ruby python 00000

  • 変更履歴:
    • 2017/08/15: 「一般ユーザーでサスペンドするには?」で紹介のsusコマンドの多重起動処理を強化

Kindleハック、RICOH THETAハックなどでおなじみ @ichinomoto さんがKING JIM ポメラDM200(以降DM200)でSDカードにインストールしたDebian Linux(Debian 9.0 stretch)を、ポメラ元来の機能を全く損なうことなく起動できるようにしてくださいました。

DM200にDebian Linuxをインストールしてできること:

  • WiFiによる通信(apt-getでインストール、Webブラウザ、メールクライアントなどの利用)
  • Bluetoothで周辺機器を接続(マウスは動作確認)
  • USBで周辺機器を接続(キーボード、マウス、ストレージ、オーディオ、それぞれ動作確認)

SDカード上のDebian Linuxを起動できるようにしても、従来通りの使い方もできるのです。

キングジム デジタルメモ ポメラ DM200ブラック

本来、DM200には印刷できないワープロのような機能しかないのですが、これによってかなりの自由度を獲得できたことになります。

Pomera dm200 linux ruby python 00034

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

上記のページの通りにインストールを済ませると、SDカード上のDebian Linuxが起動できるようになります。Linuxの動作の安定感は実験レベルを超えて実用的です。

Pomera dm200 linux ruby python 00029

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

SDカード上のDebian Linuxが起動できても依然標準のポメラの機能の素晴らしさは際立っているため、両者を連携して使う感じになる(同時に使えるのでなく、両者を起動し分ける)のですが、それが何とも楽しい。

Pomera dm200 linux ruby python 00035

工夫の余地のある文具が欲しいという人の目には、このDebian Linux on DM200は魅力的に映るかもしれません。

今回は、そんなDebian Linux on DM200のレビューと使いこなしをお届けします。

もくじ

記事に関するお断り

本エントリは未完成です。

使いこなしには多種多様な知識が必要で、自分自身暗中模索中です。

自分が困難に直面し、調べ、解決しながら追記していくスタイルを取ることにします。

実際に使ってみてどう?

早速DM200でDebian Linuxを起動できるようにして使ってみました。

そもそもインストールするためにDM200を買いました。そんなやつは世界広しといえども僕ぐらいのものでしょう。

はじめにはっきりさせておくべきは、Linux側ではポメラの機能を使ったり、ポメラ側にあるATOKを使ったりができないということです。

僕が詳しく調べたわけではないのですが、ポメラ全部の機能を一つのプロセスの中に押し込んだ作りをしていて、機能の一部(ATOK)を取り出したり、他のプロセスと協調して動作させたりができないそう。

従ってVim、Emacsといったエディタに精通しているのでない限り、普段はポメラ側で文章作成をして、込み入ったことをやろうとなった時にLinuxを起動するという使い方になります。

この切り替えは比較的短時間、例えばポメラSyncの処理が終了するよりずっと早くLinuxの起動、Linux側からポメラ側への復帰ができるため、行ったり来たりがそれほど苦痛ではありません。

動画解説: X Window上のxtermからrebootコマンドで再起動し、ポメラ側に復帰。ポメラ側から電源ボタン長押しで電源オフ。Alt + 右Shift + 電源ボタンでLinuxを起動。fbtermのプロンプトが表示されたらEmacsを起動。

ポメラの編集画面からLinuxのコンソールのプロンプト表示まで 22秒
Linuxのコンソールのプロンプトからポメラの編集画面表示まで 10秒

初期状態ではLinux側でいちいちログインプロンプトが現れて面倒ですが、ログインの処理はバイパスして、いきなりコンソールのプロンプトまで現れるようにできます。(上表の時間は、そのカスタマイズ後のもの)

約580gの軽量なボディに上質なキーボードを搭載。集中できる執筆環境であると同時に、自分の思い通りにカスタマイズできるLinux環境を備えることになったDM200は大変魅力的。

ノートPCと同等のキーボードを備えていることが実用性に大きな影響を与えているということを繰り返し実感する感覚があります。

Pomera dm200 linux ruby python 00031

過去にあったLinux端末、NetWalkerはAC電源に縛られる点がイマイチだったのですが、DM200はモバイルバッテリー併用で場所や時間の制約を受けず使える点が代えがたい価値を生み出しています。

またNetWalkerとはキーボードの使い勝手が天地の差で、DM200には一日中キーをたたいていられるほどの快適さがあります。

Pomera dm200 linux ruby python 00039

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

ただ、現状ではLinux側では液晶を閉じてサスペンド、液晶を開けてサスペンドからの復帰といった動作ができません。

サスペンド移行、サスペンドからの復帰は電源ボタンを押してものとなり、多少使い勝手が変わります(※)。

※要カスタマイズ。電源ボタンによるサスペンドは、X Window上のみ

Pomera dm200 linux ruby python 00033

Linux側のサスペンドの安定性は十分実用的で、基本的にX Windowを立ち上げ、サスペンドベースの運用をしています。

サスペンド運用だとシャットダウンベースの動作と想定されるポメラ側の起動より使い始めるまでにかかる時間が短かいため好印象です。

サスペンド中のバッテリードレインは1時間につき1.3%程度でNetWalkerよりは大分大きいものの、朝9時に給電を解除して以降カバンの中で、18時から使い始めても87%はバッテリーが残っている計算ですから、勝手移植のLinuxとしてはかなり優秀といっていいと思います。

もちろん、サスペンドでなくシャットダウンしていればバッテリーの残量は減りません。

約580gでフルキーボード付きの軽量Linux端末が欲しければ、検討の価値は十分あります。

Pomera dm200 linux ruby python 00036

現在は相場が以前より安くなって35,000円程度で買えるので、お値頃感も出てきました。

素のポメラも十分以上に実用的で、特にアウトラインモードが素晴らしい。

機能すべてがキーボードショートカットに割り当てられているというのは、スマートフォン、タブレットの世界にはないもの。

総じて生産的な作業をするのに特化したガジェットという風格が漂っており、タブレット、スマートフォンに神アプリがいくらあってもSNSからの雑音が多くて生産的な使い方ができたことがない、という人にはうってつけのガジェットになったといえるのではないでしょうか。

少なくとも、僕はそういうものを求めてDM200を買いました。

Pomera dm200 linux ruby python 00007

P91よりアウトラインモードについての解説あり: DM200取扱説明書(PDF:6.5MB)

DM200でのLinux起動に必要なもの

DM200でLinuxを起動できるようにするために必要なものは以下の三つです。

Pomera dm200 linux ruby python 00037

  • KING JIM ポメラDM200
  • PC(Mac)(+メモリーカードリーダー)
  • 16GBのSDカード1枚

Linux起動までの手順は、おおまかには以下の通りです。

  1. DM200のNANDをSDカード(要8GB以上)にバックアップする
  2. SDカード(要16GB以上)へインストール用のイメージを「Etcher」などを使い書き込みする
  3. DM200にインストール用のイメージを書き込んだSDカードを挿入
  4. 電源をオフにした後、Alt + 右Shift + 電源で起動

メーカー保証はなくなり、完全に自己責任ですが手順自体は非常に洗練されており、臆する必要はありません。事は非常にあっけなく終わります。

NANDのバックアップに使うSDカード(要8GB以上)と、インストール用のイメージを書き込むSDカード(要16GB以上)は共用でOK。

僕は16GBのSDカードにバックアップしたNANDをDVD-Rに保存した後に、同じSDカードにインストール用のイメージを書き込みました。

SDカードへのイメージの書き込みには「Etcher」を使用しました。Mac版、Windows版、Linux版があります。

Pomera dm200 linux ruby python 00001

GUIでイメージをSDカードに書き込めるため、黒い画面を一度も見ずにインストールを完了させることができます。

東芝のSDカードは少し容量が少なく、16GBのイメージが展開できない場合があるとのことです。東芝製のSDカードは避けておいた方がよさそうです。

このページでは具体的な作業手順には触れません。 @ichinomoto さんのページを参照してください。

再インストール時に注意すべきこと

SDカードにイメージを書き込んだ後、DM200上でインストール工程に入るとき、DM200側のNANDは工場出荷状態であることが前提となっています。

一度インストール作業を済ませた後、何らかの理由でSDカードにイメージを書き込み直す必要が出た場合は、バックアップしたNANDをリストアしてからでないと、WiFiやBluetoothがつながらない状態になります。

最初のインストール工程中に、DM200のオリジナルのファイルシステムからSDカードにドライバをコピーするからです。

それが面倒な場合は/opt以下をバックアップし、焼き直したSDカードに別途復元するとよいようです。

tar cvzf /mnt/vfat/opt.tar.gz /opt

NANDのリストア方法は @ichinomoto さんのページにある「DM200 eMMC NAND バックアップ/リストア ツール」のreadme.txtに書いてあります。

DM200の概要

プロセッサについて

DM200に搭載されているのはKEIANのAndroidタブレットにも搭載されているARM系の統合型プロセッサであるRockchip RK3128で、クアッドコアのCPUを持ちます。

Hardware Rockchip RK3128
Processor ARMv7 Processor rev 5 (v7l)
BogoMIPS 48.00
Features swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm

RAMは512MBで、コンソールでEmacsを使っている限りはきびきびと動作して快適です。

Pomera dm200 linux ruby python 00008

DM200用のLinuxイメージにはX Window System / Xfce4 (以降X Windowと呼びます)もプリインストール済み。

Pomera dm200 linux ruby python 00022

ポインティングデバイスがないため、キーボードでの操作、キーボードによるマウス操作手段を用意・マスターしなければなりませんが、X Windowを動かしてもそこそこ動きます。

Bluetoothマウス、USBマウスなどを接続することは可能ですが、筆者はマウス操作までキーボードで完結させるよう設定を施したのでマウスを接続して使うことはありません。

ディスプレイについて

標準状態で使っているとモノクロディスプレイのようですが、実際はカラーディスプレイが搭載されています。Linuxで使うと、ディスプレイから色が出て驚きがあります。

Pomera dm200 linux ruby python 00040

解像度は1024pixel × 600pixel。液晶にはややSTNっぽいざわつきがあり、高画質というわけではありませんが、不満に感じるほどではない程度です。

キーボードについて

DM200のキーボードは質のいいV字ギアリンクで、完全に主観ですが20万円クラスのモバイル向けノートPCに搭載されているキーボードをほうふつとさせる、上品で軽めのキータッチになっています。

Pomera dm200 linux ruby python 00030

Ctrl キーがAの横にありませんが、Linux側ではもちろん(設定方法後述)ポメラ側にもCaps LockとCtrlの入れ替え機能があり、Aの横にCtrlキーを持っていけます。

Pomera dm200 linux ruby python 00051

▲ポメラ側の「キー割付」機能でもCtrlとCaps Lockの入れ替えが可能。

先代のDM100よりキータッチは完全に勝り、ノートパソコンのそれに勝るとも劣りません。DM100より軽い力で入力ができます。

強化されたATOKの変換効率も相まって、よどみなく文章を入力していくことができます。

Linuxのコンソールをたたく用途でも当然不足がなく、フルスピードでのプログラミングも十分可能です。DM200で使うスクリプトをDM200上でいくつも作りました。

この手のデバイスで、キーボードがボトルネックにならない体験は新鮮。

ただしキーボードの配列はJIS。キーボードの配列に人一倍関心とこだわりが強いであろうLinuxユーザーは残念に思うかもしれません。

Linux側はいかようにも配列の変更ができますが、ポメラ側がカスタムできない点を歯がゆく感じることでしょう。

電源について

DM200の電源は内蔵かつ交換不能のリチウムポリマーバッテリーで、おおよその連続稼動時間は10時間。

MicroUSBポートから充電/給電ができますので、モバイルバッテリーと組み合わせれば実質的に稼働時間には制限はありません。

Pomera dm200 linux ruby python 00039

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

MicroUSBに外部電源を接続した場合に流れる電流をRT-USBVACで計測しました。

バッテリー充電中に流れる電流は1.04A~1.28A。

バックライトの輝度 電流(バッテリー充電中)
レベル1 1.04A
レベル2 1.04A
レベル3 1.04A
レベル4 1.04A
レベル5 1.05A
レベル6 1.08A
レベル7 1.11A
レベル8 1.15A
レベル9 1.19A
レベル10 1.27A
レベル11 1.28A

バッテリー満充電状態ではグっと減って190m~540mAといった水準になります。

バックライトの輝度 電流(バッテリー充電完了)
レベル1 0.19A
レベル2 0.20A
レベル3 0.20A
レベル4 0.21A
レベル5 0.22A
レベル6 0.25A
レベル7 0.28A
レベル8 0.32A
レベル9 0.37A
レベル10 0.44A
レベル11 0.54A

この結果から、例えば130gのモバイルバッテリー、cheero Power Plus 3 mini 6700mAh(実容量4,180mAh)との組み合わせでバッテリー満充電状態では連続稼働時間は8時間〜22時間増しにできることが分かります。

26,800mAh、実容量16,000mAhのモバイルバッテリーでは、同じく満充電状態なら29時間半~84時間半増し。

現在所有の15インチのMacBook Proが3時間30分しかもたないので、電源のことを全く気にしなくていい安心感は格別です。

在来のポメラの省電力性を思うとDM200はファブレットぐらいの電池持ちになってしまったのはいささか残念に思いますが、まずこれだけの稼動時間が稼げれば不満はないのではないでしょうか。

電源オフについて

DM200をSDカードにインストールしたLinuxを起動できるようにした後で重要なのが、ポメラ側での電源ボタン長押しによる電源オフの操作です。

Pomera dm200 linux ruby python 00039

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

MicroUSB端子から電源を供給していると、電源ボタンを長押ししても電源オフにできません。

このことを知らないと無用な動揺を招きますので、試される際はご注意ください。

KING JIM ポメラDM100との比較

僕は前機種のKING JIM ポメラDM100(以下DM100)も持っていて比較できる立場にあります。

Pomera dm200 linux ruby python 00041

※Caps Lockはポメラ側でもLinux側でもCtrlに変更できます

hp 200LXは2台、乾電池駆動のモバイルギアIIを10台ぐらい集めるほど乾電池駆動マシンが好きなためDM100びいきをしたいところですが、アッサリDM200に軍配を上げます。

  • キーボードがDM100より軽快に打てる
  • ATOKの変換効率が向上
  • 動作がきびきびとしている
  • アウトラインモードが非常に便利
  • 貴重な類語辞書搭載

乾電池駆動にこだわりたい気持ちも分かりますが、文章をアウトプットする効率はDM200の方が圧倒的に上です。

その上Linuxが動作して融通が効くとなれば、DM100への回帰はポメラシリーズが終息して、DM200のバッテリーの入手が困難になったときまではなさそう、というのが両方所有する立場からの率直な感想です。

乾電池へのこだわりから、モバイルバッテリーからeneloopのニッケル水素充電池を充電できるチャージャーまでそろえていますが、それでもDM200を選びます。

モバイルバッテリーを用意していれば電源面で不安を感じることがなく、ロマン以外の部分で乾電池駆動を必要としないからです。

Pomera dm200 linux ruby python 00038

DM200ではDM100でできたCSV入力ができなくなっていますが、Linux側でのGnumeric、LibreOfficeなどの利用で補完が可能です。

Pomera dm200 linux ruby python 00018

「これさえできれば……」ということがあったときに、リリーフとしてのLinux出動で大体何でも解決が可能というのはDM200の強力な切り札です。

Linux起動の実際とファイルを介した連携

DM200をSDカードにインストールしたLinuxを起動できるようにすると何が起こるのでしょうか? 電源オフ状態を起点とした遷移図を起こしてみました。

リブート直後、ないしは電源オフの状態でAlt + 右Shift + 電源ボタンというコンビネーションを押しっぱなしにしていると、SDカード上のLinuxが起動できる仕組みです。

Pomera dm200 linux ruby python 00032

青色の矢印が標準の遷移。それ以外が、Linux起動にまつわる遷移です。

Pomera dm200 linux ruby python 00006

※この図もDM200上でGraphvizを使って作成しました。

ポメラの編集画面からLinuxのコンソールのプロンプト表示まで 22秒
Linuxのコンソールのプロンプトからポメラの編集画面表示まで 10秒

ポメラ側とLinux側との間の連携は、LinuxをインストールしたSDカード上に作成された2GBのVFAT領域で、ファイルを介してできます。

Pomera dm200 linux ruby python 00005

素早く起動するので、ポメラ側とLinux側との行ったり来たりもそれほど苦痛ではありません。

VFAT領域はオートマウントではないため、ポメラ側とLinux側の連携のために、Linux側では明示的にVFAT領域を手動でマウントする必要があります。

僕は下掲のようなマウント/アンマウントスクリプトを用意しました。これを ~/.bashrc に追記して疑似自動マウントにしてしまう手もあるでしょう。( /etc/fstab を書き換えてもいいですが、一度下手にいじってLinux側を起動不能にした経験あり)

連携の例

  • ポメラ側ではできない正規表現を使った置換をLinux側で実行し、またポメラ側に戻ってくる
  • ポメラ側で作成したブログ用の原稿を、Linux側で自動成形した上ブログにアップする
  • Linux側で画像処理やネットワーク接続の必要なことをし、成果をポメラ側に持って帰る

一つ注意点があります。それは、ポメラ側で編集中のテキストファイルをLinux側で編集して、またポメラ側に戻ってきた場合のこと。

この場合、Linux側での編集内容はポメラ側に反映されていないように見えます。

それは、ポメラ側の状態復帰時に編集元のテキストファイルを参照していないことに起因します。同じファイルを開き直して初めてLinux側での編集結果が反映されます。

SDカード上のVFAT領域マウント

本来管理者権限が必要なところ、セキュリティを無視して一般ユーザーでもできるようにしています。

#!/bin/sh
mount | grep /mnt/vfat > /dev/null
if [ $? -eq 1 ]; then
  echo dm200 | sudo -S mount -t vfat /dev/mmcblk1p1 /mnt/vfat -o rw,sync,dirsync,noatime,utf8,umask=000 >/dev/null 2>&1
  ls -l /mnt/vfat
fi

SDカード上のVFAT領域アンマウント

#!/bin/sh
mount | grep /mnt/vfat > /dev/null
if [ $? -eq 0 ]; then
  echo dm200 | sudo -S umount /mnt/vfat >/dev/null 2>&1
fi

Linux側でできること

インストールした主要なソフトウェア

Debian Linux 9のリポジトリに登録された膨大なソフトウェア資産を活用できます。

Ruby、Pythonなどの各種処理系のリポジトリに登録された膨大なパッケージ群も利用できます。

Pomera dm200 linux ruby python 00012

ソフトウェア 概要 コンソール/X
LibreOffice MS Word、MS Excelなどの代替 X
Gnumeric MS Excelの代替 X
Emacs 超高機能テキストエディタ 両用
Vim 超高機能テキストエディタ 両用
Python 3 インタプリタ コンソール
Ruby 2.3 オブジェクト志向インタプリタ コンソール
Graphviz 作図ツール コンソール
wget ダウンローダ コンソール
w3m テキストWebブラウザ コンソール
ncftp ftpクライアント コンソール
fbi コンソール用画像ビュア コンソール
ImageMagick コンソール用超多機能画像処理ツール コンソール

Debian Linux on DM200の設定と活用

施した設定や、使用に当たって必要な知識を随時書いていきます。

基本的にはDebian Linuxに対する一般的な知識をそのまま流用可能です。

一般

デフォルトユーザーのパスワードは?

種別 ユーザ名 パスワード
特権ユーザー root root
一般ユーザー dm200 dm200

自動ログインの設定方法は?

デフォルトではLinuxを起動するとログインプロンプトが表示されますが、それを省いてログインを自動化できます。

以下のファイルを編集。

$ sudo vi /lib/systemd/system/getty@.service

ExecStartから始まる行に、「-a dm200」を追記して保存。

ExecStart=-/sbin/agetty --noclear -a dm200 %I $TERM

「-a root」とすれば、特権ユーザーで自動ログインされるようになります。

ポメラ側とLinux側を行き来すると発生する時刻のズレを解消するには?

「人柱版 その2」では、Linux側を起動した後、ポメラ側に戻るとポメラの時刻が9時間戻ってしまう現象が出ます。

@ichinomotoさんによれば内部時計の正しい扱いを検討中ということですが、以下のようにするとズレが起きなくなります。

コンソール上では実行できないので、X Windowを起動してから実行します。

$ sudo touch /etc/adjtime
$ sudo timedatectl set-local-rtc 1

「人柱版 その2」以降の版では修正されるかもしれません。

CtrlとCaps Lockを入れ替えるには?

/etc/default/keyboardを編集します。

$ sudo vi /etc/default/keyboard

以下の行の冒頭の#を削除して保存。

#XKBOPTIONS="ctrl:nocaps"

再起動で反映。

キーをUS配列化するには?

DM200のキーボードはJIS配列ですが、設定を変更するとUS配列化が可能です。

設定方法:

/etc/default/keyboardを編集。

$ sudo vi /etc/default/keyboard
  • XKBLAYOUTを初期値の「jp」から「us」に変更
  • XKBMODELを初期値の「jp106」から「pc105」に変更

(情報:@ichinomotoさん)

XKBOPTIONSの行の#も削除すればCaps LockとCtrlも入れ替えます。

XKBMODEL="pc105"
XKBLAYOUT="us"
#XKBOPTIONS="ctrl:nocaps"

再起動で反映。

無論、ここで設定を変更してもポメラ側には反映されません。Linux側のみに有効なカスタマイズです。

この設定で試用していましたが、X Window上でJISに戻ったりUSになったりといった現象が起きる場合があり、今はJISに戻して使っています。→「Alt + F1 > 設定 > IBus の設定 > 詳細 > キーボードレイアウト」の「システムのキーボードレイアウトを使用する」のチェックボックスが外れていたので、そのせいかもしれません。再度US配列にして使ってみます。

カーネルのアップデートについて:

「人柱版 その2」でUS配列化するとバッククオート(`)が入力できないなどの不具合が生じます。

「人柱版 その2」に対する修正版のカーネル「test_kernel_d29.zip」が出ていますので、キー配列をUS化するためには、まずカーネルのアップデートが必要です。手順はアーカイブの中のテキストに書いてあります。

アップデート用のスクリプトが付属するのでそれを実行するだけです。

$ unzip test_kernel_d29.zip
$ cd test_kernel_d29
$ sudo ./kernel_update.sh

「test_kernel_d29.zip」に更新するとMenuキーがModifierのSuperキーとして使えるようになってキーバインドの空き地が増えるので、JIS配列で使っていても適用をおすすめします。

また、半角/全角キーもgraveとして認識するようになっています。

「人柱版 その2」以降の版が出た際には修正されているはずです。

キーボードを親指2本で使うには?

DM200は軽量でどこでも使えることから、立ったまま使いたいケースもあるでしょう。

その場合は親指2本打ちをすると便利です。

親指2本打ちをするに当たって問題になるのがShift、Ctrl、Altキーの扱いです。

Shift、Ctrlは右側にもありますが、Altは左側にしかありません。

こんな場合は「スティッキーキー」機能を使うと便利です。

Alt + F1をAltを押してからF1を押すといった具合に分割して押せるようになります。

Alt + Ctrl + D(デスクトップ表示)のような三つ押しの場合も左手の親指1本で押せるようになります。

設定:

「Alt + F1 > 設定 > アクセシビリティ > キーボード > スティッキーキー > スティッキーキーを使用する」をオンにします。

「2つのキー…」はオフが推奨です。

カーネルをアップデートするには?

※最近公開されるカーネルには更新用のシェルスクリプトが付属するようになったため、ここでの知識は不要になりました。

@ichinomotoさんから、ブログでのイメージの公開前に、差し替え用のカーネルがリリースされることがあります

そんな場合の差し替えの手順。ホームディレクトリにkernel.imgというファイル名でカーネルが設置されている場合の例です。

$ sudo dd if=/home/dm200/kernel.img of=/dev/mmcblk0p14 bs=4M

/opt/bin以下の実行ファイルを一般ユーザーでも実行できるようにするには?

$ sudo chmod +x /opt/bin/*

WiFiを設定するには?

大まかな流れ。

  1. wifi_switch onを実行
  2. iwlistコマンドでAPの情報収集
  3. wpa_supplicant.confに接続先のAPの設定を記述
  4. /opt/bin/wifi_switch offを実行
  5. /opt/bin/wifi_switch onを実行

特権ユーザーでwifi_switch onを実行。

# wifi_switch on

特権ユーザーで周囲のアクセスポイント情報を収集。

# iwlist wlan0 scanning > /home/dm200/ap_list.txt

最近多いWPA2-PSKのAPはiwlist wlan0 scanningで以下のようにリストアップされます。

wlan0     Scan completed :
          Cell 01 - Address: XX:XX:XX:XX:XX:XX
                    ESSID:"とあるSSID"
                    Mode:Managed
                    Frequency:2.437 GHz (Channel 6)
                    Quality:4/5  Signal level:-61 dBm  Noise level:-92 dBm
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s

設定ファイルwpa_supplicant.confに接続先アクセスポイント情報を反映します。

/mnt/vfatをマウント。

# mount /mnt/vfat

マウントされたVFAT領域のファイルは/etc/fstabのオプションで特権ユーザーでないと編集できないようになっているため、特権ユーザーでwpa_supplicant.confを編集。

# vi /mnt/vfat/settings/wpa_supplicant.conf

WPA2-PSK用の設定は以下です。ssidと、pskを書き換えればOK。pskを暗号化する設定もありますが、平文で接続されるのを確かめてからでも遅くないでしょう。

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="どこかのSSID"
    pairwise=CCMP
    group=CCMP
    proto=RSN
    key_mgmt=WPA-PSK
    psk="パスワード"
}

iPhoneのテザリングでは以下のようになります。(WPA2-PSKと同様)

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="iPhoneのSSID"
    pairwise=CCMP
    group=CCMP
    proto=RSN
    key_mgmt=WPA-PSK
    psk="パスワード"
}

第三世代のFlashAir(割当IPアドレス192.168.0.1)、Olympus OM-D E-M1 Mark II(割当IPアドレス192.168.0.10)のWiFiの設定も以下でした。

認証なし、WEPでなければ以下で通用しそうです。

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="flashairのSSID"
    pairwise=CCMP
    group=CCMP
    proto=RSN
    key_mgmt=WPA-PSK
    psk="パスワード"
}

Android 6(Nexus 5)のホットスポット機能とのテザリングの設定が以下。(情報@sakiraさん)

network={
    ssid="Android 6のSSID"
    psk="foobar"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    auth_alg=OPEN
    scan_ssid=0
}

認証なしのオープンなAPの場合は以下のようになります。

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="どこかのSSID"
    key_mgmt=NONE
}

wpa_supplicant.confに、エントリnetwork={…}を使用するAP分ズラズラと並べて書いていきます。

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="どこかのSSID1"
    ....
}
network={
    ssid="どこかのSSID2"
    ....
}
network={
    ssid="どこかのSSID3"
    ....
}

wpa_supplicant.confの上から下に向けて接続を試みていくため、スマートフォンとのテザリング用のエントリを上に、家庭や拠点のAP用のエントリを下に並べるといいでしょう。

接続は以下のコマンドで。

# wifi_switch on

切断は以下のコマンドで。

# wifi_switch off

接続がうまくいかなかったらwifi_switch offを挟むか、リブートして再試します。特に、サスペンドを挟むとwlan0 UPに失敗するようになります。リブートで解決。

$ sudo /sbin/reboot

リブートしなくてもwifi_switch onとwifi_switch offを繰り返しているとそのうち接続できることがあります。

wpa_supplicant.confの参照場所と参照順は?

「人柱版 その2」では、

  1. /mnt/vfat/settings/wpa_supplicant.conf
  2. /etc/wpa_supplicant/wpa_supplicant.conf

の順で接続先AP情報を見にいくようになっており、なおかつ/mnt/vfat/settings/wpa_supplicant.confの方にひな形のファイルが置いてあるため、まず/mnt/vfat/settings/wpa_supplicant.confを編集するか、削除するかを選択します。

wifi_switchコマンドを実行するときに/mnt/vfat/がマウントされていなくても、wpa_supplicantが接続する際にはそこにあったものを/tmp/wpa_supplicant.confとしてコピーして見にいっているようです。

ここに意図しない内容の設定ファイルが存在する場合の影響が考えられますので、接続がうまくいかない場合は要チェックです。

つまり、以下の三つの場所を見ているということです。

  • /mnt/vfat/settings/wpa_supplicant.conf
  • /tmp/wpa_supplicant.conf
  • /etc/wpa_supplicant/wpa_supplicant.conf

なお、「人柱版 その2」以降の将来のバージョンでは/etc/wpa_supplicant/wpa_supplicant.conf優先の参照順になる予定です。

ソフトウェアのインストールをするには?

ソフトウェアはapt-getコマンドでインストールできます。

GUIのパッケージ管理ツールSynapticは重くて使えませんでした。

まずは情報を更新。

 $ sudo apt-get update

installコマンドでソフトウェア名を指定してインストールします。

$ sudo apt-get install unzip

-yオプションで問い合わせなしでのインストールになります。

$ sudo apt-get install unzip -y

ソフトウェアのアンインストールをするには?

インストールしたソフトウェアのアンインストールはremoveコマンドで実行します。

$ sudo apt-get remove unzip

インストール候補のソフトウェアを検索するには?

apt-cacheコマンドで検索します。apt-get updateで取り寄せた情報を元にしています。

ページャーのlessで受けると、j、kでスクロールができて便利です。また/で検索ができます。qでlessの終了となります。

$ apt-cache search キーワード | less

もうちょい絞り込む場合。

$ apt-cache search キーワード1 | grep キーワード2 | less

結構使うので~/.bashrcに関数を設定しています。

funciton search () {
  apt-cache search $@ | less
}

思いついたキーワードでリポジトリを検索すると、思わぬ発見があるものです。

lessの代わりにpecoを使うのも便利です。インクリメンタルサーチや、二つ以上のキーワードでAND検索が可能です。

$ sudo apt-get install peco

xargsを使えば、pecoで選択したパッケージをapt-getコマンドにそのまま渡せます。

$ apt-cache search キーワード | peco | xargs sudo apt-get install $@ -y

よく使っている追加パッケージは?

人によって全く傾向は違うと思いますが、僕がまずインストールするのは以下です。

  1. ruby
  2. python
  3. wget
  4. less
  5. peco
  6. zip
  7. unzip
  8. nkf
  9. imagemagick
  10. w3m
  11. fbi

日本語フォントをインストールするには?

IPAGothicをインストールし、fbtermに反映する例です。

「人柱版 その2」からはフォールバック先のフォントがマトモ(多分Takao Gothic)なため、無理にしなくても十分使えます。

$ wget http://dl.ipafont.ipa.go.jp/IPAfont/ipag00303.zip
$ unzip ipag00303.zip
$ mkdir ~/.fonts
$ mv ipag00303/ipag.ttf ~/.fonts/
$ fc-cache -fv
$ fc-list | grep -i ipa
/home/dm200/.fonts/ipag.ttf: IPAゴシック,IPAGothic:style=Regular

1
~/.fbtermrcを編集。

$ vi ~/.fbtermrc

元のフォント指定をコメントアウトして、IPAGothicのみの指定に変更した例。

#font-names=Ricty Diminished
font-names=IPAGothic

この手順でインストールしたフォントは、 X Window側でも利用可能です。

一般ユーザーでサスペンドするには?

サスペンドは以下のコマンドでできます。

$ sudo /opt/bin/sus2ram

特権ユーザーでなければ実行できないのはちょっと不便。パスワードなしで実行できるようにすると便利です。

$ mkdir -p /home/dm200/bin/
$ cd /home/dm200/bin
$ vi sus

以下のような内容で保存。このスクリプトは「X Window上のデスクトップ通知表示」でインストールしたデスクトップ通知のパッケージに依存しますので、インストールが必要です。

#!/bin/bash

if [ $$ -ne $(pgrep -fo "$0") ]; then
    exit
fi

if [ ! $(pgrep -fo "sus2ram") == "" ]; then
    exit
fi

if [ "X${DISPLAY}" != "X" ]; then
    notify-send "Suspend"
fi
echo dm200 | sudo -S /opt/bin/sus2ram >/dev/null 2>&1

以下のように権限を付与。

$ chmod +x sus
$ sudo chmod u+s sus

「Bashの設定」の項で~/binにもパスを通していますので、以降susと打てばサスペンドできるようになります。

電源ボタンでサスペンドさせるようにするには?

前項で作成したsusコマンドを、X Window上で電源ボタンを押せば実行できるようにします。

Debian Linux on DM200の使い勝手を決定付ける重要な設定です。

xbindkeysをインストールします。(インストールしていれば不要)

$ sudo apt-get install xbindkeys -y

~/.xbindkeysrcを編集します。

$ vi ~/.xbindkeysrc

次のような内容にして保存。

"/home/dm200/bin/sus"
  m:0x0 + c:124
  X86PowerOff

設定ファイルのリロード。

$ killall xbindkeys
$ xbindkeys -f ~/.xbindkeysrc

これでX Window起動中に電源ボタンを押せばサスペンドできるようになりました。

/opt/bin/sus2ramの作り的にサスペンドまでに5秒かかるため、トリガーした時点でデスクトップ通知を表示します。

一般ユーザーでリブートと電源オフをするには?

リブートや電源オフに使うrebootは特権ユーザーでないと実行できず不便です。

一般ユーザーで実行できるようにしておきます。

$ sudo chmod u+s /sbin/reboot

リブート:

$ reboot

電源オフ:

haltコマンドはなぜか一般ユーザーで実行が可能です。

$ halt -p

halt -pの方は、MicroUSBに外部電源が接続されているとリブートになってしまうようです。

Dropboxによる双方向ファイル同期をするには?

DM200でもDropboxによる双方向ファイル同期が可能です。詳細は別エントリで解説しました。

テキストを保存して1分以内には何の操作をしなくともDropboxに上がっているという体験に意義を見い出す人は多いでしょう。

コンソールの利用

コンソールの利用で知っておきたいことを紹介。

Bashの最低限の設定は?

~/.bashrcを編集。

$ vi ~/.bashrc

とりあえず必要なパスを追加、履歴の拡大をしました。.bashrcの末尾に追加。

export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTCONTROL=ignoredups
PATH=/home/dm200/bin:/opt/bin:/sbin:$PATH

自作のコマンドは/home/dm200/binに入れています。

mkdir ~/bin

BASHのプロンプトへのバッテリー残量の表示については「コンソールにバッテリー残量を表示〜bash編」を参照。

セッションを切り替えるには?

デフォルトの設定ではコンソール画面を6画面持っており、あたかもタブで複数画面を操作できる高機能ターミナルのように、画面(セッション)を切り替えながら操作が可能です。

screen、tmuxのようなマルチプレクサの導入前には便利に使えます。

切り替えのためのキーボードショートカット:

  • Alt + F1 〜 Alt + F6
  • Alt + → もしくは Alt + ←

時間のかかる作業を始めたら、Ctrl + Zでバックグラウンドに送らずとも、セッションを切り替えて他のことができます。

uim-fepの起動キーを変更するには?

ログインすると、日本語表示ができるfbtermが起動するようになっていて便利です。

日本語入力のためのuim-fep(変換エンジンはMozc)も同時に起動しますが、起動のホットキーがCtrl + SpaceになっていてEmacsでset-markコマンドが使えず往生します。

~/.uimを編集して起動のホットキーを変更します。

$ vi ~/.uim

僕はAlt + escapeに変更しました。保存して終了。

(define-key generic-on-key? '("<Alt>escape" "zenkaku-hankaku"))
(define-key generic-off-key? '("<Alt>escape" "zenkaku-hankaku"))

半角/全角キーはコンソール上では認識しない状態のようです。

fbtermのフォントサイズを大きくするには?

~/.fbtermrcを編集。

$ vi ~/.fbtermrc

font-sizeのサイズ指定を変更して保存。

font-size=24

fbtermで画面の崩れを回避するには?

~/.fbtermrcを編集。

$ vi ~/.fbtermrc

ambiguous-wideをnoからyesに変更して保存。

ambiguous-wide=yes

画面の崩れを直すには?

Ctrl + Lでリフレッシュする。

コンソール上でスクリーンショットを撮影するには?

fbgrab(fbcat)のインストール。

$ sudo apt-get install fbgrab -y

撮影手順:

  1. Alt + F1のセッションで撮影したい画面を表示
  2. Alt + F2で別のセッションのコンソールに移り、下掲のコマンドを実行
  3. 5秒後に撮影が実行されるので、Alt + F1で元のセッションに戻って撮影の瞬間を待機
$ sleep 5; fbgrab -d /dev/fb0 screenshot.png

少し画面が暗いと思ったら、ImageMagickをインストールしていれば明るく加工できます。

$ sudo apt-get install imagemagick -y
$ convert -modulate 170 screenshot.png out.png

処理後のout.pngを確認すると元画像より明るくなっているはずです。

コンソール上で画像を閲覧するには?

Pomera dm200 linux ruby python 00009

コンソール用の画像ビュア、fbiをインストール。

$ sudo apt-get install fbi -y

使い方の例。-aオプションで画面に収まるように縮小表示されます。

実行中にhキーでヘルプが出ます。

$ fbi -a *.png

fbterm上では利用できないため、fbtermからexitしてから使う必要があります。

コンソールにバッテリー残量を表示するには?〜bash編

コンソール中心の利用を考えたときに問題になるのがバッテリー残量の確認です。

コンソールだとステータスバーなどがないので、コマンドを実行する以外にバッテリー残量を確認する手段がありません。

Emacsには標準でbattery.elというmode-lineにバッテリー残量を表示するスクリプトがあるのですが、apmが標準と違うからか表示できなかったため、表示用のElispを書きました(後出)。

一番身近な表示領域ということで、bashのプロンプトにバッテリー残量を表示してみました。

まずはバッテリー残量を取得するスクリプトの用意です。

$ vi /home/dm200/bin/batt

内容は次のように。

#!/bin/bash

battery_status=`/opt/bin/battery2`

if [[ ${battery_status} =~ remain_capacity\ \=\ ([0-9]+),\ status ]]; then
    remain=`expr ${BASH_REMATCH[1]} / 42`
    echo "${remain}%"
fi

保存したら実行権限を付与。

$ chmod +x /home/dm200/bin/batt

/home/dm200/.bashrcに以下を。

PS1="[$(/home/dm200/bin/batt)] \w \$ "

/root/.bashrcに以下を追記します。

PS1="[$(/home/dm200/bin/batt)] \w # "

表示例:

[93%] ~/bin $ ls -l
[85%] /etc/init.d/ # ls -al

コンソールにバッテリー残量を表示するには?〜tmux編

tmuxはscreenと同じターミナルマルチプレクサ。

その役どころの説明が難しいのですが、コンソールの世界のウインドウシステムのようなものです。

tmuxは起動すると画面下部にステーラスラインが表示されるのですが、ここにコマンドの実行結果を埋め込め、しかも定期的に更新ができるのです。

この機能を使ってバッテリー残量の表示ができました。

Pomera dm200 linux ruby python 00059

前項で作ったスクリプト/home/dm200/bin/battを流用します。

tmuxの設定ファイルを編集。

$ vi ~/.tmux.conf

内容に以下を追記。

set-option -g status-interval 5
set-option -g status-right "|BATT:#(/home/dm200/bin/batt)"

これでtmuxを起動すると、ステータスラインにバッテリー残量が表示されているはずです。

仮想通貨の価格を表示するには?〜tmux編

前項のノウハウを使えばtmuxに暗号通貨のXRPの価格を表示できます。

Pomera dm200 linux ruby python 00060

XRPの価格を取引所Coincheckから取得するスクリプトを用意。

$ vi /home/dm200/bin/xrp2

内容は次の通り。

#!/bin/bash

json=`curl https://coincheck.com/api/rate/xrp_jpy`

if [[ $json =~ rate\":\"([0-9.]+)\"} ]]; then
 xrp=`printf '%.2f' ${BASH_REMATCH[1]}`
 echo "XRP:${xrp}"
else
 echo "XRP:-"
fi

スクリプトの中でcurlコマンドを使用しているので、まだインストールしていなかったらインストール。

$ sudo apt-get install curl -y

保存したら実行権限を付与。

$ chmod +x /home/dm200/bin/xrp2

tmuxの設定ファイルを編集。

$ vi ~/.tmux.conf

次のようにしました。

set-option -g status-interval 5
set-option -g status-right "|#(/home/dm200/bin/xrp2)|BATT:#(/home/dm200/bin/batt)"

X Windowの利用

X Windowの利用で知っておきたいことを紹介。

X Windowの起動

Debian Linux on DM200にはX Window Systemとウインドウマネージャxfce4がプリインストールされています。

Pomera dm200 linux ruby python 00022

デフォルトで起動するfbtermをexitするとstartxで起動できます。

$ startx

fbtermを起動していても、特権ユーザーで起動すると起動できます。

# startx

起動したらパネルの設定を促されます。Alt + Tabで「パネル」を前面に持ってきて、Tabキーで「デフォルト設定を使用」にフォーカスを合わせてEnter。

fbterm上から一般ユーザーでX Windowを起動するには?

fbtermを起動したまま一般ユーザーで起動しようとすると、

$ startx

以下のようなエラーを得ることになります。

(EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)

これは、xserver-xorg-legacyをインストール。

$ sudo apt-get install xserver-xorg-legacy -y

さらに、以下のファイルを編集。

$ sudo vi /etc/X11/Xwrapper.config

以下のような記述があるので、

allowed_users=console

これを次のように修正して保存すると起動できるようになります。

allowed_users=anybody

X Window上で日本語入力をするには?

日本語入力関係ではMozcとIBusがプリインストールされています。

Pomera dm200 linux ruby python 00053

「Alt + F1 > 設定 > IBus の設定」を見ると、「次の入力メソッド」のキーボードショートカットが「<Super>space」になっているため、これを「<Shift>space」に変更。

一度ログアウトして設定を反映。

テストカーネルd28からは、Menu + Spaceで入力メソッドを切り替えできるので、「次の入力メソッド」は「<Super>space」のままにしておいて大丈夫です。

Pomera dm200 linux ruby python 00052

入力メソッドの切り替えでMozcを選択した後、日本語入力は、「無変換」、「変換」、「ひらがな/カタカナ」キーを押すとできるようになります。

pomera-dm200-linux-ruby-python-00071

「A」と「あ」のモードはそれぞれ交互に切り替わり、「ひらがな/カタカナ」の場合は「あ」と「_A」のモードを交互に切り替えるホットキーに設定されています。

まとめると、日本語入力までの手順は以下のようになります。

  1. 「次の入力メソッド」のキーボードショートカットを入力できるものに設定
  2. 「次の入力メソッド」のキーボードショートカットの設定を変更した場合は一度ログアウト
  3. 「次の入力メソッド」のキーボードショートカットを押して入力メソッドをMozcに切り替え
  4. Mozcを選んだことでインジケーターの表示が「JA」から「A」に切り替わったことを確認
  5. 「無変換」、「変換」キーを押して、インジケーターの表示を「A」から「あ」に切り替え

X Window上でよく使うキーボードショートカット

X Window上でよく使うキーボードショートカットを抜粋しました。

機能 操作
アプリケーションメニュー表示 Alt + F1
ウインドウメニュー表示 Alt + Space
アプリの素早い起動 Alt + F2
ウインドウの切り替え Alt + Tab
ウインドウの最大化 Alt + F10
ウインドウの移動 Alt + F7
ウインドウを閉じる Alt + F4

X Window上での素早いアプリケーションの起動

Alt + F1のメニュー経由のアプリケーションの起動が面倒になってきたら、Alt + F2で起動する小型のアプリケーションファインダーからの起動がおすすめです。

アプリ名を途中まで打ち込むと、以降を補完してくれます。引数もいっしょに渡せます。

Pomera dm200 linux ruby python 00061

xtermのフォントを大きくするには?

~/.Xdefaults でフォントサイズの変更が可能です。

$ vi ~/.Xdefaults

以下のようにして保存。

xterm*VT100*font: 10x20

以下の手順で反映されます。

xrdb -load ~/.Xdefaults

xterm代替ターミナルエミュレータをインストールするには?

xtermいがい だと日本語が化けるので、代替のターミナルエミュレータの使用がおすすめです。

LilyTermがなかなかよい感じです。

Pomera dm200 linux ruby python 00047

ただ、Ctrl + FをLilyTerm自身が持っていってしまうので、設定変更の必要を感じる人が多いでしょう。

$ vi ~/.config/lilyterm/default.conf

以下の箇所を探します。

find_key = Ctrl F

割当を変更して保存。

find_key = Ctrl S

Ctrl + Sはたびたび間違って押してしまい困惑する(stty stop)ので、lilytermの機能で上書きしてもよさそうです。

この点さえ修正してしまえば特に問題なく、ビットマップフォント(モトヤシーダ)にアンチエイリアスがかからず具合がいいのでメインのターミナルエミュレータになっています。

Shift + カーソル上下でバックログをたどれます。

メニューはウインドウ上を右クリックすると出てきますが、DM200にはポインティングデバイスがないのでkeynavを導入してキーボードでマウス操作ができるようにしておく必要があります。「keynavを使ったキーボードによるマウス操作」を参照してください。

Pomera dm200 linux ruby python 00048

インストール:

$ sudo apt-get install lilyterm -y

もう一つ、定番らしいターミナルエミュレータ、Terminatorをインストールしました。

Pomera dm200 linux ruby python 00049

縦横2分割ができるほか、プラグインに対応していたりと非常に高機能です。

Pomera dm200 linux ruby python 00050

こちらも右クリックが必要なので、「keynavを使ったキーボードによるマウス操作」を参照のこと。

インストール:

$ sudo apt-get install terminator -y

X Window 上でスクリーンショットを撮影するには?

xfce4-screenshooterをインストールすると、スクリーンショットの撮影が可能です。

インストール:

$ sudo apt-get install xfce4-screenshooter -y

インストールが終了すると、「Alt + F1 > アクセサリ > スクリーンショット」から起動できます。ホットキーを割り当てると便利です。

Pomera dm200 linux ruby python 00026

「Alt + F1 > 設定 > キーボード > アプリケーションショートカットキー」から、xfce4-screenshooterを起動するよう割り当てます。

Ctrl + Insertがオススメです。

Pomera dm200 linux ruby python 00025

X Windowにデスクトップ通知を表示するには?

MacOSでいうGrowlのような、xfce4-notifydが使えます。

Pomera dm200 linux ruby python 00049

インストール:

$ sudo apt-get install xfce4-notifyd -y

インストールが完了すると「Alt + F1 > 設定 > 通知」が増えます。

通知はコマンドラインからだと notify-send コマンドで送れます。

notify-send "hoge"

cronの中からnotify-sendを使う場合は、事前に環境変数の設定が必要です。

export DISPLAY=:0 nofity-send "hoge"

パネルの位置をキーボードだけで移動するには?

時計やアプリケーションメニュー、ウインドウボタンなどを表示するパネル。

基本的な設定は「Alt + F1 > 設定 > パネル」でできます。

Pomera dm200 linux ruby python 00028

マウスなしだとパネルを移動するのが不可能のようです。MacOSのメニューバーのように上端に寄せたいが、キーボードだけだとままなりません。

Pomera dm200 linux ruby python 00021

そこで、以下のファイルを編集。

$ vi /home/dm200/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml

以下の部分の「y=10」を「y=0」に変更し、保存。次の起動でパネルが上端に張り付くはずです。

<property name="position" type="string" value="p=0;x=100;y=10"/>

keynavを使ったキーボードによるマウス操作」でkeynavを設定し、マウス操作で動かすのも手です。

バックライトの輝度調整をするには?

バックライトの輝度調整は、以下のコマンドでできます。

$ sudo /opt/bin/backlight 254
$ sudo /opt/bin/backlight 40

40以下への設定は、液晶が見えなくなってしまうので要注意です。

輝度調節用のソフトウェアbrightness

Ruby/Gtk2で輝度調節用のソフトウェアを作ってみました。

Pomera dm200 linux ruby python 00058

以下のファイルをダウンロードして、/home/dm200/bin/brightnessとして設置。

ダウンロード: brightness-0.3.zip

実行権限を付与します。

$ chmod +x /home/dm200/bin/brightness

もし、ユーザーdm200のパスワードを変更している場合は、冒頭のPASSWORDを変更してください。

PASSWORD="dm200"

依存しているソフトウェアをインストール。

$ sudo apt-get install ruby ruby-gtk2 -y

さらに、「xbindkeysの設定」の項を参照してxbindkeysをインストール。

~/.xbindkeysrcに以下を追記。

"/home/dm200/bin/brightness"
  Control + Delete

設定ファイルをリロード。

$ killall xbindkeys
$ xbindkeys -f ~/.xbindkeysrc

これで、Ctrl + Deleteを押すとbrightnessが起動するようになります。

カーソル左右で輝度調節。EnterキーもしくはQキーで終了。

キーボードのAの列(A、S、D、F、G、H、J、K、L、;、;、])でも直接輝度を調整可能です。

パネルにコマンドの実行結果を定期的に更新しながら表示するには?

MacOSでいうBitBarに似た「ジェネリックモニター」プラグインをインストールするとできます。

個人的に大好きなプラグインです。

Pomera dm200 linux ruby python 00046

X Window上でのバッテリー残量表示に使います。

インストール:

$ sudo apt-get install xfce4-genmon-plugin -y

インストールが完了すると「Alt + F1 > 設定 > パネル > アイテム」の選択肢に「ジェネリックモニター」というものが増えます。

ちなみに、暗号通貨取引所coincheckから通貨の価格情報を取得して表示する例は以下のような感じです。

Pomera dm200 linux ruby python 00052

$ sudo apt-get install curl -y
#!/bin/bash

json=`curl https://coincheck.com/api/rate/xrp_jpy`

if [[ $json =~ rate\":\"([0-9.]+)\"} ]]; then
 xrp=`printf '%.2f\n' ${BASH_REMATCH[1]}`
 echo " XRP:${xrp} "
else
 echo " XRP:- "
fi

X Window上でバッテリー残量を確認するには?

バッテリー残量の確認は、以下のコマンドでできます。

$ /opt/bin/battery
$ /opt/bin/battery2

コマンド実行でしか確認できないのは不便なので、xfce4のパネルに表示させます。

「xfce4のパネルにコマンドの実行結果を定期的に更新しながら表示する」、「X Window上のデスクトップ通知表示」の項でインストールしたパッケージに依存していますので、インストールを済ませておきます。

以下のスクリプトを/home/dm200/bin/battmonとして保存。

#!/bin/bash

threshold=15

battery_status=`/opt/bin/battery2`

if [[ ${battery_status} =~ remain_capacity\ \=\ ([0-9]+),\ status ]]; then
    remain=`expr ${BASH_REMATCH[1]} / 42`
    echo "<txt>${remain}% </txt><bar>${remain}</bar>"
    if [ $remain -le $threshold ]; then
		notify-send -i battery "BATTERY LOW (${remain}%)"
    fi
fi

実行権限を付与します。

$ chmod +x /home/dm200/bin/battmon

「Alt + F1 > 設定 > パネル」を起動。Alt + Mでアイテムのタブに飛び、Tabキーで「+」アイコンまでフォーカスを移動させEnterキー。

「ジェネリックモニター」を追加。「↑」「↓」ボタンで位置を調整できます。「ジェネリックモニター」のアイテムにフォーカスを合わせた後、Tabキーで「+」ボタンの二つ下にある設定ボタンまでフォーカスを移動し、再度Enterキー。

Pomera dm200 linux ruby python 00047

「ジェネリックモニター」の設定画面を表示したら、「コマンド」欄には「/home/dm200/bin/battmon」を。「ラベル」は空白に。「間隔(秒)」は15秒程度にして、 Alt + Cで閉じる。

Pomera dm200 linux ruby python 00048

これでバッテリー残量表示がパネルに追加されたはずです。「ジェネリックモニター」はパネルに複数登録して、別の要素を表示させることもできます。

Pomera dm200 linux ruby python 00050

自動的にバックライト減光、サスペンド移行をするには?

DM200ではxfce4-goodiesをインストールすると入る「Alt + F1 > 設定 > 電源管理」で設定できる時間経過によるバックライトの減光やサスペンド移行ができません。

そこで、それを実現するスクリプトを書いてみました。

X WIndow上で動作するxprintidleに依存しているため、X Window上のみで動作します。

また、サスペンド移行には「一般ユーザーでのサスペンド」の項で紹介しているスクリプトsusを使っています。

インストール:

$ sudo apt-get install xprintidle -y
$ mkdir /home/dm200/bin
$ cd /home/dm200/bin
$ wget http://hitoriblog.com/wp-content/uploads/2017/08/energysaver-0.2.zip
$ unzip energysaver-0.2.zip
$ chmod +x energysaver esctrl

energysaverを「Alt + F1 > 設定 > セッションと起動」の「自動開始アプリケーション」で登録します。

pomera-dm200-linux-ruby-python-00070

設定:

スクリプトenergysaverの冒頭に設定部があります。必要に応じて変更してください。

特に、ユーザーdm200のパスワードを変更していた場合は書き替えないと動きません。

#--------------Config----------------

# バックライト減光までのアイドル時間
DIMM_TIMEOUT = 30

# バックライト減光量
DIMM_AMOUNT = 100

# サスペンドまでの時間
SUSPEND_TIMEOUT = 120

# ユーザーdm200のパスワード
PASSWORD = "dm200"

# サスペンドコマンド
SUS_COMMAND = "/home/dm200/bin/sus"

動作のコントロール:

同梱のコマンド、esctrlで動作のオンオフが制御可能です。

esctrl on 動作を有効にする
esctrl off 動作を無効にする

Qt4ベースのソフトウェアのフォント設定をするには?

OctaveなどGUI ToolkitにQtを使ったソフトウェアの場合、デフォルトのフォントが小さくて見づらく感じます。

$ sudo apt-get install octave -y

その場合は、qtconfigをインストールしてフォント設定すると対処可能です。

Pomera dm200 linux ruby python 00067

$ sudo apt-get install qt4-qtconfig -y

「Alt + F1 > 設定 > Qt 4設定」から起動。

Pomera dm200 linux ruby python 00066

最後にCtrl + Sで保存しないと反映されません。

Qt使用ソフトウェアはUIの造作が小さいので、ビットマップフォントの利用がいいかもしれません。

僕はモトヤシーダ1 KPを使っています。

xbindkeysの設定

キーボードショートカット押下で特定のコマンドを実行できるようにするxbindkeysが便利です。

X Window上で使えます。

インストール:

$ sudo apt-get install xbindkeys xbindkeys-config -y

設定は~/.xbindkeysrcに書きます。

$ vi ~/.xbindkeysrc

~/.xbindkeysrcの例。

"xterm" 
  control + shift + q

"emacs &"
  control + shift + x

設定ファイルのリロード。

$ killall xbindkeys
$ xbindkeys -f ~/.xbindkeysrc

xbindkey-configというGUIの設定アプリも利用できます。

X Window上のxtermなどから実行します。

$ xbindkeys-config &

キーボードだけでX Windowを操作するには?

DM200にはポインティングデバイスがありません(USBマウスなどを利用することは可能)。しかし、ほとんどの操作はキーボードだけでも可能です。下記の設定で割り当て一覧が参照できます。

  • Alt + F1 > 設定 > ウインドウマネージャー > キーボード
  • Alt + F1 > 設定 > キーボード > アプリケーションショートカットキー

キーボード操作に加え、「keynavを使ったキーボードによるマウス操作」で紹介したkeynavを使ったキーボードによるマウス操作を併用すれば、実のところポインティングデバイスなしでも困りません。

操作 機能
Alt + Space ウインドウ操作メニュー
Esc キャンセル
Alt + Tab ウインドウの切り替え
Shift + Alt + Tab ウインドウの切り替え(逆方向)
Super + Tabe 同じアプリケーションのウインドウの切り替え
Ctrl + Esc コンテキストメニュー
Alt + F1 アプリケーションメニュー
Alt + F2 アプリケーションファインダー
Alt + F3 アプリケーションファインダー(大)
Alt + F4 ウインドウを閉じる
Alt + F5
Alt + F6 常に表示中のワークスペースに置く
Alt + F7 ウインドウの移動
Alt + F8 ウインドウのサイズ変更
Alt + F9 ウインドウを隠す
Alt + F10 ウインドウの最大化
Ctrl + Alt + L ロック(動かない?)
Ctrl + Alt + 1 ウインドウをワークスペース1に移す
Ctrl + Alt + 2 ウインドウをワークスペース2に移す
Ctrl + Alt + 3 ウインドウをワークスペース3に移す
Ctrl + Alt + 4 ウインドウをワークスペース4に移す
Ctrl + Alt + 5 ウインドウをワークスペース5に移す
Ctrl + Alt + 6 ウインドウをワークスペース6に移す
Ctrl + Alt + 7 ウインドウをワークスペース7に移す
Ctrl + Alt + 8 ウインドウをワークスペース8に移す
Ctrl + Alt + 9 ウインドウをワークスペース9に移す
Ctrl + Alt + D デスクトップを表示
Ctrl + Alt + Left 左のワークスペースに移る
Ctrl + Alt + Right 右のワークスペースに移る
Ctrl + F1 ワークスペース1に移る
Ctrl + F2 ワークスペース2に移る
Ctrl + F3 ワークスペース3に移る
Ctrl + F4 ワークスペース4に移る
Ctrl + F5 ワークスペース5に移る
Ctrl + F6 ワークスペース6に移る
Ctrl + F7 ワークスペース7に移る
Ctrl + F8 ワークスペース8に移る
Ctrl + F9 ワークスペース9に移る

あると便利な以下の動作にショートカットキーが割り当てられていないので、それぞれ以下のようなキーボードショートカットを割り当てます。

操作 機能
Alt + Ctrl + , ウインドウを画面左にタイル表示
Alt + Ctrl + . ウインドウを画面右にタイル表示
Alt + Ctrl + / ウインドウを画面上にタイル表示
Alt + Ctrl + \ ウインドウを画面下にタイル表示

Pomera dm200 linux ruby python 00027

画面を左右二分割、上下二分割して表示できるようになります。

keynavを使ってキーボードによるマウス操作をするには?

ポインティングデバイスのないDM200。

キーボードによる操作に配慮されているため、キーボードだけでもX Windowはかなりのところまで操作できますが、配慮されていないところもままあり、マウス操作の必要を感じる局面はあります。

Tabでフォーカスを移していけばキーボードだけで操作できるが、それがまどろっこしいということもあります。

LilyTermなどウインドウ上を右クリックしないと出てこないメニューが重要な役割を果たすソフトウェアも存在します。

そんなときに便利なのがkeynav。

keynavはキーボードだけでマウスのポインタを移動したり、マウスボタンをクリックできるようにするソフトウェアです。

価値を低く見る人が大半だと思いますが、マウス代わりとして絶大な効力を発揮します。

DM200でのマウス操作における決定版です。盛りだくさんなので別記事を書きました。

大幅なカスタマイズを施した設定ファイルを配布していますので、ぜひご一読を。

クリップボード履歴記録ユーティリティを利用するには?

クリップボードに文字をコピーしたタイミングで履歴を記録し、後からクリップボードに以前の内容を書き戻しできるようにするユーティリティClipItが便利です。

Pomera dm200 linux ruby python 00056

インストールを終えると「Alt + F1 > アクセサリ > ClipIt」から起動できます。

機能 ホットキー
履歴 Ctrl + Alt + H
アクション Ctrl + Alt + A
管理 Ctrl + Alt + F
オフラインモード Ctrl + Alt + O

ポインティングデバイスがなくパネル上のアイコンがクリックできませんが、環境設定のウインドウは、Ctrl + Alt + Aのアクションのメニューからたどることができます。

Pomera dm200 linux ruby python 00057

アクションは、アクションの内容がキーボードだけでは編集できないため、keynavをインストールしない限り利用不能です。(設定ファイルがバイナリなので、テキストエディタで直編集する方法も取れない)

自動開始アプリケーションに設定されているので、次回のログインからはいちいち起動せずとも使えるようになっているはずです。

インストール:

$ sudo apt-get install clipit -y
Clipmanの利用

クリップボード履歴ツールには、ClipItのほかにClipmanという選択肢もあります。

インストール:

$ sudo apt-get install xfce4-clipman xfce4-clipman-plugin -y

Clipmanには、履歴をQRコードで表示する機能や、外部コマンドで処理するClipItにはない高度な機能があります。

pomera-dm200-linux-ruby-python-00072

現状キーボードから起動する方法が不明ですが、こちらに切り替えていくつもりです。

画像ビューアを利用するには?

画像ビューアはFehとGeeqieがおすすめです。

インストール:

sudo apt-get install feh geeqie -y
Geeqieについて

Geeqieは全体的にとても素晴らしい画像ビューアですが、特にプレビューを見ながらファイル選択ができ、選択した(複数の)画像のファイルパスを自作のスクリプトに送ることができ、単なる画像ビューアで終わっていません。

例えば、選択した(複数の)画像をWordPressにアップロードして、クリップボードにタグを得る、といったことができます。

自分の作ったスクリプトとの連携は、~/.config/geeqie/applicationsに.desktopファイルを置くとできます。

本来は「編集 > Preferences > Configure Editors」からGUIで編集できますが、新規作成したときにキーボードだけではファイル名を変更できないため、~/.config/geeqie/applicationsの.desktopファイルをテキストエディタで編集した方が楽です。

geeqieと自作スクリプトとの連携用サンプルdesktopファイルダウンロード: applications.tar.gz

Pomera dm200 linux ruby python 00065

中身はこんな感じです。名前とExecで指定しているスクリプトのパスを変更して、geeqieを起動し直せばOKです。Iconは/usr/share/pixmapsにある画像ファイル名から拡張子を除いたものを指定します。

[Desktop Entry]
Name=User Defined 1
GenericName=User Defined 1
Comment=User Defined 1
Exec=/home/dm200/bin/userdefined1 %F
# You can use icons on /usr/share/pixmaps 
Icon=lilyterm
Type=Application
StartupNotify=false
NoDisplay=false
Hidden=false
Terminal=true
Categories=Graphics;
MimeType=image/jpeg;image/png;image/gif;image/tiff;image/bmp;image/x-icon;image/x-xpixmap;image/x-xbitmap;

スクリプト側では引数に画像のパスが渡されてくるので、それを順次処理します。

例えば、Rubyでの例。notify-sendで渡されたパスをデスクトップ通知で表示し、ホームディレクトリのlog.txtに引数のログを記録するという意味のないスクリプトですが、これで要旨は伝わるでしょう。

#!/usr/bin/ruby

ARGV.each do |f|
  system("export DISPLAY=:0 nofity-send #{f}")
end
system("echo #{ARGV} >> /home/dm200/log.txt")

画像のマークが5種類用意され、画像を見ていくときに5種類のマークで分類し、後で一括処理できる独特な作りも魅力です。

この画像は1、この画像は3、この画像は2といった感じで流れで分類し、後でマークに基いてファイル選択。処理を決めるといった感じで使えるのです。

Pomera dm200 linux ruby python 00063

ファイルリスト上でカーソルキーの上下を使ってフォーカスを移しながら1キー、1キー、1キー、1キーと1のマークにどんどん画像を追加。最後にCtrl + 1で1にマークした画像ファイルを選択、とすると、下掲のような状態になります。

Pomera dm200 linux ruby python 00064

Mキーでマークを表示しておいた方が便利です。

画像の表示スピードも軽快でよい感じです。

パス入力欄にフォーカスを取られた場合の対処方法

タブキーでフォーカスを移しながら使っていると、パス入力欄から出られなくなってキーボードだけで操作している場合困ります。これは、Ctrl + Hを2回たたくと脱出できます。

そこからShift + Tabを1回か2回たたくとファイルリストのところにフォーカスを移せるはずです。

Pomera dm200 linux ruby python 00062

Fehについて

Fehは、MacOSにおけるPreview.appのようなもの。

起動が非常に軽く、「Alt + F1 > 設定 > MIMEタイプエディター」で画像の拡張子に関連付けておけば、ファイラーからEnterでサっと画像を確認できて便利です。

  • 主な操作:
    • 終了: Qキー
    • メニュー: Mキー

MacOSでいうQuickLookライクなことが可能となります。

テキストエディタを利用するには?

Linux上で使うテキストエディタにVimとEmacsがプリインストールされていますが、上級者向けのチョイスであるため、初心者向けのテキストエディタを紹介します。

以前であればgeditが鉄板でNetWalkerでは大活躍だったのですが、時代は流れGUI ToolkitがGtk3になってUIが最悪になってしまいました。キーボードでの操作に全く向いていません。

代替のテキストエディタを推奨します。

いずれもタブとサイドバーで複数ファイルの編集が快適にできるタイプのテキストエディタ。

Macで言えばSmultronに近いものです。

Geanyの利用

geditライクなテキストエディタGeany。

Pomera dm200 linux ruby python 00024

インストール:

$ sudo apt-get install geany -y
Plumaの利用

geditライクなテキストエディタPluma。Gtk2時代のgeditのソースを使って作られているということで、往時の姿をとどめています。

Pomera dm200 linux ruby python 00011

インストール:

$ sudo apt-get install pluma -y

メールクライアントをインストールするには?

Pomera dm200 linux ruby python 00023

POP3 、IMAP4などに対応したメールクライアントSylpheedが利用できます。日本人による開発であるため、日本人にとって最良の選択肢です。

Gmailの設定はアカウントを入力するだけでOK。ただし、二段階認証には対応していないので、アプリ パスワードを発行しておく必要があります。

インストール方法。

$ sudo apt-get install sylpheed sylpheed-i18n -y

DM200にはポインティングデバイスがなくスクロールバーをつかめないため、メールの数が多いと最新メールにたどり着けません。

keynavの利用が推奨されます。「keynavを使ってキーボードによるマウス操作をするには?」を参照のこと。

オフィスライクなソフトウェアを利用するには?

MS Excelと似たソフトウェア、Gnumeric が X Window 上で利用できます。

Pomera dm200 linux ruby python 00020

インストール:

$ sudo apt-get install gnumeric gnumeric-l10n-ja -y

オフィススイートを集めた LibreOffice が X Window 上で利用できます。

Pomera dm200 linux ruby python 00018

▲LibreOffice Calc(MS Excelライク)

Pomera dm200 linux ruby python 00042

▲LibreOffice Writer(MS Wordライク)

Pomera dm200 linux ruby python 00043

▲LibreOffice Draw(MS Visioライク)

Pomera dm200 linux ruby python 00044

▲LibreOffice Impress(MS PowerPointライク)

インストール:

$ sudo apt-get install libreoffice libreoffice-l10n-ja -y

インストールが終了すると、Alt + F1 のメニューから起動できるようになります。

LibreOffice ともなると、ポインティングデバイスがないと厳しいため、keynavの利用が推奨されます。

Webブラウザを利用するには?~Midoriの利用

Firefoxより軽くてDM200で使いやすいプリインストールのWebブラウザ、Midoriがおすすめです。

ただ、標準状態だとロケーションバーにフォーカスを移すことも、メニューを出すこともできなくて往生します。

まずはキーボードショートカットを有効にします。下掲の設定ファイルを編集。

$ vi ~/.config/midori/accels

以下の行の行頭にある「;」を削除し、それぞれキーボードショートカットを変更。

(gtk_accel_path "<Actions>/Browser/Menubar" "<Alt>m")
(gtk_accel_path "<Actions>/Browser/Location" "<Alt>d")

保存してMidoriを(再)起動するとAlt + Dでフォーカスがロケーションバーに。

Alt + Mでメニューが表示されるので、後はメニューをたどって操作が可能となります。

操作 機能
Alt + D アドレスバーにフォーカスを移動
Ctrl + K 検索窓にフォーカスを移動

Webブラウザを利用するには?~Firefoxの利用

Pomera dm200 linux ruby python 00015

著名なWebブラウザ、Firefoxも利用可能です。

インストール:

$ sudo apt-get install firefox-esr firefox-esr-l10n-ja -y
操作 機能
Alt + D アドレスバーにフォーカスを移動
Ctrl + K 検索窓にフォーカスを移動

使えないことはないですが、軽快な動作とはいえません。Midoriではどうしてもダメな場合のみの登板となるでしょう。

周辺機器を接続するには?

iPhoneとBluetoothテザリング(Bluetooth PAN接続)するには?

USBホストを利用するには?

特権ユーザーで/opt/bin/usb_host onを実行すると、本体のMicroUSB端子をUSB HOSTとして動作させることが可能。

$ su
# usb_host on

ただし、DM200側から電源供給ができないため、OTG HUBが必要です。

DM200での動作実績のあるOTG HUBが以下。

DM200単体での運用をしたいため、実用はしないつもりですが注文して試用予定です。

僕は全く必要性を感じませんが、物理マウスが接続できないと価値を疑う人は少なくないのでしょう。

高度な利用

デスクトップにコマンドラインから画像を設定する

デスクトップはCtrl + Alt + Dで表示、もう一度Ctrl + Alt + Dで直前の状態に復帰できます。

つまりトグル動作であるため、デスクトップはチラ見する画像を貼るのにうってつけの場所。

X Window(xfce4)のデスクトップにダウンロードしてきた壁紙を機械的に貼る場合は、xfconf-queryコマンドを利用します。

Xfce4のデスクトップに関するプロパティのリストを収集。

$ xfconf-query --channel xfce4-desktop --list

実行すると以下のようなリストが取れます。

/backdrop/screen0/monitor0/workspace0/color-style
/backdrop/screen0/monitor0/workspace0/image-style
/backdrop/screen0/monitor0/workspace0/last-image
/backdrop/screen0/monitor0/workspace1/color-style
/backdrop/screen0/monitor0/workspace1/image-style
/backdrop/screen0/monitor0/workspace1/last-image
/backdrop/screen0/monitor0/workspace2/color-style
/backdrop/screen0/monitor0/workspace2/image-style
/backdrop/screen0/monitor0/workspace2/last-image
/backdrop/screen0/monitor0/workspace3/color-style
/backdrop/screen0/monitor0/workspace3/image-style
/backdrop/screen0/monitor0/workspace3/last-image
/desktop-icons/single-click
/last/window-height
/last/window-width

このようにすると現在の設定されている壁紙を取得できます。

$ xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/last-image

last-imageには、例えば以下のような壁紙に設定した画像のパスが入っています。

/home/dm200/Pictures/anohana0087.jpg

–setを加えると変更が可能です。

$ xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/last-image --set /home/dm200/Pictures/anohana003.jpg

この知識を応用すれば、xfconf-queryコマンドを使ってcronから壁紙を定期的に更新可能です。

また、現在設定中の画像、例えば/home/dm200/Pictures/001.jpgを新しい画像で上書きすると、壁紙も即座に新しいものに貼り替わります。

機械的な貼り替えのために、現在設定されている画像を上書き更新する手も使えます。

cronのインストール

定期的にコマンドを実行させるためにcronをインストールすると便利です。

インストール方法。

$ sudo apt-get install cron -y

cronのエントリの登録。

$ crontab -e

1分毎にコマンドを実行したい場合。

*/1 * * * * /path/to/command

サスペンド中は動作しません。

notify-sendをcronの中から使いたい場合は、事前に環境変数の設定が必要です。

export DISPLAY=:0 notify-send "hoge"

Node.js / npm のインストール

なぜか標準のリポジトリにnpmがないため、以下の手順を利用しました。

$ sudo apt-get install curl -y
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
$ sudo apt-get install nodejs -y
$ sudo npm update -g npm

Rubyの設定

標準でRubyがインストールされています。

Gem経由でNative Extensionがインストールできるようにします。

$ sudo apt-get install ruby-dev build-essential libxml2-dev libxslt1-dev zlib1g-dev -y

Gemをインストールします。

$ sudo gem install mechanize twitter pushover evernote

irbの履歴やTabキーでの補完が有効になっていませんので、~/.irbrcを作成。

$ vi ~/.irbrc

以下を追記します。

require "irb/completion"
require "irb/ext/save-history"

IRB.conf[:SAVE_HISTORY] = 10000
IRB.conf[:HISTORY_FILE] = File.expand_path("~/.irb_history")

Rubyで皆に使ってもらうユーティリティを作ったので、少しインストールが複雑なrbenvは利用しませんでした。

DM200上でのセルフビルドはかなり重いようです。

スクレイピングのためのCapybaraとPoltergeistの導入

軽いスクレイピングのためのMechanizeとは別に、JavaScriptを解釈する必要のあるスクレイピングのためのCapybaraもインストール。

WebKitベースのヘッドレスブラウザPhantomJSと、Rubyから利用するためのCapybara、PhantomJSドライバのPoltergeistという構成。

Mechanizeより重いですが、様々なケースに対応できるので頼れる道具です。

インストール:

$ sudo apt-get install phantomjs ruby-capybara ruby-poltergeist

簡単な利用:

ブログのindexページにアクセスして見出しを抜き出した後、ページ全体のスクリーンショットを撮影する例。

#!/usr/bin/ruby

require "capybara/poltergeist"

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {js_errors: false,
                                          #inspector: true,
                                          timeout: 1000})
  # http://localhost:9664/webkit/inspector/inspector.html
end

session = Capybara::Session.new(:poltergeist)

session.visit("http://hitoriblog.com/")

#session.driver.debug

puts session.status_code

puts session.title

session.save_screenshot("hoge.png", :full => true)

session.find_all("#topnews > dl > dd > h3").each do |t|
  puts t.text
end

PhantomJSがWebKitベースであるため、リモートデバッガのInspectorが利用可能なはずですが、WebブラウザのMidoriからは使えないようです。

たのしいRuby 第5版
たのしいRuby 第5版

posted with amazlet at 17.07.15
高橋 征義 後藤 裕蔵
SBクリエイティブ
売り上げランキング: 32,016

Emacsの設定

Pomera dm200 linux ruby python 00014

フォントの設定

Qtアプリ同様、ビットマップフォントのモトヤシーダを使用。

僕はモトヤシーダ1 KPを使っています。

小さくても表示が明瞭で、文字の輪郭がクッキリして気持ちいい。

(let* ((size 12)
       (jpfont "NFモトヤシータ゛1等幅")
       (h (* size 10))
       (jp-fontspec (font-spec :family jpfont)))
       (set-face-attribute 'default nil :family jpfont :height h)
       )

設定した状態のスクリーンショットが以下です。画像のリンク先が元画像になっています。

pomera-dm200-linux-ruby-python-00068

packae.elにMelpaのリポジトリを追加

~/.emacs.elに以下を追加。

; package.el

(when (require 'package nil t)
  (add-to-list 'package-archives
	       '("melpa" . "http://melpa.org/packages/") t))
(package-initialize)
migemo のインストール

cmigemoをインストール。

$ sudo apt-get install cmigemo -y

M-x list-packageからmigemoをインストール。

~/.emacs.elに以下を追加。

(require 'migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init)
ddskk をインストール

M-x list-packageからddskkをインストール。

~/.emacs.elに以下を追加。

(global-set-key (kbd "C-x C-j") 'skk-mode)

(setq skk-large-jisyo "/home/dm200/.emacs.d/skk/SKK-JISYO.L")

ラージ辞書をダウンロード。

$ wget http://openlab.jp/skk/dic/SKK-JISYO.L.gz
$ gzip -d SKK-JISYO.L.gz
$ mkdir -p .emacs.d/skk/
$ mv SKK-JISYO.L .emacs.d/skk/
ddskk をインストール

M-x list-packageからhelmをインストール。

自作の関数内で使うなどしています。

mode-lineにバッテリー残量を表示する

battery.elが使用できないため、独自にmode-lineにバッテリー残量を表示させます。

(require 'timer)

; DM200のバッテリー残量を返す
(defun display-battery-string ()
  ""
  (interactive)
  (let*
      ((command-result (shell-command-to-string "/opt/bin/battery2")))
    (string-match "remain_capacity = \([0-9]+\)," command-result)
    (concat "[BATT:" (number-to-string (/ (string-to-number (match-string-no-properties 1 command-result)) 41)) "%]")))

; global-mode-stringに文字列を追加。引数は'でクオートする
; (append-global-mode-string mystr) → (append-global-mode-string 'mystr)
; 以降、タイマーでmystrを更新すれば反映される
(defun append-global-mode-string (str)
  ""
  (interactive)
  (setq global-mode-string
      (cond ((consp global-mode-string)
	     (add-to-list 'global-mode-string str 'APPEND))
	     ((not global-mode-string)
	      str)
	     ((stringp global-mode-string)
	      (list global-mode-string str)))))

; 30秒に1回更新
(setq my-timer (run-with-timer 0 30
(lambda ()
(setq display-custom-info-string (display-battery-string)))))

(append-global-mode-string 'display-custom-info-string)

仮想通貨の価格も表示するバージョン。

(require 'json)
(require 'timer)

; DM200のバッテリー残量を返す
(defun display-battery-string ()
  ""
  (interactive)
  (let*
      ((command-result (shell-command-to-string "/opt/bin/battery2")))
    (string-match "remain_capacity = \([0-9]+\)," command-result)
    (concat "[BATT:" (number-to-string (/ (string-to-number (match-string-no-properties 1 command-result)) 42)) "%]")))

; 仮想通貨XRPのCoincheckでの価格を返す(要 sudo apt-get install curl)
(defun display-xrp-string ()
  ""
  (if (network-interface-info "wlan0")
      (format "[XRP:%.2f円]" (string-to-number (cdr (assoc 'rate (json-read-from-string (shell-command-to-string "curl https://coincheck.com/api/rate/xrp_jpy 2>/dev/null"))))))
    "[XRP:--円]"))

; global-mode-stringに文字列を追加。引数は'でクオートする
; (append-global-mode-string mystr) → (append-global-mode-string 'mystr)
; 以降、タイマーでmystrを更新すれば反映される
(defun append-global-mode-string (str)
  ""
  (interactive)
  (setq global-mode-string
      (cond ((consp global-mode-string)
	     (add-to-list 'global-mode-string str 'APPEND))
	     ((not global-mode-string)
	      str)
	     ((stringp global-mode-string)
	      (list global-mode-string str)))))

; 30秒に1回更新
(setq my-timer (run-with-timer 0 30
(lambda ()
(setq display-custom-info-string (concat (display-xrp-string) " " (display-battery-string))))))

(append-global-mode-string 'display-custom-info-string)

仮想通貨の価格も表示するバージョンは、もう少し工夫しないと間欠的にEmacsが操作不能になってイマイチでした。

Emacs内からサスペンド、リブート、電源オフなどを可能にする

~/.emacs.el に以下を追加。

(defun suspend ()
  ""
  (interactive)
  (shell-command "/home/dm200/bin/sus"))
(global-set-key (kbd "C-c C-s") 'suspend)

(defun poweroff ()
  ""
  (interactive)
  (shell-command "/sbin/halt -p"))
(global-set-key (kbd "C-c C-p") 'poweroff)

(defun reboot ()
  ""
  (interactive)
  (shell-command "/sbin/reboot"))
(global-set-key (kbd "C-c C-r") 'reboot)

前提となる「一般ユーザーでのサスペンド」、「一般ユーザーでのリブートと電源オフ」の項を参照。

Emacs実践入門 ~思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)
大竹 智也
技術評論社
売り上げランキング: 35,939

 - DM200, ガジェット