私のumpcはサスペンド/休止状態をうまく処理できないため、一定時間アイドル状態になった後にシャットダウンするスクリプトを作成する必要がありました。
メインスクリプト:
#!/bin/bash
idletime=$((15*60*1000)) # 15 min in milliseconds
#idletime=$((5*20*330)) # about one minute, for testing
idle=0
while [ $idle -lt $idletime ];do
idle=`xprintidle`
sleep 1
done
/home/jake/Scripts_Icons/Word_Shutdown
sleep 2
sudo shutdown -P now
スクリプトWord_Shutdown
:
#!/bin/bash
if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then
wmctrl -a "Microsoft Word"
sleep .2
xdotool keydown 0xffea + key 4
sleep .2
xdotool keyup 0xffea
sleep .2
xdotool key y
fi
動作しますが、バッテリー寿命を適切に監視するために、1 回のバッテリー充電でのセッション中の稼働時間を 1 つの稼働時間にまとめたいと思います。
それは可能ですか?tuptime
前のセッションの稼働時間を表示し、現在のセッションの稼働時間の監視を開始するようです。これらの出力を 1 つの読み取り値に結合する方法はありますか3hr 4 min
?
コマンドtuptime
出力:
[jake@P3 ~]$ sudo tuptime -S 2
System startups: 8 since 06:14:53 PM 06/20/2022
System shutdowns: 0 ok + 7 bad
System life: 17h 50m 4s
System uptime: 16.15% = 2h 52m 46s
System downtime: 83.85% = 14h 57m 18s
Average uptime: 21m 36s
Average downtime: 2h 8m 11s
Current uptime: 2h 9m 1s since 09:55:56 AM 06/21/2022
「システム稼働時間」は、シャットダウン間のすべての稼働時間を結合しているようです。
私が試してみました:
tuptime | awk -F'=' '/System uptime:/ {print $2}'
動作しますが、秒と先頭のスペースも出力されます2h 52m 46s
。秒と先頭の空白を削除して、時間と分だけを残す方法はありますか2h 52m
?
それとも、uptime
同様に揺らすことができるハンドルがそれ自体にあるのでしょうか?
答え1
機能するが、バッテリー寿命を適切に監視するために1 回のバッテリー充電でのセッション中の稼働時間を 1 つの稼働時間にまとめたいと思います。
バッテリー寿命を適切に監視するには:
次のようにしてバッテリーのデバイス参照(名前)を特定します
upower -e
。upower -e | grep -i "batt"
upower -i
次のように、バッテリーの参照 (名前) を使用してバッテリー情報を取得します。upower -i /org/freedesktop/UPower/devices/battery_BAT0
出力を
upower -i
絞り込んで、州そのようです:awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
出力を
upower -i
絞り込んで、パーセンテージ「%」なしで次のようにします:awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
# Your shutdown command here
上記の知識を、バッテリーの充電時に5分ごとにシャットダウンコマンド(実際のコマンドに置き換えてください)を実行するスクリプトで使用します。8%以下に達するそれは放電状態そのようです:
#!/bin/bash
while true; do
state="$(awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
percentage="$(awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
[ "$state" == "discharging" ] && [ "$percentage" -le "8" ] && # Your shutdown command here
sleep 300
done
私のumpcはサスペンド/休止状態をうまく処理できないため、一定時間アイドル状態になった後にシャットダウンするスクリプトを作成する必要がありました。
メインスクリプト:
#!/bin/bash ...
メイン スクリプトでは、コマンド置換にバック ティック `...` を使用します。
idle=`xprintidle`
引き続き動作しますが、コマンド置換のバックティックはレガシー機能と見なされます(古いため将来廃止される可能性があります) なので、
$(...)
代わりに次のように使用することをお勧めします。idle=$(xprintidle)
このような重要でないタスクには通話時間が短すぎます... そのため、次のように数秒または 1 分
sleep 1
に延長することをお勧めします。30
sleep 1m
スクリプト
Word_Shutdown
:
#!/bin/bash ...
スクリプト
Word_Shutdown
のこの部分には 2 つの問題があります。if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then
grep "Microsoft Word" 2>&1 | wc -l
まず、 ...を使用する必要はありませんgrep -c "Microsoft Word" 2>&1
。同じ結果が出力されます。次に、評価部分で直接使用されるコマンド置換を引用符で囲み、
if
次のように単語の分割を防ぎます。if test "$(wmctrl -l | grep -c "Microsoft Word" 2>&1)" -eq 1; then
私が試してみました:
tuptime | awk -F'=' '/System uptime:/ {print $2}'
動作しますが、秒と先頭のスペースも出力されます
2h 52m 46s
。秒と先頭の空白を削除して、時間と分だけを残す方法はありますか2h 52m
?
はい、さらに優れた将来性のある方法(例: System uptime
3 つ以上のフィールドが含まれている場合4d 22h 31m 54s
)は次のようになります。
tuptime | awk '/System uptime:/ {for (i=1; i < NF; i++) {if (i > 4) {if (i < (NF - 1)) printf("%s ", $i); else print $i}}}'
「システム稼働時間」は、シャットダウン間のすべての稼働時間を結合しているようです。
それは正しいです。
それとも、稼働時間自体にも同様に調整できるハンドルがあるのでしょうか?
おそらく、この-s
オプションはあなたの場合に便利になるでしょう...男のタップタイム:
-s| --seconds 時間を秒とエポックで出力します
答え2
Tuptime はレポートの範囲を狭める可能性があります。現在のものと前のものだけが必要な場合は、 を使用してtuptime -S -1
、テーブル出力で正しいかどうかを確認します-t
。
両方の稼働時間を一緒に計算するには、次のようにします。
tuptime -S -1 --csv | grep 'System uptime' | cut -d\" -f6 | awk -F\m '{print $1"m"}'
Tuptime csv 出力を使用して簡単に解析し、ターゲット行を一致させ、フィールドを切り取って、「m」の前のテキストを抽出します。