y.mikome on 2011/11/25

Ubuntuフォーラムの投稿にインストール方法が記述されていたので試してみました。

惜しむらくは、投稿者がタイプミスして”10.11″と書いてしまっていて、11.10での解決方法かどうかが曖昧になってしまってることです。

また、投稿者は64bitでのダウンロードパスを書いていますが、自分のデスクトップは32bitだったので、パスを読み替えました。

ちなみに、インストールされているUbuntuが64bitか32bitかは、次のコマンドで確認できます。

uname -a

出力の最後に “x86_64 GNU/Linux” とあれば64bitで、そうでなければ32bitです。

.

FreeNXのダウンロードライブラリは http://de.archive.ubuntu.com/ubuntu/pool/main/e/esound/ で、すでにフォーラム投稿のバージョンより新しいものが登録されていましたが、今回はフォーラム投稿とバージョンを合わました。

ダウンロードしたのは次の3ファイルになります。

  • esound-common_0.2.41-8_all.deb
  • libesd0_0.2.41-8_i386.deb
  • esound-clients_0.2.41-8_i386

ということで、手順はフォーラム投稿のままですが・・・

wget http://de.archive.ubuntu.com/ubuntu/pool/main/e/esound/esound-common_0.2.41-8_all.deb
wget http://de.archive.ubuntu.com/ubuntu/pool/main/e/esound/libesd0_0.2.41-8_i386.deb
wget http://de.archive.ubuntu.com/ubuntu/pool/main/e/esound/esound-clients_0.2.41-8_i386.deb
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:freenx-team
sudo sed -i 's/oneiric/lucid/g' /etc/apt/sources.list.d/freenx-team-ppa-oneiric.list
sudo apt-get update && sudo apt-get upgrade
sudo dpkg -i esound-common_0.2.41-8_all.deb
sudo dpkg -i libesd0_0.2.41-8_i386.deb
sudo dpkg -i esound-clients_0.2.41-8_i386.deb
sudo apt-get install freenx

これで無事FreeNXをインストールすることができました。

.

そして、11.10のFreeNXサーバーにログインするためには 以前のエントリー で書いたように、Windows版のnomachineクライアントから接続するにはRun the following commandにUnity-2Dを指定する必要があります。

gnome-session ubuntu-2d

.

■ Ubuntu to FreeNX (追記)

UbuntuのNXクライアントQtNXからのアクセスする場合も、カスタムコマンドを指定しなければなりません。
しかし、TypeでCustomを選択することはできますが、Settingsボタンを押しても編集ダイアログが開かないのでカスタムコマンドをUIで設定することができません。

  1. QtNXのConfigure画面を開きます。
  2. PlatformをUNIX、TypeをCustomとします。
  3. Settingsを押して次のように設定したいのですが・・・
    /usr/bin/gnome-session --session ubuntu-2d
  4. Settingsを押しても何も開かないので仕方ないのでOKですべて閉じます。
  5. 設定ファイル ~/.qtnx/(設定名).nxml をエディタで開き、Custom Session Commandの値を直接編集します。

nomachineのクライアントとは記述に仕方が異なるので注意が必要ですが、これでUbuntu 11.10のUnity-2dへログインすることができました。

.

タグ:

y.mikome on 2011/11/22

wiki代わりの備忘録なので編集や加筆の制限なしエントリーです、あしからず。

また、以下はIEに特化することが目的ではなく、W3C勧告のHTML標準なページ作成を目指す中で、標準を理解しない(くせにトップシェアの)IEの仕様を何とか回避するが主題です。

cssテクまで考慮するともっとたくさんになると思いますが、それはデザイナーさんに任せます(笑)

.

■ IE互換モード

イントラネットでは互換モード優先がIEのデフォルト設定のため、企業イントラネットではIE7の配慮が必要です。ローカルPCでの開発では互換モードを再現できないので注意が必要です。

強制的に互換モードを排除するには、.htaccessに次を記述してHTTPヘッダを出力するか、

Header set X-UA-Compatible "IE=edge"

メタタグでページごとに指定します。

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

しかし、企業イントラネットではどちらも禁止されることがあり、そうなるとブラウザシェアに関わらず今後もIE7を切り捨てることができません。

なお、edgeはその時点での最新バージョン対応のことで、MS自身は使用を避けるべきとしていますが、HTML標準を目指すので当然edgeをポリシーとします。

.

■ UA判定

できればUAによるコード分岐はしたくないのですが、回避できないケースが多々あります。

var _ua = (function(){
 return {
  ltIE6:typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined",
  ltIE7:typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined",
  ltIE8:typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined",
  mobile:/android|iphone|ipad|ipod/i.test(navigator.userAgent.toLowerCase())
 }
})();

.

■ nameによるエレメント指定

IEでは以下の書き方はできません。

$('[name="Test"]')

かならず、indexかselectを指定する必要があります。

$('select[name="Test"]')

.

■ optionの非表示

display:noneを指定してもIEでは消えません。

これが必要なケースでは、ページ起動時にオリジナル選択肢を複写しておき、

$('body').append('<select id="copyTest" style="display:none;"></select>');
$('select[name="Test"]').eq(0).children().clone().prependTo('#copyTest');

select要素の再描画が必要なときに、非表示条件を除外して複写することで、ブラウザ共通コードとできます。

var cur = $('select[name="Test"]').val();
$('select[name="Test"]').children().remove();
$('#copyTest').children().each( function () {
    if (非表示の条件) return;
    $('select[name="Test"]').append($(this).clone());
});
$('select[name="Test"]').val(cur);

.

■ trの非表示

trをdisplay:noneとしたとき、互換モードでは枠線が残ります。

2、3行の非表示なら気になりませんが、数十行を非表示にするとその分の枠線が重なり真っ黒となります(笑)

メタタグが禁止され互換モードを排除できなかったイントラネット案件では、非表示にするtrをtbodyでくくるhtml文法的には不適切な方法で回避しました。

.

■ rowSpanの値変化

上記枠線が残るのと同根ですが、rowSpanが変化するような行単位の表示・非表示を行ったとき、IE7以前では考察不能な値での調整が必要です。

IE7以前を切り捨てられない場合は、UA判定で別コードを書かざるをえません。

.

■ Array.indexOf

IEにはArrayにindexOfが実装されていません。使用する場合は自分で追加します。

if(!Array.indexOf){
    Array.prototype.indexOf = function(target){
        for(var i = 0; i < this.length; i++){
            if(this[i] === target){
                return i;
            }
        }
        return -1;
    }
}

.

■ trim

IEにはtrimが実装されていません。使用する場合は自分で追加します。

if(typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, '');
    }
} 

.

■ date.getYear()

通常のブラウザでは getYear = getFullYear - 1900 ですが、IEのみは getYear = getFullYear です。

よって、必ずgetFullYear を使用します。

.

■ Chrome Frame

許されるなら、以下のメッセージで現実逃避したいですね(笑)

<?php
if (!defined('MSIE') && isset($_SERVER['HTTP_USER_AGENT'])) {
    if (preg_match('/chromeframe|Opera|Lunascape/', $_SERVER['HTTP_USER_AGENT'])) {
        // これらはUAにMSIEが入るがIEではないので無視する
        // Lunascapeはエンジン切り替え可能である
        // SleipnirもMSIEを含むが、エンジンがIEであるので警告する
    }
    elseif (preg_match('/MSIE [4-8]\./', $_SERVER['HTTP_USER_AGENT'])) {
        // IE 9は除外する
        define('MSIE', 1);
    }
}

if (defined('MSIE') {
  echo 'お使いのブラウザは古いバージョンのIEです。';
  echo 'IE9以上にアップデートするか、';
  echo '<a href="http://www.google.com/chromeframe/?hl=ja&quickenable=true" target="_blank">';
  echo 'パフォーマンス向上のためのプラグイン</a> のインストールを推奨します。';
}
?>

インストールしたChrome Frameを有効にするには、ページに次のメタタグを入れます。

<meta http-equiv="X-UA-Compatible" content="chrome=1">

タグ: ,

y.mikome on 2011/11/21

以前にも書きましたが、UIのEmacs度はUbuntuよりもWindowsのほうがはるかに上でした。

なにしろ、yamy(Yet Another Mado tsukai no Yuutsu: 「窓使いの憂鬱」のキー入力置換をドライバベースからユーザモードフックベースに変更した派生プロジェクト。Windows7やリモートデスクトップでも動作する)を導入すれば、ダイアログだろうがメニューだろうが果てはエクセルだろうワードだろうが、ありとあらゆるものがEmacs操作体系になりました。

例えばVisual Stadioは添付のEmacsキー定義で使うより標準キー定義のままyamyの管理下に置くほうがEmac的だし、その他アプリケーションでも存在しないはずのインクリメンタルサーチがなぜかできてしまったりするのでした。

しかし今の自分はUbuntuです。

GnomeからUnityへの移行に伴い、できることができなくなったり仕様がコロコロ変わっているようですので、自分用備忘録としてまとめます。

.

■ gtk_key_theme

よく知られているカスタマイズ法ですが、Gnome2アプリ(Nautilusやgedit)は基本操作系をEmacs風にすることができます。

  1. gconf-editorを起動
  2. desktop/gnome/interfaceを開く
  3. gtk_key_themeに(なければ作成して)、”Emacs”を指定

しかし、Ubuntu 11.10ではこの指定が働かず、gsettingsを使う必要があります。

$ gsettings get org.gnome.desktop.interface gtk-key-theme
'Default'
$ gsettings set org.gnome.desktop.interface gtk-key-theme Emacs
$ gsettings get org.gnome.desktop.interface gtk-key-theme
'Emacs'

.

しかも、このキーテーマはEmacsには程遠いものです。

1行テキストボックス C-f, C-b, C-a, C-eでのカーソル移動が可能
メニュー操作 C-f, C-b, C-n, C-pでのメニュー移動が可能
ダイアログリスト C-n, C-pでのカーソル移動がCtrl+上下(複数選択)になってしまう
gedit 基本操作はEmacsになっているが、C-n、C-pなどメニューアクセスキーが優先される
Nautilus メニューアクセスキーが優先され、基本操作もEmacsにならない

.

■ can_change_accels

キーテーマの変更の不足を補うには、メニューアクセスキーを変更する必要があります。

Gnome2アプリはキーテーマと同じような方法で変更することが可能です。

アクセスキーを削除または変更することで、geditではC-f, C-nのEmacs操作系が使用できるようになります。Nautilusではアクセスキーを削除してもEmacs操作系になりませんが、意図せず新規ウィンドウを開くより無反応のほうがマシです。

  1. gconf-editorを起動
  2. desktop/gnome/interfaceを開く
  3. can_change_accelsをチェックする
  4. 変更したいメニューをマウスで開き、希望のショートカートを実際に押す
  5. ひと通りのカスタマイズが終わったら、can_change_acceslのチェックを外す

この方法は、Ubuntu 11.04あたりから機能しません。

前述のgsettingsを試してみましたが、それでも11.04では変更できませんでした。11.10は確認する前に削除してダウングレードしたのでは不明です。

gsettings set org.gnome.desktop.interface can-change-accels true

.

■ accelsファイルの直接編集

GUIでメニューアクセスキーが変更できない場合には、他のマシンで変更した定義ファイルをコピーするか直接編集することなります。

幸い、私はVPSサーバーが10.04でGUIもいれていたので、そちらでカスタマイズした定義ファイルをコピーすることにしました。

定義ファイルは、~/.gnome2/accels 以下です。

geditの定義ファイルはGUI環境でコピー可能ですが、Nautilusの定義ファイルをコピーするにはNautilusが起動していないCUI環境で行う必要があります。

  1. 他のマシンでカスタマイズ済みの定義ファイルを ~/ にコピーしておく
  2. GUIをログアウト
  3. Ctrl+Alt+F4でCUIログイン
  4. mv ~/nautilus ~/.gnome2/accels/
  5. CUIをログアウト
  6. Ctrl+Alt+F8でGUIログイン

.

LibreOffice (OpenOffice.org)

Emacsキー定義セットってあってもよさそうですが既存のものはないですね。

新しいPC環境を作るときに困らないように、キー定義を変更したらその都度エクスポートファイルをDropboxに出力するようにして、Emacs度を高めることにしています。

.

FireFox

KeySnailは他のどのアドオンよりFireFoxをEmacsにしてくれますが、なぜかFireFoxのアドオンライブラリには登録されていません。

配布サイトからダウンロードしたxpiファイルを、FireFoxにドラッグアンドドロップすることでインストールします。

.

Google Chrome

最近は、Emacs-mode を入れてます。

基本的には、gtk_key_themeによりメニュー、アドレス欄、テキストボックス編集はEmacsキーバインドが実現されています。アプリごとに補完する必要があるのは、Ctrl+Sで保存ダイアログで出さないことですがEmacs-modeでそれは実現できます。

しかし、残念なのはCtrl+Sが「リンクのインクリメンタルサーチ」であることです。
インクリメンタルサーチの実現に固執した開発者のマスターベーションでしかありません。普通にCtrl+Sでテキスト検索となってくれるだけで充分だったのに。その点、FireFoxのKeySnailはよくできてます。

.

Thunderbird

KeySnailはThunderbird用もあるのですが、試したときのバージョンが古かったのかインストールできませんでした。最新バージョンは試してません。

.

WordPressプラグインTinyMCE

最近になりようやく気付きました。ビジュアル編集モードのCtrl+Fが検索窓になってしまうのはこいつの所為で、WordPressオリジナルのビジュアルモードであれば、gtk_key_themeにしたがってCtrl+Fでカーソル右を保持していました。

テーブル編集のために導入したものの、ついCtrl+Fを打ち検索窓を開いてしまうのでほとんど生HTMLモードでテキスト編集していました。まったく本末転倒です。

プラグインはjavascriptで記述されているので修正は可能です。

wp-content/plugins/tinymce-advanced/mce/searchreplace/editor_plugin.js から”ctrl+f”を探して”ctrl+s”に書き換えるだけです。でも、バージョンアップの度に書き換えるは面倒かな・・・

タグ: ,

y.mikome on 2011/11/20

すでに私はUbuntuは11.04に戻していますが、11.10では未だRabbitVCSが使えないようです。

では11.04でRabbitVCSを再び使うかというと、どうにもその気にはなれません。Nautilusでフォルダを開く動作が遅くなりすぎるんですよね。

そもそも私の場合、サーバーの開発ディレクトリをローカルにsshfsでマウントしていますから、ディレクトリ一覧もレポジトリもssh経由なため、RabbitVCSのようなUIではアイコンを描画にとてつもない時間がかかってしまうわけです。

仕方なく、しばらくコマンドラインでsvcと付き合いましたが、やっぱりGUIが欲しい・・・

.

■ nautilus-script-collection-svn

改めてググってみるとRabbitVCSをはじめTortoiseSVNクローンのGUIツールに混じって、Nautilusのスクリプトという、とってもシンプルなものを見つけたのでインストールしてみました。

sudo apt-get install nautilus-script-collection-svn

スクリプトをNautilusの個人フォルダへ移します。

cp -r /usr/share/nautilus-scripts/Subversion ~/.gnome2/nautilus-scripts/

こんな感じにコマンドを選択できるようになりました。

フォルダやファイルのアイコンにインジケータはありませんが、必要なときにUpdateをすれば良いだけのことです。どうせRabbitVCSだってUpateをしてあげなければ信用できない情報でした。

スクリプトの中身はZenityを使ったコマンドの結果をダイアログに表示するだけの単純なものです。自分でスクリプトを追加するときのサンプルにもなりますね。

.

■ Commitスクリプトの修正

しかし、さっそくCommitを試して硬直しました。
テキスト編集ダイアログが表示されるのは良いのですが、ここでコミットをキャンセルするにはどうすれば良いのだろうかと小一時間 www

スクリプトを確認すると、返り値$?で0を判定していますが、表示させているダイアログが複数行テキスト編集の –text-info –editableなのでキャンセルする方法がありません。OKを押そうがEscで閉じようが0が返ります。

そこで、以下のように1行入力ダイアログに変更しました。LOGMESSAGEの取得もifブロックの中に移す必要があります。

~/.gnome2/nautilus-scripts/Subversion/Commit (部分)

zenity --entry --title "Subversion: Commit" --width=600  --window-icon="$ICONPATH" > $LOGMESSAGEFILE

if [ $? -eq 0 ] ; then
    LOGMESSAGE=`cat $LOGMESSAGEFILE`
    svn commit -m "$LOGMESSAGE" "$@" > $LOGFILE

.

■ Meld の追加

svnコマンドの結果を表示するだけのDiffは苦手なので、以下のスクリプトを作成して追加してみました。

~/.gnome2/nautilus-scripts/Subversion/Meld

#!/bin/bash
if [ $# -ne 0 ]; then
    if [ -d $1 ]; then
        # サブディレクトリ選択時
        cd $1
    fi
fi
meld .

Meldは.svnフォルダを認識するので、 “meld .” とするだけでそのディレクトリ以下を再帰的に比較してくれます。

タグ:

y.mikome on 2011/11/15

結論から言うと、とっても苦労しましたw

前提は、Rooted な2.3.3で、ディザリングとカメラ無音化をしていたもの。
作業環境はUbuntuのVirtualBoxにインストールしたWindows XPにて。

  1. Titanium Backupで凍結していたシステムアプリをすべて解凍
  2. こちらを参考にbuild.propをもとに戻す
  3. 2.3.4へアップデート!

で済めばよかったのですが、プログレスバーの最後でケラれました。

  1. ディザリングのために追加したhostapdを削除
  2. 2.3.4へアップデート!

としてもダメ。

仕方がないので前回と同じようにちゃぶ台返しを決行 (ノ`Д´)ノ彡┻━┻

  1. Titanium Backupでアプリとデータをフルバックアップ
  2. FlashToolで2.3.2へ初期化
  3. 2.3.4へアップデート・・・しかし、このあたりで23時を超え、サーバーが人大杉状態に
  4. 辛抱強く再ダウンロードをくり返して何とかアップデート完了

あとは、これでさくっとrootをとってTitanium Backupでアプリやデータを復元すればおしまい・・・

  1. とはいかず、PCにUSBつなげてrunme.batを実行するも途中で止まる Σ(´Д`;)

ええっと思って「adb shell」を実行してみるとデバイスを認識してない。ああ、USBドライバが必要なのか・・・どこ? 最近のSDKってusbフォルダがない?

「Xperia arc USBドライバ」でググるとSony Ericsson PC Companiaonに同梱とのこと。
あの手の自動インストール画面を見ると(特にSonyのは)拒否反応を起こし、インストールしたことも触ったこともなかったのが悪かった・・・

  1. Sony Ericsson PC Companionをインストール(後で、アンインストールすればいいや)
  2. adb shellを試す・・・が、プロンプトが返ってこないΣ(´Д`;)

人様のブログでは、いとも簡単にrootが取れるようなことが書いてあり、ROMから復元したスマホに環境の違いはあり得ない。

ということで、私のPC環境・・・UbuntuのVirtualBoxでWindows xpのどこがネック?

と悩んでも仕方ないので、翌日・・・

  1. Windows 7 マシンを用意
  2. Windows 7 にSony Ericsson PC Companiaonをいれる
  3. Windows 7 を再起動
  4. USBでつなぐ
  5. adb shellを試す・・・と、つながる (´∀`)
  6. runme.batを実行

でやっとこさrootが取れました。

.

rootさえ取れれば、Titanium Backupでデータごと復元できる。
ああ~、root取っててよかったあ(苦労の原因がrootであることはry)

タグ:

y.mikome on 2011/11/5

ダウングレードと言っても、初期化しての11.04新規インストールです。

仕事に必要なエディタ環境はプログラムごとDropboxフォルダにインストールして起動していましたし、編集対象のプログラムもクラウドなので、ノートPCを初期化することに躊躇いはありませんでした。

.

Ubuntu 11.10を見限った理由を列挙すると・・・

  1. Touchpad-indicatorがまともに機能しない。USBマウスを抜き差しすればタッチパッドは無効になる。
  2. Unityアイコンの右クリックメニューが表示の1回目は選択できない。一度閉じると選択できる。
  3. xyzzy via wineで日本語フォントが指定できない。同名フォントが英語→日本語の順でリストされるので、手で指定しても再起動で非日本語となる。
  4. 何かのはずみで突然Xが終了する。
  5. Canon MG5130で印刷ができない。インストーラがUSB接続のプリンタを見つけることができない。

11.04に戻しても3の同名フォントは並んでいましたが、先頭が日本語フォントなので顕在化してませんでした。

4はグラフィック的な「何か」を表示しようとしたタイミングで落ちることがあるということで、まあ、安心して作業できないわけですが、プログラム仕事の最中はテキストエディタだけなので、痛い目には合わずに済みました。

こんな状態でも我慢して使っていたのですが、月末でもろもろ印刷する要件があり5に気づきました。印刷しなければお金をもらえないものありますので、ちゃぶ台返しの決心につながった次第です。

.

これまでもアップデートで失ったものは少なくありませんが(笑)、今回ほどひどいのは初体験でした。

次の長期サポートLTS版までに何とかなってくれるんでしょうか?

タグ: ,

利用しているミュージックプレーヤのPowerAMPにはスリープタイマー機能がついていますが、いろいろと不満があります。

  • メニューの奥なので設定が面倒くさい。残り時間の確認も同じ。
  • 60分までは10〜15分きざみなのに、次はいきなり120分しか設定できない。
  • いきなりブツっと切れるので、結局目が覚めてしまう。

ということで、フェードアウトして音楽再生を止めてくれるアプリを Tasker で作ってみました。

せっかくなので任意の時間も設定したい。

Tasker の Variable Queryを試したところ、 UI で入力した値を変数に受け取ったところでタスクが終了してしまい、それ以降の記述は実行されません。

困ったな〜〜と十数分。おっと、思いつきましたよ! ( ・`ω・´)

.

色付きの文字はマウスオーバーで説明が表示されます

  1. [Task] Sleep Timer
    ホームにショートカットを作成してスリープタイマーの開始するためのタスクです。1回押すと初期値の30分がセットされ、さらにくり返して押すと10分ずつ加算されます。カウントダウン途中での追加にも使用できます。

    Task > If > %SLEEP !Set
       Variable > Variable Set > %SLEEP to 30
    Task > Else
       Variable > Variable Set > %SLEEP to %SLEEP+10 (Do Maths)
    Task > End If
    Alert > Flash > Text: Set to %SLEEP min
    Alert > Notify > Title: Sleep Timer / Text: Set to %SLEEP min
    Tasker > Profile Status > “Sleep Timer” Set On
    Tasker > Profile Status > “Sleep Timer Notification” Set On

  2. [Profile] Sleep Timer
    5分おきに通知バーの残り時間を更新し、0分を切るとボリュームを少しずつ下げて最後に音楽再生を停止するタスク本体です。普段はステータス状態を無効にしておき、1のショートカットで動き出します。

    [Context]
    Time > Repeat 5 min

    [Task]
    Task > If > %SLEEP > 0
       Variable > Variable Set > %SLEEP to %SLEEP-5 (Do Maths)
       Alert > Notify > Title: Sleep Timer / Text: Last %SLEEP min
       Task > Stop
    Task > End If
    Tasker > Profile Status > “Sleep Timer” Set Off
    Tasker > Profile Status > “Sleep Timer Notification” Set Off
    Vaiable > Variable Set > %VOLM0 to %VOLM If %VOLM0 !Set
    Task > For > %idx = 1:16
       Variable Variable Set > %vol To 17-%idx (Do Maths)
       Audio > Media Volume > %vol If %vol < %VOLM0
       Task > Wait > 1 min if %vol < %VOLM0
    Task > End For
    Media > Media Control > Stop
    Alert > Notify Cancel > Title: Sleep Timer
    Task > Wait > 5 sec
    Audio > Media Volume > %VOLM0
    Variable > Variable Clear > %VOLM0
    Variable > Variable Clear > %SLEEP

  3. [Profile] Sleep Timer Notification
    通知バーの残り時間表示を選択するとカウントダウンをキャンセルできます。

    [Context]
    Event > UI > Notification Click > Title: Sleep Timer

    [Task]
    Tasker > Profile Status > “Sleep Timer” Set Off
    Tasker > Profile Status > “Sleep Timer Notification” Set Off
    Variable > Variable Clear > %SLEEP

.

5分きざみのリピートを利用しているので、設定した残り時間は最大5分の誤差が生じますし、最後のフェードアウト(10分前後)も考慮していません。

意識を失っているときの利用が前提なので、このくらいのアバウトさで十分ではないかと・・・・

タグ:

y.mikome on 2011/10/22

ようやく標題の結論に達しました(笑

以前から「原因不明」として書いてきた現象は、Taskserで画面オフ後のキーガード(画面ロック)を制御をしていると、Homeボタンを押したときにときどきロック解除画面が現れてしまい、それを解除すると、電源オンの度にロック解除が必要になる(Taskerでロックを遅延させているはずなのに)と言うものでした。

Tasker標準のKeyguard OffはAndroid 2.2以降、画面オフ時には機能しないので、Secure Settingsプラグインに差し替えて利用してましたが、この現象はどちらでも同じように発生します。

自分の作ったタスク設定にどこか穴があるのではないかと試行錯誤してきたのですが、どうもこれは回避できない問題であると、ようやく自分自身を納得させることができました。

.

そう思えるようになったのは、「Homeボタンを押したときにときどき」という曖昧な状況を、「ホームアプリがメモリから消えてるときにHomeボタンを押したとき」と把握したからです。

.

現象の再現には、おそらく Widget Lockerの併用が必要です。

Widget Lockerはシステムに画面ロックがかかっていても、画面オンで(ロック画面より先に)自分自身を表示し、カスタムロック画面に配したウィジットやショートカットからアプリをはじめて起動したときにロック画面を表示させます。

TaskerのKeyguard Offも本来ならシステムにロック画面がかかってる状態を何らかの方法で覆しています。具体的に何をやっているか知りませんが、いずれもAndroidシステムの正規APIではないと(OSバージョンにより動作しないことからも)想像できます。

使用メモリが溢れてホームアプリが消えたときにHomeボタンを押すと、改めてホームアプリが起動しようとします。その起動がWidgetLockerの制御にかかってロック画面の出現を呼んでいると考えられます。

と、ここまで推察したとこで、どうにもならないと結論付けるしかありません。

いずれも非正規な(と考えられる)制御がバッティングしているわけですから、TaskerのKeyguard OffとWidgetLockerの相性(この言い訳用語、Windows登場当時にはよく使われましたね)としか言いようがないからです。

.

■Password/PIN制御ならOK!

Keyguardの代用になる画面ロック機能を探さなければなりません。Taskerに備わっている独自のLock機能はシンプルでよいのですが、解除されたかどうかをTasker自身で感知することできないので代わりにはなりません。

3G切断もあきらめ、画面ロックの制御もあきらめてしまったら、自分がTaskerを導入した動機のすべてを失ってしまいます(笑)

.

まて! Keyguard Off は「本来ならシステムにかかってる画面ロックを何とかする」機能だけど、Password/PIN はロックのかかっていないシステムをパスワード指定でごく当たり前にロックする機能では?

ということで、Android のセキュリティ設定をロックしない状態に戻し、Tasker プラグイン Secure Settings の Password/PIN を利用してみました。はい、OKでした。

.

  1. [Task] Delay Lock
    [Properties]
    Collishion Handling > Abort Existing Task

    [Task]
    Task > Stop If %SCREEN ~ on
    Task > Wait 10m
    Task > Wait 4h, If %LOCATION ~ work
    Plugin > Secure Settings > Password/PIN > パスワードを設定

  2. [Profile] Display Off
    [Context]
    Event > Display > Display Off

    [Task]
    Task > Stop > If %WIDGETLOCKER ~ locked
    3rd Party > WidgetLocker > Activate
    Task > Perform Task > “Delay Lock” if %LOCATION !~ home

  3. [Profile] Display On
    [Context]
    Event > Display On

    [Task]
    Variable > Variable Set > %WIDGETLOCKER to locked

  4. [Profile] Widget Locker Unlocked
    [Context]
    Event > 3rd Party > Widget Locker > Unlocked

    [Task]
    Variable > Valiable Clear > %WIDGETLOCKER
    Task > Perform Task > “Delay Lock”

  5. [Profile] Display Unlocked
  6. [Context]
    Event > Display > Display Unlocked

    [Task]
    Plugin > Secure Settings > Password/PIN > Disable

.

追記

Password/PINを利用したこの設定でも、ホームアプリがメモリから消えてるときにHomeを押すとロック解除画面が出現しました。しかし、Keyguardと違うのはこのロック画面を無視すれば(電源ボタンでオフにするとか)、もうロック画面は出てきません。Password/PINならOKというのはこれで証明されました。

この「ホームアプリがメモリにないときにHomeを押すとロック画面が出現する」のは、純粋にWidgetLockerのバグと言えますから、進言すれば解消されるかもしれませんね。

タグ:

y.mikome on 2011/10/22

タイトルに草を生やした時点でもう結果は見えていますね(www

結果は以下の通りです。
グラフは青=常時接続、黄=メール通知監視、緑=15分に1分の定期接続で、それぞれ4日分の使用の平均で曜日はバラつくように配慮したつもりです。

バッテリーログのグラフ

なるべく同じような使用状況になるように気をつけましたので、日ごとを見ると変動はバラバラでしたが4日平均は十分に均一化されました(笑

.

利用環境の詳細は以下です。

機種/OS Xperia arc / Android 2.3.3
3Gオフ Dispaly Offの30秒後に3Gをオフ
Display Onでは3Gオンにしない(WidgetLocker使用)
WidgetLocker Unlocked で3Gオン
使用状況 仕事中も音楽プレーヤーとして使用
通勤往復1時間半はBluetoothも使用
GPSは常にオン(ただしGPSを利用するアプリは全く使用せず)
Googleリーダーなどのネットはほどほどに利用
Taskerの設定変更は禁止(没頭して電力を消費するから・笑)
夜明けに目覚めたときに充電開始して二度寝し、充電完了してから出勤
spモード 不使用(Titanium Backupで凍結)
GMailアプリ 不使用(Titanium Backupで凍結)
K-9 Mail GMailをIMAPで利用
同期フォルダの同期間隔: しない
プッシュ接続時の同期: する
※頻繁にメールがあるなら同期設定は逆にしたほうが省電力かもしれません
メール通知 GMail → Yahoo転送 → spモードに携帯通知
「spモードメール」は使用せず「メール通知Free」で監視
メール通知の通知音やLEDはすべてオフ
メール通知のNotificationで3Gを1分間オンにすることでK-9 Mailが受信
K-9 Mail側の通知音とLEDを利用
定期監視 15分に1分のタスクを作成
%SCREEN ~ off なら1分間3Gをオンにする

.

K-9 MailのGmailプッシュは3G回線による信号で、「メール通知」が監視しているspモードメールのプッシュは通常電話回線の信号なわけですが、ほとんど差がないようです。もしくはその差を「メール通知」アプリの監視が相殺してるかです。
プッシュ待ちでは双方向の通信をしているわけではないから?電力を消費していないのでしょうか。

とにもかくにも、Xperia arcは十分に省電力チューンされているということですね。

.

これで晴れて3Gオフの呪縛から解放され、Taskerの設定が簡単になりました(笑

タグ: ,

y.mikome on 2011/10/19

Ubuntu 11.10に設置したNXサーバーに対して、nomachinesのNXクライアントでログインするための設定がわかりました。

設定画面のキャプチャと詳細がこちらにありました。

http://askubuntu.com/questions/50503/why-do-i-get-unity-instead-of-classic-when-using-nx

  1. 指定可能なgonem-sessionの情報を以下から調べる。
    sudo ls -l /usr/share/gnome-session/sessions/
    合計 16
    -rw-r--r-- 1 root root  206 2011-09-24 07:33 gdm.session
    -rw-r--r-- 1 root root 1511 2011-10-06 19:54 gnome.session
    -rw-r--r-- 1 root root  259 2011-10-06 19:54 ubuntu-2d.session
    -rw-r--r-- 1 root root  285 2011-10-06 19:54 ubuntu.session
  2. nomachinesの設定画面のGeneralタブ>DesktopでUnix, Customを選択してSettingsボタンを押す
  3. Run the following commandに1で調べたgnome-sessionを指定する
    gnome-session ubuntu-2d
  4. New virtural Desktop を選択する

以上で、無事Ubuntu 11.10のUnity 2Dにリモートログインすることが出来ました。

.

が、しかーし! 私の環境(Google Neatxサーバー)では、ログアウト処理が正しくできずに、ログアウト処理中に切断されて必ずセッションが残ってしまうのでありました!

そうなると次回の接続でinteral errorが発生し、ログインできない状況に陥ります。
仕方ないので、sshログインしてセッションファイルを削除するしかありません。

ls -l /var/lib/neatx/sessions/
合計 8
drwx------ 4 user users 4096 2011-10-19 17:48 3F1A7C4859749567E89658766AF97348
drwx------ 4 user users 4096 2011-10-19 17:47 622534CD2682041516F878DB7CA8C98D

.

Neatxでなく、FreeNXならこんなことにはなってないようですが、前回書いたとおりに11.10へのFreeNXのインストールは未だできてません。( ・´ω・`)

タグ: , ,