
Lubuntu 14.10을 설치한 다음 Compiz를 창 및 복합 관리자로 설치한 다음 ppa:nilarimogard/webupd8의 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)
에메랄드가 중지되면 다시 시작하는 스크립트나 프로그램을 작성하려고 생각 중이었지만 더 나은 방법이 있을 것입니다...
답변1
에메랄드는 더 이상 공식적으로 지원되는 리포지토리에 없으므로 세그먼트화 오류는 이 포럼에서 문제가 되지 않습니다.
나는 그다지 우아하지 않은 해결 방법으로 이 문제를 "해결"했습니다.
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가 에메랄드 대신 이것을 실행하도록 하십시오. 충돌이 발생할 때마다 에메랄드를 계속 다시 시작합니다.