Я установил Lubuntu 14.10, затем Compiz как окно и составной менеджер, затем Emerald от ppa:nilarimogard/webupd8 как декоратор окна. Это работает приятно, но изумруд отказывает очень часто. Границы окна просто исчезают, и ничего иного не происходит. Таким образом, я работал 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)
Я думал о записи сценария или программы, которая перезапустила бы изумруд, если бы это остановилось, но хорошо вокруг должен быть лучший путь...
Так как изумруд больше не находится в поддерживаемых репозиториях чиновника, его отказы Сегментации не являются вещью для этого форума.
я "решил" эту проблему с этим not-so-elegant обходным решением.
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 выполнить это вместо изумруда. Это будет продолжать перезапускать изумруд каждый раз, когда это отказывает.