目前/技术上是否可以将当前日期和时间(即数字时钟数字)显示到当前活动窗口?比如从脚本中附加一些文本?
答案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"
解释
该脚本关注三件事:
- 最前面的窗户ID
- 最前面的窗户姓名
- 当前时间(分钟)
如果其中一个发生变化,则日期/时间将被附加或更新到当前最前面的窗口。
为什么要使用窗口的名称和 ID?
- 窗户-ID用于设置窗口的标题,以防止设置错误的窗口(例如终端窗口可以类似地命名)。
- 窗户-姓名是包含选项卡式窗口,例如
Firefox
。窗口姓名当选择或打开另一个选项卡时会发生变化,而窗口ID不会改变。 - 这有条件的
if any([])
只有在有理由的情况下才编辑窗口的标题。
答案2
这是一个简单的 shell 脚本:
要求
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
文件中。基本思路是获取当前活动窗口的 ID,存储其当前标题,并使用 date 命令和标题的输出来形成新标题。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