OK, co próbowałeś? Co powiedział Google? Czy próbowałeś dowiedzieć się, w jaki sposób wygaszacz ekranu to wykrywa? Poświęć trochę czasu na wyszukiwanie przed zamieszczeniem tutaj pytań i przeczytaj Jak zadać dobre pytanie .
terdon
Znalazłem tylko program, xautolockale nie ma przykładów
Odpowiedzi:
20
Korzystam z programu wywoływanego w xprintidlecelu sprawdzenia czasu bezczynności X, który, jak przypuszczam, używa tego samego źródła danych co wygaszacze ekranu. xprintidlewydaje się, że nie ma już dodatkowej wersji, ale pakiet Debiana jest żywy i ma się dobrze.
Jest to bardzo prosta aplikacja: zwraca liczbę milisekund od ostatniej interakcji X:
(uwaga: ze względu na podstawowy system będzie konsekwentnie dawać wartość w ms nieco niższą niż „rzeczywisty” czas bezczynności).
Możesz użyć tego do stworzenia skryptu, który uruchamia określoną sekwencję po pięciu minutach bezczynności, np .:
#!/bin/sh# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))# Sequence to execute when timeout triggers.
trigger_cmd(){
echo "Triggered action $(date)"}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()while sleep $(((sleep_time+999)/1000));do
idle=$(xprintidle)if[ $idle -ge $IDLE_TIME ];thenif! $triggered;then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fielse
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))fidone
Przesunięcie 100 ms wynika z wcześniej zauważonego dziwactwa, xprintidlektóre zawsze wykona czas nieco mniejszy niż „rzeczywisty” czas bezczynności, gdy zostanie wykonany w ten sposób. Będzie działał bez tego przesunięcia, a następnie będzie dokładniejszy do jednej dziesiątej sekundy, ale spowoduje xprintidlegorączkowe sprawdzenie w ciągu ostatnich milisekund przed końcem interwału. W żadnym wypadku nie świnia wydajnościowa, ale uważałbym to za nieeleganckie.
Podobne podejście zastosowałem w skrypcie Perla (wtyczka irssi) od dłuższego czasu, ale powyższe zostało właśnie napisane i tak naprawdę nie zostało przetestowane, z wyjątkiem kilku próbnych przebiegów podczas pisania.
Spróbuj, uruchamiając go w terminalu w X. Polecam ustawienie limitu czasu np. 5000 ms na testowanie i dodanie set -xbezpośrednio poniżej, #!/bin/shaby uzyskać informacje wyjściowe, aby zobaczyć, jak to działa.
Po ich zainstalowaniu skompilowałem powyższe w następujący sposób:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Możesz zobaczyć, że jest w stanie zgłosić liczbę sekund, które X wykrywa jako czas bezczynności, uruchamiając go w następujący sposób:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it
0.035000
Korzystając z tego pliku wykonywalnego, możesz stworzyć skrypt, który może zrobić coś takiego, monitorując zgłaszany czas bezczynności xidle.
$ while[1];do idle=$(./xidle);[ $( echo "$idle > 5"| bc )-eq 0]&& echo "still < 5"|| echo "now > 5";
sleep 2;done
still <5
still <5
still <5
now >5
now >5
still <5
still <5
still <5
Powyższe pokazuje, still < 5aż upłynie 5 sekund bezczynności, w którym to momencie zaczyna mówić now > 5, co oznacza, że minęło ponad 5 sekund.
UWAGA: Możesz włączyć swój notify-send 'a'do powyższego przykładu.
xautolock
ale nie ma przykładówOdpowiedzi:
Korzystam z programu wywoływanego w
xprintidle
celu sprawdzenia czasu bezczynności X, który, jak przypuszczam, używa tego samego źródła danych co wygaszacze ekranu.xprintidle
wydaje się, że nie ma już dodatkowej wersji, ale pakiet Debiana jest żywy i ma się dobrze.Jest to bardzo prosta aplikacja: zwraca liczbę milisekund od ostatniej interakcji X:
(uwaga: ze względu na podstawowy system będzie konsekwentnie dawać wartość w ms nieco niższą niż „rzeczywisty” czas bezczynności).
Możesz użyć tego do stworzenia skryptu, który uruchamia określoną sekwencję po pięciu minutach bezczynności, np .:
Przesunięcie 100 ms wynika z wcześniej zauważonego dziwactwa,
xprintidle
które zawsze wykona czas nieco mniejszy niż „rzeczywisty” czas bezczynności, gdy zostanie wykonany w ten sposób. Będzie działał bez tego przesunięcia, a następnie będzie dokładniejszy do jednej dziesiątej sekundy, ale spowodujexprintidle
gorączkowe sprawdzenie w ciągu ostatnich milisekund przed końcem interwału. W żadnym wypadku nie świnia wydajnościowa, ale uważałbym to za nieeleganckie.Podobne podejście zastosowałem w skrypcie Perla (wtyczka irssi) od dłuższego czasu, ale powyższe zostało właśnie napisane i tak naprawdę nie zostało przetestowane, z wyjątkiem kilku próbnych przebiegów podczas pisania.
Spróbuj, uruchamiając go w terminalu w X. Polecam ustawienie limitu czasu np. 5000 ms na testowanie i dodanie
set -x
bezpośrednio poniżej,#!/bin/sh
aby uzyskać informacje wyjściowe, aby zobaczyć, jak to działa.źródło
Używam
xssstate
do takich celów. Jest dostępny wsuckless-tools
pakiecie w Debianie lub Ubuntu lub powyżej .Następnie możesz użyć następującego skryptu powłoki:
źródło
Oto aplikacja C, którą znalazłem, którą możesz skompilować.
Do zbudowania potrzebuje kilku bibliotek. W moim systemie Fedora 19 potrzebowałem następujących bibliotek:
Po ich zainstalowaniu skompilowałem powyższe w następujący sposób:
Możesz zobaczyć, że jest w stanie zgłosić liczbę sekund, które X wykrywa jako czas bezczynności, uruchamiając go w następujący sposób:
Korzystając z tego pliku wykonywalnego, możesz stworzyć skrypt, który może zrobić coś takiego, monitorując zgłaszany czas bezczynności
xidle
.Powyższe pokazuje,
still < 5
aż upłynie 5 sekund bezczynności, w którym to momencie zaczyna mówićnow > 5
, co oznacza, że minęło ponad 5 sekund.UWAGA: Możesz włączyć swój
notify-send 'a'
do powyższego przykładu.Bibliografia
źródło
Porty bsd (kolekcja pakietów) ma program, który może to zrobić:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
jest dostępny np. tutaj:
http://distcache.freebsd.org/local- distfiles / novel / xidle-26052015.tar.bz2
buduj jak:
zauważ, że -program musi zawierać pełną ścieżkę do pliku binarnego, ponieważ jest przekazywany do execv ().
źródło