我安装了 Lubuntu 14.10,然后安装了 Compiz 作为窗口和复合管理器,然后安装了来自 ppa:nilarimogard/webupd8 的 Emerald 作为窗口装饰器。它运行良好,但 Emerald 经常崩溃。窗口边框消失了,没有其他反应。所以我emerald --replace
在终端中运行。
第一次撞车时我
Segmentation fault (Core dumped).
第二次崩溃:
(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)
第三次崩溃:
Segmentation fault (core dumped)
我正在考虑编写一个脚本或程序,以便在 Emerald 停止时重新启动它,但是肯定有更好的方法......
答案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;
}
编译它并让 Compiz 运行它而不是 emerald。每次 emerald 崩溃时,它都会重新启动。