Sprawdzanie stanu blokady i czasu śledzenia od ostatniej zmiany stanu
Teraz, jeśli chcesz śledzić, jak długo ekran był zablokowany, możesz zastosować inne podejście.
#!/bin/bash# To implement this, you can put this at the top of a bash script or you can run# it the subshell in a separate process and pull the functions into other scripts.# We need a file to keep track of variable inside subshell the file will contain# two elements, the state and timestamp of time changed, separated by a tab.# A timestamp of 0 indicates that the state has not changed since we started# polling for changes and therefore, the time lapsed in the current state is# unknown.
vars="/tmp/lock-state"# start watching the screen lock state(# set the initial value for lock state["$(gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked | grep -ioP "(true)|(false)")"=="true"]&& state="locked"|| state="unlocked"
printf "%s\t%d" $state 0>"$vars"# start watching changes in state
gdbus monitor -e -d com.canonical.Unity-o /com/canonical/Unity/Session|while read line
do
state=$(grep -ioP "((un)?locked)"<<<"$line")# If the line read denotes a change in state, save it to a file with timestamp for access outside this subshell["$state"!=""]&& printf "%s\t%d" ${state,,} $(date +%s)>"$vars"done)&# don't wait for this subshell to finish# Get the current state from the vars exported in the subshellfunction getState {
echo $(cut -f1 "$vars")}# Get the time in seconds that has passed since the state last changedfunction getSecondsElapsed {if[ $(cut -f2 "$vars")-ne 0];then
echo $(($(date +%s)-$(cut -f2 "$vars")))else
echo "unknown"fi}
Zasadniczo ten skrypt sprawdza zmiany w stanie zablokowania ekranu. Po wprowadzeniu zmian czas i stan są zrzucane do pliku. Możesz przeczytać ten plik ręcznie, jeśli chcesz lub korzystasz z funkcji, które napisałem.
Jeśli chcesz znacznika czasu zamiast liczby sekund, spróbuj:
date -ud @$(getSecondsElapsed)| grep -oP "(\d{2}:){2}\d{2}"
Nie zapomnij o -uprzełączniku, który zmusza program daty do ignorowania strefy czasowej.
w końcu mogę to przetestować, dzięki! dlatego lubię nie przyjmować własnej odpowiedzi, kiedy odpowiadam sobie, aby później mogły wyjść lepsze rzeczy :)
Aquarius Power
1
Na grep -ioP "(true)|(false)"ten działa również:grep -oE "true|false"
wjandrea
5
ekran jest faktycznie zablokowany przez Unity i musimy go użyć gdbus
Nie jestem zbyt dobrze zaznajomiony, ale jak to zrobić bez monitorowania? jak tylko zapytanie?
Noitidart,
1
jedyną opcją, jaką znalazłem, było monitorowanie go (być może istnieje sposób na zapytanie, ale nie mogłem znaleźć, mimo że próbowałem), myślę, że dzieje się tak, ponieważ moment, w którym ekran jest zablokowany, nie jest już przechowywany, więc monitor być jedynym sposobem, aby pokazać, kiedy to się stanie.
Wodnik Moc
Mam na myśli, spróbuj też, jeśli znajdziesz, powiedz mi lub dodaj odpowiedź: D
Aquarius Power
Ach, haha, ok, spróbuj znaleźć to nie jest dobre z Linuksem, jestem facetem z Windows: P po prostu koduję kilka rzeczy, więc przeszukuję Internet.
a pomoc, którą otrzymałem, była podobna do tego, co powiedziała wcześniej Aquarius Power, z tym wyjątkiem, że była zawarta w demonie bash scrip, który może działać w tle. Uważam, że jest to bardzo pomocne. więc spójrz na moje Pytanie i odpowiedz, i zobacz, czy to ci również pomoże.
grep -ioP "(true)|(false)"
ten działa również:grep -oE "true|false"
ekran jest faktycznie zablokowany przez Unity i musimy go użyć
gdbus
pokaże to, kiedy zostanie zablokowane, np .:
źródło
Miałem podobny pytanie tutaj
a pomoc, którą otrzymałem, była podobna do tego, co powiedziała wcześniej Aquarius Power, z tym wyjątkiem, że była zawarta w demonie bash scrip, który może działać w tle. Uważam, że jest to bardzo pomocne. więc spójrz na moje Pytanie i odpowiedz, i zobacz, czy to ci również pomoże.
źródło