É atualmente/tecnicamente possível exibir a data e hora atuais (ou seja: números do relógio digital) na janela atualmente ativa? Como anexar algum texto de um script?
Responder1
Mostrando data e hora no título da janela ativa
Executando o script abaixo (uma versão editada doEste) em segundo plano, a janela mais frontal mostrará a data e hora atuais:
Se a janela perder o foco, a hora não será atualizada; apenas na janela mais frontal, a horavaiser atualizado.
O script também mostra a data e horapor guiaem qualquer aplicativo usando guias, como firefox
ougnome-terminal
O roteiro
#!/usr/bin/env python3
import subprocess
import time
cmd = "xdotool", "getwindowfocus"
get_name = "xdotool", "getactivewindow", "getwindowname"
currtime_1 = time.strftime("%d-%m-%Y %H:%M"); wid_1 = subprocess.check_output(cmd).decode("utf-8").strip()
wname_1 = subprocess.check_output(get_name).decode("utf-8"); wname_1 = wname_1[:wname_1.rfind(" | ")]
while True:
time.sleep(2)
currtime_2 = time.strftime("%d-%m-%Y %H:%M")
try:
wid_2 = subprocess.check_output(cmd).decode("utf-8").strip()
wname_2 = subprocess.check_output(get_name).decode("utf-8"); wname_2 = wname_2[:wname_2.rfind(" | ")]
if any([wid_2 != wid_1, currtime_2 != currtime_1, wname_2 != wname_1]):
cmd2 = ["xdotool", "set_window", "--name", wname_2+" | "+str(currtime_2), wid_2]
subprocess.Popen(cmd2)
currtime_1 = currtime_2; wid_1 = wid_2
except subprocess.CalledProcessError:
pass
Como usar
O roteiro usa
xdotool
sudo apt-get install xdotool
Copie o script abaixo em um arquivo vazio e salve-o como
show_datetime.py
Faça um teste e execute-o pelo comando:
python3 /path/to/show_datetime.py
Abra uma nova janela ou dê foco a uma já existente. A data e a hora devem aparecer no título da janela dentro de 1 a 2 segundos. Espere um minuto para ver se a hora está atualizada.
Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar, adicione o comando:
python3 /path/to/show_datetime.py
Se você estiver tendo dificuldades para executá-lo desde a inicialização, use o comando (em aplicativos de inicialização):
/bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
Explicação
O script fica de olho em três coisas:
- A janela mais frontaleu ia
- A janela mais frontalnome
- O actualtempo(minuto)
Se houver uma alteração em qualquer uma delas, a data/hora será anexada ou atualizada na janela atualmente mais à frente.
Por que usar o nome e o id da janela?
- A janela-eu iaé usado para definir o título da janela, para evitar definir a janela errada (por exemplo, janelas de terminal podem ter nomes semelhantes).
- A janela-nomeé incluir janelas com guias, por exemplo
Firefox
. A janelanomemudará quando outra guia for escolhida ou aberta, enquanto a janelaeu ianão vai mudar. - Ocondicional
if any([])
é editar o título da janela somente se houver um motivo para isso.
Responder2
É um script de shell simples:
Requisitos
xdotool
sudo apt-get install xdotool
wmctrl
sudo apt-get install wmctrl
Parte principal
wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
É ||
o separador entre o título da janela e a parte de data/hora. Se precisar de outro, altere-o, por exemplo:
#
wmctrl -r :ACTIVE: -N "$(awk -F' #' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) # $(date "+%Y-%m-%d %H:%M:%S")"
O roteiro
#!/bin/bash
while true
do
wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
sleep 5
done
Responder3
Aqui está um script que utiliza bash, xprop e wmctrl (não vem com o Ubuntu). Este script pode ser adicionado como uma entrada de inicialização automática ou colocado em .desktop
um arquivo. A ideia básica é obter o ID da janela ativa atual, armazenar seu título atual e usar a saída do comando de data e do título para formar um novo título. A instrução if evita um loop infinito de acréscimo de data. Você pode ficar wmctrl
com sudo apt-get install wmctrl
. Caso contrário, este script é muito simplista, mas faz o trabalho bem o suficiente.
#!/bin/bash
# Date : June 9 2015
# Author: Serg Kolo
# Description: script to append time to window titles
while sleep 1; do
ACTIVEID=$(xprop -root | awk '/^_NET_ACTIVE_WINDOW/ {gsub("0x","0x0");print $5}')
MATCHED_TITLE="$( wmctrl -l | awk -v searchterm=$ACTIVEID '$0~searchterm {for(i=4;i<=NF;i++) printf $i" "}')"
date --date="$(echo $MATCHED_TITLE | awk '{print $1" "$2}')" > /dev/null 2>&1
if [ "$?" -eq 0 ]; then
MATCHED_TITLE="$(echo $MATCHED_TITLE | awk '{for(i=3;i<=NF;i++) printf $i" "}')"
fi
sleep 1
wmctrl -i -r $ACTIVEID -T "$(date +"%D %H:%M" 2>/dev/null) $MATCHED_TITLE "
done