使用Python禁止屏幕保护程序

Linux中禁用屏幕保护程序的跨DE方法有什么用?我在这里找到了something,但它只适用于gnome-screensaver.我想知道是否有任何方法可以模拟击键或某些X.Org API来禁用屏幕保护程序激活.

解决方法:

我不久前一直在研究这个问题,最后结束了使用xdg-screensaver,我通过subprocess调用它.

import subprocess

def suspend_screensaver():
    window_id = subprocess.Popen('xwininfo -root | grep xwininfo | cut -d" " -f4', stdout=subprocess.PIPE, shell=True).stdout.read().strip()

    #run xdg-screensaver on root window
    subprocess.call(['xdg-screensaver', 'suspend', window_id])

def resume_screensaver(window_id):
    subprocess.Popen('xdg-screensaver resume ' + window_id, shell=True)

这并不理想,但显然没有其他解决方案不会涉及到特定于DE的东西,如dbus或gnome-screensaver-command.

我真的不喜欢对xwininfo的调用,并希望有一个更清洁的方式,但到目前为止找不到更好的东西. xwininfo方法的另一个问题是它使用根窗口的id而不是app窗口.使用应用程序窗口ID而不是根窗口将删除对resume_screensaver方法的需要,因为它会在窗口被销毁后立即恢复.

如果你想模拟击键,这是一个我用了一段时间的天真的bash脚本.它确实需要xdotool,必须单独安装.

#!/bin/bash
while : 
do
   sleep 200
   nice -n 1 xdotool key shift
   echo .
done

UPDATE

在使用上面的python解决方案超过一年之后,发现它偶尔会创建僵尸进程和/或xdg-screensaver的太多实例,所以在挖掘之后,我发现了一个更简单的替代方案,它是Gnome特定的,但适用于我甚至在非Gnome DE(XFCE)中,因为即使你没有Gnome桌面,许多基于GTK的应用程序也需要核心Gnome库.

import subprocess

def suspend_screensaver():
    'suspend linux screensaver'
    proc = subprocess.Popen('gsettings set org.gnome.desktop.screensaver idle-activation-enabled false', shell=True)
    proc.wait()

def resume_screensaver():
    'resume linux screensaver'
    proc = subprocess.Popen('gsettings set org.gnome.desktop.screensaver idle-activation-enabled true', shell=True)
    proc.wait()
上一篇:什么是轻量应用服务器?与ECS云服务器有什么区别?


下一篇:linux – 没有X的硬件加速