Ubuntuでのサスペンドの抑止


あんまり頻繁に使わない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)