![如何知道我的计算机有多长时间没有通过 GUI 使用过?](https://linux22.com/image/1142834/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E6%88%91%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%9C%89%E5%A4%9A%E9%95%BF%E6%97%B6%E9%97%B4%E6%B2%A1%E6%9C%89%E9%80%9A%E8%BF%87%20GUI%20%E4%BD%BF%E7%94%A8%E8%BF%87%EF%BC%9F.png)
我如何才能知道我的电脑有多长时间没有通过鼠标或键盘进行输入?
答案1
如何查看空闲时间;计算机没有鼠标或键盘输入的时间
要查看空闲时间,您需要打印空闲:
sudo apt-get install xprintidle
为了演示该
xprintidle
操作,请运行:sleep 5 && xprintidle
...显示空闲时间毫秒
如果您想持续在终端中显示空闲时间:
while true; do xprintidle && sleep 1; done
当然,xprintidle
可以在脚本中使用它来提供更优雅的方式来关注空闲时间,但基本上就是这样。
只是为了好玩
...由于我们现在做任何事情都使用指标,因此举一个如何在 GUI 中显示空闲时间的示例,使用xprintidle
:
#!/usr/bin/env python3
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
import os
import subprocess
currpath = os.path.dirname(os.path.realpath(__file__))
class Indicator():
def __init__(self):
self.app = 'show_idlet'
iconpath = os.path.join(currpath, "idle.png")
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.set_menu())
self.timer = Thread(target=self.check_recent)
self.timer.setDaemon(True)
self.timer.start()
def set_menu(self):
# quit
menu = Gtk.Menu()
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
menu.append(item_quit)
menu.show_all()
return menu
def showtime(self, section):
return (2-len(str(section)))*"0"+str(section)
def convert_time(self, time):
hrs = self.showtime(str(int(time/3600)))
mins = self.showtime(str(int((time%3600)/60)))
secs = self.showtime(str(time%60))
return hrs+":"+mins+":"+secs
def check_recent(self):
while True:
time.sleep(1)
idle = round(int(subprocess.check_output(
["xprintidle"]).decode("utf-8").strip())/1000)
GObject.idle_add(
self.indicator.set_label,
self.convert_time(idle), self.app,
priority=GObject.PRIORITY_DEFAULT
)
def stop(self, source):
Gtk.main_quit()
Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()