よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

June 16, 2002

[Tools] はやりのインターネットキーを使う

昨日も書いたんだけど、最近のキーボードはWWWやメール用のボタンがついてくるよね。こいつをX-Windowで使ってみる方法がわかったのでメモっておく。

Window Managerはsawfish version 0.38(GNOME環境)、XはXFree86-4.1.0、キーボードはLogicool Deluxe Access 109 Keyboard ik-26だ。このキーボードは「WWW」「メール」「検索」ボタンがついてるので今回はこれを使う。

まず、xevを使ってそのボタンがどのように定義されているか確認する。KeyPressイベントのところを参照する。
KeyPress event, serial 24, synthetic NO, window 0x2e00001,
    root 0x3d, subw 0x0, time 2000773075, (78,59), root:(983,539),
    state 0x0, keycode 178 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 1 characters:  ""
 
KeyPress event, serial 24, synthetic NO, window 0x2e00001,
    root 0x3d, subw 0x0, time 2000776819, (78,59), root:(983,539),
    state 0x0, keycode 236 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 1 characters:  ""
 
KeyPress event, serial 24, synthetic NO, window 0x2e00001,
    root 0x3d, subw 0x0, time 2000777264, (78,59), root:(983,539),
    state 0x0, keycode 229 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 1 characters:  ""

上記を見ると、それぞれ178, 238, 229にkeycodeが割り当てられているが、keysymは定義されていない(NoSymbol)ということがわかる。
通常、Xのアプリケーションはkeycodeではなくkeysymの方を使用するのでこれを割り当てる必要がある。具体的には~/.Xmodmapに以下の情報を追加する。

keycode 178 = XF86WWW
keycode 236 = XF86Mail
keycode 229 = XF86Search

この右辺値は/usr/X11R6/lib/X11/XKeysymDBから選ぶ。 余談だが、XKeysymDBを見ると現存するキーの割り当ては全て定義されているみたい、知らんかった。

上記を設定したら、もう一度Xを再立ち上げ(ログアウトして再度ログインすればOK)する。

(追記:xmodmap ~/.Xmodmapの方が良いね by kjanaさんのツッコミ)

んで、xevの結果。

KeyPress event, serial 24, synthetic NO, window 0x2c00001,
    root 0x3d, subw 0x0, time 2001652414, (70,54), root:(852,288),
    state 0x0, keycode 178 (keysym 0x1008ff2e, XF86WWW), same_screen YES,
    XLookupString gives 0 characters:  ""
 
KeyPress event, serial 24, synthetic NO, window 0x2c00001,
    root 0x3d, subw 0x0, time 2001652646, (70,54), root:(852,288),
    state 0x0, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,
    XLookupString gives 0 characters:  ""
 
KeyRelease event, serial 24, synthetic NO, window 0x2c00001,
    root 0x3d, subw 0x0, time 2001652276, (70,54), root:(852,288),
    state 0x0, keycode 229 (keysym 0x1008ff1b, XF86Search), same_screen YES,
    XLookupString gives 0 characters:  ""

無事、keysymが割り当てられていればOK。

最後にSawfishの設定。本当はGNOMEコントロールセンタ(のsawfish-ui)から登録する方法を見つけたかったんだけど、結局、挫折。かわりに ~/.sawfishrcに設定を書くことで解決した。

(bind-keys global-keymap
   "XF86WWW" '(system "/usr/bin/galeon -w&")
   "XF86Mail" '(system "/usr/bin/sylpheed&")
   "XF86Search" '(system "/usr/bin/galeon -w http://www.google.com/&")
)

見ればわかると思うんだけど、WWWボタンでgaleonが、メールボタンでsylpheedが、検索ボタンでgaleon+googleが起動する。 一度ログアウトして再ログインで無事動作するようになった。めでたしめでたし。

#誰かGNOMEコントロールセンタから登録する方法知ってたら教えて!

[Tools] Sawfishつづき

さくさんのツッコミを見て再度コントロールセンタから設定できないかどうかチャレンジしてみたら簡単にできた。なははは。

そんなわけで、.sawfishrcの設定は不要だね。

  1. GNOMEコントロールセンタを起動
  2. ツリーの中から、GNOMEコントロールセンタ→Sawfishウィンドウマネージャ→ショートカットを選ぶ
  3. 右側の設定内容のところで、有効エリア:Globalを設定
  4. 追加ボタンをクリック
  5. 取り込みボタンをクリックすると Pless Key ...と出るのでインターネットキーをクリック
  6. コマンドの一覧から Run shell commandを選択
  7. 下側にCommand:欄が出るので、そこに/usr/bin/galeon -nとか、/usr/bin/sylpheedとか起動したいアプリケーションを記述する

実は、5.まではわかってたんだけど、6.のやり方(選択の仕方)がわからなかった....つーか一覧を一個ずつ見ていかなかったのが敗因だな(^^;)。

[Tools] galeon -n/-w

上記のgaleon -wは galeon -nの方が良いかな。まぁ、好みだろうけど。

  1. -nオプション
    galeonがすでに起動されている場合は、すでにあるGaleonウィンドウに新規タブを開く
  2. -wオプション
    galeonがすでに起動されている場合は、すでにあるGaleonプロセスで新規ウインドウを開く

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

むとぽん [さくさん: えーっとそこまでは気づいたのですが、そこからgaleonとかを呼び出す指定をどうすれば良いのかなぁと(^..]

kjana [「一度 logout して login」なんていうめんどうくさいことしなくても `xmodmap ~/.Xmodma..]

むとぽん [あうぅ。確かに(汗。]


June 16, 2003

[Ruby-GNOME2] Sokoban

なぜかハマってしまいました。んでもって、コンティニューができないのが不満になってきたので、Ruby/GConfを使ってコンティニュー機能を付けてみました。起動すると前回の続きから始まります。

[Ruby-GNOME2] Ruby/GConf

今回初めて使ってみたのですが(^^;)、とっても便利です、これ。

Ruby/GConfって何者かというと、要はアプリケーションの設定ファイルなんかを保存・読み出ししたりするためのライブラリなのですが、データを保存・読込するだけではなく、ロックとかも勝手にやってくれるし、変更がかかるとイベントをあげたりもします。かなり高機能なくせして使う方はメチャクチャ簡単というすばらしーライブラリです。

例えば、以下のようにして使います。

require 'gconf2'
                                                                                
client = GConf::Client.new
  
#データの読込
p client["/apps/hoge/laststage"]
p client["/apps/hoge/name"]
  
#データの書込
client["/apps/hoge/laststage"] = 1
client["/apps/hoge/name"] = "Ruby-GNOME2"

この例ではわざと読込を先にやっているので1度目はnilが出力されますが、2度目に実行したときは1, Ruby-GNOME2が出力されます。

たったこれだけで永続的にデータを保存・読み出しできます。

データ自体はgconfdというデーモンが管理していて、非同期で$HOME/.gconf/apps/hoge/%gconf.xmlというファイルにXML形式で書き込まれます。

データには基本的な型しかサポートしてませんが、設定情報としてはこれで十分でしょう。

岡さんの日本語訳がとてもわかりやすいですので興味のある方はどうぞ。


追記