Área de trabalho Cronômetro?

13

Existe um programa que possa servir como um cronômetro dependente do espaço de trabalho? Gostaria de saber quanto tempo passo em cada espaço de trabalho todos os dias.

Edit: Estou usando o Unity.

Gazorpazorp
fonte
Você está usando o Unity?
Jacob Vlijm
Qual gerenciador de desktop você está usando?
David Foerster
1
sim, estou usando o Unity.
Gazorpazorp

Respostas:

11

Boa pergunta!

O script abaixo cria um arquivo de log: ~/viewport_log.txtno diretório inicial, onde informa o tempo de uso da viewport (área de trabalho) da sessão atual por viewport.

O relatório é atualizado uma vez a cada dois segundos, com a aparência (em uma execução rápida):

workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05

no formato

hours:minutse:seconds

Como você pode ver, usei apenas os espaços de trabalho 1, 2, 6 e 8.

Como usar

O script usa o wmctrl -dcomando para obter os dados atuais da janela de visualização, portanto, você precisa instalá-los primeiro:

sudo apt-get install wmctrl

Então:

  1. Copie o script abaixo em um arquivo vazio, salve-o como workspace_log.py
  2. Execute-o de teste pelo comando:

    python3 /path/to/workspace_log.py

    Navegue pelos diferentes espaços de trabalho e abra o arquivo ~/viewport_log.txtpara ver o resultado (alternativamente, execute em um terminal cat ~/viewport_log.txtpara leitura conveniente, pois o log é atualizado uma vez por segundo).

  3. se tudo funcionar como esperado, adicione o comando aos seus aplicativos de inicialização. Como provavelmente travará se o script for iniciado muito cedo (antes que a área de trabalho esteja totalmente carregada), você provavelmente precisará adicionar uma pequena interrupção no comando de inicialização para fazê-lo funcionar como um aplicativo de inicialização. Portanto, o comando é:

    /bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"

    Para adicioná-lo aos Aplicativos de Inicialização: Dash> Startup Applications> Add e adicione o comando.

O script

import subprocess
import os
import time

# define / clear log file
home = os.environ["HOME"]
logfile = home+"/"+"viewport_log.txt"
open(logfile, "wt").write("")
vplist = []

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def get_dt():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

def time_format(s):
    # convert time format from seconds to h:m:s
    m, s = divmod(s, 60)
    h, m = divmod(m, 60)
    return "%d:%02d:%02d" % (h, m, s)

current_time1 = float(time.time())
curr_dt1 = get_dt()

while True:
    time.sleep(2)
    curr_dt2 = get_dt()
    if curr_dt2 == curr_dt1:
        current_time2 = float(time.time())
        span = current_time2-current_time1
        vp = "workspace "+curr_dt1+" . "*10
        vplist.sort(key=lambda x: x[0])
        if not vp in [v[0] for v in vplist]:
            vplist.append([vp, span])
        else: 
            index = vplist.index([vplist[i] for i in range(len(vplist)) if vplist[i][0] == vp][0])
            vplist[index][1] = float(vplist[index][1])+span
        with open(logfile, "wt") as out:
            for item in vplist:
                out.write(item[0]+" "+time_format(item[1])+"\n")
    current_time1 = current_time2
    curr_dt1 = curr_dt2

Propriedades do script

O script calcula o intervalo de tempo exato entre dois momentos nos espaços de trabalho usados ​​desses momentos (2 segundos, intervalo entre linhas time.sleep(2)) se os espaços de trabalho nos dois momentos forem iguais, o tempo será adicionado ao total total do espaço de trabalho correspondente tempo de uso.

Se os espaços de trabalho nos dois momentos forem diferentes, é claro que houve uma troca de espaço de trabalho e o tempo foi adicionado ao tempo produtivo de nenhum espaço de trabalho; ~/viewport_log.txtportanto, o tempo na visão geral em é arredondado para dois segundos por período por área de trabalho.

Editar

Executando o script acima em segundo plano, é possível visualizar o (s) tempo (s) de uso atual por área de trabalho, colocando o script abaixo em uma combinação de teclas:

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. Copie o script em um arquivo vazio, salve-o como view_vplog.sh
  2. Execute-o, enquanto o primeiro script estiver sendo executado em segundo plano , pelo comando:

    sh /path/to/view_vplog.sh
  3. Disponibilize (após o teste) com uma combinação de teclas de atalho: escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando a uma combinação de teclas de sua escolha.

    insira a descrição da imagem aqui

Jacob Vlijm
fonte
1
@AB Obrigado Eu gosto deste tipo de perguntas :)!
Jacob Vlijm
Uau! Voto a favor e será instalado amanhã! (cansado demais para fazê-lo agora)
Fabby