FireGestures でジェスチャーをキャンセルする
2008/05/06 | ラベル: Firefox, Tips | 0 コメント |設定画面に項目がなく、デフォルトで無効になっているのでメモ。
about:config を開き、
extensions.firegestures.gesture_timeout
を 3000 とかに設定する。単位はミリ秒。
設定画面に項目がなく、デフォルトで無効になっているのでメモ。
about:config を開き、
extensions.firegestures.gesture_timeout
を 3000 とかに設定する。単位はミリ秒。
Firefox 3 にしたら、Gmail のフィルタ設定のキーワード欄を複数行にする Stylish のスタイル定義が効かなくなっていた。
このスタイル定義は
-moz-binding: url(http://persistent.info/files/gmail-filter.xml#filter);
のように外部サイトを参照するようになっており、Firefox 3 のセキュリティ強化によりエラーとなってしまう。考えてみれば、外部サイトに置かれたファイルに定義された書き換えルールを使っているっていうのはかなり危険である。ファイルを置き換えられても気付かないだろうし。。。
自分は新バージョンの Gmail に対応するため、XBL ファイルをローカルに置き、
-moz-binding: url(resource:///chrome/gmail-expand-filter.xml#filter);
としているが、これもエラーとなった。
新バージョンの Gmail でこのフィルタを使うにはこちらを参照。
続・Gmail のフィルタ設定のキーワード欄を複数行にする
解決方法は、XBL ファイルを Stylish のクロムフォルダに置くこと。
パスは <Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content
せっかくなので、手順をまとめておく。目的は Firefox 3 & 新バージョンの Gmail で使えることだけど、たぶん Firefox 2 以前、旧バージョンの Gmail でも動くと思う。
<Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content を開き、次の内容を gmail-expand-filter.xml として保存。
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="filter" styleexplicitcontent="true">
<implementation>
<constructor>
var textarea = document.createElement("textarea");
textarea.name = this.name;
textarea.id = this.id;
textarea.value = this.value;
textarea.style.width = "100%";
textarea.style.fontFamily = "monospace";
textarea.style.fontSize = "14px";
textarea.rows = 15;
this.parentNode.replaceChild(textarea, this);
</constructor>
</implementation>
</binding>
</bindings>
Stylish に新しいスタイルを作成し、次のコードを入力する。
@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain("mail.google.com") {
input[name="cf1_has"],
input.MtafId[tabindex="54"],
input.MtafId[tabindex="5"] {
display: none;
-moz-binding: url(chrome://stylish/content/gmail-expand-filter.xml#filter);
}
}
PAM を使った自作アプリ(C/C++)で、ユーザの認証を Active Directory で行う方法を紹介。
C/C++アプリのコーディングでは、Active Directory を意識する必要はなく、単に PAM に問い合わせるだけ。認証方法に依存しちゃったら PAM を使う意味ないしね。ここでは PAM ライブラリを用いたコーディングについては触れません。
アプリのプラットフォームは Linux 。今回は、ユーザの認証だけができればよく、Linuxシステム上にアカウントは存在しなくてよい。というより作りたくない。
手順はたかはしもとのぶ氏の Linux の認証を Active Directory で行なう方法 の通りでOK。また、Windows ActiveDirectory を利用した Linux ログイン認証環境構築時のメモ は Windows と Linux の認証の統合の方法についてよくまとまっている。
これだけ。
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = des-cbc-md5
default_tgs_enctypes = des-cbc-md5
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
TEST.LOCAL = {
kdc = dc1.test.local:88
admin_server = kerberos.example.com:749
default_domain = test.local
}
[domain_realm]
.test.local = TEST.LOCAL
test.local = TEST.LOCAL
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Active Directory 側で、Administrator のパスワードを一度も変更していない場合、kinit に失敗するので注意。
ここで Active Directory で認証できるか簡易なテストをする。Active Directory 上に存在するユーザと同名のユーザを Linux 上にも作る。パスワードは未設定でよい。/etc/pam.d/system-auth の先頭エントリに次の1行を加える。
auth sufficient /lib/security/$ISA/pam_krb5.so
そのユーザで Linux にログインしてみる。成功すると、/var/log/messages に次のようなログが記録される。
Mar 5 16:39:02 localhost sshd: pam_krb5[22867]: authentication succeeds for 'test01' (test01@TEST.LOCAL)
テストが成功したら、/etc/pam.d/system-auth を元に戻し、Linux 上のユーザは削除しておく。
#%PAM-1.0
auth required /lib/security/pam_krb5.so no_user_check
認証のみでユーザが(ローカル)システムに存在するかチェックしなくてよいので、no_user_check オプションをつけること。
あとは C/C++ アプリで認証ができるか確認する。
krb5.conf から引用。HP-UXのだけど、Linuxでも多分同じ。
[realms] ATHENA.MIT.EDU = { kdc = KERBEROS.MIT.EDU kdc = KERBEROS-1.MIT.EDU:750 kdc = KERBEROS-2.MIT.EDU:88 admin_server = KERBEROS.MIT.EDU default_domain = MIT.EDU v4_instance_convert = { mit = mit.edu lithium = lithium.lcs.mit.edu } }
WMIを使ってディスク容量を取得するサンプルはたくさんあるけど、ドライブレターのない論理ボリュームの容量を取得するものがない。また、Win32_LogicalDisk クラスでも取得できない。
いろいろ調べて試した結果、Win32_Volume クラスで取得できることが分かった。以下は「C:\Users\xxx」にマウントしたボリュームの総容量と空き容量を取得する例。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Volume Where Caption = 'C:\\Users\\xxx'")
For Each objItem In colItems
WScript.Echo "Name: " & objItem.Name
WScript.Echo "Capacity: " & objItem.Capacity
WScript.Echo "Free Space: " & objItem.FreeSpace
WScript.Echo
Next
ExecQuery メソッドでは LIKE も使えるので、
Select * from Win32_Volume Where Caption LIKE 'C:\\%'
という書き方もできる。
Windows Vista には Windows デスクトップ サーチ の機能が統合されていて、様々なファイルの検索が可能になっている。デフォルトでは Users フォルダとオフラインフォルダがインデックス登録され、検索可能になっている。
だけど、なぜか自分のドキュメントフォルダに保存したPDFファイルがインデックスに登録されない。Administratorのドキュメントはちゃんと登録されている。インデックス対象の選択画面を開くと、なぜか自分のデータフォルダだけ表示されないではないか。。。どうやら、ジャンクションフォルダはインデックスの対象外っぽい。そういう仕様なんだろう。
自分はデータ領域をシステムドライブと分けたいという性分なので、Documents and Settings フォルダを移動せずに別のドライブにマウントする方法 の手順で自分のデータ領域(C:\Users\xxx)を別ボリュームに分けた。dirコマンドで見てみると、C:\Users\xxx はジャンクションになっている。
試しにデータ領域にしているボリュームにドライブレターを付けると(Uドライブとした)、インデックス対象の選択画面にはそのボリュームが見えるようになる。マウントポイントである C:\Users\xxxはやっぱり見えない。インデックス対象としてUドライブを選択してインデックスを再構築すると、ファイルがインデックス登録されるようになった。しかーし、UドライブとC:\Users\xxxと、2重で登録されてしまう。ださい。。。Uドライブをインデックス対象から外したり、Uドライブのドライブレターを外すと、やっぱりインデックス登録されない。
Vista では正式にシンボリックリンクに対応したということなので、ボリュームのマウントをやめて、C:\Users\xxx を Uドライブへのシンボリックリンクにしてみた。すると、Uドライブをインデックスの対象から外した状態でも、C:\Users\xxx以下のファイルがインデックスに登録されるようになった。でも、今度はインデックス対象を選択する画面で自分のデータフォルダだけでなくUsersフォルダ全部が見えなくなってしまった。。。orz
一応インデックス登録されるようになったし、ファイルの読み書きやアプリの利用など通常利用に問題はなさそうなので、しばらくこれで使ってみるか。。。
ちなみに、Vista でシンボリックリンクを作成するには mklink コマンドを使う。
データ領域をシステムドライブと別にしたいという人は結構いるんじゃないかと思う。自分もDocuments and Settingsフォルダの場所を変更する を参考にしてDドライブに移している。Documents and Settings フォルダ(名前長いよ。。。)は Vista では Users フォルダに名前が変更されている。うん、短くていいね:-)
しかし上記の手順で Documents and Settings フォルダを別ドライブにすると、不具合が出るアプリもある。自分は Windows Media Player がエラーで使えなくなった。DRM関連の設定がレジストリにバイナリ値として「C:\Documents and Settings\...」と設定されていたためだ。念のためレジストリはチェックしていたのだけど、バイナリ値は検索に引っかからなかった。
他にも、Google Earth は Documents and Settings が Cドライブにあるものとして作られているのか、使うたびに Cドライブに Documents and Settings フォルダが作成されてしまっていた。
※今では解消している模様。
さて、これらの問題も変更前のパス( C:\Documents and Settings )でもアクセスできれば解消できると思われる。パスは変更せず、実際のデータは別のドライブに保存される。
これで OK、なはず。自分は試してないので、誰かやってみてください。(ぉぃ...)
一応、Vista で似た手順を踏んで C:\Users\test を別ボリュームにすることはできた。C:\Users フォルダ全体じゃないっす。ただちょっと弊害が残った。詳細別エントリで。。。↓
独自の Windows Vista サイドバー ガジェットを作成する より引用。
JavaScript をかじったことがある方なら、"eval is evil" という言葉を耳にしたことがあるでしょう。ご存じない方は、まず Web で調べてから続きをお読みください。 eval を使用すべきでない理由をおわかりいただけたところで、ここではこの規則に修正を加えて、JavaScript のテキストを HTML 内の属性に配置すべきではないという規則と、setInterval や setTimeout に文字列を渡すべきではないという規則を付け加えたいと思います。JavaScript のテキストを配置してはいけない属性には、body onload 属性も含まれます。この属性は eval ステートメントと同じように内部で解釈されるからです。 "body onload がだめならどうやってコードを実行するんだ" とおっしゃる方もいるでしょう。そのような方には、window オブジェクトの onload イベントに関数をアタッチする習慣を付けることをお勧めします。次のコードは、onload イベントと onunload イベントへのアタッチの方法を示しています。
function pageLoad() { window.detachEvent(“onload”, pageLoad); window.attachEvent(“onunload”, pageUnload); //page initalization here } function pageUnload() { window.detachEvent(“onload”, pageUnload); //gadget is closing, clean up } window.attachEvent(“onload”, pageLoad);
正直「evalステートメントと同じように内部で解釈されるからです」というのもよく分からなかったけど、上記のように書くほうが良いお作法ってことですかね。アタッチする方法だと複数の関数をつけることもできる。上記コードはちゃんと後片付けもしている。なるほど。
Firefox や Opera では addEventListener、removeEventListener を使う。
if (window.addEventListener)
window.addEventListener("load", pageLoad, false);
else if (window.attachEvent)
window.attachEvent("onload", pageLoad);
else
window.onload = pageLoad;
"雷鳥 太郎" <taro@example.com> ↓ taro@example.com同様の拡張で AddressCleaner という拡張があるが、Auto Address Cleaner はメール作成中は表示名は消さず、送信時に表示名を取り除くようになっている。
AddressCleaner | Auto Address Cleaner |
|
|
JSPをWebサーバに配置後、プリコンパイルする方法のメモ。
http://path/to/file.jsp?jsp_precompile
http://path/to/file.jsp?jsp_precompile=true
http://path/to/file.jsp?foo=bar&jsp_precompile=true
Ant のことはよく分からないし、そのまま使えるサンプルが見つからなかった。Lambda Probe は Tomcat の管理/管理ツールとのことで良さげ。Tomcat 4.x には未対応。
ローテクながら、1つめの方法をとることに。
JSPファイルを find で列挙して sed で URL 加工、wget でアクセス。
Blogger にログインした状態でアクセスしたときだけ処理を実行する方法を、Google Analytics の自己アクセス除外設定に応用する。
Google Analytics で自己アクセスを除外する設定は Google Analytics のレポートから内部トラフィックを除外する方法 でできたのだが、ひとつ困ったことがある。
このサイトは Blogger を利用しているのだが、自分だけがアクセスできるページを作成できない。Google Analytics で自己アクセスを除外する設定をかいつまむと、こうだ。
除外用 Cookie を他人が受け取っては意味がないので、自分だけがアクセスできるページが必要ということなのだが、Blogger では公開か下書きかの2通りしかなく、隠しページのようなものを作成することはできない。
ダミーの記事やウィジェットを作成し、公開→アクセス→すぐに削除とすれば Cookie を設定できるが、手順が面倒だし Webアプリ作ったりしてると Cookie を削除することも結構あるのでますます面倒である。
そこで、Blogger にログインした状態でアクセスしたときだけ処理を実行する方法を応用する。これを使えば、Cookie を削除したり別の PC を使った場合でも、Blogger にログインしてアクセスしさえすれば、除外用 Cooke を設定することができる。
ダミーの span 要素とその display 属性をチェックするコードを前の記事のように埋め込む。処理の部分に、除外用 Cookie を発行するコードを書くだけだ。
<script type='text/javascript'>
function hoge() {
var element = document.getElementById('hoge'), value;
if ( window.getComputedStyle ) // Firefox, Opera
value = window.getComputedStyle(element, null).display;
if ( element.currentStyle ) // IE
value = element.currentStyle.display;
if ( value != 'none' )
pageTracker._setVar('test_value'); // 除外用 Cookie の設定
}
</script>
最後に、ページが表示されたら上記のコードを実行するよう、body要素を変更する。
<body onload='javascript:hoge();'>
これで、logger にログインしているときにアクセスすると除外用 Cookie が設定されるようになる。まー正直、ここまでやんなくてもと自分でも思うが。
ただ Blogger にログインしているかどうかで処理を変えたいというのは需要がありそうな気もする。Blogger Developers Network を探したが、ログイン中だけコードを出力するようなタグや機能はなさそうだった。
Blogger にログインした状態でアクセスしたときだけ表示する方法の応用。
クイックエディットアイコンは以下の span 要素の内側にある。
<span class='widget-item-control'>
<span class='item-control blog-admin'></span>
</span>
ログイン中だと内側の span 要素の display 属性が inline になり、ログインしていないときは none になっている。この状態をチェックすることで、ログインした状態でアクセスしたときだけ処理を実行することができる。
上記の要素には ID がないので、固有の ID をつけたものをテンプレートに直接埋め込んでおく。
<span class='widget-item-control'>
<span class='item-control blog-admin' id='hoge'></span>
</span>
次に、id='hoge'
な要素の display 属性をチェックして、属性が none でないときに処理を実行するような JavaScript を書く。
<script type='text/javascript'>
function hoge() {
var element = document.getElementById('hoge'), value;
if ( window.getComputedStyle ) // Firefox, Opera
value = window.getComputedStyle(element, null).display;
if ( element.currentStyle ) // IE
value = element.currentStyle.display;
if ( value != 'none' ) {
// ここに実行したいコードを書く
}
}
</script>
getComputedStyle
, currentStyle
は、現在その要素に設定されているスタイルを取得するもの。
これで、ログイン中のときのみ、何らかの処理を実行させることができる。これを使って、Google Analytics で自己アクセスを除外するための Cookie を設定する方法を改良する。
詳細は次回。
Blogger にログインした状態で自分のブログを見ると、各ウィジェットの右下にクイックエディットのアイコンが表示される。(テンプレートによっては表示されない場合もある)
ログインしていない状態ではクイックエディットのアイコンは表示されないが、HTML コード自体は出力されていて、display: none
で見えなくなっているだけである。
クイックエディットアイコンは、次のような span 要素の内側にある。
<span class='widget-item-control'>
<span class='item-control blog-admin'>
今 Blogger にログイン中です。
</span>
</span>
上記のようなコードを記述すれば、ログインした状態のときのみメッセージ等を表示させることができる。
Google Analytics ではフィルタ機能を使うことで内部アクセスを除外することができる。アクセス元を特定する方法としては3つの手段を提供している。
企業や固定IP、ドメインを持つ場合は1または2で簡単に設定できる。そうではない場合は、ちょっと工夫がいる。
ネット環境が DSL だったり、FTTH 接続でも固定 IP じゃない場合は、自分の IP アドレスが変化するので IP 指定で除外しにくい。プロバイダによっては変化する IP アドレス範囲の特定が難しい場合もある。ドメイン名もしかり。
変化する IP アドレスの範囲が分かっていて、ご近所さん(そのIPアドレス範囲のユーザ)からのトラフィックも除外してしまって OK ならば、2の方法を使うことができる。
きっちり自分のトラフィックのみ除外したい!という人は、3のカスタムフィルタを選び、Cookie を設定することになる。ヘルプセンターに FAQ として設定方法が載っているが、フィルタパターンに何を入力すれば良いか説明がない。
Google ヘルプセンター: レポートから内部トラフィックを除外するにはどうすればよいですか。
結論は、test_value
と入力すれば良い。
ヘルプでは以下のコードを埋め込むよう説明されているが、赤字の部分と同じ文字列を入力すればオッケー。
<body onLoad="javascript pageTracker._setVar('test_value');">
シングルユーザモードのときは、パスワードを求められないものと思っていたが、debianを使ってみてそうではないことを知った。sulogin と init (, inittab) がキーワード。
RHEL の sulogin の ManPage の説明。
sulogin は、シングルユーザモードの時、ユーザがシステムにアクセス可能となる前に、 /etc/init によって起動される。この機能は、init が適切に変更されているシステムか、あるいは /etc/inittab にシングルユーザ login のエントリがあるシステムでのみ利用できる。
... snip ...
このコマンドが利用できるようにするには、init が /bin/sh ではなく sulogin を呼ぶようになっているか、または inittab 中にシングルユーザ ログインに対する設定がされている必要がある。例えば、
co:s:respawn:/etc/sulogin /dev/console
という行を書いておけば、シングルユーザモードでは sulogin コマンドが実行される。
/etc/inittab の書式は id:runlevels:action:process なので、上記によれば /etc/sulogin が起動するプロセスになる。RHEL では /etc/sulogin はなく、/sbin/sulogin なので、正しくは以下。
co:s:respawn:/sbin/sulogin /dev/console ・・・・・(1)
しかーし。上記ではうまく動かず。今度は init の ManPage を見てみる。ブートの項ではこう書かれている。
ランレベルを S または s にすると、システムはシングルユーザモードに入る。この場合は /etc/inittab ファイルを必要としない。シングルユーザモードでは、/dev/console で /sbin/sulogin が起動される。
さらに、ブートフラグの項ではこう書かれている。
ブートモニタ (例えば LILO) から init に様々なフラグを渡すことが可能である。 init は以下のようなフラグを受け付ける:
-s, S, single
シングルユーザモードでブートする。このモードでは /etc/inittab を
参照する。またシングルユーザモードのシェルが起動される前に
ブートアップ rc スクリプトが実行される。
まとめると、
となりそうだが、実際は常に /etc/inittab が参照されてるっぽい。本題の、「RHELでシングルユーザモードのログインにパスワードを求める」には、/etc/inittab にこう記述する。
~:S:wait:/sbin/sulogin ・・・・・(2)
(1) ではだめで、(2) とすると期待した動きになる。
debian の場合、/etc/inittab に以下を記述するらしい(未確認)。
~~:S:wait:/sbin/sulogin
はてなの方に Blogger の場合のサンプルが載っているけど、情報が古いようで現在の Blogger では使えない。以下のようにするとおっけー。
<a expr:href='"http://b.hatena.ne.jp/entry/" + data:post.url'> <img alt='このエントリーを含むはてなブックマークを表示' expr:src='"http://b.hatena.ne.jp/entry/image/" + data:post.url' title='このエントリーを含むはてなブックマークを表示'/> </a>
各エントリにソーシャルブックマークへの追加ボタンをつける方法。
ソーシャルブックマークへの追加ボタンは AddClips で簡単に作成できる。Bloggerなら作成したコードを貼り付けるだけでOKらしいけど、そのまま貼り付けてもうまくいかなかったのでメモ。
AddClipsUrl = '<data:post.url/>';
AddClipsTitle = '<data:post.title/>';
URLとタイトルのところは上記のようにしたらうまくいった。他の部分も、シングルクォートは '
と文字実体参照で記述する。(コピペして保存すれば勝手に変換されたと思う)
あとはボタンの表示位置が微妙に上にずれていて見た目が良くないので、span要素でくくって位置調整。
.post-bookmark a img {
vertical-align: bottom;
}
Microsoft OfficeそっくりのオンラインOfficeアプリ。
Think Free Office
これもDeki wikiが利用している。 Think Freeをホストしているサーバにキャッシュとかで中身保存されていないのかちょっと心配。
Lucene(ルシーン)は Javaで書かれた全文検索のライブラリ。DekiWiki が利用している。
DekiWiki、もうちょっと軽快ならいいんだけどなー。
Lucene のサンプルコードなどは 関口宏司のLuceneブログ が充実している。Lucene本の著者さんですね。
fml 3.0 (かなり古いが。。。)だと 7. SECURITY & FILTERING にてメール受信の最大サイズを設定できる。任意の値ではなく、あらかじめ決められた値の中から選択する形。
IEでは無視されるが、NetscapeやFirefoxでは同一の証明機関から発行された証明書で同一のシリアル番号があった場合、無効になるらしい。ちゃんとした認証機関から発行してもらっている分には問題ないが、自己認証局でオレオレ証明書を作ってる場合はミスする可能性もあるかも。
Gmail では
という規則があって、たとえば以下のメールアドレスは同じと解釈される。
Gmailユーザでは + を使ってアドレスを(擬似的に)複数使い分けている人も多いと思う。これと同じようなことを Postfix でも簡単に実現できる。
main.cf に以下を追加するだけで、上記の例のように + 以降を無視することができる。
recipient_delimiter = +
qmail でも同様の設定が可能とのこと。
ログインプロンプトが表示されるとき、RHELでは画面がいったんクリアされるが、Debianではクリアされず以前の画面表示内容が残ったままになる。RHELで/etc/rc.localでメッセージを表示したい場合、画面がクリアされないようにログインプロンプトのオプションを変更する必要がある。
RHELのリファレンスマニュアルのブートプロセスの詳細を参照すると、
initコマンドがそのランレベルに適切なrcディレクトリを通過すると、/etc/inittabスクリプトは、ランレベルに割り当てられた各仮想コンソール(ログインプロンプト)用に /sbin/mingettyプロセスをフォーク(分岐)します。ランレベル2から 5は 6つの仮想コンソールをすべて持ちますが、ランレベル1(シングルユーザーモード)は1つしか持たず、ランレベル 0 とランレベル 6は仮想コンソールがありません。/sbin/mingettyプロセスは通信経路をttyデバイス[2]に対して開き、そのモードを設定、ログインプロンプトを表示、ユーザーのユーザー名とパスワードを受け取ってからログインプロセスを開始します。
とある。/etc/inittabに、ログインプロンプトを仮想コンソールに表示する/sbin/mingettyの記述があるということだ。
man mingetty でmingettyのマニュアルを見てみると、--noclear とか --noissue というオプションがあるのがわかる。おそらく Debian では --noclear オプションが指定されているのだろう。(未確認)
/etc/inittab を開き、tty1 の mingetty に --noclear オプションをつけて保存(必要に応じて他のttyも変更)。
表示させたいメッセージは /etc/rc.local に書くと良い。ログインプロンプトが表示される毎にメッセージを表示したいなら、/etc/issue に書く。
echo
echo -e "\033[1mThis is sample message."
echo
echo " sample sample sample"
echo -e "\033[0m"
\033[1m
から \033[0m
までの文字は強調表示される。
Gmail のフィルタ設定のキーワード欄を複数行にする では、新しいバージョンの Gmail で動かない。新しいバージョンでも動くようにしたときのメモ。
Firebug で見てみると、新しいバージョンの Gmail では、キーワードの入力欄の name 属性値が設定されていないことがわかる。
id は設定されているのだが、これが可変のようでうまくいかない。
かわりに tabindex 属性が使えそうだなと思ったら、既に投稿されていた。
新バージョンになっていない日本語表示でも使う場面がまだあるので、上記サイトの情報と以前の input[name="cf1_has"]
を組み合わせて以下のようにしてみた。
@-moz-document domain(mail.google.com) {
input[name="cf1_has"],
input.MtafId[tabindex="54"],
input.MtafId[tabindex="5"] {
display: none;
-moz-binding: url(http://persistent.info/files/gmail-filter.xml#filter);
}
}
これで OK、と思ったら、表示は拡張されてもボタンが効かなくなった。。。
入力欄の id が書き換えによってなくなってしまうからだ。
-moz-binding
のところで指定されているファイル(XBL ファイルというものらしい)を修正する必要がある。XBL ファイルに以下のように赤字部分を追加。
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="filter" styleexplicitcontent="true">
<implementation>
<constructor>
var textarea = document.createElement("textarea");
textarea.name = this.name;
textarea.id = this.id;
textarea.value = this.value;
textarea.style.width = "100%";
textarea.style.fontFamily = "monospace";
textarea.style.fontSize = "14px";
textarea.rows = 15;
this.parentNode.replaceChild(textarea, this);
</constructor>
</implementation>
</binding>
</bindings>
XBLファイルをローカルで動かしている Apache から参照できるように配置、-moz-binding
の URL を変更。新旧両方のバージョンで動くことを確認した。
XBLファイルの置き場所はローカルでもWebサーバ上でも良いみたいだが、ローカルに置いてみたところ、セキュリティエラーが発生して動作しなかった。プロファイルフォルダとかクロムフォルダの下に突っ込めばいいのかな。誰か教えてください。
本家が XBLファイルを更新してくれれば一番なんだけど。
(2008年2月3日追記)
C:\Program Files\Mozilla Firefox\chrome
に XBL ファイルを置いて
-moz-binding: url(resource:///chrome/gmail-expand-filter.xml#filter);
とすると Webサーバも不要でいい感じ。
ちょうど 9時間進んだ状態になっている。BIOS 画面で JST の時刻に合わされているのを確認しているので、UTC を使用するようになっている模様。RHEL でいうところの「システムクロックで UTC を使用」を選んだのと同じかな。タイムゾーンは「Asia/Tokyo」になっているので、UTC を使うようになっているのだろう。debian では /etc/default/rcS にその設定があるということなので、変更。
UTC=no
OS をリブートしたが、変わらず。。。ハードウェアクロック(BIOSの時刻)にシステムクロックが反映されてしまったようだ。BIOS で時刻を正しく設定し直して、解決。
ちなみに、タイムゾーンは tzconfig コマンドで確認、変更できる。
Linux でファイルシステムを暗号化する必要があったので試してみたメモ。
Linux, 暗号化, ファイルシステムでググると debian の情報が多くヒットした。debian はインストール時に暗号化ファイルシステムを選べるようだ。ということで初めて debian を使ってみた。
RHEL などの DiskDruid と比べて非常に使いづらく感じた。LVMとか暗号化ボリュームとか、内部に論理パーティションを作ると削除できないし。仕方なしに別のターミナルからコマンドで削除するはめに。。暗号化ボリュームのキーとして「乱数値」が選べるが、パッケージ不足とやらで作成できず。ネットワークインストールだったからかも。とりあえずキーはパスフレーズにしてなんとかインストール完了。
パーティションはこんな感じ。
- /boot (ext3) - 暗号化ボリューム - LVM - swap - /home (ext3) - LVM - / (ext3)
暗号化ボリューム内に LVM で swap と /home を作成した。ブート時(というか暗号化ボリュームのマウント時)にパスフレーズの入力を求められる。正しいパスフレーズを入力するとマウントされる。
パスフレーズ以外に、キーファイルを読み込ませて認証(ん?認証という言い方でよいのか?)することもできる。
# dd if=/dev/urandom of=/boot/keyfile bs=1 count=1024
乱数を使って 1024バイトのファイルを生成。これをキーファイルとして使う。 キーファイルは暗号化ボリュームでないところに置く。今回は /boot に置いた。
作成したキーファイルをキーとして登録する。
# cryptsetup luksAddKey /dev/sda5 /boot/keyfile Enter any LUKS passphrase: ←最初のパスフレーズを入力 key slot 0 unlocked. ←「slot 0」のパスフレーズで解除した Command successful.
キーファイルが登録されたか確認。
# cryptsetup luksDump /dev/sda5 LUKS header information for /dev/sda5 Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 2056 MK bits: 256 MK digest: de e1 10 fe 4b d9 a0 b7 20 ff 7e cb aa 4d 36 a1 bf 85 92 8a MK salt: ee 56 07 6a 24 ca 83 f2 57 97 83 1d 74 c2 ce f6 5c 35 ee 07 e8 02 05 7e 84 f0 ec 00 77 21 39 5d MK iterations: 10 UUID: 62c33609-06cd-48d8-a5d7-214df4fa9057 Key Slot 0: ENABLED Iterations: 115017 Salt: 3f dc 4b cc 61 81 64 89 17 02 b5 bc c6 ae c8 93 e0 e9 f2 be 9a f9 74 24 3e 7f 1b be 6e 53 b1 6a Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 65900 Salt: 06 20 15 74 24 36 bd 71 8c a7 e2 66 9b e5 2a 8b 21 53 4a 89 36 e9 5d a2 c6 63 4c 1b 5d d1 9d c4 Key material offset: 264 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
slot 1 にキーファイルが登録された。
今はマウントしている状態なので、アンマウントする。 今回の構成では、 暗号化ボリューム → LVM → ファイルシステム という階層で構成されているので、逆順でアンマウントしていく。
# umount /home # swapoff -a # lvchange -a n /dev/VolGroup00/home # lvchange -a n /dev/VolGroup00/swap # cryptsetup luksClose /dev/mapper/sda5_crypt
登録したキーファイルで sda5_crypt をマウントする。
# cryptsetup luksOpen /dev/sda5 sda5_crypt --key-file /boot/keyfile key slot 1 unlocked. Command successful.
キーファイルでマウントできることが確認できた。swap と /home をマウントしておく。
# lvchange -a y /dev/VolGroup00/home # lvchange -a y /dev/VolGroup00/swap # mount /home # swapon -a
OS起動時に自動でマウントできるように設定する。
/etc/default/cryptdisks を編集。
# Mountpoints to mount, before starting cryptsetup. This is useful for # keyfiles on removable media. Seperate mountpoints by space. CRYPTDISKS_MOUNT="/boot"
/etc/crypttab を編集。
sda5_crypt /dev/sda5 /boot/keyfile luks
自動マウントできるかテストする。まず暗号化ボリュームを再度アンマウントする。 次に、/etc/init.d/cryptdisks を実行する。
# /etc/init.d/cryptdisks start Starting remaining crypto disks... sda5_crypt(starting)INSECURE MODE FOR /boot/keyfile, see /usr/share/doc/cryptsetup/README.Debian. key slot 1 unlocked. Command successful. done.
INSECURE だ、と警告が出たが、マウントは問題なし。README.Debian に書いてあるようにキーファイルのパーミッションを 400 にすると、警告は出なくなった。
# chmod 0400 /boot/keyfile # /etc/init.d/cryptdisks start Starting remaining crypto disks... sda5_crypt(starting)key slot 1 unlocked. Command successful. done.
あとは OS 再起動で自動マウントされることを確認して終わり。
Stylish を使って Gmail のフィルタ設定のキーワード欄を複数行にする。
@-moz-document domain("mail.google.com") { input[name="cf1_has"] { display: none; -moz-binding: url(http://persistent.info/files/gmail-filter.xml#filter); } }
改行も保存されるので編集しやすい。
(追記)
新しいバージョンの Gmail に対応したものはこちら。
続・Gmail のフィルタ設定のキーワード欄を複数行にする