Android の Google Authenticator のデータをダンプしてバックアップする

Android の Google Authenticator 色々な認証に使えて便利ですが,以前 Nexus5 を紛失した時や LGL22 でデータが飛んでしまった後復旧が面倒でした.どうにかバックアップが取れないかなと調べてみました.

Android からデータを取得

/data/data/com.google.android.apps.authenticator2/databases/databases がデータが格納されているファイルらしいです.
adb pull で持ってきたいけど権限がないので一旦 /storage/sdcard0/ に cp する

% adb shell
shell@g2:/ $ su
root@g2:/ # cp /data/data/com.google.android.apps.authenticator2/databases/databases /storage/sdcard0/

ローカルPC に退避

% adb pull /storage/sdcard0/databases .

/storage/sdcard0/ に cp したデータを消す.暗号化領域の下のはずだけど一応上書きしてから削除

% adb shell
shell@g2:/ $ su
root@g2:/ # ls -l /storage/sdcard0/databases
-rw-rw---- root     sdcard_r    16384 2015-10-09 22:51 databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # rm /storage/sdcard0/databases
root@g2:/ # ^D
shell@g2:/ $ ^D

データ形式を確認してdump

該当ファイルは file コマンドによると SQLite3 のようなので dump してみる

% file ./databases
./databases: SQLite 3.x database
% sqlite3 ./databases
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE android_metadata (locale TEXT);
INSERT INTO "android_metadata" VALUES('ja_JP');
CREATE TABLE accounts (_id INTEGER PRIMARY KEY, email TEXT NOT NULL, secret TEXT NOT NULL, counter INTEGER DEFAULT 0, type INTEGER, provider INTEGER DEFAULT 0, issuer TEXT DEFAULT NULL, original_name TEXT DEFAULT NULL);
 :

ここで取得した PRIMARY KEY を HOTP TOKEN を割り出す script の "google-authenticator.py に食わせると Android App と同じコードが帰ってくるのを確認しました.勿論普通に認証も可能.

IMG_20151010_012917

ということで要root ですが, /data/data/com.google.android.apps.authenticator2/databases/databases を退避して他の端末に持って行っても動作するかも.少なくとも PRIMARY KEY は入手できるので手動で入力すれば OK ですね.
とはいえ端末紛失時には作りなおしたほうが良いでしょうが.

root が取れない場合は登録時に PRIMARY KEY をメモしておくくらいですかね.QR Code だけしか見えない場合は Google Authenticator に食わせる前に別のリーダーを利用したりすれば可能です
例えば以下のような読み取り内容の場合 6QHI5WW6H3FMJ2ZI が PRIMARY KEY です.

otpauth://t│·········· otp/mk@micro?secret=6QHI5WW6H3FMJ2ZI

LGL22 導入アプリメモ

LGL22 ですが,先日起動してもすぐに再起動してしまう様になってしまいました.起動してパスコードを入力してデスクトップが表示されるくらいの辺りで再起動してしまいます.アイコンが減っていたりするのでストレージが死んだかファイルシステムが壊れているかかな?と初期化しました.

とりあえず復活したようなので導入アプリのメモを書いておきます.

  • Squera レジ
    関東では使うことあったけど鹿児島では一度も使ったことがない……
  • PayPal
  • Debian News
  • Go雨!探知機
    XRAIN をオーバーレイしてくれる
  • Gmail
  • K-9 Mail
    Gmail 以外のメールに利用
  • APG
    主に K-9 Mail での GPG に
  • 音泉
  • Tuneln Radio
  • Raziko
  • Radiko.jp
  • らじるらじる
  • Google Playミュージック
  • DeviantArt
  • Pixiv
  • リトルノア
    ゲーム.何気に続けてる
  • Ingress
    緑です
  • Ingress Helper
  • Intelgrated Timer
  • Google+
    利用率が一番高い
  • Mustard
    Twitter や GNU Social 対応クライアント
  • SobaCha
    軽くてユーザーストリームに対応した Twitter クライアント
  • Twitter
  • Plag
  • Instagram
  • Snapchat
  • Swarm
  • tsu
  • Tumblrunning
  • WharsApp
  • Slack
  • SlideShare
  • Ustream
  • WiFLE WIFI
    War Driving に(携帯局も拾う)
  • mineo スイッチ
    SIMの利用料確認に
  • Debian
    chroot で Debian が動く.暇つぶしに良い
  • Programmer Keyboard
  • Google Goggles
    翻訳(日本語非対応)したりバーコード読んだり
  • WiFi QR Share
    端末で設定してある Wi-Fi 設定を QR Code で表示したり※root
  • プレゼンタイマ
  • Bluetooth Auto Connect
    Bluetooth 機器に自動接続する
  • OsmAnd+
    OSM の確認,POI 登録など
  • MAPS ME
    OSM 地図確認.見やすい
  • OSMTraker
    GPS ログ取りに
  • Strava
    散歩時のログ取りなどに
  • GPS Status
  • Google Camera
  • Jota+
  • JotterPad
  • LibreOffice Viewer
  • N2 TTS
  • Voice Notify
    N2 TTS とあわせて喋らせる
  • ownCloud
  • Photo Editor
  • Rapica Reader
    フェリー乗船前の残高確認に
  • SMARTalk
  • SuperSU
  • 認証システム
    Google Authenticator.バックアップコード引っぱり出したり再設定が面倒だった.バックアップ方法を調べたい.
  • Titanium Backup

Node.js製 Slack クライアントの plaidchat を試してみる

ということで plaidchat も少し試してみました.

導入は特に苦労はなくページに書いてあるとおり npm install で一発でした.

Slack 製の物に比べると機能は少ないです.多分1プロジェクトのみの対応です.でもリソースの省比量は大分少なくメインウィンドウを隠すことも出来ます.
About が後ろに行って複数出せてしまったり,窓の中が真っ白になったり未だこなれてない感じです.これからに期待です.

20150928_08:09:00-13716

% ps aux | grep -i plaidchat | awk '{print $6}' | xargs echo| sed -e 's/\ /\+/g' | bc
326480

RAM 消費量が少ないとはいってもそこそこ消費するので今度は Slack IRC GW なども試してみたいです.

Slack の Linux版公式クライアントを試してみる

サポートディストリビューションも多そう!ということで試してみました.
Twitter の画像ではたくさんのディストリビューションのロゴがあったのですが,ダウンロードページに行くとこんだけでした><

20150924_10:09:57-20642

ダウンロードして Debian testing stretch amd64 環境で展開して試してみると特に問題なく動きました.

ダウンロードしたパッケージはこんな感じ

% dpkg --info ~/Downloads/slack-desktop-1.2.2-amd64.deb          
 新形式 debian パッケージ、バージョン 2.0。
 サイズ 45815918 バイト: コントロールアーカイブ = 446 バイト。
     473 バイト、   12 行      control              
 Package: slack-desktop
 Version: 1.2.2
 Depends: gconf2, gconf-service, libgtk2.0-0, libudev0 | libudev1, libgcrypt11 | libgcrypt20, libnotify4, libxtst6, libnss3, python, gvfs-bin, xdg-utils, apt-transport-https
 Suggests: libgnome-keyring0, gir1.2-gnomekeyring-1.0
 Replaces: slack (<< 1.2.1~)
 Breaks: slack (<< 1.2.1~)
 Section: misc
 Priority: optional
 Architecture: amd64
 Installed-Size: 134268
 Maintainer: Slack Technologies <feedback@slack.com>
 Description: Slack Desktop

とりあえず実行.( dpkg -i でインストールしてもとりあえず動いています.)

% ar x ~/Downloads/slack-desktop-1.2.2-amd64.deb
% tar xf ../data.tar.xz
% ./usr/bin/slack

20150924_10:09:08-13152

日本語のリソースファイルぽいものもあるけど日本語が表示されないなと思ったのですが,中身は他の言語も含め全て空でした.この辺はこれからのようですね.

% ls -l ./usr/share/slack/locales/ja.pak 
-rw-r--r-- 1 mk mk 0  9月 23 14:42 ./usr/share/slack/locales/ja.pak

起動すると ブラウザと同じような感じでログインできます.
20150924_11:09:35-26588

タスクトレイのメニューはこんな感じでした.タスクトレイからウィンドウを開いた後タスクトレイへの格納は出来ないようです.
20150927_07:09:20-30617

複数の team にも対応しています.
20150927_07:09:15-1275

日本語の表示や入力も問題なく行えました.
と,ここまではいい感じかなー.と思っていたのですが起動に時間がかかるのはともかくメモリ消費量が大きいです.

% ps aux| head -1                                                           
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
% ps aux| grep -i slack                                                     
mk        2463  0.1  0.5 1331200 40756 ?       Sl   01:48   0:09 /usr/share/slack/slack
mk        2497  0.0  0.1 313440  8020 ?        S    01:48   0:00 /usr/share/slack/slack --type=zygote --no-sandbox
mk        2597  0.0  0.5 581152 44584 ?        Sl   01:48   0:04 /usr/share/slack/slack --type=gpu-process --channel=2463.0.1022154471 --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=2,14,43 --disable-accelerated-video-decode --gpu-vendor-id=0x8086 --gpu-device-id=0x0046 --gpu-driver-vendor --gpu-driver-version
mk        2648  0.1 11.4 2024760 909348 ?      Sl   01:48   0:16 /usr/share/slack/slack --type=renderer --force-device-scale-factor=1 --no-sandbox --enable-deferred-image-decoding --lang=ja --node-integration=true --enable-plugins --subpixel-font-scaling=true --enable-pinch-virtual-viewport --enable-delegated-renderer --num-raster-threads=2 --enable-gpu-rasterization --use-image-texture-target=3553 --disable-accelerated-video-decode --channel=2463.1.1087300934
mk        2750  0.3 13.5 2102980 1082316 ?     Sl   01:49   0:37 /usr/share/slack/slack --type=renderer --force-device-scale-factor=1 --no-sandbox --enable-deferred-image-decoding --lang=ja --guest-instance-id=1 --node-integration=false --enable-plugins --preload=/usr/share/slack/resources/app.asar/static/ssb-interop --enable-pinch-virtual-viewport --enable-delegated-renderer --num-raster-threads=2 --enable-gpu-rasterization --use-image-texture-target=3553 --disable-accelerated-video-decode --channel=2463.2.1767621685
mk        3127  0.0  0.0  13700  2224 pts/2    S+   04:25   0:00 grep -i slack
% ps aux | grep -i slack | awk '{print $6}' | xargs echo| sed -e 's/\ /\+/g' | bc
2087260
% pstree 29317
slack─┬─slack─┬─slack─┬─{Chrome_ChildIOT}
      │       │       ├─2*[{CompositorTileW}]
      │       │       ├─{Compositor}
      │       │       ├─{HTMLParserThrea}
      │       │       ├─{handle-watcher-}
      │       │       └─5*[{slack}]
      │       └─slack─┬─{Chrome_ChildIOT}
      │               ├─2*[{CompositorTileW}]
      │               ├─{Compositor}
      │               ├─{HTMLParserThrea}
      │               ├─{ScriptStreamerT}
      │               ├─{handle-watcher-}
      │               └─{slack}
      ├─slack─┬─{Chrome_ChildIOT}
      │       └─{Watchdog}
      ├─{AudioThread}
      ├─3*[{BrowserBlocking}]
      ├─5*[{CachePoolWorker}]
      ├─{Chrome_CacheThr}
      ├─{Chrome_DBThread}
      ├─{Chrome_FileThre}
      ├─{Chrome_FileUser}
      ├─{Chrome_IOThread}
      ├─{Chrome_ProcessL}
      ├─{IndexedDB}
      ├─{NSS SSL ThreadW}
      ├─{NetworkChangeNo}
      ├─{gdbus}
      ├─{gmain}
      ├─{handle-watcher-}
      ├─{inotify_reader}
      ├─{sandbox_ipc_thr}
      ├─5*[{slack}]
      └─{threaded-ml}
% free
              total        used        free      shared  buff/cache   available
Mem:        7971864     6427012      245032      344740     1299820     1111572
% kill 29317
% free
              total        used        free      shared  buff/cache   available
Mem:        7971864     4251376     2457392      306516     1263096     3325500

この作りだと Chrome/Chromium を併用している場合 Chrome アプリケーションにしてもらったほうがリソース食わないんじゃないかなと思ったりも.

ちなみに Hipchat には以前から Linux Client は存在していてこんな感じです.Slack に比べると大分軽いです.

% ps aux | grep hipchat 
mk        1953  2.4  1.6 2584884 128724 ?      Ssl  08:23   0:01 /usr/bin/hipchat
% pstree 1953
hipchat.bin─┬─{QProcessManager}
            ├─2*[{QQmlThread}]
            ├─{QXcbEventReader}
            ├─{Qt HTTP thread}
            ├─{Qt bearer threa}
            └─5*[{hipchat.bin}]

Node.ja で作られた plaidchat というクライアントもあるようです.これも試してみようと思います.

ReText 翻訳のメモ

ReText 5.1.0 を翻訳してみました.そのとき遠回りしたのでメモしておきます.

このアプリケーションの翻訳ファイルは Qt の .ts を翻訳して .qm で利用する形のようです.この辺りは以下のエントリを参照して下さい.

先ずは ReText の source を入手.

% git clone https://github.com/retext-project/retext.git
% cd retext/locale
% linguist retext_ja.ts

これで一旦翻訳してみましたが, git log 見て Transifex 使ってるぽいのを見つけましたorz

locale: Updated French translation from Transifex

Transifex を見に行くとありましたorz

とりあえず未翻訳でわかる部分は翻訳しておきました.結果をダウンロードして反映してみると大体日本語化出来た感じですが,以下の部分は翻訳しないほうがいいと思うのですが ReText の中に見当たりません.

corp

.ts や source 全部から検索

% grep ページ ./locale/retext_ja.ts
% grep -i PageDown ./locale/retext_ja.ts
% find . -type f | xargs grep -i PageDown    
./ReText/window.py:                     lambda: self.switchTab(1), shct=Qt.CTRL+Qt.Key_PageDown)

ReText パッケージ全部から検索

% dpkg -L retext | xargs -I{} sh -c "if test -f {} ; then grep ページ {} ; fi"
 

ベースの Qtの方かなと思って,全 .ts からも探してみます.

% find /usr/share -type f -name "*_ja.ts"| xargs grep 'ページ'
find: `/usr/share/doc/google-chrome-stable': 許可がありません
/usr/share/skype/lang/skype_ja.ts:        <translation>ページ%1</translation>
/usr/share/skype/lang/skype_ja.ts:        <translation>ホームページ:</translation>
/usr/share/skype/lang/skype_ja.ts:        <translation>ダウンロードページを開く</translation>
/usr/share/skype/lang/skype_ja.ts:        <translation>アカウントページの閲覧</translation>

.ts が用意されていないパッケージにあるのかもしれないと .qm から .ts に変換する方法を探すと lconvert コマンドを見つけました.( 簡単な利用方法は次のエントリに追記した 翻訳ファイルの .ts の翻訳方法 | matoken’s meme )

*_ja.qm を.ts にして検索すると発見しました.

% find /usr/share -type f -name "*_ja.qm" | xargs -n1 -I{} lconvert -if qm -i {} -of ts -o - | grep 'ページアップ'
        <translation>ページアップ</translation>
        <translation>ページアップ</translation>
% find /usr/share -type f -name "*_ja.qm" | xargs -n1 -I{} lconvert -if qm -i {} -of ts -o - | grep 'ページダウン'
        <translation>ページダウン</translation>
        <translation>ページダウン</translation>

これはどのファイルに含まれているのかを確認すると /usr/share/qt5/translations/qtbase_ja.qm

% find /usr/share -type f -name "*_ja.qm" | xargs -n1 -I{} sh -c "lconvert -if qm -i {} -of ts -o - | grep 'ページアップ'; echo {}"
 
/usr/share/gnuplot/gnuplot/4.6/qt/qtgnuplot_ja.qm
/usr/share/virtualbox/nls/VirtualBox_ja.qm
/usr/share/virtualbox/nls/qt_ja.qm
/usr/share/qt5/translations/qtmultimedia_ja.qm
/usr/share/qt5/translations/linguist_ja.qm
/usr/share/qt5/translations/qtdeclarative_ja.qm
/usr/share/qt5/translations/qtquick1_ja.qm
/usr/share/qt5/translations/qmlviewer_ja.qm
/usr/share/qt5/translations/qtconfig_ja.qm
/usr/share/qt5/translations/qtscript_ja.qm
/usr/share/qt5/translations/qt_ja.qm
/usr/share/qt5/translations/qtquickcontrols_ja.qm
/usr/share/qt5/translations/assistant_ja.qm
/usr/share/qt5/translations/designer_ja.qm
/usr/share/qt5/translations/qtxmlpatterns_ja.qm
        <translation>ページアップ</translation>
        <translation>ページアップ</translation>
/usr/share/qt5/translations/qtbase_ja.qm
/usr/share/qt5/translations/qt_help_ja.qm
/usr/share/gnuplot5/gnuplot/5.0/qt/qtgnuplot_ja.qm
/usr/share/libqtxdg/libqtxdg_ja.qm
/usr/share/librazorqt/librazorqt_ja.qm
/usr/share/owncloud/i18n/client_ja.qm
/usr/share/skype/lang/skype_ja.qm
 
% lconvert -if qm -i /usr/share/qt5/translations/qtbase_ja.qm -of ts -o - | grep 'ページアップ'
 
        <translation>ページアップ</translation>
        <translation>ページアップ</translation>
% lconvert -if qm -i /usr/share/qt5/translations/qtbase_ja.qm -of ts -o - | grep 'ページダウン'
 
        <translation>ページダウン</translation>
        <translation>ページダウン</translation>

このファイルはどのパッケージに含まれているか確認すると qttranslations5-l10n でした.

% apt-file search qtbase_ja.qm
qttranslations5-l10n: /usr/share/qt5/translations/qtbase_ja.qm

Transifex を探すと qttranslations の qtbase にそれらしいものがありました.

該当部分はここ

.ts をダウンロードして該当部分を以下のように書き換えて

@@-5569,12 +5571,12 @@
     <message>
         <location line="+1"/>
         <source>PgUp</source>
-        <translation>ページアップ</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+1"/>
         <source>PgDown</source>
-        <translation>ページダウン</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+1"/>

.qm を作って反映してみると,

% sudo cp ~/Downloads/for_use_qtbase_qtbase_ja.qm /usr/share/qt5/translations/qtbase_ja.qm

以下のように反映されました.

20150919_09:09:58-6829

とりあえず「翻訳のために qttranslations team チームに参加」を押して申請をだしてみました.

Yandex.Disk を試してみる

Yandex.Disk は Linux と BSD に ODF 閲覧機能まで!ってことでロシアでシェアの大きいらしい Yandex のアカウントを取ってみました.
# matoken 空いてた:)
##ここからアカウントを作ると +512MB
https://disk.yandex.com/invite/?hash=URJFTFG9

早速 Yandex.Disk に日本語の .odt をUp してみると,

20150918_05:09:39-19415
20150918_05:09:25-20153

  • 日本語ファイル名ok
  • ファイル一覧画面でのプレビューは日本語豆腐
  • ファイル閲覧ページはは日本語表示ok

という感じでした.

ファイル共有サービスの BSD サポートは実は WebDAV が使えるので Nautilus や Dolphin で繋いでねって感じでした.これはちょっとがっかり.WebDAV で OK だと Otixo や ownCloud 経由でかなりのサービスで対応出来てますね.

Linux のクライアントは .deb/.rpm のパッケージが提供されていて,.deb はリポジトリも用意されているので手間が省けていいです.但し Console client なので GUI がいい人は WebDAV でいいこともあるかもしれません.(サードパーティ製の GUI はあるみたい)

ちなみに Yandex は OSM にこういう貢献もしてるので好印象だったりします.

今のところ ODF の編集は ownCloud で簡易編集が可能,Microsoft OfficeOnline でも編集可能らしい(未検証).案外選択肢無いですね…….
Android/iOS 辺りのサポートもされると出先でのプレゼンテーションなどで便利になりそう.(でもこっちは無線プロジェクターの普及が進まないと利用者が増えないかな?)

翻訳ファイルの .ts の翻訳方法

翻訳ファイルの .tsPoedit では開けない.Qt Linguist というものが使えるそうなので Debian だと wheezy-backports 以降に存在する qttools5-dev-tools を導入する.

% sudo apt install qttools5-dev-tools
% /usr/lib/x86_64-linux-gnu/qt5/bin/linguist

20150917_18:09:30-3415

20150917_18:09:24-3340

翻訳して保存,「ファイル」->「リリース」で .ts から .qm が作られる.これをコピーして対象アプリケーションを起動すると翻訳が反映されるはず.

% sudo cp ./retext_ja.?? /usr/share/retext/locale

<追記>
コマンドラインで変換する場合は qtchooser パッケージに含まれる lrelease が利用できる.

% lrelease ./retext_ja.ts -qm ./retext_ja.qm

若しくは同パッケージの lconvert でもok.これは qm から ts への変換や pot / po / qph / xlf にも対応している.

% lconvert -i retext_ja.ts -o retext_ja2.qm
% lconvert -if qm -i retext_ja.qm -of ts -o retext_ja2.ts

</追記>

暗号化FS EncFS Windows 移植版の EncFS4Winy を試す

以前のエントリの 「暗号化ファイルシステム EncFS の Reverse mode を試す | matoken’s meme」のコメントで EncFS の Windows移植版の EncFS4Winy というものを教えてもらいました.

EncFS の移植 & GUI で簡単にマウントしたりできるもののようです.

今回は VirtualBox 内の Windows 8.1 Professional 64bit 版に検証時の最新版の EncFS4WinyInstall_1.7.5_2.exe を試しました.手元で計算した HASH は以下の通り.

% sha256sum EncFS4WinyInstall_1.7.5_2.exe
fd8c5109876730eb1a0395e9d85a81007655fc0ae135f63adc30e3b34da84315  EncFS4WinyInstall_1.7.5_2.exe
% sha512sum EncFS4WinyInstall_1.7.5_2.exe
c722c41d99944ccc247ac8b3859a2a3f3cfc2e467c814b865adda57d767837ec0561c23725b5d3f79a03babcce8137b3553291aa498a20eedcd46fb00504cc15  EncFS4WinyInstall_1.7.5_2.exe

実行するとインストーラが起動してよきに計らってくれます.
早速起動してみると,「コンピューターに LIBEAY32.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみて下さい。」 と言われて起動出来ませんでした.

Gyazo

LIBEAY32.dll は何者だろうと検索すると OpenSSL のもののようです.OpenSSL 本家ではバイナリを配布してないので Vector/窓の杜などで探しますが見当たりません.ReadMe_Windows.txt にも書かれている以下があちこちから参照されているし最新のバージョンに追従しているようですが,個人の人の運用しているページのようで配布物のハッシュや署名なども見当たらず.Announcement ML も登録できずでちょっと不安.皆さん自分でビルドされてるんですかね?(それとも他にいい配布元がある?)

仮想マシン環境なのでスナップショットを取ってあるので後で巻き戻すことにしてひとまずここから OpenSSL を導入しました.
すると EncFS は動作するようになりました.

<追記>
OpenSSL ライブラリが同梱された EncFS4Winy 1.7.5_3 がリリースされました.この辺りの手順は必要なくなったはずです.

</追記>

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe --version
encfs version 1.7.4
 
C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe -h
.\encfs.exe: invalid option -- h
05:57:06 (..\encfs\main.cpp:354) Missing one or more arguments, aborting.
Build: encfs version 1.7.4
 
Usage: .\encfs.exe [options] rootDir mountPoint [-- [FUSE Mount Options]]
 
Common Options:
  -H                    show optional FUSE Mount Options
  -s                    disable multithreaded operation
  -f                    run in foreground (don't spawn daemon).
                        Error messages will be sent to stderr
                        instead of syslog.
  -v, --verbose         verbose: output encfs debug messages
  -i, --idle=MINUTES    Auto unmount after period of inactivity
  --anykey              Do not verify correct key is being used
  --forcedecode         decode data even if an error is detected
                        (for filesystems using MAC block headers)
  --public              act as a typical multi-user filesystem
                        (encfs must be run as root)
  --reverse             reverse encryption
 
Example, to mount at c:\plain with raw storage in c:\crypt :
    encfs c:\crypt c:\plain
 
For more information, see the man page encfs(1)
 

早速 Linux で作った暗号化ファイルシステムをマウントしてみると以下のようにエラーとなってしまいました.

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe F:\tmp\encfs_c I: EncFS Password:
06:53:02 (..\encfs\FileUtils.cpp:1694) Unable to find nameio interface nameio/block, version 4:0:0
The requested filename coding interface is not available
 

ちょっと調べると,EncFS 領域作成時のファイル名エンコードのオプションで Blick32 を指定しているとこうなるようです.EncFS4Winy で利用している EncFS 1.7.4 にはこのオプションがありません.

The following filename encoding algorithms are available:
1. Block : Block encoding, hides file name size somewhat
2. Null : No encryption of filenames
3. Stream : Stream encoding, keeps filenames as short as possible
 
Enter the number corresponding to your choice:

Linux 側で暗号化ファイルシステム作成時に Block を指定してみたところ EncFS4Winy でマウントできました.Windows 側で作成した領域の Linux でのマウントもOK でした.EncFS4Winy の EncFS バージョンが追従するまでは Linux 側で注意する必要があるようです.
ファイル名については UTF-8 であれば相互問題ありませんでした.

ということで,今度は GUI を試してみます.マウント元の暗号化フォルダと,マウント先のドライブレター,パスワードと入力していくとマウントできました.(コマンドプロンプトからの実行時にはマウント先はドライブレターだけでなくパスも指定可能)

GyazoGyazoGyazo

マウント元の暗号化フォルダに空のものを指定すると新しい EncFS の暗号化領域が作成できます.オプションで paranoia mode が指定できます.

Gyazo

動作は Linux の Cryptkeeper とほぼ同じですね.違いは EncFS4Winy では暗号化FS 作成時のオプションに paranoia mode があって,Cryptkeeper のマウントオプションに自動アンマウントオプションがあるくらいでしょうか.

GitHUB などで検索してみると Mac版の EncFS も複数出てきました.何年も更新されていないものとかもありますが GUI のあるものもあるようです.今手元に環境がないので試していませんがうまく動くようならマルチプラットホームで利用できるかもしれませんね.

awesome wm の時計をカスタマイズ & メニューを最新に追従

20150912_00:09:11-13117

時計をカスタマイズ

デスクトップの右上に時計が表示されますが,秒が表示されません.ここに秒も表示したいです. `awful.widget.textclock() で実現しているようなのでここのパラメーターを変更することで実現できました.

Parameters:
 
format The time format. Default is " %a %b %d, %H:%M ".
timeout How often update the time. Default is 60.

以下のように書き換えました.

-- {{{ Wibox
-- Create a textclock widget
-mytextclock = awful.widget.textclock()
+mytextclock = awful.widget.textclock("%a %b %d, %H:%M:%S", 1)

規定値は %a %b %d, %H:%M", 60 で前半の " で囲ってある部分は date の FORMAT のようなので man date を参照して :%S を末尾に追加,後半の 60 は更新時間(秒)のようなのでこのままでは60秒に1回しか更新されないので1秒単位で更新されるように 1 を指定しました.

メニューを最新に追従するようにする

左上の awesome のメニューの Debian ツリーに導入されたアプリケーションメニューがありますが,awesome 初回実行時にコピーされたものが参照されます.そのためそれ以降に導入,削除したものは反映されません.大元の設定は随時反映されるのでそちらを参照するようにします.

  • 参照しているメニューファイル: ~/.config/awesome/debian/menu.lua
  • 元メニューファイル: /etc/xdg/awesome/debian/menu.lua

自分のホーム以下のメニューは削除してしまってシンボリックリンクを貼ることにします.

% rm -rf ~/.config/awesome/debian
% ln -s /etc/xdg/awesome/debian ~/.config/awesome/debian

メニューのカスタマイズは以下のような感じで rc.lua 内で行うようにしました.数が増えるようならファイルを分けるといいかもしれません.

+fav_menu = {
+   { "Nautilus", "nautilus" },
+   { "Atom", "atom" },
+   { "Chromium privacy", "/home/mk/script/chromium-privacy.bash" },
+   { "mikutter", "mikutter" },
+   { "LibreOffice", "libreoffice" },
+}
+
 mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                     { "Debian", debian.menu.Debian_menu.Debian },
+                                    { "fav", fav_menu },
                                     { "open terminal", terminal }
                                   }
                         })

全体の設定は以下の Gist を参照して下さい.

これまでの awesome 関連のエントリは以下を参照してください.

awesome wm の時計をカスタマイズ & メニューを最新に追従

20150912_00:09:11-13117

時計をカスタマイズ

デスクトップの右上に時計が表示されますが,秒が表示されません.ここに秒も表示したいです. `awful.widget.textclock() で実現しているようなのでここのパラメーターを変更することで実現できました.

Parameters:
 
format The time format. Default is " %a %b %d, %H:%M ".
timeout How often update the time. Default is 60.

以下のように書き換えました.

-- {{{ Wibox
-- Create a textclock widget
-mytextclock = awful.widget.textclock()
+mytextclock = awful.widget.textclock("%a %b %d, %H:%M:%S", 1)

規定値は %a %b %d, %H:%M", 60 で前半の " で囲ってある部分は date の FORMAT のようなので man date を参照して :%S を末尾に追加,後半の 60 は更新時間(秒)のようなのでこのままでは60秒に1回しか更新されないので1秒単位で更新されるように 1 を指定しました.

メニューを最新に追従するようにする

左上の awesome のメニューの Debian ツリーに導入されたアプリケーションメニューがありますが,awesome 初回実行時にコピーされたものが参照されます.そのためそれ以降に導入,削除したものは反映されません.大元の設定は随時反映されるのでそちらを参照するようにします.

  • 参照しているメニューファイル: ~/.config/awesome/debian/menu.lua
  • 元メニューファイル: /etc/xdg/awesome/debian/menu.lua

自分のホーム以下のメニューは削除してしまってシンボリックリンクを貼ることにします.

% rm -rf ~/.config/awesome/debian
% ln -s /etc/xdg/awesome/debian ~/.config/awesome/debian

メニューのカスタマイズは以下のような感じで rc.lua 内で行うようにしました.数が増えるようならファイルを分けるといいかもしれません.

+fav_menu = {
+   { "Nautilus", "nautilus" },
+   { "Atom", "atom" },
+   { "Chromium privacy", "/home/mk/script/chromium-privacy.bash" },
+   { "mikutter", "mikutter" },
+   { "LibreOffice", "libreoffice" },
+}
+
 mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                     { "Debian", debian.menu.Debian_menu.Debian },
+                                    { "fav", fav_menu },
                                     { "open terminal", terminal }
                                   }
                         })

全体の設定は以下の Gist を参照して下さい.

これまでの awesome 関連のエントリは以下を参照してください.