忍者ブログ

素人翻訳

適当に翻訳する。

GNOMEの音量調節アプレットが消えた

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」は元となるパッケージの版番号が違ったのか…。

てっきり自分で作ったものの方が新しいのかと思っていたが、そうでもなかったようだ。

PR

Windows Vistaの「マイコンピュータ」にSSDが表示されない

 linux機で外付け SSD を FAT32(LBA)形式に初期化し、ファイルをいくつか書き込んだ。それを Windows Vista で見ようとしたところ、Vistaでは SSD の内容が全く表示されなかった。Windows Vista に SSD を接続した時、デバイスドライバが正常にインストールされましたと報告されるが、「マイコンピュータ」には SSD が表示されない。linux では読み書きできるのに。

 この現象は、ファイルシステム構築(mkdosfs)のやり方が拙かった所為かもしれない。

 fdisk でパーティションを作ったあと、「/dev/sdb」にファイルシステムを作ってしまった。

[user15@localhost ~]$ sudo fdisk /dev/sdb
[user15@localhost ~]$ sudo fdisk -l
...
...
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
ヘッド 81, セクタ 63, シリンダ 191411, 合計 976773168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x1fd01bb0

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 976773167 488385560 c W95 FAT32 (LBA)
[user15@localhost ~]$ sudo mkdosfs -F 32 /dev/sdb
mkdosfs 3.0.11 (24 Dec 2010)
mkdosfs: Device partition expected, not making filesystem on entire device '/dev/sdb' (use -I to override)
[user15@localhost ~]$ sudo mkdosfs -F 32 -I /dev/sdb

 こうして出来たファイルシステムは、linuxでは読み書き可能だが、Windows Vista には認識されない。

 一度全部消して、「/dev/sdb1」にファイルシステムを作って解決。

[user15@localhost ~]$ sudo fdisk /dev/sdb
[user15@localhost ~]$ sudo fdisk -l
...
...
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
ヘッド 81, セクタ 63, シリンダ 191411, 合計 976773168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x1fd01bb0

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 976773167 488385560 c W95 FAT32 (LBA)
[user15@localhost ~]$ sudo mkdosfs -F 32 /dev/sdb1

 これで Windows Vista の「マイコンピュータ」で表示されるようになった

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

最新コメント

[08/18 NONAME]
[05/18 NONAME]
[04/09 NONAME]
[03/21 NONAME]
[03/20 NONAME]

最新記事

ブログ内検索

広告

バーコード

広告