[Ubuntu/Kubuntu] パッケージをアップグレードしたらVMware Server Consoleが動かなくなった場合の対処

2008/11/28PC::VMware

Kubuntu 8.04を導入しているメインマシンに導入されているVMware Server Consoleが先日のKernel 2.6.24-21から2.6.24-22へのパッケージアップグレードを機に動作しなくなった。その際に再びVMware Server Consoleが動作するように対処したときのメモ。

環境

VMware Server ホスト

  • Debian GNU/Linux 4.0(etch)/i386
  • VMware Server 1.0.6

VMware Server クライアント

  • Kubuntu 8.04.1 日本語ローカライズド(i386)
  • VMware Server Console 1.0.6

現象

VMware Server ConsoleがKatapultから起動させることが出来なくなった。で、vmware-server-console-distribに含まれているインストールスクリプトを叩いて再インストールしても立ち上がらず。直接VMware Server Consoleを叩くと以下のようなエラーを吐いていることを確認。

kaede@reika:/usr/local/bin/vmware-server-console-distrib$ vmware-server-console
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)

対処法

VMware Serverクライアントに導入されているGCCは4.2.4 (Ubuntu 4.2.4-1ubuntu3)。要求されているGCCは3.4または4.2.0。このあたりの整合性の問題でエラーを吐いて起動しないと考えられる。
いろいろ調べた結果、以下のファイルをリネームすればいいらしい。

$ cd /usr/lib/vmware-server-console/lib
$ sudo mv libpng12.so.0/libpng12.so.0{,.bak}
$ sudo mv libgcc_s.so.1/libgcc_s.so.1{,.bak}

他にもwrapper-gtk24.shにパッチを当てる方法でも対処できるらしい。参考にしたWebサイトにてその方法も紹介されています。

おそらく

対象のlibgcc_sライブラリについて調べてみたらvmware-server-consoleにて用意されたものの他に導入されていた。

$ find /usr -name "libgcc_s*"
/usr/lib/gcc/i486-linux-gnu/4.2/libgcc_s.so
/usr/lib/vmware-server-console/lib/libgcc_s.so.1
/usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1.bak

おそらくVMware Server Consoleにて用意されているライブラリを優先的に参照し、GCCのバージョン不整合によりエラーが発生しているものと考えられる。一方、GCCのバージョンと整合性が取れているものは/usr/lib/gcc/i486-linux-gnu/4.2/以下に導入されていると考えられる。
問題のファイルをリネームすることで、優先順位が低く設定されているVMware Server Consoleにて用意されている方ではないlibgcc_sが利用させるようになり、エラーが解消されるのであろう。

参考

VMware Server Consoleにおけるキーバインドのカスタマイズ

2008/10/05PC::VMware

LinuxではXmodmapでのキーバインドのカスタマイズはゲストOSには反映されません。生のキーコードがそのままゲストOSへ渡されているようですが、以下の手順にて変更することが可能です。

環境

以下の環境で確認しました

  • Kubuntu 8.04.1 日本語ローカライズド
  • キーボード: 日本語キーボード(jp106)
  • VMware Server 1.0.6
  • VMware Server Console 1.0.6

変更前のキーコード調査

xevなどで調査可能です。

KeyPress event, serial 32, synthetic NO, window 0x4600001,
    root 0x1e9, subw 0x0, time 191321504, (65,176), root:(2378,200),
    state 0x0, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

上記の場合はCapsLockを押した場合のイベントですが、キーコードは66であることがわかります。

VMware Server Consoleでのキーの割り当て

日本語キーボードでのVMware Server Consoleでのキーのコードは以下に記載されています。
/usr/lib/vmware/xkeymap/jp106

Escape                  = 0x001
1                       = 0x002
2                       = 0x003
3                       = 0x004
4                       = 0x005
5                       = 0x006
6                       = 0x007
7                       = 0x008
8                       = 0x009
9                       = 0x00a
0                       = 0x00b

上記は/usr/lib/vmware/xkeymap/jp106の抜粋ですが、Escapeは0x001ということがわかります。このリストから目当てのキーの機能とコードを探します。

実際に変更してみる

CapsLockと左Ctrlを入れ替える場合は次のようになります。

~/.vmware/preferencesに以下を追加する。

xkeymap.useKeycodeMapIfXFree86 = true
# CapsLock -> L_Control
xkeymap.keycode.66 = 0x01d
# L_Control -> CapsLock
xkeymap.keycode.37 = 0x03a

関連記事

[Linux] VMware Server Consoleで「\」「_」が入力できない問題への対応

2008/10/05PC::VMware

Linux環境にてVMware Server Consoleで「\」「_」のキー入力が無視されてしまうという問題への対処法。

~/.vmware/preferencesに以下を追加する。

xkeymap.useKeycodeMapIfXFree86 = true
xkeymap.keycode.211 = 0x073

発生した環境

  • Kubuntu 8.04 日本語ローカライズド
  • VMware Server 1.0.6
  • VMware Server Console 1.0.6
  • キーマップ: 日本語キーボード

参考

VMware Toolsのインストール @ Ubuntu 8.04 (Hardy) VM

2008/09/10PC::VMware

UbuntuのリポジトリにはVMware Toolsのパッケージが用意されているので、Debian VMにVMware Toolsをインストールする方法ではなく、aptで導入する方法が楽です。

導入するパッケージは以下の通り。

  • open-vm-tools
  • open-vm-tools-gui

導入するだけでVMware Toolsの基本機能及び、ゲストOSのウィンドウサイズへの追従などが自動的に有効になります。

動作確認環境

VMware環境
VMware Server 1.0.6
仮想マシンOS
Kubuntu 8.04.1 日本語ローカライズド

[Kubuntu/Ubuntu] VMware ServerでUSB機器を利用する

2008/08/31PC::VMware

Debianのサーバだけではなく、KubuntuのメインマシンにもVMware Serverを導入しているのだが、KubuntuマシンではどういうわけかUSBが利用できなかったので調べてみた。

環境

VMware Server環境1
Debian GNU/Linux 4.0(etch)
VMware Server環境2
Kubuntu 8.04.1 (Hardy Heron)
VMware Server
1.0.6
VMware Server Console
1.0.6

VMware ServerにおけるUSBデバイスの検出

VMware ServerはホストにUSBデバイス接続された際に、/proc/bus/usb/以下にUSBデバイスファイル*1が作成されることを期待しているようです。Debian etchではVMware Serverが期待するように/proc/bus/usb/以下にデバイスファイルが生成されますが、Kubuntuでは/dev/bus/usb/以下にデバイスファイルが生成され、/proc/bus/usb/以下には生成されません。このため、KubuntuをホストOSとする場合にVMware ServerはUSBデバイスを検出できず、結果としてゲストOSでUSBデバイスを利用できないということが起こっています。

*1 : 正式名称は何というのでしょうか?

解決策

/etc/init.d/mountdevsubfs.shを編集することで、/proc/bus/usb/以下にUSBデバイスファイル?が作成されるようにします。

#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb

上記部分のコメントを外す。

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

編集後に以下のコマンドを実行

$ sudo /etc/init.d/mountdevsubfs.sh

これでVMware Server Consoleで接続するとUSBデバイスが利用できるようになっているはずです。

参考