本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

タブレットを使ってみた

筆者は長らくタブレットを使っていなかった。これには理由がある。タブレットの多くはiOSやAndroidやWindowsといった不自由なOSが入っていて、極めて使い勝手が悪かったためだ。ところが、今ではx86-64なタブレットも存在する。ARMにGNU/Linuxを入れるのは面倒だが、x86-64なコンピューターであれば、比較的簡単に使えるのではないか。

今回、嫁用のタブレットにUbuntuを入れていろいろと設定したこともあり、自分用にもハックできるタブレットが欲しくなった。そのため、同僚からEndevor TN10Eという極めてCPUの遅いタブレットを格安で買い取っていろいろと遊んでいる。

タッチパネルによるジェスチャーは、Chromiumでは動くが、Firefoxは対応していない。スクリーンキーボードは、筆者がタッチパネルに慣れていないため、とても使いづらい。

Ubuntuと他のOSを比べて気になるのは、画面の自動回転ができないことだ。

画面の回転自体は、xrandrを使えばできる。そこで、以下のようなスクリプトを書いて、画面の回転を切り替えることにした。。

#!/bin/bash

rotation=$(xrandr -q --verbose | grep eDP | egrep -o "(normal|left)" | head -1)

if [ "$rotation" = "normal" ] ; then
    xrandr --output eDP --rotate left
else
    xrandr --output eDP --rotate normal
fi

さて、通常ならば、このスクリプトにわかりやすい名前(rotate-screenなど)をつけてパスの通ったディレクトリに放り込んでおけばいいのだが、タブレットのスクリーンキーボードは打ちづらい。タブレットの利用目的は、移動中にタッチパネルだけでテキストやWebサイトを閲覧することになるだろうから、できれば画面をタッチするだけでこのスクリプトを実行したい。UbuntuのUnityでは、ランチャーに登録するのがいいだろう。

Unityのランチャーにアイコンを登録するには、以下の規格に従った.desktopファイルを作成する必要がある。

Desktop Entry Specification

これを参考に、以下のように書いた。

[Desktop Entry]
Type=Application
Terminal=true
Name=rotate-screen
Exec=/path/to/rotate-screen.sh
StartupNotify=false

このファイルは、例えばrotate-screen.desktopなどと名づけて/usr/local/share/application/か、あるいは~/.local/share/application/の下においておく。あとはこのファイルをGUI上でランチャーにドラッグすれば追加できる。

なぜかTerminal=falseだと、xrandrを呼び出したあとに画面が暗転してマウスカーソルのみ表示される状態になってしまう。

さて、これで画面は回転できるようになったものの、やはり自動で回転させたいところだ。そのためには、コンピューターに搭載されている本体の角度変化を検出するセンサーを読む必要がある、Linuxカーネルでは、Industrial I/O(iio)という名前が付いている。

さて、このiioからセンサー情報を読み取って、D-BUS経由でアクセスできるようにするツールとして、iio-sensor-proxyが存在する。

iio-sensor-proxy/src at master · hadess/iio-sensor-proxy

Ubuntuにはレポジトリに存在するので、apt-get install iio-sensor-proxyしたうえで、systemctl start iio-sensor-proxy.serviceしてmonitor-sensorを実行すれば、加速度、加速角度、光量、コンパスといったセンサーから読み取った結果が表示される。

しかし、調べられたのはここまでで、デスクトップ環境やツールで、ディスプレイの自動回転を行うものがなかなかない。あるにはあるが、どれも適当にでっち上げたプログラムで、あまり洗練された実装ではない。ディスプレイの自動回転を実装するのに必要な道具は全て揃っているので、あとは、あとはiioで加速角度センサーを読み取ってxrandrを叩く簡単なプログラムを書くだけなのだが、果たしてそこまでしてディスプレイの自動回転を実現する理由があるだろうか。そもそも、常にセンサーからの入力を見張って、ディスプレイを回転させるプログラムを実行するということは、それだけ余計に電力を消費するのではないか。