適当に翻訳する。
VineLinux6.3にて、自作のX11関連ライブラリをインストールして再起動したら、GNOMEの音量調節アプレットが消えてしまった。
音量調節アプレットは、もともとは日付表示やネットワーク表示等に並んで表示されていた。
「システム」→「設定」→「ハードウェア」→「サウンド」からの音量変更を試みたところ、「サウンド設定」の画面を開くことができず、かわりに変なメッセージが出てきた。
ついでに「キーボード」の設定もできない。
「.xsession-errors」を見ると、次のようなエラーが書き込まれていた。
...
...
...
** (gnome-settings-daemon:2219): WARNING **: /usr/lib64/libXtst.so.6: undefined symbol: _XEatDataWords
** (gnome-settings-daemon:2219): WARNING **: Cannot load plugin 'Sound' since file '/usr/lib64/gnome-settings-daemon-2.0/libsound.so' cannot be read.
** (gnome-settings-daemon:2219): WARNING **: Error activating plugin 'Sound'
...
...
...
/usr/bin/pulseaudio: symbol lookup error: /usr/lib64/libXi.so.6: undefined symbol: _XEatDataWords
** (gnome-volume-control-applet:2246): WARNING **: Connection failed, reconnecting...
/usr/bin/pulseaudio: symbol lookup error: /usr/lib64/libXi.so.6: undefined symbol: _XEatDataWords
...
...
...
/usr/bin/pulseaudio: symbol lookup error: /usr/lib64/libXi.so.6: undefined symbol: _XEatDataWords
** (gnome-volume-control-applet:2246): WARNING **: Connection failed, reconnecting...
/usr/bin/pulseaudio: symbol lookup error: /usr/lib64/libXi.so.6: undefined symbol: _XEatDataWords
...
...
...
まず解決方法を述べ、それから原因を述べる。
解決方法は、「libXi」と「libXtst」(及びこれらが依存しているもの)を作ってインストールして「sudo ldconfig」を実行するだけ。
再起動しなくても即座に音量調節アプレットが復活した。
「_XEatDataWords」とは何なのか。
[user77@localhost ~]$ ls /usr/lib64 | grep X11
...
...
libX11.so.6.3.0*
...
[user77@localhost ~]$ ls /usr/local/lib | grep X11
...
...
libX11.so.6.3.0*
...
[user77@localhost ~]$ nm /usr/lib64/libX11.so.6.3.0 | grep XEat
000000000001d920 T _XEatData
000000000001d8f0 T _XEatDataWords
[user77@localhost ~]$ nm /usr/local/lib/libX11.so.6.3.0 | grep XEat
000000000004c1ad T _XEatData
[user77@localhost ~]$
VineLinux6.3に元からあるlibX11、/usr/localにある自作のlibX11、どちらも「libX11.so.6.3.0」なのに自作の方には「_XEatDataWords」が無い。
何故か?
自分が作ったlibX11は「libX11-1.5.0」であり、libX11-1.5.0/src/xcb_io.cを見ると、
... ... /* Read and discard "n" 8-bit bytes of data */ void _XEatData(Display *dpy, unsigned long n) { dpy->xcb->reply_consumed += n; _XFreeReplyData(dpy, False); } ... ...
とあるものの、「_XEatDataWords」はどこを探しても存在しない。
ところが、最新の「libX11-1.6.12」のsrc/xcb_io.cを見ると、
... ... /* Read and discard "n" 8-bit bytes of data */ void _XEatData(Display *dpy, unsigned long n) { dpy->xcb->reply_consumed += n; _XFreeReplyData(dpy, False); } /* * Read and discard "n" 32-bit words of data * Matches the units of the length field in X protocol replies, and provides * a single implementation of overflow checking to avoid having to replicate * those checks in every caller. */ void _XEatDataWords(Display *dpy, unsigned long n) { if (n < ((INT_MAX - dpy->xcb->reply_consumed) >> 2)) dpy->xcb->reply_consumed += (n << 2); else /* Overflow would happen, so just eat the rest of the reply */ dpy->xcb->reply_consumed = dpy->xcb->reply_length; _XFreeReplyData(dpy, False); } ... ...
とあり、新たな関数「_XEatDataWords」が追加されている。
2つの「libX11.so.6.3.0」は元となるパッケージの版番号が違ったのか…。
てっきり自分で作ったものの方が新しいのかと思っていたが、そうでもなかったようだ。
中国人から送られてきたメールが文字化けしていて読めなかった。(Sylpheed 3.4.2)
その時の解決法を記録。
メール本文は「表示」→「文字エンコーディング」→「簡体字中国語(GBK)」を選んだら読めるようになったが、件名(Subject)だけは文字化けしたまま。
「設定」→「全般の設定」→「表示」→「エンコーディング」→「既定の文字エンコーディング」をいじってみても、本文しか変わらない。
受信箱に表示されているメールを右クリックして、「表示(V)」→「メッセージのソース(A)」からソースを見た。
すると、
...
...
From: 〜〜〜
Subject: =?gb2312?〜〜?=
Thread-Topic: =?gb2312?〜〜?=
Thread-Index: 〜〜
Date: 〜〜〜
Message-ID:
...
...
とあり、「簡体字中国語(GBK)」ではなく「簡体字中国語(GB2312)」が指定されていることがわかった。
メール本文は、GB2312では文字化けし、GBKでは正常表示になったので、この「?gb2312?」に問題がある。
「gb2312」のところを「gbk」に書き換え、再度Sylpheedで読み込むと、件名が正常に表示されるようになった。
(メールの本体ファイルは「inbox」ディレクトリにあった。)
(変更後) ...
...
From: 〜〜〜
Subject: =?gbk?〜〜?=
Thread-Topic: =?gbk?〜〜?=
Thread-Index: 〜〜
Date: 〜〜〜
Message-ID:
...
...
「Subject:」の場所だけ変更すれば良い。
他の「?gb2312?」は変えても変えなくても問題なかった。どの形式で解釈するのか、Sylpheedで指定できるため。
カレンダー
カテゴリー
最新コメント
最新記事
ブログ内検索
広告