5

Я хочу быть в состоянии определить, сколько времени я провожу перед терминалом. Я думаю, что лучший способ будет иметь какой-то таймер, который запускается и останавливается, когда терминал получает / теряет фокус. И это будет работать с несколькими терминалами ...

Есть идеи? Я использую GNOME.

3 ответа3

2

Если ваша терминальная оболочка имеет легкий доступ к своему собственному идентификатору окна X, вы, вероятно, делаете что-то не так! Они не имеют ничего общего друг с другом - например, вы можете (и должны) выполнять длинные задания на screen которые теоретически могут выводить на любое количество терминалов в любой точке мира.

Тем не менее, я решаю эту проблему, используя возможность подсказки обновлять "статус"/"заголовок" терминала для сообщения PID оболочки, как в следующем приглашении:

PS1=\u@\H:\w\$\ \[\e]2;\u@\H:\w [$$]\a\]

Любой псевдотерминал, показывающий оболочку с этим приглашением и PID 6399, имеет заголовок вроде user@host:~ [6399] . Затем, используя такой инструмент, как wmctrl, вы можете написать скрипт bash, такой как этот:

win_from_pid() {
   type wmctrl &>/dev/null || return 1
   wmctrl -l | awk '/^.*\['"$1"'\]$/ { print $1 }'
}

Это выполняет поиск в списке окон и дает вам идентификаторы X Window любого конца, заканчивающегося этим заголовком. Таким образом, функция win_from_pid $$ может сообщить вам идентификаторы вашего окна на том же хосте, на котором выполняется скрипт, если таковой имеется. Вы можете выяснить, как определить фокус оттуда. :)

1

Вы можете сделать статистику на терминале и получить время доступа или изменения.

stat /dev/pts/2
0

Я ожидаю, что вам придется прослушивать сообщения X-окна для соответствующего сообщения FOCUS. Не уверен, насколько легко / сложно это будет, хотя.

В качестве альтернативы https://stackoverflow.com/questions/1014822/how-to-know-which-window-has-focus-and-how-to-change-it рассказывает об определении окна с фокусом и предоставляет несколько вариантов: Вы можете использовать эту технику и просто запустить ее в цикле и отслеживать изменения фокуса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .