私はUbuntuを使用していますが、デスクトップ環境ではなくウィンドウマネージャとしてi3を使用しています。
バッテリーが0%に達すると、警告やその他の情報なしでコンピュータが突然シャットダウンします。
バッテリーが4%のときにスリープモードに切り替えるように設定できる簡単なスクリプトまたは設定はありますか?
答え1
これは、バッテリーレベルを確認し、pm-hibernate
バッテリーレベルが特定のしきい値を下回った場合にカスタムコマンドを呼び出す小さなスクリプトです。
#!/bin/sh
###########################################################################
#
# Usage: system-low-battery
#
# Checks if the battery level is low. If “low_threshold” is exceeded
# a system notification is displayed, if “critical_threshold” is exceeded
# a popup window is displayed as well. If “OK” is pressed, the system
# shuts down after “timeout” seconds. If “Cancel” is pressed the script
# does nothing.
#
# This script is supposed to be called from a cron job.
#
###########################################################################
# This is required because the script is invoked by cron. Dbus information
# is stored in a file by the following script when a user logs in. Connect
# it to your autostart mechanism of choice.
#
# #!/bin/sh
# touch $HOME/.dbus/Xdbus
# chmod 600 $HOME/.dbus/Xdbus
# env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
# echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
# exit 0
#
if [ -r ~/.dbus/Xdbus ]; then
source ~/.dbus/Xdbus
fi
low_threshold=10
critical_threshold=4
timeout=59
shutdown_cmd='/usr/sbin/pm-hibernate'
level=$(cat /sys/devices/platform/smapi/BAT0/remaining_percent)
state=$(cat /sys/devices/platform/smapi/BAT0/state)
if [ x"$state" != x'discharging' ]; then
exit 0
fi
do_shutdown() {
sleep $timeout && kill $zenity_pid 2>/dev/null
if [ x"$state" != x'discharging' ]; then
exit 0
else
$shutdown_cmd
fi
}
if [ "$level" -gt $critical_threshold ] && [ "$level" -lt $low_threshold ]; then
notify-send "Battery level is low: $level%"
fi
if [ "$level" -lt $critical_threshold ]; then
notify-send -u critical -t 20000 "Battery level is low: $level%" \
'The system is going to shut down in 1 minute.'
DISPLAY=:0 zenity --question --ok-label 'OK' --cancel-label 'Cancel' \
--text "Battery level is low: $level%.\n\n The system is going to shut down in 1 minute." &
zenity_pid=$!
do_shutdown &
shutdown_pid=$!
trap 'kill $shutdown_pid' 1
if ! wait $zenity_pid; then
kill $shutdown_pid 2>/dev/null
fi
fi
exit 0
これは非常に簡単なスクリプトですが、アイデアを理解し、必要に応じて簡単に適用できると思います。バッテリーの電源経路はシステムによって異なる場合があります。より移植性の高いアプローチは、同様の方法を使用してacpi | cut -f2 -d,
バッテリ電源を得ることであり得る。このスクリプトは、cronを介して1分ごとに実行するようにスケジュールできます。 crontabを編集しcrontab -e
てスクリプトを追加します。
*/1 * * * * /home/me/usr/bin/low-battery-shutdown
別の解決策は、GnomeやXfceなどのデスクトップ環境をインストールし、ウィンドウマネージャをi3に変更することです。上記の両方のデスクトップ環境には、コンピュータの電源を切るための電源管理デーモンがあります。しかし、私はあなたが意図的にそれらを使用せずにより最小限の解決策を探していると仮定します。
答え2
ラベルに示すようにUbuntuを使用している場合は、独自のスクリプトをハックする必要はなく、upowerパッケージをインストールするだけです。 Ubuntuを含むすべてのDebian派生製品で動作します。デフォルトでは、/etc/UPower/UPower.conf
バッテリーが危険レベルに達すると、ハイブリッドスリープを有効にする構成が付属しています。リスクレベルのデフォルト値は2%です。
他のディストリビューションユーザーの場合、関連項目は次のとおりです/etc/UPower/UPower.conf
。
PercentageAction=2
CriticalPowerAction=HybridSleep
TimeAction
以下と組み合わせて使用することもできますUsePercentageForPolicy=false
。
TimeAction=120
有効な値は、CriticalPowerAction
およびです。 HybridSleepが設定されているが使用できない場合、休止状態モードが使用されます。休止状態が設定されているが使用できない場合は、PowerOffが使用されます。PowerOff
Hibernate
HybridSleep
HybridSleepの利点は、スワップ領域にメモリを書き込むだけでなく、システムを一時停止することです。一時停止するとまだ一部のバッテリーが消費されますが、バッテリーが放電される前に戻ると、休止状態システムよりも一時停止したシステムでより早く再開できます。電源コンセントに戻る前にバッテリーが放電している場合は、電源を入れたときに休止状態でシステムを再開できます。
答え3
Debian ≥ 10 (および比較的新しい Linux システム) から始めたら、/etc/cron.d/check-battery
次の内容を含むファイルを作成するだけです。
* * * * * root [ "$(cat /sys/class/power_supply/BAT0/status)" != Discharging -o "$(cat /sys/class/power_supply/BAT0/capacity)" -gt 30 ] || systemctl suspend
バッテリーが30%に達すると、システムは一時停止します。
もちろん、最後の項目をsuspend
に変更するhybrid-sleep
か、必要に応じてhibernate
自由に変更してください。poweroff
外部ツールやacpi
パッケージも必要ありません。これはMatija Nalisの答えに基づいたアイデアですが、2023年に合わせて調整されました。
答え4
インストールした項目に応じて実装できる電源管理方式が多様なため、これを実装する方法も多様です。
このシンプルなプログラムは、デスクトップ環境なしで小型で高速なicewmウィンドウマネージャを持つミニマリストのDebian Jessieで動作します。 (より良いハードウェアでは、GNOMEよりもパフォーマンスが優れているため、遅すぎるため切り捨てられました。)
特に、次のパッケージをインストールしました。 acpi acpi-fakekey acpi-support acpi-support-base acpid pm-utils ただし、次のいずれも削除されませんでした。 gnome* kde* systemd* uswsusp upower ノートブックモードツール 休止状態ポリシーパッケージ-1
だから私はこれを入れました/etc/cron.d/battery_low_check
(読みやすさのためにすべて1行に分けました)。
*/5 * * * * root acpi --battery |
awk -F, '/Discharging/ { if (int($2) < 10) print }' |
xargs -ri acpi_fakekey 205
速度が速く、リソース使用量が少なく、他のデーモンに依存しません(実際にそのデーモンが有効になっている場合は無視されます。/usr/share/acpi-support/policy-funcs
リソースを参照)。
できること:5分ごとに1回(バッテリーをより頻繁に確認する必要がある場合は、*/5
1分ごとに1回に変更できます)、バッテリーの状態をポーリングします(「*
ACPI - バッテリー「)とxargs -ri
バッテリーが「放電された」状態(すなわち、ACに接続されていない)であり、バッテリー状態が(10%
「整数($2)< 10" - 必要に応じて自由に調整してください。)
acpi_fakekey 205
KEY_SUSPEND
デフォルトでは、ACPIイベントは送信されます(一時停止を要求するためにノートブックのキーを押したときと同様)、通常実行するすべての操作を実行します(で構成されています)/etc/default/acpi-support
。私の場合は、ディスクから休止状態になります。
acpi_fakekey 205
もちろん、代わりに他のコマンドを使用することができます:例えばhibernate
(hibernateパッケージから)s2disk
またはs2mem
(uswsuspパッケージから)、pm-suspend-hybrid
(pm-utilsパッケージから)など。
ところでマジックキー番号はこんな感じです。KEY_SUSPEND=205上記は以下で定義されています/usr/share/acpi-support/key-constants
(他の興味深い内容は次のとおりです。KEY_SLEEP=142)