あんまり頻繁に使わないPCで通常はサスペンドにしておきたいけど、SSHで接続している時だけはサスペンドにしたくないという話。
方法は色々ありそうでD-Busを直接触ったりした方が正しそうなのだけど、面倒なので条件に合致したらマウスを1px動かすみたいない姑息な手段で解決する事にしました。
#!/bin/bash
function idlebreak () {
DISPLAY=':0' xdotool mousemove_relative 1 0
return
}
if [ $( who | grep pts | wc -l) -gt 0 ];
then
idlebreak;
fi
これをcrontabなどで1分おきとかで登録しておけば良いです。上の例ではwhoコマンドでSSH経由で入ってきている人がいないかチェックしています。
下記のコードでは現在アイドル状態になってから何秒経ったのかを確認できます。デバッグでおすすめ。
#!/usr/bin/python3
import dbus
import os
import sys
import time
# 環境変数DISPLAYが空の時はやめる
if not "DISPLAY" in os.environ:
print("DISPLAY is not set")
sys.exit(0)
session_bus = dbus.SessionBus()
bus_object = session_bus.get_object('org.gnome.Mutter.IdleMonitor', '/org/gnome/Mutter/IdleMonitor/Core')
bus_interface = dbus.Interface(bus_object, 'org.gnome.Mutter.IdleMonitor')
while(1):
current_idle_sec = bus_interface.GetIdletime()/1000
print(current_idle_sec)
time.sleep(2)