Linuxでスクリーンセーバーを無効にするためのより良いクロスDEの方法は何ですか?ここで何かを見つけましたが、それはgnome-screensaver専用です。キーストロークまたはX.OrgAPIをシミュレートして、スクリーンセーバーのアクティブ化を無効にする方法があるかどうか疑問に思っています。
3 に答える
私はこれをしばらく前に調べていましたが、最終的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)
これは理想的ではありませんが、dbus
またはgnome-screensaver-command
.
私は呼び出しが本当に好きではなくxwininfo
、よりクリーンな方法があればいいのにと思いますが、これまでのところより良いものを見つけることができませんでした. このアプローチのもう 1 つの問題xwininfo
は、アプリ ウィンドウの代わりにルート ウィンドウの ID を使用することです。ルート ウィンドウの代わりにアプリ ウィンドウ ID を使用するresume_screensaver
と、ウィンドウが破棄されるとすぐに再開されるため、メソッドの必要性がなくなります。
また、キーストロークをシミュレートしたい場合は、私がしばらく使用してきた単純な bash スクリプトを次に示します。xdotool
個別にインストールする必要があります。
#!/bin/bash
while :
do
sleep 200
nice -n 1 xdotool key shift
echo .
done
アップデート
上記の python ソリューションを 1 年以上使用した後、ときどきゾンビ プロセスや のインスタンスが多すぎることがわかったので、掘り下げた後、 Gnome 固有xdg-screensaver
のより単純な代替手段を見つけましたが、非 Gnome DE (XFCE) は、Gnome デスクトップがなくてもコア Gnome ライブラリが多くの GTK ベースのアプリで必要とされるためです。
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()