ノートPC のサスペンドを無効化

1. ノートPC の上面部を倒して しまうと勝手にサスペンドしてしまう


ノートPC を常時稼動させて いるが、自身で操作を行わない際には液晶部の ある PC 上面部を閉じて しまいたく なる
そうしないと、液晶部やキーボード部に埃(ほこり)が積み上げられて しまい、見た目が汚らしく なって しまうからで ある

しかし、そうすると困った事に、 PC 上面部を倒して しまうと OS が勝手にサスペンドして しまうので ある

私は これを抑止させたいので ある
screenblank は有効化して おいても良いので あるが...

なお、ここでは名称としてサスペンド(suspend) の語を使用しているが、リジューム(resume) やスリープ(sleep) の方が正しいかも知れない
時々サスペンドとハイバネート(hibernate) を混同している者も いたり するので あるが、これは機能違いで あるかと思う
resume の語を何故かレジュームと発音する人が多いが、発音表記は "rɪzúːm" なので、明らかに誤用で あろう

ディストリビューションは Debian (8.0 jessie) を想定して いる



2. acpid の設定ファイルと shutdown


先(ま)ずは acpid が参照する設定ファイルの内容を確認して見る

ls -lR /etc/acpi/ /etc/acpi/: drwxr-xr-x 2 root root 4096 5月 25 10:04 events -rwxr-xr-x 1 root root 1191 10月 23 2014 powerbtn-acpi-support.sh /etc/acpi/events: -rw-r--r-- 1 root root 64 6月 24 2010 powerbtn-acpi-support


ファイルは この 2つしか無かったので、ぞれぞれを読み進めて行く

cat /etc/acpi/events/powerbtn-acpi-support

event=button[ /]power
action=/etc/acpi/powerbtn-acpi-support.sh

記述は これしか無い

cat /etc/acpi/powerbtn-acpi-support.sh

if [ -f /etc/acpi/events/powerbtn -o -f /etc/acpi/events/powerbtn.dpkg-bak ] ; then

logger Acpi-support not handling power button, acpid handler exists at /etc/acpi/e

vents/powerbtn or /etc/acpi/events/powerbtn.dpkg-bak.

exit 0

fi

[ -e /usr/share/acpi-support/policy-funcs ] || exit 0

. /usr/share/acpi-support/policy-funcs

if { CheckPolicy || HasLogindAndSystemd1Manager; }; then

exit 0

fi

if [ -x /etc/acpi/powerbtn.sh ] ; then

# Compatibility with old config script from acpid package
/etc/acpi/powerbtn.sh

elif [ -x /etc/acpi/powerbtn.sh.dpkg-bak ] ; then

# Compatibility with old config script from acpid package
# which is still around because it was changed by the admin
/etc/acpi/powerbtn.sh.dpkg-bak

else

# Normal handling.
/sbin/shutdown -h -P now "Power button pressed"

fi

私はプログラマでは無いので この shell script の内容は良く分からないが、恐らくは以下の 2ファイルが存在しないので あれば、

/etc/acpi/events/powerbtn
/etc/acpi/powerbtn.sh.dpkg-bak


条件分岐が飛ばされて最後に以下が実行されると言う事か

/sbin/shutdown -h -P now


shutdown -h now ならば分かるか -P は分からなかった
と言う訳(わけ)で調べて見ると、

man shutdown

OPTIONS

The following options are understood:

-P, --poweroff

Power-off the machine (the default).

-h

Equivalent to --poweroff, unless --halt is specified.

-h は --halt が指定されて いなければ電源断、そして -P は有無を言わさず電源断と言う事か
# 実の所、これを並べて実行させる意義が私には良く分からないので あるが、-h だけで良いのでは無いかと思う

要するに PC 上面部を閉じると PC の電源ボタンが押されたものと見做(みな)されて しまい、電源ボタン断実行はサスペンド実行と同義で あると何処(どこ)かに定義されているのか、OS サスペンドが強制執行されて しまう、と理解した

そんなアホな!

因(ちな)みに、acpid が停止していても acpi コマンドは利用出来る

acpi -V

Battery 0: Unknown, 89%
Battery 0: design capacity 3987 mAh, last full capacity 3703 mAh = 92%
Adapter 0: on-line
Thermal 0: ok, 47.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 99.0 degrees C
Thermal 0: trip point 1 switches to mode passive at temperature 98.0 degrees C
Cooling 0: LCD 0 of 15
Cooling 1: Processor 0 of 10
Cooling 2: Processor 0 of 10

そう言うものか..



3. acpid の動作を把握し切れない…


acpid 関連の設定ファイルを編集する事で、PC 上面部を閉じてもサスペンドを抑止する事は可能で あるのかも知れない
しかし、どの様(よう)に記述すれば良いのか分からなかったので、安直に acpid を停止させて しまえば良いで あろうと考えるに至った

先ずは acpid の現状態を確認する

/etc/init.d/acpid status

● acpid.service - ACPI event daemon

Loaded: loaded (/lib/systemd/system/acpid.service; disabled)
Active: active (running) since 土 2015-06-06 17:28:42 JST; 38min ago

Main PID: 553 (acpid)

CGroup: /system.slice/acpid.service

mq553 /usr/sbin/acpid

6月 06 17:28:42 angelica acpid[553]: starting up with netlink and the input layer
6月 06 17:28:42 angelica acpid[553]: 1 rule loaded
6月 06 17:28:42 angelica acpid[553]: waiting for events: event logging is off

acpid を停止して見る

/etc/init.d/acpid stop
Stopping acpid (via systemctl): acpid.serviceWarning: Stopping acpid.service, but it can still be activated by:

acpid.path
acpid.socket

.

停止したにも拘(かか)わらず、未(ま)だ機能している部分が あると言うのか?

試(こころ)みに PC 上面部を閉じて見ると、

Reply from 192.168.1.15: bytes=32 time<1ms TTL=63
Reply from 192.168.1.15: bytes=32 time<1ms TTL=63
Reply from 192.168.1.15: bytes=32 time<1ms TTL=63
Reply from 192.168.1.15: bytes=32 time<1ms TTL=63
Request timed out.
Request timed out.
Request timed out.
Request timed out.

やはりサスペンドして しまう
何故か...?


4. acpid の泥沼施行


然(しか)らば acpid を元から断(た)つ事と する
取り敢えず ここで Linux を再起動して おく

acpid の自動起動状態を確認する

insserv -s |grep acpid
S:02:2 3 4 5:acpid

acpid は run level 2,3,4,5 で自動起動し停止指定は存在しない
ならば これを無効化して OS 起動時にも acpid を起動させなく すれば良いのでは無いか?

insserv acpid,stop=2,3,4,5

これでもサスペンドして しまう

cd /etc/acpi
mv powerbtn-acpi-support.sh powerbtn-acpi-support.sh.org

/etc/init.d/acpid restart

これでもサスペンドして しまう

cd /etc/acpi/events
mv powerbtn-acpi-support powerbtn-acpi-support.org

/etc/init.d/acpid restart

これでもサスペンドして しまう

何故なので あろうか……原因が分からない...

cd /etc/acpi/events
cp -p powerbtn-acpi-support.org powerbtn-acpi-support
vi powerbtn-acpi-support

変更前

event=button[ /]power
action=/etc/acpi/powerbtn-acpi-support.sh

変更後

#event=button[ /]power
#action=/etc/acpi/powerbtn-acpi-support.sh

/etc/init.d/acpid restart

これでもサスペンドして しまう

cd /etc/acpi
cp -p powerbtn-acpi-support.sh.org powerbtn-acpi-support.sh
vi powerbtn-acpi-support.sh

変更前

else

# Normal handling.

# /sbin/shutdown -h -P now "Power button pressed"


変更後

#else

# Normal handling.

# /sbin/shutdown -h -P now "Power button pressed"


/etc/init.d/acpid restart

これでもサスペンドして しまう


困(こう)じ果てて しまい、次に PC 上面部を閉じる動作を抽出して不指定と する事を試(こころ)みた

cd /etc/acpi/events
cp -p powerbtn-acpi-support lid
vi lid

event=button.lid.*
#action=/etc/acpi/powerbtn-acpi-support.sh

/etc/init.d/acpid restart

これでもサスペンドして しまう

vi lid

event=button.lid.*
action=

/etc/init.d/acpid restart

やはり これでもサスペンドして しまう


その上で、powerbtn-acpi-support.sh を空文化する事も試みた

cd /etc/acpi
vi powerbtn-acpi-support.sh

変更後

#!/bin/sh

exit 0

/etc/init.d/acpid restart

これでもサスペンドして しまう


acpi-support-base パッケージが導入されて いないのかと思ったが、導入は行われて いる

dpkg -l |grep acpi-support-base ii acpi-support-base 0.142-6 all scripts for handling base ACPI events such as the power button


困った......分からん......



5. systemd の設定変更でサスペンドを抑止


完全に行き詰まって しまったので、少し acpid から離れて調べる

そして、システム管理デーモン等(など)と呼称されている systemd に辿(たど)り着いた
この systemd 配下のログインマネージャ(logind) が PC 上面部を handle close (手動で閉じる、との意か) した際の動作を規定していると言う
# そうなのか? いや、私は初見で あった

と言う事で、PC 上面部を閉じた際の制御を変更して見る

cd /etc/systemd
cp -p logind.conf logind.conf.org
vi logind.conf

変更前

#HandleLidSwitch=suspend

変更後

HandleLidSwitch=ignore

/etc/init.d/acpid restart

これでもサスペンドして しまう
えっ、これで制御しているのでは無いのかょ、おい?

OS の再起動が必要なのかも知れないと考え(いや、これは Windows みたいで微妙に嫌な考え方では あるが…)、試して見た

いや、正解で あった!
これで PC 上面部を閉じてもサスペンドが発生しない事を確認出来た

いやはや随分と廻(まわ)り道を して しまったが、これで解決で ある



6. 関連 URI


参考と なる URI は以下の通り

systemd - Wikipedia

公開 : 2015年6月7日
戻る
pagetop