SW개발/우분투 리눅스

파이어폭스 실행시 Failed to load module "topmenu-gtk-module" 에러 해결 방법

공무원 봉급 2022. 5. 10. 05:12

본 페이지에서는 우분투 리눅스에서 파이어폭스 실행시에 Failed to load module "topmenu-gtk-module" 에러가 발생할 경우에 이를 해결하는 방법에 대해서 설명하고자 합니다. 

 

문제의 상황

모든 문제의 문제의 상황을 확인하는 것부터 시작되어야 합니다. 원인을 찾아야 처방도 가능하기 때문입니다.

 

문제의 상황 1. 파이어폭스가 실행되지 않는다

 

문제의 상황은 Ubuntu 리눅스를 업그레이드한 이후에 발생했습니다. Firefox 웹브라우저를 실행하면 아무런 메시지 없이 웹브라우저가 열리지 않았습니다.

 

문제의 상황 2. 터미널에서 실행해면 모듈 로드 오류가 발생

 

터미널에서 "firefox" 명령을 입력하여 파이어폭스 실행을 시도하면 아래와 같은 메시지가 발생했습니다. 

$ firefox
Failed to load module "topmenu-gtk-module"

 

문제의 상황 3. 로그에서 모듈 로드 오류 다수 발생

 

로그를 확인해보면 Failed to load module "topmenu-gtk-module" 라는 메시지가 상당히 많이 발견됩니다. 

$ cat /var/log/syslog | grep topmenu-gtk-module

 

파이어폭스 실행을 여러번 실행했기 때문에 아래와 같은 메시지가 상당히 많이 발생하였습니다. 

Failed to load module "topmenu-gtk-module"

 

문제의 상황 4. GTK_MODULES 환경변수

 

GTK_MODULES 환경변수 값을 확인해봅니다. 

$ env | grep GTK_MODULES

 

아래와 같이 "canberra-gtk-module:topmenu-gtk-module"로 되어 있습니다. 

GTK_MODULES=canberra-gtk-module:topmenu-gtk-module

 

결론부터 말씀드리자면, 문제를 해결한 이후에 GTK_MODULES 환경변수의 값이 달랐습니다. 

GTK_MODULES 환경변수 값
문제 발생 시 GTK_MODULES=canberra-gtk-module:topmenu-gtk-module
문제 해결 후 GTK_MODULES=gail:atk-bridge:appmenu-gtk-module

 

문제의 상황 5. /etc/X11/Xsession.d/99mate-environment 파일 내용 확인

 

상당량의 구글링을 통해서 문제의 원인은 /etc/X11/Xsession.d/99mate-environment 파일에 있다는 것까지 narrow down 할 수 있었습니다. cat 명령으로 해당 파일의 내용을 살펴보았습니다. 

 

$ cat /etc/X11/Xssession.d/99mate-enviroment

 

해당 파일을 쉘스크립트 문법으로 되어 있었습니다. 

# This file is sourced by Xsession(5), not executed.

if [ "x$DESKTOP_SESSION" = "xmate" ] || [ "x$XDG_SESSION_DESKTOP" == "xmate" ]; then
    if [ -z "$GTK_MODULES" ] ; then
        GTK_MODULES="canberra-gtk-module:topmenu-gtk-module"
    else
        GTK_MODULES="$GTK_MODULES:canberra-gtk-module:topmenu-gtk-module"
    fi
    export GTK_MODULES

    # Disable GTK3 overlay scrollbars
    export GTK_OVERLAY_SCROLLING=0

# QT apps to use GTK styling
    export QT_STYLE_OVERRIDE=gtk

    # Workaround clutter issue (LP: #1462445)
    export CLUTTER_BACKEND=x11
fi

 

스크립트의 내용을 살펴보면 GTK_MODULES 라는 환경변수가 없을 경우에는 "canberra-gtk-module:topmenu-gtk-module"로 환경변수를 설정해버리는 것을 알 수 있습니다. 앞서 정상 동작시의 환경변수 값과는 차이가 있음을 확인했습니다. 

 

문제의 해결

 

문제를 해결하는 방법은 "/etc/X11/Xsession.d/99mate-environment" 파일을 삭제하는 것이었습니다. 실제로 이 파일을 최근의 Ubuntu 리눅스에서는 없는 파일입니다. 만약 지우는 것이 찝찝하시다면 파일 확장자만 추가하시면 됩니다. 

 

$ cd /etc/X11/Xsession.d
$ mv 99mate-environment 99mate-environment.bak

 

위와 같이 조치한 이후에 재부팅하면 파이어폭스가 정상적으로 실행되는 것을 확인하실 수 있고 GTK_MODULES 환경변수를 확인해보면 변경된 것을 알 수 있습니다. 

 

$ env | grep GTK_MODULES
GTK_MODULES=atk-bridge:appmenu-gtk-module

 

왜 그럴까?

아무래도 OS 업그레이드 과정에서 기존의 설정 정보를 그대로 유지하기 위해서 기존의 OS 버전에서 사용했던 99mate-environment 라는 파일을 실행해준 것으로 추측됩니다. 실제 제대로된 설정 파일은 90atk-adaptor 파일에 포함되어 있습니다. 

 

실제로 90atk-adaptor 파일 내용을 살펴보면 실제 환경변수에서 확인된 gail 과 atk-bridge 값을 GTK_MODULES 환경변수에 추가해주는 스크립트를 확인하실 수 있습니다. 

$ cat 90atk-adaptor 
# -*- sh -*-
# Xsession.d script to set the GTK_MODULES env variable to load atk
#
# This file is sourced by Xsession(5), not executed.

add_module()
{
	case :$GTK_MODULES: in
		*:$1:*)
			;;
		*)
			if [ -z "$GTK_MODULES" ]
			then
				GTK_MODULES=$1
			else
				GTK_MODULES=$GTK_MODULES:$1
			fi
			;;
	esac
}

add_module gail
add_module atk-bridge

export GTK_MODULES
if [ -x "/usr/bin/dbus-update-activation-environment" ]; then
        dbus-update-activation-environment --verbose --systemd GTK_MODULES
fi

 

도움 받은 기사

https://ubuntu-mate.community/t/gtk-message-failed-to-load-module-topmenu-gtk-module/4964/9

관련된 내용을 위의 페이지에서 많은 도움을 받았습니다. 만약 제가 설명드린 내용으로 해결되지 않을 경우 위의 글을 좀 더 살펴보시는 것도 도움이 될 수도 있겠습니다. 

 

결론

이상으로 우분투 리눅스에서 파이어폭스 웹브라우저 실행시에 Failed to load module "topmenu-gtk-module" 에러 메시지가 발생하면서 파이어폭스가 종료되는 문제에 대한 해결 방법 설명을 모두 마칩니다. 

요약하자면, 오래된 버전의 OS에서 사용하던 99mate-environment 라는 설정 스크립트가 실행되면서 실제와는 다른 GTK_MODULES 환경변수가 등록되어서 발생한 문제입니다. 

99mate-environment 파일을 삭제하는 것으로 깔끔하게 문제를 해결할 수 있었습니다.