
Lubuntu 14.10 をインストールし、次にウィンドウおよびコンポジット マネージャーとして Compiz をインストールし、次にウィンドウ デコレーターとして ppa:nilarimogard/webupd8 の Emerald をインストールしました。うまく動作しますが、Emerald は頻繁にクラッシュします。ウィンドウの境界が消えるだけで、他には何も起こりません。そこで、emerald --replace
ターミナルで実行しました。
最初の事故で
Segmentation fault (Core dumped).
2回目のクラッシュ:
(emerald:15385): GLib-GObject-WARNING **: invalid uninstantiatable type '(null)' in cast to 'GdkDrawable'
(emerald:15385): Gdk-CRITICAL **: IA__gdk_cairo_create: assertion 'GDK_IS_DRAWABLE (drawable)' failed
Segmentation fault (core dumped)
3回目の衝突:
Segmentation fault (core dumped)
エメラルドが停止した場合に再起動するスクリプトまたはプログラムを作成しようと考えていましたが、もっと良い方法があるはずです...
答え1
emerald は公式にサポートされているリポジトリに含まれなくなったため、セグメンテーション エラーはこのフォーラムでは問題になりません。
私は、あまりエレガントではない回避策でこの問題を「解決」しました。
file: emerald-restarter.c
#include <unistd.h>
#include <stdio.h>
int main() {
int pid;
while (1)
{
pid = fork();
switch ( pid )
{
case 0:
printf("Child process starting emerald.\n");
execlp("emerald","--replace",NULL);
break;
case -1:
fprintf(stderr,"Fork failed.\n");
return -1;
break;
default:
printf("Main process waiting for PID %i to finish.\n",pid);
wait();
break;
}
}
return 0;
}
これをコンパイルし、Emerald の代わりに Compiz に実行させます。クラッシュするたびに Emerald が再起動し続けます。