Como detecto quando um terminal obtém foco no Linux?

5

Eu quero ser capaz de saber quanto tempo gasto na frente de um terminal. Estou pensando que o melhor caminho será ter um temporizador que comece e pare quando o terminal ganhar / perder o foco. E terá que trabalhar com vários terminais ...

Alguma ideia? Estou usando o GNOME.

    
por lobati 23.06.2011 / 03:06

3 respostas

2

Se a sua shell de terminal tiver acesso fácil à sua própria ID de janela X, você provavelmente está fazendo algo errado! Eles não têm nada a ver um com o outro - por exemplo, você poderia (e deveria) estar executando trabalhos longos dentro de screen , o que poderia, em teoria, ser enviado para qualquer número de terminais em qualquer lugar do mundo.

Dito isto, a maneira como eu resolvo este problema é usando a habilidade do prompt de atualizar o "status" / "title" de um terminal para relatar o PID do shell, como no prompt a seguir:

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

Qualquer pseudo-terminal mostrando o shell com este prompt e o PID 6399 tem um título como user@host:~ [6399] . Então , usando uma ferramenta como wmctrl , você pode escrever um script bash como este:

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

Isso pesquisa a lista de janelas e fornece a (s) ID (s) da X Window de qualquer final com esse título. Assim, a função win_from_pid $$ pode informar sua (s) ID (s) de janela no mesmo host que está executando o script, se houver. Você pode descobrir como determinar o foco a partir daí. :)

    
por 21.07.2011 / 19:47
1

Você pode fazer uma estatística no terminal e obter as horas de acesso ou modificação.

stat /dev/pts/2
    
por 29.06.2011 / 02:12
0

Espero que você tenha que escutar as mensagens da janela X para a mensagem FOCUS apropriada. Não tenho certeza de quão fácil / difícil será.

Como alternativa, link fala sobre como determinar a janela com foco e oferece algumas opções: você pode usar essa técnica e apenas executá-la em um loop e rastrear as alterações de foco.

    
por 23.06.2011 / 03:24