Возможно ли в настоящее время/технически отображать текущую дату и время (т. е. цифры цифровых часов) в текущем активном окне? Например, добавлять текст из скрипта?
решение1
Отображение даты и времени в заголовке активного окна
Запуск скрипта ниже (отредактированная версия)Вот этот) на заднем плане, в самом переднем окне будут отображаться текущая дата и время:
Если окно теряет фокус, время не будет обновлено; время будет обновляться только в самом переднем окне.волябыть обновлены.
Скрипт также показывает дату и времяна вкладкув любом приложении, использующем вкладки, например firefox
илиgnome-terminal
Сценарий
#!/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
Как использовать
Скрипт использует
xdotool
sudo apt-get install xdotool
Скопируйте скрипт ниже в пустой файл, сохраните его как
show_datetime.py
Протестируйте его с помощью команды:
python3 /path/to/show_datetime.py
Откройте новое окно или дайте фокус существующему. Дата и время должны появиться в заголовке окна в течение 1-2 секунд. Подождите минуту, чтобы увидеть, обновилось ли время.
Если все работает нормально, добавьте его в автозагрузку приложений: Dash > Автозагрузка приложений > Добавить, добавьте команду:
python3 /path/to/show_datetime.py
Если у вас возникли трудности с запуском при запуске, используйте команду (в автозагрузке приложений):
/bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
Объяснение
Сценарий следит за тремя вещами:
- Переднее окноидентификатор
- Переднее окноимя
- Электрический токвремя(минута)
Если в каком-либо из них происходят изменения, дата/время добавляются или обновляются в текущем переднем окне.
Зачем использовать имя и идентификатор окна?
- Окно-идентификаториспользуется для установки заголовка окна, чтобы предотвратить установку неправильного окна (например, окна терминала могут быть названы аналогично).
- Окно-имявключает в себя вкладки окон, например
Firefox
. Окноимяизменится при выборе или открытии другой вкладки, в то время как окно-идентификаторне изменится. - Theусловный
if any([])
редактировать заголовок окна только в том случае, если на то есть причина.
решение2
Это простой скрипт оболочки:
Требования
xdotool
sudo apt-get install xdotool
wmctrl
sudo apt-get install wmctrl
Главная часть
wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
Разделитель ||
между заголовком окна и датой/временем. Если вам нужен другой, измените его, например:
#
wmctrl -r :ACTIVE: -N "$(awk -F' #' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) # $(date "+%Y-%m-%d %H:%M:%S")"
Сценарий
#!/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
решение3
Вот скрипт, который использует bash, xprop и wmctrl (не входит в состав Ubuntu). Этот скрипт можно добавить в качестве записи автозапуска или поместить в .desktop
файл. Основная идея — получить идентификатор текущего активного окна, сохранить его текущий заголовок и использовать вывод команды date и title для формирования нового заголовка. Оператор if предотвращает бесконечный цикл добавления даты. Вы можете получить его wmctrl
с помощью sudo apt-get install wmctrl
. В остальном этот скрипт очень упрощен, но выполняет свою работу достаточно хорошо.
#!/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