現在/技術的に、現在アクティブなウィンドウに現在の日付と時刻(つまり、デジタル時計番号)を表示できますか?スクリプトからテキストを追加したいですか?
以下のスクリプト( this one の編集バージョン)をバックグラウンドで実行すると、最前面のウィンドウに現在の日付と時刻が表示されます。
ウィンドウがフォーカスを失うと、時間は更新されません。最前面のウィンドウでのみ、時間willが更新されます。
スクリプトは、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秒以内に表示されます。時間が更新されるかどうかを確認するために少し待ってください。
すべてが正常に動作する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加、コマンドを追加します。
python3 /path/to/show_datetime.py
起動から実行に問題がある場合は、次のコマンドを使用します(起動アプリケーションで)。
/bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
スクリプトは、次の3つの点に注目しています。
いずれかに変更がある場合、日付/時刻は現在の最前面のウィンドウに追加または更新されます。
ウィンドウの名前とIDを使用する理由
Firefox
。ウィンドウnameは、別のタブが選択または開かれたときに変更されますが、ウィンドウidは変更されません。if any([])
は、理由がある場合にのみウィンドウのタイトルを編集します。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
Bash、xprop、およびwmctrlを使用するスクリプトを次に示します(ubuntuには付属していません)。このスクリプトは、自動開始エントリとして追加するか、.desktop
ファイルに配置できます。基本的な考え方は、現在のアクティブウィンドウのIDを取得し、現在のタイトルを保存し、dateコマンドとタイトルの出力を使用して新しいタイトルを作成することです。 ifステートメントは、日付の追加の無限ループを防ぎます。 Sudo apt-get install wmctrl
で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