このBlogは移転しました。今後は aish.dev を御覧ください。

Ubuntuをスリープさせても、マウスが動いただけで復帰してしまう件

最近、Thinkpad君にドッキングステーションをつけてデスクトップとしても使っているが、スリープ中ちょっとでも机にふれてマウスが動くとすぐ目を覚ましてしまう。敏感過ぎるだろ!夜泣き激しすぎて育児ノイローゼになるわ!っということで、Ubuntu 12.04 でマウスではスリープから復帰しないように設定したメモ。

lsinputコマンドで、マウスの接続先を探す

# lsinput

/dev/input/event0
   bustype : BUS_HOST
   vendor  : 0x0
   product : 0x5
   version : 0
   name    : "Lid Switch"
   phys    : "PNP0C0D/button/input0"
   bits ev : EV_SYN EV_SW

/dev/input/event1
   bustype : BUS_HOST

...
...

このPCでは、/dev/input/event6 にマウスが見つかった

/dev/input/event6
   bustype : BUS_USB
   vendor  : 0x45e
   product : 0x773
   version : 273
   name    : "Microsoft Microsoft® Nano Trans"
   phys    : "usb-0000:00:1a.7-5.4/input1"
   uniq    : ""
   bits ev : EV_SYN EV_KEY EV_REL EV_ABS EV_MSC


いちおう、input-eventsコマンドでほんとにつながってるか確認してみよう

~# input-events 6
/dev/input/event6
   bustype : BUS_USB
   vendor  : 0x45e
   product : 0x773
   version : 273
   name    : "Microsoft Microsoft® Nano Trans"
   phys    : "usb-0000:00:1a.7-5.4/input1"
   uniq    : ""
   bits ev : EV_SYN EV_KEY EV_REL EV_ABS EV_MSC

waiting for events
16:33:12.127234: EV_REL REL_X 3
16:33:12.127241: EV_REL REL_Y -14
...
...

acpiのデバイス指定を確認する

/proc/acpi/wakeupから、マウスが接続されているデバイス名を確認する

# cat /proc/acpi/wakeup
Device	S-state	  Status   Sysfs node
LID	  S3	*enabled   
SLPB	  S3	*enabled   
IGBE	  S4	*enabled   pci:0000:00:19.0
EXP0	  S4	*disabled  pci:0000:00:1c.0
EXP1	  S4	*disabled  pci:0000:00:1c.1
EXP2	  S4	*disabled  
EXP3	  S4	*disabled  pci:0000:00:1c.3
USB0	  S3	*enabled   pci:0000:00:1d.0
USB3	  S3	*enabled   pci:0000:00:1a.0
USB5	  S3	*enabled   pci:0000:00:1a.2
EHC0	  S3	*enabled   pci:0000:00:1d.7
EHC1	  S3	*enabled   pci:0000:00:1a.7
HDEF	  S4	*disabled  pci:0000:00:1b.0

マウスがつながっているノード pci:0000:00:1a.7 は、'EHC1' という名前になっているようだ。現在、'EHC1' は 'enabled' になっていて、スリープからの復帰が有効になっている。これを無効にするには、

# echo EHC1 > /proc/acpi/wakeup

とすれば良い。もう一度

# echo EHC1 > /proc/acpi/wakeup

とすれば、再び有効になる。

rc.localを編集する

起動時にマウスによる復帰が無効とするために、/etc/rc.localに以下の記述を追加する。

r=`cat /proc/acpi/wakeup | grep "EHC1\s*\w\+\s*\*enabled"`
if [ -n "$r" ] ; then
    echo EHC1 > /proc/acpi/wakeup
fi