KING JIM ポメラDM200でEmacs、Vim、Ruby、Pythonが動くなんて素敵すぎる!
2018/11/14
価値ある情報をユーザー視点で発信するブログ
2018/11/14
Kindleハック、RICOH THETAハックなどでおなじみ @ichinomoto さんがKING JIM ポメラDM200(以降DM200)でSDカードにインストールしたDebian Linux(Debian 9.0 stretch)を、ポメラ元来の機能を全く損なうことなく起動できるようにしてくださいました。
DM200にDebian Linuxをインストールしてできること:
SDカード上のDebian Linuxを起動できるようにしても、従来通りの使い方もできるのです。
もくじ
▲動画解説: X Window上のxtermからrebootコマンドで再起動し、ポメラ側に復帰。ポメラ側から電源ボタン長押しで電源オフ。Alt + 右Shift + 電源ボタンでLinuxを起動。fbtermのプロンプトが表示されたらEmacsを起動。
ポメラの編集画面からLinuxのコンソールのプロンプト表示まで | 22秒 |
Linuxのコンソールのプロンプトからポメラの編集画面表示まで | 10秒 |
DM200でLinuxを起動できるようにするために必要なものは以下の三つです。
Linux起動までの手順は、おおまかには以下の通りです。
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に搭載されているのは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 |
DM200の電源は内蔵かつ交換不能のリチウムポリマーバッテリーで、おおよその連続稼動時間は10時間。
MicroUSBポートから充電/給電ができますので、モバイルバッテリーと組み合わせれば実質的に稼働時間には制限はありません。
※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 |
ポメラの編集画面からLinuxのコンソールのプロンプト表示まで | 22秒 |
Linuxのコンソールのプロンプトからポメラの編集画面表示まで | 10秒 |
ポメラ側とLinux側との間の連携は、LinuxをインストールしたSDカード上に作成された2GBのVFAT領域で、ファイルを介してできます。
素早く起動するので、ポメラ側とLinux側との行ったり来たりもそれほど苦痛ではありません。
VFAT領域はオートマウントではないため、ポメラ側とLinux側の連携のために、Linux側では明示的にVFAT領域を手動でマウントする必要があります。
僕は下掲のようなマウント/アンマウントスクリプトを用意しました。これを ~/.bashrc に追記して疑似自動マウントにしてしまう手もあるでしょう。( /etc/fstab を書き換えてもいいですが、一度下手にいじってLinux側を起動不能にした経験あり)
#!/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
#!/bin/sh mount | grep /mnt/vfat > /dev/null if [ $? -eq 0 ]; then echo dm200 | sudo -S umount /mnt/vfat >/dev/null 2>&1 fi
Debian Linux 9のリポジトリに登録された膨大なソフトウェア資産を活用できます。
Ruby、Pythonなどの各種処理系のリポジトリに登録された膨大なパッケージ群も利用できます。
ソフトウェア | 概要 | コンソール/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に対する一般的な知識をそのまま流用可能です。
種別 | ユーザ名 | パスワード |
---|---|---|
特権ユーザー | root | root |
一般ユーザー | dm200 | dm200 |
$ sudo vi /lib/systemd/system/getty@.serviceExecStartから始まる行に、﹁-a dm200﹂を追記して保存。
ExecStart=-/sbin/agetty --noclear -a dm200 %I $TERM﹁-a root﹂とすれば、特権ユーザーで自動ログインされるようになります。
$ sudo touch /etc/adjtime $ sudo timedatectl set-local-rtc 1﹁人柱版 その2﹂以降の版では修正されるかもしれません。
$ sudo vi /etc/default/keyboard以下の行の冒頭の#を削除して保存。
#XKBOPTIONS="ctrl:nocaps"再起動で反映。
$ 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」以降の版が出た際には修正されているはずです。
@ichinomotoさんから、ブログでのイメージの公開前に、差し替え用のカーネルがリリースされることがあります。
サイトの方にUS配列にすると全角半角キーで`と~が入力できない問題に対応したテストカーネルを置きました。ついでにUSBシリアル変換ICのドライバとかも足してあります。
— ichinomoto (@ichinomoto) July 17, 2017
そんな場合の差し替えの手順。ホームディレクトリにkernel.imgというファイル名でカーネルが設置されている場合の例です。
$ sudo dd if=/home/dm200/kernel.img of=/dev/mmcblk0p14 bs=4M
$ sudo chmod +x /opt/bin/*
大まかな流れ。
# 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.confWPA2-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を繰り返しているとそのうち接続できることがあります。
$ sudo apt-get updateinstallコマンドでソフトウェア名を指定してインストールします。
$ sudo apt-get install unzip-yオプションで問い合わせなしでのインストールになります。
$ sudo apt-get install unzip -y
$ sudo apt-get remove unzip
$ 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 pecoxargsを使えば、pecoで選択したパッケージをapt-getコマンドにそのまま渡せます。
$ apt-cache search キーワード | peco | xargs sudo apt-get install $@ -y
$ 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=Regular1 ~/.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と打てばサスペンドできるようになります。
$ 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秒かかるため、トリガーした時点でデスクトップ通知を表示します。
$ sudo chmod u+s /sbin/rebootリブート:
$ reboot電源オフ: haltコマンドはなぜか一般ユーザーで実行が可能です。
$ halt -phalt -pの方は、MicroUSBに外部電源が接続されているとリブートになってしまうようです。
$ vi ~/.bashrcとりあえず必要なパスを追加、履歴の拡大をしました。.bashrcの末尾に追加。
export HISTSIZE=10000 export HISTFILESIZE=10000 export HISTCONTROL=ignoredups PATH=/home/dm200/bin:/opt/bin:/sbin:$PATH自作のコマンドは/home/dm200/binに入れています。
mkdir ~/binBASHのプロンプトへのバッテリー残量の表示については﹁コンソールにバッテリー残量を表示〜bash編﹂を参照。
— moyashi (@hitoriblog) July 5, 2017ポメラDM200。Alt+F1、Alt+F2などでgettyのセッション切り替えつつ作業可能。6個までいけるっぽい。 pic.twitter.com/24331J9CsS
$ vi ~/.uim僕はAlt + escapeに変更しました。保存して終了。
(define-key generic-on-key? '("<Alt>escape" "zenkaku-hankaku")) (define-key generic-off-key? '("<Alt>escape" "zenkaku-hankaku"))半角/全角キーはコンソール上では認識しない状態のようです。
$ vi ~/.fbtermrcfont-sizeのサイズ指定を変更して保存。
font-size=24
$ vi ~/.fbtermrcambiguous-wideをnoからyesに変更して保存。
ambiguous-wide=yes
$ sudo apt-get install fbgrab -y撮影手順:
$ sleep 5; fbgrab -d /dev/fb0 screenshot.png
$ sudo apt-get install imagemagick -y $ convert -modulate 170 screenshot.png out.png処理後のout.pngを確認すると元画像より明るくなっているはずです。
$ sudo apt-get install fbi -y使い方の例。-aオプションで画面に収まるように縮小表示されます。 実行中にhキーでヘルプが出ます。
$ fbi -a *.pngfbterm上では利用できないため、fbtermからexitしてから使う必要があります。
$ 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
$ vi ~/.tmux.conf内容に以下を追記。
set-option -g status-interval 5 set-option -g status-right "|BATT:#(/home/dm200/bin/batt)"これでtmuxを起動すると、ステータスラインにバッテリー残量が表示されているはずです。
$ 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/xrp2tmuxの設定ファイルを編集。
$ vi ~/.tmux.conf次のようにしました。
set-option -g status-interval 5 set-option -g status-right "|#(/home/dm200/bin/xrp2)|BATT:#(/home/dm200/bin/batt)"
$ startxfbtermを起動していても、特権ユーザーで起動すると起動できます。
# startx起動したらパネルの設定を促されます。Alt + Tabで﹁パネル﹂を前面に持ってきて、Tabキーで﹁デフォルト設定を使用﹂にフォーカスを合わせてEnter。
$ 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
機能 | 操作 |
---|---|
アプリケーションメニュー表示 | Alt + F1 |
ウインドウメニュー表示 | Alt + Space |
アプリの素早い起動 | Alt + F2 |
ウインドウの切り替え | Alt + Tab |
ウインドウの最大化 | Alt + F10 |
ウインドウの移動 | Alt + F7 |
ウインドウを閉じる | Alt + F4 |
$ vi ~/.Xdefaults以下のようにして保存。
xterm*VT100*font: 10x20以下の手順で反映されます。
xrdb -load ~/.Xdefaults
$ vi ~/.config/lilyterm/default.conf以下の箇所を探します。
find_key = Ctrl F割当を変更して保存。
find_key = Ctrl SCtrl + Sはたびたび間違って押してしまい困惑する︵stty stop︶ので、lilytermの機能で上書きしてもよさそうです。 この点さえ修正してしまえば特に問題なく、ビットマップフォント(モトヤシーダ)にアンチエイリアスがかからず具合がいいのでメインのターミナルエミュレータになっています。 Shift + カーソル上下でバックログをたどれます。 メニューはウインドウ上を右クリックすると出てきますが、DM200にはポインティングデバイスがないのでkeynavを導入してキーボードでマウス操作ができるようにしておく必要があります。﹁keynavを使ったキーボードによるマウス操作﹂を参照してください。
$ sudo apt-get install lilyterm -yもう一つ、定番らしいターミナルエミュレータ、Terminatorをインストールしました。
$ sudo apt-get install terminator -y
$ sudo apt-get install xfce4-screenshooter -yインストールが終了すると、﹁Alt + F1 > アクセサリ > スクリーンショット﹂から起動できます。ホットキーを割り当てると便利です。
$ sudo apt-get install xfce4-notifyd -yインストールが完了すると﹁Alt + F1 > 設定 > 通知﹂が増えます。 通知はコマンドラインからだと notify-send コマンドで送れます。
notify-send "hoge"cronの中からnotify-sendを使う場合は、事前に環境変数の設定が必要です。
export DISPLAY=:0 nofity-send "hoge"
$ 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 4040以下への設定は、液晶が見えなくなってしまうので要注意です。
$ 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、;、;、]︶でも直接輝度を調整可能です。
$ sudo apt-get install xfce4-genmon-plugin -yインストールが完了すると﹁Alt + F1 > 設定 > パネル > アイテム﹂の選択肢に﹁ジェネリックモニター﹂というものが増えます。 ちなみに、暗号通貨取引所coincheckから通貨の価格情報を取得して表示する例は以下のような感じです。
$ 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
$ /opt/bin/battery $ /opt/bin/battery2
— ichinomoto (@ichinomoto) July 16, 2017batteryコマンドで見てるsysfsから見えるcapacityの値なんですが、結構怪しいです。電池が減ってくるとなかなか下がらなくなります。そのためにbattery2がありまして、%表示するなら2の方のremain_capacityを42で割ったほうが安全かもしれません。
#!/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キー。
$ 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 esctrlenergysaverを﹁Alt + F1 > 設定 > セッションと起動﹂の﹁自動開始アプリケーション﹂で登録します。
#--------------Config---------------- # バックライト減光までのアイドル時間 DIMM_TIMEOUT = 30 # バックライト減光量 DIMM_AMOUNT = 100 # サスペンドまでの時間 SUSPEND_TIMEOUT = 120 # ユーザーdm200のパスワード PASSWORD = "dm200" # サスペンドコマンド SUS_COMMAND = "/home/dm200/bin/sus"動作のコントロール: 同梱のコマンド、esctrlで動作のオンオフが制御可能です。
esctrl on | 動作を有効にする |
esctrl off | 動作を無効にする |
$ sudo apt-get install octave -yその場合は、qtconfigをインストールしてフォント設定すると対処可能です。
$ sudo apt-get install qt4-qtconfig -y﹁Alt + F1 > 設定 > Qt 4設定﹂から起動。
$ sudo apt-get install xbindkeys xbindkeys-config -y設定は~/.xbindkeysrcに書きます。
$ vi ~/.xbindkeysrc~/.xbindkeysrcの例。
"xterm" control + shift + q "emacs &" control + shift + x設定ファイルのリロード。
$ killall xbindkeys $ xbindkeys -f ~/.xbindkeysrcxbindkey-configというGUIの設定アプリも利用できます。 X Window上のxtermなどから実行します。
$ xbindkeys-config &
キーボード操作に加え、「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 + \ | ウインドウを画面下にタイル表示 |
画面を左右二分割、上下二分割して表示できるようになります。
機能 | ホットキー |
---|---|
履歴 | Ctrl + Alt + H |
アクション | Ctrl + Alt + A |
管理 | Ctrl + Alt + F |
オフラインモード | Ctrl + Alt + O |
$ sudo apt-get install clipit -y
$ sudo apt-get install xfce4-clipman xfce4-clipman-plugin -yClipmanには、履歴をQRコードで表示する機能や、外部コマンドで処理するClipItにはない高度な機能があります。
sudo apt-get install feh geeqie -y
[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といった感じで流れで分類し、後でマークに基いてファイル選択。処理を決めるといった感じで使えるのです。
タブキーでフォーカスを移しながら使っていると、パス入力欄から出られなくなってキーボードだけで操作している場合困ります。これは、Ctrl + Hを2回たたくと脱出できます。
そこからShift + Tabを1回か2回たたくとファイルリストのところにフォーカスを移せるはずです。
$ sudo apt-get install geany -y
$ sudo apt-get install pluma -y
$ sudo apt-get install sylpheed sylpheed-i18n -yDM200にはポインティングデバイスがなくスクロールバーをつかめないため、メールの数が多いと最新メールにたどり着けません。 keynavの利用が推奨されます。﹁keynavを使ってキーボードによるマウス操作をするには?﹂を参照のこと。
$ sudo apt-get install gnumeric gnumeric-l10n-ja -yオフィススイートを集めた LibreOffice が X Window 上で利用できます。
$ sudo apt-get install libreoffice libreoffice-l10n-ja -yインストールが終了すると、Alt + F1 のメニューから起動できるようになります。 LibreOffice ともなると、ポインティングデバイスがないと厳しいため、keynavの利用が推奨されます。
$ 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も利用可能です。
インストール:
$ sudo apt-get install firefox-esr firefox-esr-l10n-ja -y
操作 | 機能 |
---|---|
Alt + D | アドレスバーにフォーカスを移動 |
Ctrl + K | 検索窓にフォーカスを移動 |
$ su # usb_host onただし、DM200側から電源供給ができないため、OTG HUBが必要です。 DM200での動作実績のあるOTG HUBが以下。
$ 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-imagelast-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を新しい画像で上書きすると、壁紙も即座に新しいものに貼り替わります。 機械的な貼り替えのために、現在設定されている画像を上書き更新する手も使えます。
$ sudo apt-get install cron -ycronのエントリの登録。
$ crontab -e1分毎にコマンドを実行したい場合。
*/1 * * * * /path/to/commandサスペンド中は動作しません。 notify-sendをcronの中から使いたい場合は、事前に環境変数の設定が必要です。
export DISPLAY=:0 notify-send "hoge"
$ 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
$ sudo apt-get install ruby-dev build-essential libxml2-dev libxslt1-dev zlib1g-dev -yGemをインストールします。
$ sudo gem install mechanize twitter pushover evernoteirbの履歴や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上でのセルフビルドはかなり重いようです。
$ 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 endPhantomJSがWebKitベースであるため、リモートデバッガのInspectorが利用可能なはずですが、WebブラウザのMidoriからは使えないようです。
(let* ((size 12) (jpfont "NFモトヤシータ゛1等幅") (h (* size 10)) (jp-fontspec (font-spec :family jpfont))) (set-face-attribute 'default nil :family jpfont :height h) )設定した状態のスクリーンショットが以下です。画像のリンク先が元画像になっています。
; package.el (when (require 'package nil t) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)) (package-initialize)
$ sudo apt-get install cmigemo -yM-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)
(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/
(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が操作不能になってイマイチでした。
(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)前提となる﹁一般ユーザーでのサスペンド﹂、﹁一般ユーザーでのリブートと電源オフ﹂の項を参照。