swapwm
「gdb hacks - ターゲットプロセス内の関数を呼び出す (http://www.keshi.org/blog/2006/02/gdb_hacks.html)」の exec 呼ぶ(どうでもいいけど execlp は (3) な気が)例は、面白いものの利用方法皆無だと思っていたのですが、既に動いてるウィンドウマネージャの切り替えに使えることに気付きました。
というわけでなんか作ってみた。要 Linux & x86 。
http://shinh.skr.jp/binary/swapwm.c
えーと gdb でもぐり込んで exec する方法だと、たぶん gdb は exec の戻りを待っちゃうので新しいウィンドウマネージャが Detach されないなー、ということで C で書いた、という。原理は livepatch とかと似たようなっていうか適当にコード参照しつつ適当に dirty hack したとかそんな。
使い方は、
$ gcc swapwm.c $ ./a.out 13056 /usr/bin/twm
とかそんな感じ。 13056 ってのは今動いてるウィンドウマネージャのプロセスID 。最後の引数は交換した後の WM のフルパス。
さっきまで sleep だったプロセスが急に ls に変わるとかもなかなか良いのですが、やはりウィンドウマネージャがパチパチ変わるのは結構びびって楽しかったです。
いや、普通はウィンドウマネージャ色々試したい時とかは、
$ X :1& $ DISPLAY=:1 xterm
などとして X と xterm だけを動かして、それから xterm の中で色々 wm 動かしてみるんでしょうけどね…