
Ubuntu日本語フォーラム

ログインしていません。
外観の設定が起動できません。
表示は、
xxxx@oooo-laptop:~$ gnome-appearance-properties %F /////今のユーザーで外観の表示を起動
(gnome-appearance-properties:1782): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
Segmentation fault /////←が、起動できない原因かもしれません。
xxxx@oooo-laptop:~$ sudo gnome-appearance-properties %F /////Root権限で外観の表示を起動
[sudo] password for xxxx: /////(非表示で今のユーザーのパスワードを入力)
(gnome-appearance-properties:1803): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
/////ここでちゃんと起動。(Root権限で。)
(gnome-appearance-properties:1803): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
xxxx@oooo-laptop:~$
(一部、事情上、かくしています。'xxxxとoooo')
となりました。
(gnome-appearance-properties:1803): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
もエラーなのでしょうけど、起動しない主な原因は、
Segmentation fault
だと思います。直し方が分かる方、教えてください。
オフライン
エラーの原因は詳しく調べてませんが、参考までに、
Segmentation fault は書き込み禁止アドレスに書き込もうとした時などに発生するエラーで、プログラムのバグです。
調べる箇所は以下となります。
(gnome-appearance-properties:1782): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
オフライン
バグかも?
https://bugs.launchpad.net/ubuntu/+source/gnome-control-center/+bug/518368
修正版がアップされたので、アップデートしてください。
sudo apt-get upgrade
オフライン
アップデートしましたが、同じようなエラーが発生します。
(gnome-appearance-properties:2666): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
Segmentation fault
って感じです。
オフライン
管理者権限で実行してみると、このようになりました。
xxxx@oooo-laptop:~$ sudo gnome-appearance-properties %F
(gnome-appearance-properties:2700): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
(gnome-appearance-properties:2700): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
xxxx@oooo-laptop:~$
やはり、エラーはでますが、表示はされます。
でも、xxxxユーザーでは実行できません。
オフライン
きがついたのですが、UbuntuTweakの「管理者権限で外観のテーマを修正」が勝手にチェックされているのですが、
なにか関係はあるのでしょうか?(外しても、もう一回見てみたら付いてる。)
xxxx@oooo-laptop:~$ ubuntu-tweak
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.6/ubuntutweak/modules/lockdown.py", line 88, in on_fix_theme_btn_taggled
proxy.unlink_file(ROOT_THEMES)
File "/usr/lib/pymodules/python2.6/dbus/proxies.py", line 140, in __call__
**keywords)
File "/usr/lib/pymodules/python2.6/dbus/connection.py", line 620, in call_blocking
message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Python.OSError: Traceback (most recent call last):
File "/usr/lib/pymodules/python2.6/dbus/service.py", line 702, in _message_cb
retval = candidate_method(self, *args, **keywords)
File "/usr/lib/pymodules/python2.6/ubuntutweak/backends/daemon.py", line 189, in unlink_file
os.unlink(path)
OSError: [Errno 21] Is a directory: '/root/.themes'
上が実行時のエラーメッセージです。(チェックを外したときの。)
オフライン
ルートでログインしたりルートになったままで通常の操作を行っていませんでしたか?
マルチユーザーのOSなので別ユーザー(今回はroot)で導入したツールは別ユーザーの管理下になります。
通常のユーザーで sudo を使い一時的に権限を借りる方法を試して下さい。
オフライン
元の問題は分かりませんが、
#9 はおそらく、~/.themes が /root/.themes へのシンボリックリンクになっていることが原因だとおもいます。
hiroさんの「ルートでログインしたりルートになったままで通常の操作を行っていませんでしたか?」が
的を得ていると思われます。
$ find ~/ -user root -ls
でroot所有のファイルが存在しないか、チェックしてください。
出てくるようなら所有者を直してください。
オフライン
#11 の補足です。蛇足かもしれませんが。
~/.themes が /root/.themes へのシンボリックリンクの場合は
~/.themes は削除してください。
オフライン
root所有のファイルはありませんでしたが、gdmの外観設定でgdmがバグったので、
「gdm」と「Humanのログオン画面のアイコンテーマ(?)」の再セットアップをしたのですが、
その再セットアップ後、正常に動作しました。ありがとうございました。
「Humanのログオン画面のアイコンテーマ(?)」が原因だったようです。でも、
(gnome-appearance-properties:1420): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
(gnome-appearance-properties:1420): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
は、解決していませんので、よろしくお願いします。
オフライン
pc944 さん
アイコン画像に「現在は9.10」とあるのですが、
使用環境は10.04 lucid でしょうか。
(Karmicだと上記のメッセージが1つだけ、Lucidでは2つでます。)
以下、ちょっと長いのですが、大事な内容を含んでいるので我慢して読んでください。
#1で sudo を使用してGUIアプリケーションを起動していますが、これは止めるべきです。
https://help.ubuntu.com/community/RootSudo
You should never use normal sudo to start graphical applications as root. You should use gksudo (kdesudo on Kubuntu) to run such programs. gksudo sets HOME=~root, and copies .Xauthority to a tmp directory. This prevents files in your home directory becoming owned by root. (AFAICT, this is all that's special about the environment of the started process with gksudo vs. sudo).
gksudoは環境変数HOMEを~rootに設定し、.Xauthority を/tmp にコピーして通常ユーザのホームディレクトリの下にルート所有のファイルが作成される事を防止しますと書いてあります。
アプリケーションがユーザのホームディレクトリを取得する方法は複数あって、
環境変数を参照する方法をとっているアプリケーションはsudoとgksudoで動作が異なってしまいます。
#1ではsudoを使用しているにも関わらず、/root/.themesが作成されます。
これはgnome-appearance-propertiesが環境変数を使用せずに g_get_home_dir() という関数で
ホームディレクトリを取得いるからです。
#11,#12はシンボリックリンクの方向が逆でしたすいません。
ただしくは /root/.themes -> ~/.themes のシンボリックリンクです。
#9のエラーは正確には下記のような理由によるものです。
ubuntu-tweakで「管理者権限で外観のテーマを修正」は
ONにすると上記シンボリックリンクを作成し、
OFFにすると /root/.themes を削除します
しかし/root/.themesがシンボリックリンクではなく
通常のディレクトリであるために削除に失敗しています。
これはgdmやHumanテーマとはまったく関係なく、
$ sudo gnome-appearance-properties %F
して /root/.themes が実ディレクトリで作成されたことに起因します。
そして本題です。
(gnome-appearance-properties:1420): Gdk-CRITICAL **: gdk_display_sync: assertion `GDK_IS_DISPLAY (display)' failed
現在はこのメッセージだけ出ていて、あとは正常に動いている状態でしょうか?
私の環境ではメッセージだけ出ていて、あとは正常に動いています。
今回の件に関してはおそらく、このメッセージだけでなら無視して問題ないと思います。
gdk_display_syncの説明を見ると
http://library.gnome.org/devel/gdk/stable/GdkDisplay.html#gdk-display-sync
gdk_display_sync はウィンドウシステムへのリクエストが処理される間で待機して
同期をとるための関数と記述してあります。
失敗していてもウィンドウシステムへのリクエストはそのうち処理されるはずです。
ソースを取得してみるとgdk_display_syncを使用しているところは1ヶ所だけで、
直前の操作は情報の取得のみ、gdk_error_trap_pop の戻りもチェックしていないので
失敗しても問題ないと推定できます。
(GTKやGDKの知識は無いので自信はありません。
探したのはgnome-control-centerパッケージ内のみで
依存しているライブラリなどで使っているかもしれません。)
appearance-effects.c
gchar*
get_current_window_manager (void)
{
Window *xwindow;
Atom type;
gint format;
gulong nitems;
gulong bytes_after;
gchar *name;
XGetWindowProperty (GDK_DISPLAY (),
GDK_ROOT_WINDOW (),
XInternAtom (GDK_DISPLAY (),
"_NET_SUPPORTING_WM_CHECK",
False),
0,
G_MAXLONG,
False,
XA_WINDOW,
&type,
&format,
&nitems,
&bytes_after,
(guchar **) &xwindow);
if (type != XA_WINDOW)
return NULL;
gdk_error_trap_push ();
XSelectInput (GDK_DISPLAY (),
*xwindow,
StructureNotifyMask | PropertyChangeMask);
XSync (GDK_DISPLAY (), False);
if (gdk_error_trap_pop ())
{
XFree (xwindow);
return NULL;
}
name = NULL;
gdk_error_trap_push ();
XGetWindowProperty (GDK_DISPLAY (),
*xwindow,
XInternAtom (GDK_DISPLAY (),
"_NET_WM_NAME",
False),
0,
G_MAXLONG,
False,
XInternAtom (GDK_DISPLAY (),
"UTF8_STRING",
False),
&type,
&format,
&nitems,
&bytes_after,
(guchar **)&name);
gdk_display_sync (GDK_DISPLAY ());
gdk_error_trap_pop ();
XFree (xwindow);
return name;
}オフライン
##オフトピ
MidSpecLowLoadさん、長い間保留にしていた"sudo" "gksudo"に付いての疑問に決着が付きました。
ありがとうございます。
オフライン