GTK-Serverを使ってシェルからGUI

Ubuntu Linux 11.10 でBashからGTKを叩く方法。

環境設定

gtk-serverはパッケージからインストールできないので、ソースから入れる。

$ sudo apt-get install libffi-dev
$ wget http://downloads.sourceforge.net/gtk-server/gtk-server-2.3.1-sr.tar.gz
$ tar xvzf gtk-server-2.3.1-sr.tar.gz
$ cd gtk-server-2.3.1-sr
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

GladeでGUIを編集

GTK-Serverは現時点ではGtkBuilderをサポートしていない。
libgradeのファイルを使う必要がある。

$ sudo apt-get install glade-gtk2
$ glade-gtk2
(GtkBuilderではなく、LibGladeでセーブすること。)

スクリプトを書く

GTK+2に従ってスクリプトを書く。
シグナルを接続するには、gtk_server_connectを使う。

#!/bin/bash -x

PIPE=/tmp/gtksv

gtk() {
	echo $1 > $PIPE
	read RESULT < $PIPE
}

gtk-server -fifo=$PIPE -detach

gtk "gtk_init NULL NULL"

gtk "glade_init"
gtk "glade_xml_new 'hoge.glade' NULL NULL"
REPO=$RESULT
gtk "glade_xml_get_widget $REPO 'window1'"
WIN=$RESULT
gtk "gtk_server_connect $WIN delete-event delwin"
gtk "gtk_widget_show_all $WIN"

while true; do
	gtk "gtk_server_callback WAIT"
	EVENT=$RESULT
	if [ $EVENT = "delwin" ]; then
		gtk "gtk_server_exit"
		exit 0
	fi
done

gtk "gtk_server_exit"
exit 0