Отображать текущую дату и время в заголовке окна

Отображать текущую дату и время в заголовке окна

Возможно ли в настоящее время/технически отображать текущую дату и время (т. е. цифры цифровых часов) в текущем активном окне? Например, добавлять текст из скрипта?

решение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

Как использовать

  1. Скрипт используетxdotool

    sudo apt-get install xdotool
    
  2. Скопируйте скрипт ниже в пустой файл, сохраните его какshow_datetime.py

  3. Протестируйте его с помощью команды:

    python3 /path/to/show_datetime.py
    

    Откройте новое окно или дайте фокус существующему. Дата и время должны появиться в заголовке окна в течение 1-2 секунд. Подождите минуту, чтобы увидеть, обновилось ли время.

  4. Если все работает нормально, добавьте его в автозагрузку приложений: Dash > Автозагрузка приложений > Добавить, добавьте команду:

    python3 /path/to/show_datetime.py
    
  5. Если у вас возникли трудности с запуском при запуске, используйте команду (в автозагрузке приложений):

    /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

Связанный контент