파이어폭스에서 드랍다운메뉴가 사라지는 문제

파이어폭스에서 드랍다운메뉴가 사라지는 문제의 원인을 알지 못하다가…
우연히 웹검색하다 알게 되었습니다.

문제의 원인은 나비입력기 입니다.
아니 더 정확히 말하면, XIM(x입력기) 문제입니다.

파이어폭스에서 xim처리에 뭔가 문제가 있는 듯 하며, 나비입력기가 xim에 의존하는 관계로,
나비사용->xim사용->파이어폭스 메뉴사라짐 의 문제가 발생합니다.

고로, 파이어폭스에서는 나비를 사용하지 않고, ibus를 사용하는 편이 좋을 듯 합니다.

다음 코드를 /etc/firefox_nabi_workaround 로 저장하신 후,

[code:ufh3fjkc]
[ "$GTK_IM_MODULE" = "xim" ] && export GTK_IM_MODULE=ibus
[ "$QT_IM_MODULE" = "xim" ] && export QT_IM_MODULE=ibus
[ "$XMODIFIERS" = "@im=nabi" ] && export XMODIFIERS=@im=ibus
ibus_kill() {
pid=$1
pidof $pid >/dev/null && kill -9 $pid
}
ibus_pid=
pidof ibus-daemon >/dev/null
if [ $? -ne 0 ]; then
ibus-daemon -x&
ibus_pid=$!
trap "kill $ibus_pid" EXIT QUIT INT TERM
i=0
while [ $i -lt 30 ];
do
ps aux|grep -v grep|grep "/ibus-engine-hangul " &>/dev/null && break
sleep 0.1
done
fi
exec() {
"$@"
}
[/code:ufh3fjkc]

/usr/bin/firefox 파일을 열어 첫 줄을 변경합니다.
#!/bin/sh
를 다음 두 줄로 치환

#!/bin/bash
source /etc/firefox_nabi_workaround

나비입력기를 사용하고 싶은데, 파이어폭스에서 문제가 발생한다면,
이와 같이 ibus혹은 uim,scim등으로 변경해 주시면 됩니다.

음…! 이전 부터 말씀하신 같은 현상으로 고민이 많았습니다.

항상 게시판에 글을 쓸 때 마다 메뉴가 안 나오는 것으로 봐서 xim에 문제가 있을 것으로
짐작은 하고 있었습니다.

그런데 저의 경우 여러 버전의 배포반을 이용하고 있어 배포반 마다 다른 입력기를 사용하고 있습니다.
우분투의 경우 nabi, 페도라는 uim, 오픈수세의 경우 fcitx를 사용하고 있습니다.

물론 ibus는 불편한 점이 많아 잘 사용하지 않지만 열거한 모든 입력기에서
같은 현상이 발생하는 것을 확인 하고는 짜증에 크롬으로 기본 브라우저를 변경하여 사용하고 있습니다.

조금은 바빠서(^^;) 일일이 xim 관련 패키지를 확인해 보지는 않아
님께 부끄러운 점은 있지만 참고로 xim과 연관된 모든 입력기에 동일한 증상이 있다는 것을 말씀 드려 봅니다.

단순히 나비만의 문제가 아닌 xim 자체에 문제가 있는 것 같습니다.
그러나 해당 팁은 상당히 유용하게 이용될 수 있을 것입니다.

기본으로 nabi를 사용하는 유저입니다. 파이어폭스에서 지속적으로 드랍다운 메뉴가 안보이는 현상이 일어나길래, 위 팁을 보고 파이어폭스에사만 ibus를 사용하게 했습니다.
처음에는 드랍다운 메뉴가 사라지는 현상이 사라진듯이 보였습니다. 그러나, 사용도중 ibus를 끄던, nabi를 끄던 파이어폭스를 재시작 시키더라도 드랍다운 메뉴가 사라지는 문제가 발생했습니다. 입력기를 교체하여 해결될 문제가 아닐듯 싶습니다.

일단 저도 protochaos님께서 제기하신 문제에 대한 심각한 고민과 함께 xim 관련 소스를 많이 검토해 보았습니다.

nabi의 경우에만 검토를 해보고 다른 입력기는 검토해 보지 않아 꼭 맞는 해결책은 아니지만
나비를 기본 입력기로 사용하시는 경우 imhangul-gtk2, imhangul-gtk3 패키지를 nabi와 함께
설치하시면 파이어폭스에서 드롭다운 메뉴가 사라지는 문제를 해소 할 수 있습니다.

저의 경우 xim 소스에 개인적으로 코드를 첨가해 해결하였으나
imhangul-gtk2, imhangul-gtk3 패키지 소스를 보니 불필요한 일을 했다 싶더군요…^^

KDE를 사용하시는 분의 경우 qimhangul-qt4도 함께 설치하시면 qtcurve 사용 시
파이어폭스 드롭다운 메뉴가 사라지는 문제를 해결하실 수 있습니다. 참고하십시오.

ibus는 말씀하신 위의 코드를 부가적으로 사용 하더라도 드롭다운 메뉴가 사라지는 문제는 해결되지 않더군요!
이러나 저러나 ibus는 다른 심각한 버그가 많아 추천하기에는 뭐하군요!
특히 KDE 사용자에게는 결코 추천하고 싶지 않습니다.

uim 또는 fcitx의 경우 더 많은 검토가 필요할 것 같습니다.

imhangul-gtk3와 imhangul-gtk2를 설치해도 여전한데, 어째야 하나요?

그런가요! 제가 이용하고 있는 환경은 KDE 4.11.2, nabi 1.0.0-1, firefox 24.0에서 테스트 였습니다.
unity에서는 테스트 해보지 않아 장담드릴 순 없겠네요!

gnome 3.9에서는 fedora 19에서 테스트 였습니다. 동일한 버전으로 나비와 imhangul은 직접 컴파일 하여 사용했습니다.

unity도 gtk 환경이므로 재부팅 해서 해보시지요!

imhangul이라 저는 이 패키지를 삭제 했습니다.
imhangul 라이브러리는 동적으로 so파일을 로드합니다.
그래서, 그놈터미널을 열면, ibus, nabi등이 사용되는 것이 아니라,
시스템입력기로 imhangul이 사용됩니다.

그래서 삭제해 버렸습니다. 삭제 한 후로는 설정한 입력기가 기본 시스템 입력기로 잡히더군요.

firefox에서 ibus를 사용한 후, 저는 그런 문제가 다시 발생하지 않았습니다.
문제의 근원은 나비등이 아니라 xim자체에 발생하는 관계로,
xim을 사용하지 않으면 되는 것이 아닙니까?

QT_IM_MODULE
GTK_IM_MODULE
QT4_IM_MODULE 등을 설정하면, 해당 환경에서는 설정된 입력기가 사용됩니다.

nabi 사용시 문제가 발생하는 것은
XMODIFIERS=@im=nabi
GTK_IM_MODULE=xim
이런 설정으로 xim을 사용하여야 하기 때문에, 피할 수 없었던 것이 아닌가요?

ibus를 사용하더라도, ibus-daemon -drx 등으로 (x옵션은 xim을 로드하는 옵션입니다)
xim을 사용할 경우, 마찬가지 문제가 발생하리라 봅니다.

[quote:2y4ibz3t]nabi 사용시 문제가 발생하는 것은
XMODIFIERS=@im=nabi
GTK_IM_MODULE=xim
이런 설정으로 xim을 사용하여야 하기 때문에, 피할 수 없었던 것이 아닌가요?[/quote:2y4ibz3t]

네. 저도 님의 말씀 처럼 xim을 사용하지 않으면 제기하신 문제를 피할 수 있을 것으로 예측하여
KDE에서 우선 나름 님의 소스와 비슷한 코드를 이용하여 문제를 해결할 수 있었습니다.

물론 ibus를 이용하지는 않았습니다만 님께서 나름 완벽한 해결책을 제시하여 주셨다 생각했는데
막상 소스를 적용해 보니 같은 문제가 발생하여 조금은 의아한 부분이 있어 이 문제에 대해 확신을 가질 수 없었습니다.

나름 검토하다 문제는 위의 소스에서 처럼 ibus, fcitx, uim등으로 전환하더라도
어차피 위의 입력기 소스를 검토해 보면 xim과 매우 긴밀한 연관성을 가지고 있어
100% 문제가 해결되지 않을 것으로 예측하였습니다.

그래서 이리 저리 알아보다 xim을 사용하면서 gtk에 공통으로 사용할 수 있는
입력 시스템인 imhangul을 알게 되었습니다.

이를 적용해 보니 쉽게 문제가 해결되어 글을 적어 보았습니다.

또한 imhangul은 GTK_IM_MODULE=hangul2 설정으로 쉽게 xim과 치환할 수 있으며
두벌식, 세벌식등의 전환이 보다 자유롭고 특별한 코드가 필요하지도 않아
초보자들에게 보다 유용할 것 같아 글을 남겼습니다.

너그럽게 이해해 주십시오. 저도 위에서 열거하신 protochaos 님의 해결책에 동의하는 바입니다.

음…! 금일 쿠분투 13.10 판올림 하였습니다.

판올림 되면서 이 문제는 해결된 것 같습니다. 그렇지 않나요? 쿠분투만 그런가요…?
unity는 사용을 하지 않아서 잘은 모르겠지만…^^
괜히 헛수고만 한 것 같습니다.

다른 분께서 ubuntu 13.10을 사용해 보시고 알려 주시면 감사하겠습니다.

제가 반문한 것은 공격적으로 토를 단 것이 아니라,
그것에 대한 확신이 부족하기에… 물어본 것입니다.
그래야 다른 분들도 아니면 아니라고 답을 달고, 저도 확실하게 알 수 있으니까요.

내부적으로 xim을 사용할 수 도 있겠죠.
뭐 소스를 살펴본 것이 아니라서요.

사실 제가 알려드린 방법도 문제가 많습니다.
firefox를 업데이트 하는 경우, 쉘스크립트가 복원됩니다.
APT-GET에 트리거를 걸어 고쳐주는 방법도 있지만, 아니면 일일이 고쳐줘야 하는 것이 불편하죠.

원칙적으로 해결이 되길 바라지만, 오래된 문제가 뭐 쉽게 고쳐지지 않을 것 같습니다.

process님의 코드에서 필요한 내용만 가져다 썻더니, 정상적으로 ibus가 종료되지 않더군요.
exec함수가 왜 존재하나 했더니, firefox가 exec 명령으로 프로세서를 대치하고 있었네요!
trap이 bash 내장 명령이었던걸 알았더라면, nohup로 수정하지 않았을텐데…
bash는 사용자가 모르는 기능이 정말 많네요!

[quote="별님":kdtyckdz]process님의 코드에서 필요한 내용만 가져다 썻더니, 정상적으로 ibus가 종료되지 않더군요.
exec함수가 왜 존재하나 했더니, firefox가 exec 명령으로 프로세서를 대치하고 있었네요!
trap이 bash 내장 명령이었던걸 알았더라면, nohup로 수정하지 않았을텐데…
bash는 사용자가 모르는 기능이 정말 많네요![/quote:kdtyckdz]

읔 process가 아니라 protochaos입니다 :cry:

님 말씀대로, 불여우스크립트가 exec로 프로세스를 엎치기 때문에,
exec명령을 그냥 실행하도록 대체한 것입니다.

그리고, nohup대신 pdetach라는 것이 있습니다.
설치해야 되구요.
기능은 nohup과 같습니다만, 그냥 nohup을 사용할 경우,
현재위치에 nohup.out파일을 만들거나 이게 불가능할 경우 홈디렉토리에 해당 파일을 만들어,
표준출력을 저장합니다. 옵션이 없기에 중구난방으로 nohup.out파일이 생기기 때문에…
이것이 불만이라 pdetach를 설치해서 사용하고 있습니다.

[code:kdtyckdz]
alias nohup=‘pdetach --error=/dev/stderr --output=/dev/stdout’
alias nohupq=‘pdetach --error=/dev/null --output=/dev/null’
[/code:kdtyckdz]

이렇게 설정하고,
nohupq firefox 이렇게 실행합니다.
그러면 터미널상에 메시지가 출력되지 않아서 깨끗합니다.
만일 오류를 저장하고 싶으시면 옵션을 조정하시면 되구요.