試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

TuxOnIce + hibernate-scriptとUSBキーボード/マウス

TuxOnIceによる休止状態からの復帰時にUSBのキーボードとマウスが利かなくなる場合がある。これはTuxOnIceとhibernate-scriptのバージョンによって起きたり起きなかったりする。また、全てのUSBキーボード/マウスにこの記事の内容が当てはまるという保証はできない。

  1. 関連デバイスドライバをモジュールにして、復帰前後にモジュールの処理をして対処
  2. バージョンによっては組み込みでも大丈夫?

関連デバイスドライバをモジュールにして、復帰前後にモジュールの処理をして対処

最も確実な対処法は、USB関係とHID関係のデバイスドライバをモジュールにした上で、hibernate-scriptにモジュールの休止時の削除と復帰時の読み込みの設定をすること。しかし、手元の環境では、マウスにevdevを使用すると復帰時にXが再起動*1したりするため、keyboardドライバとmouseドライバで運用することになった。
(2007/11/30)hibernate-script 1.97(1.97-r3)の時点ではevdevでも動作したが、確実に動作するかは怪しく、しばらくこれで運用して様子を見る。
(2007/12/1)一度キーボードが利かなくなり、結局、evdevでは復帰後に確実に動作するとは言えないようだ。


以下はカーネル(2.6.23)での設定例。OHCIUHCIは、使用しているUSBコントローラ(のメーカー)によってどちらか一方が使われる。

Device Drivers  --->
 [*] HID Devices  --->                               [CONFIG_HID_SUPPORT]
  <M> USB Human Interface Device (full HID) support  [CONFIG_USB_HID]
 [*] USB support  --->                               [CONFIG_USB_SUPPORT]
  <M> Support for Host-side USB                      [CONFIG_USB]
  <M> EHCI HCD (USB 2.0) support                     [CONFIG_USB_EHCI_HCD]
  <M> OHCI HCD support                               [CONFIG_USB_OHCI_HCD]
  < > UHCI HCD (most Intel and VIA) support          [CONFIG_USB_UHCI_HCD]

hibernate-scriptの設定例。
(2007/11/30)hibernate-script 1.97(1.97-r3)の時点では以前書いた設定ではうまくいかず、UnloadModulesを使用することで動作することを確認したため、設定を修正。
ファイル名: /etc/hibernate/common.conf

UnloadModules usbhid ehci_hcd ohci_hcd usbcore
LoadModules auto

ohci_hcd」の部分は、UHCIの環境では「uhci_hcd」。

下は、X.orgのkeyboardドライバとmouseドライバを使用する設定の例。
ファイル名: /etc/X11/xorg.conf

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"keyboard"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"jp106"
	Option		"XkbLayout"	"jp"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
EndSection

Identifierの値は「Section "ServerLayout"」の中の名前と合わせておく。

バージョンによっては組み込みでも大丈夫?

Linux 2.6.23/TuxOnIce 3.0-rc1/hibernate-scipt 1.97」の環境では、上で挙げたUSB関連のデバイスドライバを全て組み込みにしてマウスにevdevを使用しても復帰時に問題が出ないことが多く、カーネル組み込みでも大丈夫なのか、様子を見ているところ。*2過去の「Linux 2.6.19/Suspend2 2.2.9/hibernate-script 1.94」という組み合わせでは、組み込みで問題なく安定動作していたが、その後しばらくうまく動いていなかったのでモジュールにしていた。
下はHID関係のデバイスドライバを組み込みにして、マウスにevdevを使用するカーネル設定の例。

Device Drivers  --->
 [*] HID Devices  --->                               [CONFIG_HID_SUPPORT]
  <*> USB Human Interface Device (full HID) support  [CONFIG_USB_HID]
 [*] USB support  --->                               [CONFIG_USB_SUPPORT]
  <*> Support for Host-side USB                      [CONFIG_USB]
  <*> EHCI HCD (USB 2.0) support                     [CONFIG_USB_EHCI_HCD]
  <*> OHCI HCD support                               [CONFIG_USB_OHCI_HCD]
  < > UHCI HCD (most Intel and VIA) support          [CONFIG_USB_UHCI_HCD]
 Input device support  --->
  <*> Event interface                                [CONFIG_INPUT_EVDEV]

hibernate-scriptの設定の中の以下の部分は一時的にコメントアウトしている。
ファイル名: /etc/hibernate/common.conf

# UnloadModules usbhid ehci_hcd ohci_hcd usbcore
LoadModules auto

キーボードにevdevを使用すると何故か配列がおかしくなるので、マウスのみevdevにしている。Xの設定は「man evdev」のものをコピペしてあるだけ。
ファイル名: /etc/X11/xorg.conf

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"keyboard"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"jp106"
	Option		"XkbLayout"	"jp"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"evdev"
	Option		"evBits"	"+1-2"
	Option		"keyBits"	"~272-287"
	Option		"relBits"	"~0-2 ~6 ~8"
	Option		"Pass"		"3"
EndSection

(2007/11/30)その後、何度か復帰後にキーボードが利かなくなることが出たため、USB関連はモジュールにした。
(2008/5/14)「Linux 2.6.25/TuxOnIce 3.0-rc7/hibernate-script 1.97-r4」の組み合わせで、USB関連はカーネル組み込みにしているが、復帰時に操作が利かなくなることはなく動作している。

*1:再起動後は普通に使えるが、作業内容が失われる

*2:dmesgを実行すると、TuxOnIceのデバッグ情報の下あたりに「USB disconnect」というメッセージが毎回出ていることもあり、「Linux 2.6.23/TuxOnIce 3.0-rc1/hibernate-scipt 1.97」において、組み込みにして確実に安定しているとは言えない。実際、まれに復帰後に操作が利かなくなってXが再起動することがある(再起動後は普通に使える)。