2月 242014
 

本題に入る前、一点。
FreeBSD の ports の KDE4 が kde-4.12.2 になりましたなぁ。今までは /usr/local/kde4/ にインストールされていたのですが、このバージョンからは /usr/local/ にインストールされるようになりました。僕の環境では 130 個弱の ports の再インストールが発生しまた。けど、これでようやっと、独自ディレクトリから開放されるぞぉー。って感じです。

と、いうことで本題。

KDE4 をインストールすると default のブラウザに konqueror がインストールされます。それとは別に他のブラウザをインストール、例えば rekonq をインストールするとします。

konqueror も rekonq もユーザエージェントを偽装できる機能を持っています。例えば FreeBSD のこれらのブラウザでアクセスすると「あんたのブラウザでは全部の機能が動作しない。」とか「最新のブラウザではないので利用できない。」などと蹴られる場合があり、以降の表示を止めてしまうウェブサイトがあったりします。

まぁ、仮に表示されたとしても確かに正しく動作しない場合なんかもあったりするんですけどねf(^^;;。

https://profile.microsoft.com なんかは UserAgent を IE11 に偽装したとしても正しく表示できなかったりしますが、それは konqueror や rekonq などのブラウザが対応していないので正常動作しない。と、いうことですね。

 
さてさて。それにしもブラウザでユーザエージェントが選べるのに表示される情報がどれもこれも古いバージョンで困ってしまいます。

konqueror_ua_1

これを最新のバージョンに変更できないのかなぁ? とか思いソースコードを眺めるのですが、ふむ。ブラウザは KDE コンポーネントを見ているようで、ブラウザのソースコードには無いようです。

KDE 的には konqueror も rekonq はコテコテの KDE・Qt アプリなので、共通な機能については共通コンポーネントを使うようになっており、一個のパーツを色々なアプリで利用するってが仕様のようです。例えば Proxy とか キャッシュなども KDE4 の複数のアプリで共有するコンポーネントです。

ブラウザの UserAgent 偽装機能も一緒で konqueror も rekonq もユーザエージェントの設定はコンポーネントが一緒です。
では、その場合ソースコードがどこにあるのか? ですが、見つけました。 FreeBSD の ports 的には以下になります。

x11/kde4-baseapps/work/kde-baseapps-4.10.5/konqueror/settings/kio/uasproviders/

ここに *.desktop というファイルがたくさんあり、ブラウザのバージョンごとの情報を持っているフアイルが複数あります。
これらはインストールすると以下のディレクトリにインストールされることが解りました。

/usr/local/share/kde4/services/useragentstrings/

ここに最新のブラウザに対応した .desktop ファイルを置いてあげると次回起動時にはそのファイルを読み込んで最新のバージョンのユーザエージェントが利用できるようになります。

せっかくですので firefox-24.0 と MSIE-11.0 の .desktop ファイルを作成したので、利用してみたいと思う方は以下の URL から持って行ってください。

http://icmpv6.org/Prog/KDE/firefox240oncurrent.desktop
http://icmpv6.org/Prog/KDE/ie110onwinnt61.desktop

これで konqueror や rekonq では最新の他のブラウザとして動作することができるようになりました。パチパチパチ。ただ、ユーザエージェントの情報が変わっただけで、上にも書いている通り、正しく表示・機能しないウェブサイトがたくさんあることに違いが無いのでご注意ください;-)。

 
さてさて。ここからは付録に近いのですが、 Qt 系ブラウザとして arora というブラウザがあります。 ports 的には www/arora になるんですけども。こいつのユーザエージェントが更新されてないのでソースコードも眺めてみました。すると arora の場合は独自にソースコード中に書いているようですね。以下の xml なファイルで定義しているようです。

arora-0.11.0/src/useragent/useragents.xml

もし、 arora を利用している人でユーザエージェントを最新のブラウザに偽装したい場合には上記のファイルを編集してコンパイルし直せば良いと思われます。

arora は Qt を利用しているけど、 KDE にベッタリ。ってことは無い独自路線のウェブブラウザ。ってことなんですねぇ。

今回はちろっと KDE4 の構成的な説明と、ブラウザのユーザエージェント偽装のためのネタでした。

2月 062014
 

僕はデスクトップに KDE4 を利用しているのですが、 JKUG の日本語化チームとは別に自分で利用する KDE アプリで、日本語化されていないものをコツコツと個別に翻訳しています。

例えば rekonq という konqueror を再定義し直した KDE・Qt ライクなブラウザがあるのですが、こいつはソースに日本語 po ファイルが付いてこないのでメニューなどが英語で表示されます。

まぁ、 konqueror を再定義しただけのことはあって konqueror よりは rekonq のほうが使いやすいかなぁ。とは思う点が多々あるので僕は利用しているんですけども、いかんせん日本語化されてないので、しょーがねぇなぁ。自分で po ファイル書くかぁ。などと思いコツコツと日本語化しているのであります。

僕が今まで日本語化した po ファイルは以下の URL に置いてあるので良かったら持って行ってください。

http://icmpv6.org/Prog/ja.po/

rekonq-2.4.2 に対応した po ファイルの最新版は rekonq-2.4.2-20140205_1.po になります。

 
さてさて。翻訳していて一番大変なのはバージョンアップした時ですね。
新規に po ファイルの翻訳をするのであれば、とある言語の po フアイルを引っ張ってきて Language: とか を ja に変更して、翻訳を開始していけば良いのですが、バージョンアップが発生したときはどうするの?とかになるわけです。

以下、作業手順。あ。僕が個別にどの翻訳グループにも属していないのでこのような手順を踏んているだけで、もしかしたらちゃんとしたもっと効率の良いやり方というのがあるのかもしれませんが・・。その場合は、教えて頂ければ幸いです。

1). 新しいバージョンの po ファイルを取得
2). 以前に翻訳した po ファイルをエディタで開く
3). 新しいバージョンの po ファイルをエディタで開く
4). 新しいバージョンの po ファイルの msgid に以前翻訳した msgstr をペースト
5). 新規に出てきた未翻訳の msgid を翻訳
6). やっと完成。ふぅ・・

なんていう、クラクラするような作業をしなければならずほんとにイヤになる・・。もっと効率的なやり方は無いんかな?

 
と、いうことで考えた技は以下の通り。 UNIX コマンド使いまくりだぁ;-)。 効率よく po ファイルをバージョンアップする技を考えてみました。

・新しい po ファイル: rekonq-2.4.2.po
・古い po ファイル: rekonq-2.3.2.po

ソースコードに日本語の po ファイルが無い場合には他の言語の po ファイルを日本語として使いまわします。 rekonq の場合は po/sv/rekonq.po を利用して rekonq-2.4.2.po としました。

1). msgid の抜き出し

$ cat rekonq-2.3.2.po | grep ^msgid > rekonq-2.3.2.po_msgid
$ cat rekonq-2.4.2.po | grep ^msgid > rekonq-2.4.2.po_msgid
$ diff -ur rekonq-2.3.2.po_msgid rekonq-2.4.2.po_msgid > msgid.diff

 
これで新規に追加になったメッセージと削除されたメッセージの差分が出てきます。
diff ファイルで “+” の部分は新しく登録された msgid で “-” の部分は削除された msgid です。

 
2). diff 結果の取り込み

$ cp rekonq-2.3.2.po rekonq-2.4.2_New.po
$ mule rekonq-2.4.2_New.po

 
rekonq-2.3.2.po は以前に翻訳したファイルなのでそれを最新版にします。そのために msgid.diff の差分を新しく用意した rekonq-2.4.2_New.po に反映して行きます。
“+” で表示されている msgid とその関連する部分は追加し “-” の部分の関連する情報は削除していきます。ガシガシしていきます;-)。 po ファイルには「ソースコードの何行目」なんていうコメント行がありますが、とりあえずそんなのは無視していきます;-)。

以上はエディタで編集する必要がありますが、これで新旧の情報がマージされた po ファイルが完成です。ちっこいバージョンアップだと差分が少ないので po ファイルの更新も楽ちんです;-)。

 
3). 翻訳者支援アプリ
テキストエディタで直接 po ファイルを更新しても良いとは思うのですが、何か支援 AI ではなく、支援ソフトは無いんかなぁ? とか思って調べてみると ports に editors/poedit というのがありますね。 GTK アプリで GUI で利用できそうです。こいつをインストールして起動してみます。

起動したら rekonq-2.4.2_New.po ファイルを読み込みます。すると翻訳可能な状態になります。キャプチャはありませんが、左側が msgid で、右側が msgstr です。 msgstr が空白な部分が翻訳されていない文字列になるのでそれをベコベコ打ち込んでいけば良いかと思われます。
日本語文字入力時に emacs キーバインドが利用できないのが痛いんだけど、GTK2 の emacs キーバインドの設定すれば良いんかなぁ?今度試してみよう。

 
GUI 的なモノで msgid を google 翻訳で翻訳してその結果を msgstr に表示するヤツとかあるんかなぁ? google の textproc/translate-toolkit なんかはその類なのかな? python のコマンドラインツールなんてのは使いたく無いんだけど;-P。

 
poedit は Windows 版 Mac 版もあるようです。編集した po ファイルを保存すると msgfmt も実行してくれるのでいきなり mo ファイルが生成されます。あとはそれを share/locale/ja/LC_MESSAGES/ 辺りにほーりこんで rekonq を再起動すると確認ができます。

 
翻訳用の po ファイルに対する新旧二つの情報のマージって、もっと他に何か画期的な方法・手段ってあるのかなぁ? google で探したけど見当たらなくて、結局 diff してその差分を古いバージョンの po フアイルにマージって方法にしたんだけど・・。

もしかして、本家にマージされた po ファイルは既に差分が吸収された状態でリリースされるとか?そんな便利な世の中ならドンドン本家にマージしたほうが良いなぁ。

それにしても翻訳の方法はこれで良いのかな?

2月 012014
 

このブログのとあるエントリにコメントを頂きました。 URL 的にはこれになるんですけども。

http://running-dog.net/2013/11/post_829.html#comment-36710

たまたま偶然なのかもしれませんが、以前私が日本語 po フアイルを書いた wifimgr が FreeBSD 9.2-RELEASE では動作しなくなったのだけど原因解りますか? と、いうモノです。
ちなみに今回は全然関係ありませんが、日本語 po ファイルは wifimgr の作者送り、採用されています;-)。

 
まず最初に wifimgr のソースコード眺めてみましたが、こいつは小さいプログラムなので簡単でしたね。ただ GTK の部分は全くわかりませんが、今回は GTK の部分はとりあえず置いておくことができそうです。そんな感じでソースコードを眺めたのですが wifimgr は GUI のボタンを押すと system() で ifconfig とか /etc/rc.d/ の下のスクリプトを実行していることが解りました。

 
そして wifimgr のソースコードを眺めてみるとだいたいが /etc/rc.d/netif を起動して、その戻り値でエラーをはいて停止してしまうことが解りました。

次に 9.1-R と 9.2-R の /etc/rc.d/netif を diff してみましたが、大きな相違点としては、 9.2-R では /etc/rc.d/routing を呼ぶようになった部分が怪しいです。実際に 9.1-R の /etc/rc.d/netif を 9.2-R に持ってきて wifimgr を起動すると無事に動作しました。あいや。するっていと原因は本当に /etc/rc.d/routing だねぇ。と、更に特定できました。

 
あとは IRC で教えてもらった以下の設定を /etc/rc.conf に仕込んで /etc/rc.d/routing の動作確認です。

rc_debug="YES"

 
そして /etc/rc.d/routing のあちこちに logger コマンドを仕込んで変数の値を /var/log/messages に出力させます(他にも /etc/rc.subr や /etc/network.subr も見る必要がありますが)。

/etc/rc.d/routing は以下のコマンドオプションで実行されているようですね。

# /etc/rc.d/routing start any wlan0

 
さてさて。原因の特定ですが、以下の行にあることが解りました。

    43          ""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
    44                  for _a in inet inet6 ipx atm; do
    45                          afexists $_a && setroutes $_cmd $_a $_if
    46                  done
    47                  ;;

 
44 行目で inet inet6 ipx atm を定義して 45 行目で static_hoge として呼び出しているのですが inet6 を実行すると戻り値がおかしくなるらしく、その戻り値が /etc/rc.d/routing の戻り値として wifimgr に戻ってエラーになって終了するようです。
実際に

・44 行目の inet6 を消すと無事に動作する。
・45 行目の下に logger コマンドを入れると無事に動作する。
・routing_start() の終了時に return 0 を追加すると無事に動作する。

となりました。
このことをとある方にご連絡したところ、以下のパッチを書いてくださいました。多分次のリリース及び STABLE や freebsd-update では更新されるのではないかと思われます。

以下、頂いたパッチを先行して公開します。 FreeBSD 9.2-RELEASE で wifimgr を使っているが正常に動作しなくて困っている方は適用してみてください。

Index: etc/rc.d/routing
===================================================================
--- etc/rc.d/routing    (revision 255154)
+++ etc/rc.d/routing    (working copy)
@@ -42,7 +42,8 @@
                ;;
        ""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
                for _a in inet inet6 ipx atm; do
-                       afexists $_a && setroutes $_cmd $_a $_if
+                       afexists $_a || continue
+                       setroutes $_cmd $_a $_if
                done
                ;;
        *)

 
これで無事に動作するようになると思われます。 wifimgr のほうもソース修正しなくとも良い(バージョンを見て実行するコマンドオプションを変えるのもつらいべ)のではないかと思われるので一安心です;-)。

あとで wifimgr の作者にメールしようと思います;-)。

あ。最後にですけど、 static_inet6() の戻り値がぶっ壊れる(っぽい)原因は詳しくは調べていません。もしかしたら FreeBSD の rc スクリプトが原因ではなく、僕が設定した /etc/rc.conf の IPv6 の設定がおかしくてそれが原因で正しく処理されずに戻り値が壊れて、結果的に /etc/rc.d/routing の戻り値がエラーになるのかもしれません。その場合、原因は僕にありそうですねf(^^;;。

11月 032013
 

OS X Mavericks にしてしばらく使っていたのですが、 iTunes は iOS デバイスとカレンダー同期してくれなくなったんですね。iTunes の[概要]タブから「スケジュール」の項目が消えています。
と、いうことは iCal のスケジュールの情報は iCloud 経由で同期しろ。ってことなんですね。いやー。Apple も google みたいなことしてくれますなぁX-(。

このブログにも以前に書いているのですが、スケジュールは google に預けたくないし、当然 Apple にも預けたくない。そーいう人にとって、今回の Mavericks の iTunes の仕様変更は改悪ですね。困った困った。

さて、ではどうするか? と言えば、僕は自分で CalDAV サーバを持っているのでそれを利用することにしました。

CalDAV サーバを Mavericks の iCal と iPhone4・iPhone5、あと Thunderbird の Lightning からアクセスして参照・更新すれば一応は OK な状態になりますね。

今までは家の中専用で利用していた CalDAV サーバを SSL 化してグローバルからでもアクセス可能な状態にします。そして、 iCal・iPhone4・iPhone5・Lightning から接続テストをしてみます。が、 iOS もかぁなりクセがありますね。けっこう orz 的な事態になったのであります・・。orz。

今回はこの辺りの顛末についてちょっと書いてみます。

1. CalDAV の SSL 化
CalDAV 自体のインストールと設定については以前のエントリに書いたのでそっちを参照してください。あ。一点だけ。
古いバージョンの davical-0.9.9.4 から davical-1.1.1 にバージョンアップするとデータベースの互換性がなくなるようで、サクっと portmaster とか走らせると痛い目に遭います。
iCal とか Lightning で ics 形式のバックアップを取ってから davical とか postgresql などを一旦消してバージョンアップして、1.1.1 で動く状態にしてからバックアップした ics ファイルをインポートすると今度はサクっと動くようになります。 postgresql にデータが残っている状態でバージョンアップして『それを潰さないように』などと思っているとダメっぽいです。

さて本題。 CalDAV サーバと言っても基本的には httpd を httpsd とするだけなので、あと、自分しか利用しないのでヲレヲレ証明書で行きます。 FreeBSD 的には以下のコマンドを打つだけで簡単に SSL 化できます。

# cd /etc/ssl
# openssl genrsa -out ./server.key 2048
# openssl req -new -x509 -days 3650 -key server.key -out server.crt
# openssl x509 -in server.crt -out server.der -outform DER
# cd /usr/local/etc/apache22/
# ln -s /etc/ssl/server.crt
# ln -s /etc/ssl/server.der
# ln -s /etc/ssl/server.key

 
server.crt を作成する場合に色々聞かれてきますので値を入力します。server.der はブラウザにインストールするといちいち「このサイトは怪しいぜぃ。」って聞かれなくなります。

このオペレーションだと apache22 の SSL 化の設定は非常にラクチンですね。 httpd-ssl.conf は以下の部分だけ直すと作業は終了です。

#   General setup for the virtual host
DocumentRoot "/usr/local/www/davical/htdocs"
ServerName ical.running-dog.net:443
ServerAdmin takachan@running-dog.net
ErrorLog "/var/log/httpd-ssl-error.log"
TransferLog "/var/log/httpd-ssl-access.log"

 
あとは apache22 を再起動して作業は無事完了。各クライアントからアクセスして動作確認します。基本的には以下の URL で ics ファイルが取得可能な状態となるはずです。

https://ical.running-dog.net/caldav.php/takachan/home/

ここ、重要ですからねー。覚えといてくださいよー;-)。

 
2. iCal の設定
iCal は OS X に付属のカレンダーアプリです。「環境設定」→[アカウント]から”+”で追加します。 SSL で追加しましょう;-)。
[サーバ設定]タブでは CalDAV サーバの FQDN と URL を書きます。サーバパスは “/caldav.php/takachan/” を指定します。 CalDAV のコントロールパネルで他にカレンダーを設定した時に /home/ の部分が任意のパスとして生成され iCal 上に表示されるようになります。

 
3. iOS デバイスの設定
僕は手元に iPhone5 があって、それは既に iOS7 にしているのですが、このカレンダーアプリはどえりゃーやっかいでした・・。 Maverickes の iTunes も iOS7 もひでーことだぁ。と、知ることになるんですけども。

iOS の場合はまず、設定アプリから「メール/連絡先/カレンダー」を選択し「アカウントを追加」→「その他」→「CalDAVアカウントの追加」を選択し情報を入力します。
「サーバ」は FQDN のみで OK。「詳細設定」で色々指定してあげます。 SSL を有効にしてから「アカウントURL」に上記の URL を指定します。以上で設定は完了。次にカレンダーアプリを開き、しばらくすると新しく登録した CalDAV のアカウントが見えるようになります。うふふ。これでカレンダーの同期が完了だぁ;-)。

が、しかし・・。落とし穴はここからでした・・。orz iOS のカレンダーアプリは default のカレンダーが”カレンダー”として自動的に登録されるんですね。上に書いた URL 覚えていますか? CalDAV の default のカレンダーのパスなんですけども。もう一度書きますね。

https://ical.running-dog.net/caldav.php/takachan/home/

しかし、iOS のカレンダーアプリはここを参照してくれなくて、勝手に EUI-64 でパスを生成してそこに”カレンダー”ってタイトル付けて、そこにしかアクセスできないんですね・・。URL 的にはこんな感じ。

https://ical.running-dog.net/caldav.php/takachan/DE1A314-92BE-4518-A56E-B7138819A30B/

僕的には iOS のカレンダーアプリも /caldav.php/takachan/home/ を参照して欲しいのだけどここは見てくれない。で、新規にカレンダーを作成しようとするとまたまたサーバ上に EUI-64 のパスを作ってそこにタイトルを勝手に付ける仕様になっています。

とりあえず iOS はここで一旦終わって、次に Lightning の話を先に書きます。

 
3. Thunderbird Lightning の設定
Lightning は昔から利用しているしここにも何回かエントリとして登場しました。

Lightning でカレンダーを利用する場合には default の URL である

https://ical.running-dog.net/caldav.php/takachan/home/

を記述すると無事にカレンダーが表示できるのですが、上の iOS デバイスのカレンダーアプリが”カレンダー”と認識している EUI-64 なパスにしかアクセスできないので、Lightning に指定したパスも変更してあげる必要があります。まぁ、http:// から https:// に変更する必要があるので、この際テマは一緒かー。みたいな気はするんですけどね。

 
ちなみに、Lightning の場合はパスを /caldav.php/takachan/ で指定するとその配下の全てのカレンダーを表示してくれます。
Mavericks の iCal のパスは無条件に /caldav.php/takachan/ になって、配下のカレンダー全てを表示してくれます。
iOS の場合は無条件で UEI-64 のパスを掘って”カレンダー”とラベルを付けてそこにしかアクセスできません。 iOS 上で新規にカレンダーを作成するとそれは閲覧・更新可能な状態となりますが、自分で作成したものしか見えずに他のアプリで作成したカレンダーは見えません。
そー考えると iOS のカレンダーアプリが一番ワガママですね。

 
と、いうことで iTunes が iOS デバイスと同期できなくなったというのが一番大きな問題点なので、そこを Apple に何とかしてもらわないとお話にならないですね。一応、「iTunesの意見/感想を送る」から『カレンダー同期復活してくれー。』とは送っておきましたけどね。

CalDAV 経由ではなく、もっとスマートに同期できる方法があったら教えて頂きたいものです。

9月 102013
 

以前のエントリで「xmodmap と setxkbmap。」というのを書いているのですが、そのときに xmodmap -pke というコマンドを打ってみて、このコマンドが出力した情報をじっくりと眺めてみると何やら色々な設定があるようなので試してみることにしました。

色々な設定というのは、例えば NotePC において Fn キー + テンキー同時押しでボリューム調整を行う、であるとか画面の明るさを変更する、であるとか suspend/resume であるとかその辺りのことができるようなんですね。

IMG_5632_NotePC_Fn+10Key

通常この辺りの制御は ACPI のほうでやっていて、以前であれば、僕の場合、今回は ThinkPad X100e で試してみましたが、 acpi_ibm.ko というのを kldload して /usr/local/sbin/acpi_oem_exec.sh とかを作成して呪文のような文字列と数値を書いて devd に対応させる。というのが一般的だったんですけども。
まぁ、その辺りは man acpi_ibm してみて、その内容でスクリプトを書くんですけど、なんか大変そうで「動かなくてもいやー。」となっていたんですね。

今までは ACPI で制御していた Fn キー + テンキー同時押しの機能がどうやら xmodmap でできるらしいんですね。と、いうことで早速設定してみましょう。
まずは xmodmap -pke でどんなオプションが指定できるのかを探してみます。

$ xmodmap -pke | grep XF
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12
keycode 112 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab
keycode 214 = XF86Display NoSymbol XF86Display
keycode 215 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 216 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 217 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp

 
なるほど。この中にキーボード配列に合いそうな XF86 なオプションを ~/.xmodmaprc に記述していけば良いんですね。などということが解りました。

上にキーボードの写真を掲載しましたがちっこくて見えないですかねf(^^;;。それに合わせて今回 ThinkPad X100e に設定したのは以下の通り。

keycode 140 = XF86AudioStop
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume
!
keycode 162 = XF86AudioPlay
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
!
keycode 115 = XF86KbdBrightnessUp
keycode 109 = XF86KbdBrightnessDown

 
以前から Fn+F4 で suspend/resume は動作していたので今回は設定しません。

ボリュームの停止・大きく・小さくは動作しました。まぁ、KDE4 のパネルにボリュームウィジェットを表示しているのでそれで調整することも可能ですが、新たに Fn+ESC ・ Fn+F1 ・ Fn+F2 キーでできるようになった。と、いう感じでしょうか。

あと、音楽の曲飛ばし(Fn+F11)と戻り(Fn+F9)・停止と再生(Fn+F10)が動作しました。利用したソフトは gmplayer で 起動時に gmplayer *.mp3 とかして再生開始します。再生している最中に Fn+ キーを押すとそれが有効になりました。けど、考えてみると gmplayer のほうにも曲飛ばしとか停止のキーバインドはあるわけでして、無理して Fn+ キーに設定する必要は無いのかなぁ;-)。

XF86KbdBrightnessDown と XF86KbdBrightnessUp は動作しませんでした。と、いうか、Fn+ のキーがもう無いんですね。 xev で keycode を取得しようとしても取得できないキーが何個かありました。
現在、画面の明るさ変更については ACPI で行っています。 kldload acpi_ibm.ko すると acpi_ibm.0.lcd_brightness という sysctl mib が生えてきます。ここに値を設定してあげると画面の明るさが変わるのですが、shell スクリプトを書いてそれを実行することにより明るさを変えています。

その他に何かできないのかな?などと思ったのは外部ディスプレーの切り替えとか。 xmodmap 的に何かパラメータはあるのかな?と思ったのですが特に無いようなので諦めました。
ではどうするか?というと、KDE4 では KDE システム設定の中に「ディスプレーとモニタ」という項目があってここから LCD か外部ディスプレーにするか変更ができるのでそれでやることにしました。なので X の再起動とかは必要ありません。調べてないんだけどこの辺りは xrandr が面倒見ているのかな?

 
と、いうことで、以前は ACPI のほうで設定していた内容がいとも簡単にできるようになったのは良いことですね。ただ、本当にその設定が必要か? 聞かれれば「特には困っていない。」のであまり必要ではないんですけどねf(^^;。キーボードに書いてあるのでそれに合わせてキーをマッピングしてみた。と、いうのが素直な感想で。けど、簡単に設定可能なものは一応設定して見ましょう。という内容のエントリなのであります;-)。

8月 132013
 

僕は Firefox というのはドドドとバージョンが激しく上がっていくヤツではなく ESR 版を利用しているのですが FreeBSD の ports 的に言うと www/firefox-esr になるわけですけども。

現在の最新の ports-current では firefox-esr-17.0.8,1 と、いうバージョンが利用できます。しかし、確か 17.0.8 になったときだと記憶しているのですが、メニューなどの日本語表示ができなくなってしまいました。でもって、僕は firefox の起動時には bing.com を表示しているのですが、これがあーた。英語サイトを default で表示してくれるようになったりと、言語環境がぶっ壊れチックになってしまったんですね。

いつも Firefox をインストールするときは以下をインストールします。あ。 potrs 的情報ですけども。

・www/firefox-esr
・www/firefox-esr-i18n
・www/xpi-quick-locale-switcher

日本語言語パックとアドオンの Quick Locale Switcher も合わせてインストールしているのにどうして日本語で表示してくれないのだ?と悩むのであります。

そもそも以下の事象が現れています。

1.アドオンメニューのアドオン一覧に「言語パック」メニューが表示されない。
2.拡張機能の項目の中に ports からインストールしたはずの Quick Locale Switcher が表示されない。

どもう見てもこれはおかしい。ってんで色々調べたのですが「アドオンメニュー」の「アドオン入手」から Quick Locale Switcher 1.7.8.8 をインストールすると表示されるようにはなってメニューにも[言語を変更]ってのが現れるんだけど、しかし、日本語表示できない。

で、色々調べた結果「アドオン入手」から入手したアドオン(拡張機能)は

$HOME/.mozilla/firefox/乱数.default/extensions/

にインストールされるんですね。かたや ports からインストールしたヤツは

/usr/local/lib/xpi/

にインストールされます。 で更に調査を進め、色々な firefox のオプションとか指定して試すんですけども、あれー?! ってことは Firefox は /usr/local/lib/xpi/ を参照してないんではないの? という結論に達しました。

と、言うことで ports からインストールした言語パックと Quick Locale Switcher を symlink してあげることにしました。

$ cd ~/.mozilla/firefox/乱数.default/extensions/
$ ln -s /usr/local/lib/xpi/langpack-ja@firefox.mozilla.org ./
$ ln -s /usr/local/lib/xpi/\{25A1388B-6B18-46c3-BEBA-A81915D0DE8F\} ./

 
上の symlinkは 日本語言語パック、下の symlink は UUID ですが Quick Locale Switcher になります。そのまま symlink しました。

あとは Firefox を再起動して各種設定を見なおして完了です。アドオンマネージャにも「言語パック」とか、 ports からインストールした Quick Locale Switche が表示されるようになった(今のところはバージョンでどっちからインストールしたかの判断は付きます)ので一見落着。

20130813_firefox_01

と、いうことでこの作業を行なったおかげで無事に Firefox の日本語表示が復活しました。
しかし、 /usr/local/lib/xpi/ は信用したらアカン。と、いうことかな? 今後はこの symlink をずっと残すことになるかもしれませんが、それはこのエントリを読んだ方の好きにして頂ければと思います;-)。

7月 092013
 

さてさて。全体的に KDE ライクで Qt ベースな Twitter クライアントである Choqok を FreeBSD で何人くらい利用しているのかわからないのですが、タイトルの通り Twitter API 1.1 に対応した Choqok の ports を作成してみました。

以下の URL に置きましたので使ってみたい方は利用してみてください。

http://icmpv6.org/Prog/FreeBSD_ports/ports-choqok-20130709.tgz

ちょっと説明させて頂くと、現在 FreeBSD ports の www/choqok はバージョンが 1.3 です。でもって、本家のダウンロード先である http://choqok.gnufolks.org/download/ でも 1.3 をリリースしています。しかし、このバージョンは Twitter API 1.0 にしか対応していなくて最近では Twitter にログインできなくなってしまっていたんですね。

そしたら debian とか ubuntu 方面では 1.4-2 というバージョンをリリースしていて、 Twitter API 1.1 に対応している。と、いうのでそれらを利用して ports を作ってしまいました。と、いうことです。

上記 URL からダウンロードしたファイルは以下の手順で展開、インストールしてください。

# cd /usr/ports/www
# mv choqok choqok.ORG
# tar xvzfp ~/ports-choqok-20130709.tgz
# cd choqok
# mv choqok-1.4.tar.bz2 /usr/ports/distfiles/
# make && make install
#

 
基本的に ports のほうは Makefile のバージョンと distinfo を変えただけです。同梱のソースのほうに手を加えています。

もとになるソースコードは以下の URL からダウンロードしています。

http://tech.chandrahasa.com/2013/06/19/choqok-patch-for-twitter-api-1-1/
https://launchpad.net/~pfoo/+archive/choqok/+packages

choqok_1.4-2.orig.tar.gz というソースコードに choqok_1.4-2-1git0.diff.gz のパッチを適用したあと、このソースコードには po ファイルがなかったので 1.3 から po/ ディレクトリを持ってきて choqok-1.4.tar.bz2 を生成しています。

ports の distinfo は以下のようになっています。

SHA256 (choqok-1.4.tar.bz2) = 101bd27bf75ffa8c2454efab2d86dcbae737e410cad01f6fe3496d22fb15f448
SIZE (choqok-1.4.tar.bz2) = 9782427

 
ports の Makefile でいろいろやるのが面倒だったのでソースの tar 玉のほうで吸収してしまうという、ちょっとインチキなことをしていますが、一応動くので作りました。まぁ、当然ノラ ports ですけど。

どうしても Choqok が使いたいーっ!! っていう方のみ、本家が Twitter API 1.1 に対応してくれるまでの間、ご利用ください;-)。

うーむ。せっかく po ファイルを用意したのに今回利用したソースは参照しないようだ。と、いうことで po ファイルをソースコードに混ぜたのは無駄な作業でした。メニューは英語のままとなります・・。しくしく。

1月 232013
 

ちょっと前の FreeBSD-users-jp な ML で USB マウスが動かなくなる。と、いうスレッドがありました。PS/2 マウスと USB マウスの二つがあった場合、そのうちの一個が動かなくなる。と、いうのものでした。

僕の場合、USB マウスではなく、 PS/2 マウスとタッチバッドの組み合わせなのですが、マウスのほうが動かなくなって悩んでいたのであります。

僕が持っているのは ThinkPad X100e で、こいつは Windows OS で言うところの UltraNav です。キーボードの真ん中に赤ポッチがあるのが、 FreeBSD 的に言うと /dev/sysmouse でこいつは ports 的 には x11-drivers/xf86-input-mouse で認識して動作します。タッチパッド側は /dev/psm0 で x11-drivers/xf86-input-synaptics で認識してタッチパッドとして利用できます。右側を上下になぞるとちゃんとスクロールもしてくれるように設定しています。

が、この状態において、僕の環境では赤ポッチとそれに付属するポタン類が一切動作しない状態で、上記スレッドを参考に色々試したのですが、やはり動作しないので放置していたのでありました。

今回、環境を 9.1-RELEASE にしたのでもう一度試してみたのですが、やはり動作しません。悲しい・・。

以下は僕が利用している 赤ポッチマウスとタッチバッドマウスの xorg.conf の設定です。一応 hal に関係する設定も書いておきます。

Section "ServerFlags"
Option    "AllowEmptyInput" "off"
Option    "AutoAddDevices"  "off"
#       Option    "AllowEmptyInput" "on"
#       Option    "AutoAddDevices"  "on"
EndSection
Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "ZAxisMapping" "4 5 6 7" EndSection
Section "InputDevice" Identifier "Touchpad0" Driver "synaptics" Option "Protocol" "psm" Option "Device" "/dev/psm0" Option "SHMConfig" "on"
Option "TapButton1" "1"
Option "VertTwoFingerScroll" "1" Option "HorizTwoFingerScroll" "1" Option "VertScrollDelta" "200" Option "HorizScrollDelta" "200" Option "MinSpeed" "0.1" Option "MaxSpeed" "0.2" EndSection

 
この設定を書いても赤ポッチ側が動作しません。ps で hal と moused のプロセスを確認すると以下のようになっています。

$ ps -ax | grep mouse
1120 ??  Is     0:04.49 /usr/sbin/moused -p /dev/sysmouse -t auto
1332 ??  I      0:00.01 hald-addon-mouse-sysmouse: /dev/psm0 (hald-addon-mouse

 
moused は /dev/sysmouse 側をコントロールしています。 hald のほうは /dev/psm0 をコントールしています。 xorg.conf の設定では /dev/sysmouse は赤ポッチマウス、 /dev/psm0 はタッチパッドマウスです。まぁ、タッチパッドが無事に動作しているのでいーやー。とか思っていた時期が長いんですけどもね。

で、色々設定を見なおした結果、両方とも動作することが確認できました。上記 xorg.conf は何も問題がありませんでした。問題があったのは /etc/rc.conf で設定する moused の設定だったのであります。

以下のように設定すると 両方のマウスが無事に動作することが解りました。

moused_nondefault_enable="NO"
moused_enable="YES"
#moused_port="/dev/sysmouse"
moused_port="/dev/psm0"

 
今までは hald が /dev/psm0 をいじっているなら moused は /dev/sysmouse だろ。とか、勝手に思っていたのですが、moused のほうも /dev/psm0 に変更したらあぁら不思議。両方のマウスが動き出した。ということなんですね。 ps で確認すると以下のような感じ。

 $ ps -ax | grep mouse
33230 ??  Is     0:04.49 /usr/sbin/moused -p /dev/psm0 -t auto
33232 ??  I      0:00.01 hald-addon-mouse-sysmouse: /dev/psm0 (hald-addon-mouse

 
なんか、非常に違和感あるんですが、これで無事に二つのマウスが動作しております。考えてみると xf86-input-mouse がバージョンアップして以来赤ポッチマウスが動作していなかったので、随分と久しぶりに両方動きだした。ということになります。

いやー。良かったです。 xorg.conf が正しい設定であるならば rc.conf の moused の設定を変えてみてはいかがでしょうか。なお、今回は /usr/local/etc/hal/fdi/policy/ にはマウスの設定は入れていません。 xorg.conf の設定がそのまま X11 で有効になっていると思います。

ちなみにタッチパッドのほうは xf86-input-synaptics で動作しているので UltraNav みたいな動作が一応できます。 Synaptics を試してみたい方は参考にしてみてください。あ。細かい説明は一切ナシですけどもね;-)。

2月 142012
 

僕は普段から KDE4 使いなんだけども、KDE4 を利用しているとターミナルソフトといういうのは必然的に konsole になるわけであります。

しかし、もう何回もこのブログに書いているんですが、 konsole というのは一個のプロセスが起動して、何個も konsole の画面を開いても一個のプロセスで動作する。つまり、表示される konsole のウィンドはスレッドとして動作しているんですな。

これがまたあーた。一個の konsole ウィンドが変な挙動をするとそのプロセスがおかしくなるということで、表示されている全ての konsole のウィンドはスレッドで動作しているんだけども、それら全てを道連れにお亡くなりになる、もしはフリーズしてしまう。という、それは非常にヒサンな状態になるわけですね。

こんなのは使いたくないよ。一つのウィンドは一個のプロセスのターミナルソフト使いたいよ。ってんで、/usr/ports/x11 の下辺りを ls -d *term* などとして色々物色するんですね。で、今回中々良いのが見つかったのでそれについてちょっと書いてみたいと思います。

今回取り上げるのは gtkterm2 です。 ports 的には x11/gtkterm2 になるんですけどもね。とりあえず make してみると、ターミナルソフト的には vte というのを利用しているみたいですね。 ports 的には x11-toolkits/vte になるみたいですが。ここに GTK2 を利用してタブの機能を盛り込んだみたいな感じです。

利用してみると一つのウィンドで一つのプロセスとして動作するようで中々良い感じですね。では、早速カスタマイズして自分好みの環境で利用してみましょう。

実は gtkterm2 をインストールして、カスタマイズしようとしてあまりにもその設定方法が書かれたウェブが無いのでいっちょ書いてみるか。ということでこのエントリを書いているわけですけどもね;-)。

gtkterm2 の設定ファイルは $HOME/.gtkterm2rc になります。 gtkterm2 を一回起動するとホームディレクトリに設定ファイルが生成されます。そしたらエディタで編集すれば良いでしょう。

それにしてもこの設定ファイル、 gtkterm2 を起動するたんびに毎回 gtkterm2 が更新してくれます。非常にややこすぃー・・。毎回エディタを再起動してあげる必要がありますが・・。

とりあえずフォントの設定から。以下の部分を変更すると自分の好きなフォントになります。

terminalFont= MS Gothic 10

 
上記設定は MS ゴシックを 10 ポイントの表示で利用する場合。フォント名は GTK2 の記述形式ですね。以下のコマンドを実行するとフォント名が抽出できると思うのでそれを記述します。

% fc-list | awk -F, '{print $2}' | awk -F: '{print $1}' | sort

 
MS ゴシックが無い人は “Ume Gothic C4” とか指定すると良いかもですね。

まぁ、上記のようにフォントの指定は色々なウェブ上で書かれているので割と設定は簡単でしょうか。

問題は色のほうです。こいつは解らない・・。orz。また、ウェブを探しまわっても全く見当たらないんですね。でもって $HOME/.gtkterm2rc には以下のように不気味な設定が書かれている。

red=0xff00 0x0000 0x0000 0xaaaa 0x0000 0xaaaa ...
grn=0xef00 0x0000 0x0000 0x0000 0xaaaa 0x5555 ...
blu=0xef00 0x0000 0x0000 0x0000 0x0000 0x0000 ...

 
red=、grn=、blu= の後に 0x0000 が全部で 17 個並んでいます。これが何を意味しているのかが全くわかりませんでした。しょーがないのでソースコード眺めましたよー。src/prefs.c 辺りで色についての記述がありますね。まぁ、読むのも大変なんですけども・・。

で、 grn= の後の一個目のパラメータはバックグラウンドの色の指定になります。二個目のパラメータはカーソル、X11 用語では foreground ってことですけどもね。の指定になります。一個目と二個目の設定だけが特徴的で残りの 15 個はファイルの色になります。この辺り、僕にもわかりません。実行形式ファイルの色は赤とか、ディレクトリは青とか、symlink の色はピンクとか、そんな設定になります。

まぁ、今回は background と foreground の色を変えてみましょう。それにしても RBG カラーってのは # のあとに六桁指定するのにどうして四桁なんだ?と思うのでありますが・・。

例えば background の色を #FFEFEF という、ちょっとピンクっぽい色にしたい場合は以下のように指定します。

red=0xff00
grn=0xef00
blu=0xef00

 
red、grn、blu で RBG の色を前から二桁に指定し、余った後ろの二桁は “0” を指定する。って感じですね。

文字とかカーソルの色は黒にしたいので #000000 になります。その場合は以下になります。

red=0xff00 0x0000
grn=0xef00 0x0000
blu=0xef00 0x0000

 
0x00 の前二桁の部分に “0” を設定し、後ろの二桁は default の “0” を設定します。これで自分の好きな色に設定できると思います。そして、三個目以降、残りの 0x???? は全部で 15 個ありますが、これは default の設定でひとまず試してみてください。 ports の make config ときなんかは不気味な色になりますけどねぇ;-)。

とまぁ、こんな感じで設定すれば自分の好みのターミナルになるのではないかなぁ。と思われます。

自分的に一点変えたいと思っているのが新しいタブを開くとき。 default では CTRL+N なんだけど、CTRL+SHIFT+N に変更したいなぁ。と思っています。ソースコードを変更してしまうのが一番早いかなぁ。などとちょっと思っていますが、機会があったら試してみたいですね;-)。

さーっ!! そんなこんなで、ようやっと一つのウィンドがひとつのプロセスとして動作するターミナルソフトを手に入れた。インストール時に入るのは vte くらいのなので KDE4 を使っていても余計なモノを入れない(インストールしない)のが気に入っています。

gtkterm2 の設定が解らないときはここを参照してください;-)。

2012/02/16 加筆
以下の部分を改修した ports を作りました。

・日本語 po ファイルを書いたのでメニューは日本語表示できるようになります。
・Ctrl+n は emacs とバッティングするので新規タブは Ctrl+t に変更しました。

以下の URL から ports がダウンロードできます。

http://icmpv6.org/Prog/FreeBSD_ports/ports-gtkterm2-20120216.tgz

12月 272011
 

以前のエントリで「Thunderbird+Lightning の日本語化。」というのを書きました。 FreeBSD の ports からインストールされる Thunderbird のアドオンとして動作する Lightning は日本語化されていないので日本語化するための方法を書いたわけですけども。

それにしても最近の mozilla は 12 週間に一回メジャーバージョンアップすることにしたので、 Thunderbird をインストールすると Lightning も合わせてインストールできるようになったのは嬉しいんだけど、それにしてもバージョンアップの頻度が高すぎるX-(。

毎回 Windows のディレクトリから手動で持ってくるのはもうイヤだ。ってんで、自動日本語化スクリプトを書きました。以下の URL に置いときます。

http://icmpv6.org/Prog/lightning-ja-20111227.tgz

展開すると二つのファイルがあると思います。一個はシェルスクリプト、もう一個は設定ファイルへのパッチです。

動作については lightning-ja.sh の中を見て頂ければと解ると思いますが、簡単に説明すると以下の通りです。

まず、前準備ですが、既に Thunderbird と Lightning がインストールされている場合、lightning アドオンのバージョンを自動で取ってきます。もし、正しいバージョンが取れないようだったらスクリプト中の lightningversion 変数に指定します。

そしてコマンド実行;-)。

1. mozilla.org の lightning アドオンのサイトに Linux 版を取りに行きます。
2. 取ってきて展開後、中から必要なファイル二つをインストールします。
3. chrome.manifest を更新します。

以上で Lightning が日本語化されます。非常に簡単です;-)。

これだけで日本語化できるので、どなたか ports など作って頂けると嬉しいのですけどねぇ。 japanese/lightning 辺りに。ただ、12 週間に一回 ports を更新しないといけないので誰も ports 作りたくないですよねぇ・・。解ります。その気持ち・・。

Thunderbird の ports のどこかでこれを吸収してくれると嬉しいのだけどなぁ。誰かやってくれないかなぁ・・。