LINUX.ORG.RU

Определить idle или нет

 , , ,


0

1

Доброго времени суток. Пишу небольшой скрипт для себя с помощью python-xlib и потребовалось узнать мне, в какие моменты пк простаивает, чтобы это можно было отслеживать.

В гугле нашёл много ссылок на один и тот же кусок кода, в оригинале аж 2007-го года, который использует библиотеку C, но у меня сомнения:

1) неужели за это время не придумали ничего более удобного?

2) если всё же так, как мне это впихнуть в свой цикл?

Я использую в цикле next_event(), который ориентируется на Xlib.X.PropertyChangeMask: т.е. он реагирует на изменения в заголовках окон, например, и, когда пк неактивен, по идее вообще никаких event'ов происходить не будет.

Сразу лучше скажу зачем мне это: я хочу знать, сколько времени было открыто то или иное окно, но я не хочу засорять эти данные тем временем, когда пк бездействовал.

Ответ на: комментарий от int13h

А как мне LA поможет? ПК может делать кучу работы, притом без участия мыши/клавиатуры.

conformist ★★★
() автор топика

Вот тебе минимальный пример на Go. На пистон сам переложишь.

package main

import (
	"log"
	"os"
	"time"

	"github.com/BurntSushi/xgb"
	"github.com/BurntSushi/xgb/screensaver"
	"github.com/BurntSushi/xgb/xproto"
)

func main() {
	conn, err := xgb.NewConnDisplay(os.Getenv("DISPLAY"))
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()
	if err := screensaver.Init(conn); err != nil {
		log.Fatal(err)
	}
	root := xproto.Setup(conn).DefaultScreen(conn).Root
	for range time.Tick(time.Second) {
		info, err := screensaver.QueryInfo(conn, xproto.Drawable(root)).Reply()
		if err != nil {
			log.Fatal(err)
		}
		log.Println(time.Duration(info.MsSinceUserInput) * time.Millisecond)
	}
}

PS: тут уже готовое, что ты пытаешься сделать.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

github.com/BurntSushi/xgb

скажите, а все на Go такие странные? Ну, т.е. как вообще — это хорошей практикой считается в коде иметь ссылки на левые ресурсы?

demidrol ★★★★★
()
Ответ на: комментарий от demidrol

как и в любых других репах, install_requires в setup.py, ruby-gems, npm, bower, у товарища криокамера протекла просто

anonymous
()
Ответ на: комментарий от kachan

по моему глубокому убеждению, такая информация указывается где-нибудь в пакетном менеджере, в README, но никак не в сорсах. Следить за зависимостями — задача мейнтейнера пакета, а не разработчика.

demidrol ★★★★★
()
Ответ на: комментарий от demidrol

Думаю вам стоит почитать чуть больше о Голенге. Вообще есть и пакетный менеджер, а это просто импорт пакета по «названию»(урлу) просто пакетный менеджер его подтянет его и все, и он будет локально с зафиксированой версией.

kachan ★★
()
Ответ на: комментарий от beastie

Спасибо большое, похоже ровно то, что нужно.

src/github.com/dim13/gone/http.go:57: time.Duration(d).Truncate undefined (type time.Duration has no field or method Truncate)
go version
go version go1.6.2 linux/amd64

Стоит обновить golang?

conformist ★★★
() автор топика
Последнее исправление: conformist (всего исправлений: 1)
Ответ на: комментарий от conformist

Вопрос снимается, обновил и всё собралось. Спасибо ещё раз.

conformist ★★★
() автор топика
Ответ на: комментарий от demidrol

скажите, а все на Go такие странные?

Да, все.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.